|
@@ -3,6 +3,7 @@ package io.nexilis.alpha.ui.components
|
|
import android.graphics.BitmapFactory
|
|
import android.graphics.BitmapFactory
|
|
import androidx.compose.foundation.Image
|
|
import androidx.compose.foundation.Image
|
|
import androidx.compose.foundation.background
|
|
import androidx.compose.foundation.background
|
|
|
|
+import androidx.compose.foundation.layout.Box
|
|
import androidx.compose.foundation.layout.Column
|
|
import androidx.compose.foundation.layout.Column
|
|
import androidx.compose.foundation.layout.Row
|
|
import androidx.compose.foundation.layout.Row
|
|
import androidx.compose.foundation.layout.aspectRatio
|
|
import androidx.compose.foundation.layout.aspectRatio
|
|
@@ -15,12 +16,15 @@ import androidx.compose.material.icons.Icons
|
|
import androidx.compose.material.icons.filled.DownloadForOffline
|
|
import androidx.compose.material.icons.filled.DownloadForOffline
|
|
import androidx.compose.material.icons.filled.Headset
|
|
import androidx.compose.material.icons.filled.Headset
|
|
import androidx.compose.material.icons.filled.PlayArrow
|
|
import androidx.compose.material.icons.filled.PlayArrow
|
|
|
|
+import androidx.compose.material3.CircularProgressIndicator
|
|
import androidx.compose.material3.Icon
|
|
import androidx.compose.material3.Icon
|
|
import androidx.compose.material3.IconButton
|
|
import androidx.compose.material3.IconButton
|
|
import androidx.compose.material3.LinearProgressIndicator
|
|
import androidx.compose.material3.LinearProgressIndicator
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.Composable
|
|
|
|
+import androidx.compose.runtime.getValue
|
|
|
|
+import androidx.compose.runtime.livedata.observeAsState
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.graphics.Color
|
|
import androidx.compose.ui.graphics.Color
|
|
@@ -35,13 +39,14 @@ import androidx.compose.ui.text.toUpperCase
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.core.content.FileProvider
|
|
import androidx.core.content.FileProvider
|
|
import androidx.exifinterface.media.ExifInterface
|
|
import androidx.exifinterface.media.ExifInterface
|
|
|
|
+import androidx.hilt.navigation.compose.hiltViewModel
|
|
import coil.compose.rememberAsyncImagePainter
|
|
import coil.compose.rememberAsyncImagePainter
|
|
-import io.nexilis.alpha.BuildConfig
|
|
|
|
import io.nexilis.alpha.R
|
|
import io.nexilis.alpha.R
|
|
import io.nexilis.service.core.Orange
|
|
import io.nexilis.service.core.Orange
|
|
import io.nexilis.service.core.extension
|
|
import io.nexilis.service.core.extension
|
|
import io.nexilis.service.core.toHumanStandard
|
|
import io.nexilis.service.core.toHumanStandard
|
|
import io.nexilis.service.data.entities.Message
|
|
import io.nexilis.service.data.entities.Message
|
|
|
|
+import io.nexilis.service.data.viewmodels.ProgressViewModel
|
|
import java.io.File
|
|
import java.io.File
|
|
import java.io.FileInputStream
|
|
import java.io.FileInputStream
|
|
|
|
|
|
@@ -52,7 +57,7 @@ fun ContentChat(modifier: Modifier = Modifier, message: Message) {
|
|
Column(modifier = Modifier.padding(2.dp)) {
|
|
Column(modifier = Modifier.padding(2.dp)) {
|
|
val file = File(context.filesDir, message.image_id)
|
|
val file = File(context.filesDir, message.image_id)
|
|
val uri = FileProvider.getUriForFile(
|
|
val uri = FileProvider.getUriForFile(
|
|
- context, BuildConfig.APPLICATION_ID + ".provider", file
|
|
|
|
|
|
+ context, context.applicationContext.packageName + ".provider", file
|
|
)
|
|
)
|
|
var width: Int
|
|
var width: Int
|
|
var height: Int
|
|
var height: Int
|
|
@@ -113,7 +118,7 @@ fun ContentChat(modifier: Modifier = Modifier, message: Message) {
|
|
.padding(8.dp)
|
|
.padding(8.dp)
|
|
) {
|
|
) {
|
|
FileType(
|
|
FileType(
|
|
- file = message.file_id, modifier = Modifier
|
|
|
|
|
|
+ message = message, modifier = Modifier
|
|
.align(Alignment.CenterVertically)
|
|
.align(Alignment.CenterVertically)
|
|
)
|
|
)
|
|
Column(
|
|
Column(
|
|
@@ -234,8 +239,8 @@ fun ContentChat(modifier: Modifier = Modifier, message: Message) {
|
|
}
|
|
}
|
|
|
|
|
|
@Composable
|
|
@Composable
|
|
-fun FileType(file: String, modifier: Modifier) {
|
|
|
|
- val imageVector = when (file.extension) {
|
|
|
|
|
|
+fun FileType(message: Message, modifier: Modifier) {
|
|
|
|
+ val imageVector = when (message.file_id.extension) {
|
|
"apk", "aab" -> ImageVector.vectorResource(id = R.drawable.ic_apk)
|
|
"apk", "aab" -> ImageVector.vectorResource(id = R.drawable.ic_apk)
|
|
"aac", "mp3", "m4a", "ogg" -> ImageVector.vectorResource(id = R.drawable.ic_audio)
|
|
"aac", "mp3", "m4a", "ogg" -> ImageVector.vectorResource(id = R.drawable.ic_audio)
|
|
"xls", "xlsx" -> ImageVector.vectorResource(id = R.drawable.ic_excel)
|
|
"xls", "xlsx" -> ImageVector.vectorResource(id = R.drawable.ic_excel)
|
|
@@ -248,12 +253,27 @@ fun FileType(file: String, modifier: Modifier) {
|
|
"zip", "gz", "rar" -> ImageVector.vectorResource(id = R.drawable.ic_zip)
|
|
"zip", "gz", "rar" -> ImageVector.vectorResource(id = R.drawable.ic_zip)
|
|
else -> ImageVector.vectorResource(id = R.drawable.ic_file)
|
|
else -> ImageVector.vectorResource(id = R.drawable.ic_file)
|
|
}
|
|
}
|
|
- Image(
|
|
|
|
- modifier = modifier
|
|
|
|
- .size(48.dp),
|
|
|
|
- imageVector = imageVector,
|
|
|
|
- contentDescription = null
|
|
|
|
- )
|
|
|
|
|
|
+ val progressViewModel: ProgressViewModel = hiltViewModel()
|
|
|
|
+ val progress by progressViewModel.get(message.message_id).observeAsState()
|
|
|
|
+ Box {
|
|
|
|
+ Image(
|
|
|
|
+ modifier = modifier
|
|
|
|
+ .size(48.dp),
|
|
|
|
+ imageVector = imageVector,
|
|
|
|
+ contentDescription = null
|
|
|
|
+ )
|
|
|
|
+ progress?.let {
|
|
|
|
+ if (it.value > 0f && it.value < 1f) {
|
|
|
|
+ CircularProgressIndicator(
|
|
|
|
+ progress = { it.value },
|
|
|
|
+ modifier = Modifier
|
|
|
|
+ .align(Alignment.Center)
|
|
|
|
+ .size(32.dp),
|
|
|
|
+ )
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
@Composable
|
|
@Composable
|