11package com.troplo.privateuploader.components.chat
22
3+ import android.Manifest
4+ import android.util.Log
5+ import androidx.activity.compose.rememberLauncherForActivityResult
6+ import androidx.activity.result.contract.ActivityResultContracts
37import androidx.compose.foundation.layout.Box
48import androidx.compose.foundation.layout.WindowInsets
59import androidx.compose.foundation.layout.defaultMinSize
610import androidx.compose.foundation.layout.padding
711import androidx.compose.material.icons.Icons
12+ import androidx.compose.material.icons.automirrored.filled.OpenInNew
813import androidx.compose.material.icons.filled.GifBox
914import androidx.compose.material.icons.filled.Image
15+ import androidx.compose.material.icons.filled.OpenInNew
1016import androidx.compose.material.icons.filled.Smartphone
1117import androidx.compose.material.icons.filled.Star
1218import androidx.compose.material3.ExperimentalMaterial3Api
@@ -23,19 +29,28 @@ import androidx.compose.runtime.mutableIntStateOf
2329import androidx.compose.runtime.mutableStateOf
2430import androidx.compose.runtime.remember
2531import androidx.compose.ui.Modifier
32+ import androidx.compose.ui.platform.LocalContext
2633import androidx.compose.ui.tooling.preview.Preview
2734import androidx.compose.ui.unit.dp
2835import androidx.core.net.toUri
2936import 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
3041import com.troplo.privateuploader.api.ChatStore
3142import com.troplo.privateuploader.api.stores.UploadStore
3243import com.troplo.privateuploader.api.stores.UserStore
3344import com.troplo.privateuploader.components.chat.attachment.MyDevice
3445import com.troplo.privateuploader.data.model.Upload
3546import com.troplo.privateuploader.data.model.UploadTarget
3647import 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
3752
38- @OptIn(ExperimentalMaterial3Api ::class )
53+ @OptIn(ExperimentalMaterial3Api ::class , ExperimentalPermissionsApi :: class )
3954@Composable
4055fun Attachment (openBottomSheet : MutableState <Boolean >) {
4156 val windowInsets = WindowInsets (0 )
@@ -49,14 +64,29 @@ fun Attachment(openBottomSheet: MutableState<Boolean>) {
4964 windowInsets = windowInsets,
5065 modifier = Modifier .defaultMinSize(minHeight = 400 .dp)
5166 ) {
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+
5282 TabRow (
5383 selectedTabIndex = selectedTab.value,
5484 contentColor = MaterialTheme .colorScheme.onSurface
5585 ) {
5686 Tab (
5787 selected = selectedTab.value == 0 ,
5888 onClick = { selectedTab.value = 0 },
59- text = { Text (" My Device" ) },
89+ text = { Text (" Device" ) },
6090 icon = { Icon (Icons .Default .Smartphone , contentDescription = " My Device" ) }
6191 )
6292 Tab (
@@ -77,6 +107,19 @@ fun Attachment(openBottomSheet: MutableState<Boolean>) {
77107 text = { Text (" GIFs" ) },
78108 icon = { Icon (Icons .Default .GifBox , contentDescription = " GIFs" ) }
79109 )
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+ )
80123 }
81124
82125 fun onClick (upload : Upload , tenor : Boolean = false) {
0 commit comments