Skip to content

Commit 14b1b1b

Browse files
committed
1.0.13
1 parent b73dd38 commit 14b1b1b

38 files changed

+653
-408
lines changed

.idea/deploymentTargetDropDown.xml

+14-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/deploymentTargetSelector.xml

+10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
![TroploPrivateUploader Banner](https://i.troplo.com/i/9ea16d8ab178.png)
2-
# TPUvNATIVE
3-
The native Android client for TPU.
2+
# Flowinity Kotlin (formerly PrivateUploader)
3+
The native Android client for Flowinity.

app/build.gradle.kts

+4-5
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,11 @@ android {
3131
applicationId = "com.troplo.privateuploader"
3232
minSdk = 28
3333
targetSdk = 34
34-
versionCode = 12
35-
versionName = "1.0.12"
34+
versionCode = 13
35+
versionName = "1.0.13"
3636
multiDexEnabled = true
37-
buildConfigField("String", "SERVER_URL", "\"https://privateuploader.com\"")
37+
buildConfigField("String", "SERVER_URL", "\"https://flowinity.com\"")
3838
buildConfigField("String", "BUILD_TIME", "\"${DateFormat.getDateTimeInstance().format(System.currentTimeMillis())}\"")
39-
buildConfigField("Integer", "BETA_VERSION", "6")
4039

4140
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
4241
vectorDrawables {
@@ -48,7 +47,7 @@ android {
4847
release {
4948
isMinifyEnabled = true
5049
isShrinkResources = true
51-
buildConfigField("String", "SERVER_URL", "\"https://privateuploader.com\"")
50+
buildConfigField("String", "SERVER_URL", "\"https://flowinity.com\"")
5251
proguardFiles(
5352
getDefaultProguardFile("proguard-android-optimize.txt"),
5453
"proguard-rules.pro"
3.82 KB
Loading

app/src/main/java/com/troplo/privateuploader/FirebaseChatService.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ class FirebaseChatService : FirebaseMessagingService() {
189189
.build()
190190

191191
val replyAction = NotificationCompat.Action.Builder(
192-
R.drawable.tpu_logo,
192+
R.drawable.flowinity_logo,
193193
"Reply",
194194
replyPendingIntent
195195
)
@@ -203,7 +203,7 @@ class FirebaseChatService : FirebaseMessagingService() {
203203
.setStyle(style)
204204
.setContentText(message.content)
205205
.setContentTitle(message.username)
206-
.setSmallIcon(R.drawable.tpu_logo)
206+
.setSmallIcon(R.drawable.flowinity_logo)
207207
.setWhen(TpuFunctions.getDate(message.createdAt)?.time ?: 0)
208208
.addAction(replyAction)
209209
.setContentIntent(

app/src/main/java/com/troplo/privateuploader/MainActivity.kt

+11-2
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,12 @@ class MainActivity : ComponentActivity() {
154154
}
155155
}
156156

157-
public fun upload(files: List<UploadTarget>, deleteOnceFinished: Boolean = true, context: Context = this) {
157+
public fun upload(files: List<UploadTarget>, deleteOnceFinished: Boolean = true, context: Context = this): List<String>? {
158+
var uploads = mutableListOf<String>()
158159
Log.d("TPU.Upload", "Uploading ${files.size} files")
159160

160161
if(!files.any()) {
161-
return
162+
return null
162163
}
163164

164165
if(deleteOnceFinished) {
@@ -210,8 +211,16 @@ class MainActivity : ComponentActivity() {
210211
}
211212
Log.d("TPU.Upload", "Upload finished: ${upload[0].upload.attachment}, ${UploadStore.uploads.toList().toString()}")
212213
}
214+
215+
uploads = upload.map { it.upload.attachment }.toMutableList()
216+
}
217+
218+
return@launch withContext(Dispatchers.Main) {
219+
uploads
213220
}
214221
}
222+
223+
return null
215224
}
216225

217226
@Deprecated("Deprecated in Java :(")

app/src/main/java/com/troplo/privateuploader/components/chat/Attachment.kt

+45-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package 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
37
import androidx.compose.foundation.layout.Box
48
import androidx.compose.foundation.layout.WindowInsets
59
import androidx.compose.foundation.layout.defaultMinSize
610
import androidx.compose.foundation.layout.padding
711
import androidx.compose.material.icons.Icons
12+
import androidx.compose.material.icons.automirrored.filled.OpenInNew
813
import androidx.compose.material.icons.filled.GifBox
914
import androidx.compose.material.icons.filled.Image
15+
import androidx.compose.material.icons.filled.OpenInNew
1016
import androidx.compose.material.icons.filled.Smartphone
1117
import androidx.compose.material.icons.filled.Star
1218
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -23,19 +29,28 @@ import androidx.compose.runtime.mutableIntStateOf
2329
import androidx.compose.runtime.mutableStateOf
2430
import androidx.compose.runtime.remember
2531
import androidx.compose.ui.Modifier
32+
import androidx.compose.ui.platform.LocalContext
2633
import androidx.compose.ui.tooling.preview.Preview
2734
import androidx.compose.ui.unit.dp
2835
import androidx.core.net.toUri
2936
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
3041
import com.troplo.privateuploader.api.ChatStore
3142
import com.troplo.privateuploader.api.stores.UploadStore
3243
import com.troplo.privateuploader.api.stores.UserStore
3344
import com.troplo.privateuploader.components.chat.attachment.MyDevice
3445
import com.troplo.privateuploader.data.model.Upload
3546
import com.troplo.privateuploader.data.model.UploadTarget
3647
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
3752

38-
@OptIn(ExperimentalMaterial3Api::class)
53+
@OptIn(ExperimentalMaterial3Api::class, ExperimentalPermissionsApi::class)
3954
@Composable
4055
fun 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

Comments
 (0)