1
1
package com.troplo.privateuploader.components.chat
2
2
3
+ import android.Manifest
4
+ import android.util.Log
5
+ import androidx.activity.compose.rememberLauncherForActivityResult
6
+ import androidx.activity.result.contract.ActivityResultContracts
3
7
import androidx.compose.foundation.layout.Box
4
8
import androidx.compose.foundation.layout.WindowInsets
5
9
import androidx.compose.foundation.layout.defaultMinSize
6
10
import androidx.compose.foundation.layout.padding
7
11
import androidx.compose.material.icons.Icons
12
+ import androidx.compose.material.icons.automirrored.filled.OpenInNew
8
13
import androidx.compose.material.icons.filled.GifBox
9
14
import androidx.compose.material.icons.filled.Image
15
+ import androidx.compose.material.icons.filled.OpenInNew
10
16
import androidx.compose.material.icons.filled.Smartphone
11
17
import androidx.compose.material.icons.filled.Star
12
18
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -23,19 +29,28 @@ import androidx.compose.runtime.mutableIntStateOf
23
29
import androidx.compose.runtime.mutableStateOf
24
30
import androidx.compose.runtime.remember
25
31
import androidx.compose.ui.Modifier
32
+ import androidx.compose.ui.platform.LocalContext
26
33
import androidx.compose.ui.tooling.preview.Preview
27
34
import androidx.compose.ui.unit.dp
28
35
import androidx.core.net.toUri
29
36
import androidx.lifecycle.ViewModel
37
+ import com.google.accompanist.permissions.ExperimentalPermissionsApi
38
+ import com.google.accompanist.permissions.isGranted
39
+ import com.google.accompanist.permissions.rememberPermissionState
40
+ import com.troplo.privateuploader.MainActivity
30
41
import com.troplo.privateuploader.api.ChatStore
31
42
import com.troplo.privateuploader.api.stores.UploadStore
32
43
import com.troplo.privateuploader.api.stores.UserStore
33
44
import com.troplo.privateuploader.components.chat.attachment.MyDevice
34
45
import com.troplo.privateuploader.data.model.Upload
35
46
import com.troplo.privateuploader.data.model.UploadTarget
36
47
import com.troplo.privateuploader.screens.GalleryScreen
48
+ import com.troplo.privateuploader.screens.getFileName
49
+ import kotlinx.coroutines.CoroutineScope
50
+ import kotlinx.coroutines.Dispatchers
51
+ import kotlinx.coroutines.launch
37
52
38
- @OptIn(ExperimentalMaterial3Api ::class )
53
+ @OptIn(ExperimentalMaterial3Api ::class , ExperimentalPermissionsApi :: class )
39
54
@Composable
40
55
fun Attachment (openBottomSheet : MutableState <Boolean >) {
41
56
val windowInsets = WindowInsets (0 )
@@ -49,14 +64,29 @@ fun Attachment(openBottomSheet: MutableState<Boolean>) {
49
64
windowInsets = windowInsets,
50
65
modifier = Modifier .defaultMinSize(minHeight = 400 .dp)
51
66
) {
67
+ val context = LocalContext .current
68
+ val launcher = rememberLauncherForActivityResult(ActivityResultContracts .OpenMultipleDocuments ()) { data ->
69
+ Log .d(" TPU.UploadResponse" , " Upload response received, data: $data " )
70
+ for (uri in data) {
71
+ UploadStore .uploads.add(
72
+ UploadTarget (
73
+ uri = uri,
74
+ started = false ,
75
+ progress = 0f ,
76
+ name = getFileName(uri, context)
77
+ )
78
+ )
79
+ }
80
+ }
81
+
52
82
TabRow (
53
83
selectedTabIndex = selectedTab.value,
54
84
contentColor = MaterialTheme .colorScheme.onSurface
55
85
) {
56
86
Tab (
57
87
selected = selectedTab.value == 0 ,
58
88
onClick = { selectedTab.value = 0 },
59
- text = { Text (" My Device" ) },
89
+ text = { Text (" Device" ) },
60
90
icon = { Icon (Icons .Default .Smartphone , contentDescription = " My Device" ) }
61
91
)
62
92
Tab (
@@ -77,6 +107,19 @@ fun Attachment(openBottomSheet: MutableState<Boolean>) {
77
107
text = { Text (" GIFs" ) },
78
108
icon = { Icon (Icons .Default .GifBox , contentDescription = " GIFs" ) }
79
109
)
110
+
111
+ val filesPermissionState = rememberPermissionState(
112
+ Manifest .permission.READ_EXTERNAL_STORAGE
113
+ )
114
+
115
+ Tab (
116
+ selected = selectedTab.value == 4 ,
117
+ onClick = {
118
+ launcher.launch(arrayOf(" */*" ))
119
+ },
120
+ text = { Text (" Other" ) },
121
+ icon = { Icon (Icons .AutoMirrored .Filled .OpenInNew , contentDescription = " Open in File Manager" ) }
122
+ )
80
123
}
81
124
82
125
fun onClick (upload : Upload , tenor : Boolean = false) {
0 commit comments