Skip to content

Commit

Permalink
Add other file preview page
Browse files Browse the repository at this point in the history
  • Loading branch information
ismartcoding committed Mar 7, 2024
1 parent ea10791 commit 7c96372
Show file tree
Hide file tree
Showing 25 changed files with 202 additions and 36 deletions.
14 changes: 7 additions & 7 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -105,13 +105,13 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="content" />
<data android:scheme="file" />
<data android:mimeType="*/*" />
</intent-filter>
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <data android:scheme="content" />-->
<!-- <data android:scheme="file" />-->
<!-- <data android:mimeType="*/*" />-->
<!-- </intent-filter>-->

<intent-filter>
<action android:name="android.intent.action.SEND" />
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/java/com/ismartcoding/plain/helpers/UrlHelper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,17 @@ object UrlHelper {

fun getPolicyUrl(): String {
if (BuildConfig.CHANNEL == AppChannelType.CHINA.name) {
return "https://policy.plain.icu/policy-cn.html"
return "https://www.plain.icu/policy-cn.html"
}

return "https://policy.plain.icu/policy.html"
return "https://www.plain.icu/policy.html"
}

fun getTermsUrl(): String {
if (BuildConfig.CHANNEL == AppChannelType.CHINA.name) {
return "https://policy.plain.icu/policy-cn.html"
return "https://www.plain.icu/policy-cn.html"
}

return "https://policy.plain.icu/terms.html"
return "https://www.plain.icu/terms.html"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
import coil.size.Size
import com.ismartcoding.lib.extensions.dp2px
import com.ismartcoding.lib.extensions.getFilenameFromPath
Expand All @@ -43,13 +44,15 @@ import com.ismartcoding.plain.ui.audio.AudioPlayerDialog
import com.ismartcoding.plain.ui.base.PAsyncImage
import com.ismartcoding.plain.ui.helpers.DialogHelper
import com.ismartcoding.plain.ui.models.VChat
import com.ismartcoding.plain.ui.page.RouteName
import com.ismartcoding.plain.ui.preview.PreviewDialog
import com.ismartcoding.plain.ui.preview.PreviewItem
import java.io.File

@Composable
fun ChatFiles(
context: Context,
navController: NavHostController,
m: VChat,
) {
val fileItems = (m.value as DMessageFiles).items
Expand Down Expand Up @@ -100,6 +103,8 @@ fun ChatFiles(
}
} else if (path.isPdfFile()) {
PdfViewerDialog(Uri.fromFile(File(path))).show()
} else {
navController.navigate("${RouteName.OTHER_FILE.name}?path=${path}")
}
},
) {
Expand Down
36 changes: 19 additions & 17 deletions app/src/main/java/com/ismartcoding/plain/ui/extensions/Activity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.ismartcoding.plain.ui.extensions
import android.app.Activity
import android.content.Intent
import androidx.core.content.FileProvider
import com.ismartcoding.lib.extensions.getMediaContentUri
import com.ismartcoding.lib.extensions.getUriMimeType
import com.ismartcoding.plain.Constants
import com.ismartcoding.plain.R
Expand All @@ -13,22 +14,23 @@ fun Activity.openPathIntent(
path: String,
extras: HashMap<String, Boolean> = HashMap(),
) {
val file = File(path)
val newUri = FileProvider.getUriForFile(this, Constants.AUTHORITY, file)
val mimeType = getUriMimeType(path, newUri)
Intent().apply {
action = Intent.ACTION_VIEW
setDataAndType(newUri, mimeType)
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

for ((key, value) in extras) {
putExtra(key, value)
}

try {
startActivity(Intent.createChooser(this, getString(R.string.open_with)))
} catch (e: Exception) {
DialogHelper.showMessage(e.toString())
}
var newUri = this.getMediaContentUri(path)
if (newUri == null) {
newUri = FileProvider.getUriForFile(this, Constants.AUTHORITY, File(path))
}
val mimeType = getUriMimeType(path, newUri!!)
val intent = Intent()
intent.action = Intent.ACTION_VIEW
intent.setDataAndType(newUri, mimeType)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
for ((key, value) in extras) {
intent.putExtra(key, value)
}
try {
startActivity(Intent.createChooser(intent, getString(R.string.open_with)))
} catch (e: Exception) {
DialogHelper.showMessage(e.toString())
}
}


Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ fun ChatPage(
}

DMessageType.FILES.value -> {
ChatFiles(context, m)
ChatFiles(context, navController, m)
}

DMessageType.TEXT.value -> {
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/java/com/ismartcoding/plain/ui/page/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,13 @@ fun Main(viewModel: MainViewModel) {
) {
ChatEditTextPage(navController, sharedViewModel)
}

slideHorizontallyComposable(
"${RouteName.OTHER_FILE.name}?path={path}",
arguments = listOf(navArgument("path") { type = NavType.StringType }),
) {
OtherFilePage(navController)
}
}
}
}
Expand Down
112 changes: 112 additions & 0 deletions app/src/main/java/com/ismartcoding/plain/ui/page/OtherFilePage.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package com.ismartcoding.plain.ui.page


import android.annotation.SuppressLint
import android.content.Intent
import android.net.Uri
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Share
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
import com.ismartcoding.lib.helpers.FormatHelper
import com.ismartcoding.lib.helpers.ShareHelper
import com.ismartcoding.plain.R
import com.ismartcoding.plain.ui.MainActivity
import com.ismartcoding.plain.ui.base.*
import com.ismartcoding.plain.ui.extensions.openPathIntent
import java.io.File

@SuppressLint("MissingPermission")
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun OtherFilePage(
navController: NavHostController,
) {
val context = LocalContext.current
val path = navController.currentBackStackEntry?.arguments?.getString("path") ?: ""
val file = File(path)

PScaffold(
navController,
actions = {
PIconButton(
imageVector = Icons.Outlined.Share,
contentDescription = stringResource(R.string.share),
tint = MaterialTheme.colorScheme.onSurface,
) {
ShareHelper.share(context, Uri.parse(path))
}
},
content = {
LazyColumn {
item {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(top = 64.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Image(
modifier =
Modifier
.padding(bottom = 32.dp)
.size(56.dp),
painter = painterResource(id = R.drawable.ic_unknown_file),
contentDescription = "",
)
SelectionContainer {
Text(
text = file.name,
textAlign = TextAlign.Center,
modifier = Modifier
.padding(horizontal = 32.dp),
style = MaterialTheme.typography.titleLarge,
fontWeight = FontWeight.Medium,
color = MaterialTheme.colorScheme.onSurface,
)
}
VerticalSpace(dp = 16.dp)
SelectionContainer {
Text(
text = stringResource(R.string.file_size) + ": " + FormatHelper.formatBytes(file.length()),
textAlign = TextAlign.Center,
modifier = Modifier
.padding(horizontal = 32.dp),
style = MaterialTheme.typography.titleMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
}
VerticalSpace(dp = 16.dp)
Text(
text = stringResource(R.string.unknown_file_description),
textAlign = TextAlign.Center,
modifier = Modifier
.padding(horizontal = 32.dp),
style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
VerticalSpace(dp = 64.dp)
BlockOutlineButton(text = stringResource(id = R.string.open_with_other_app)) {
MainActivity.instance.get()?.openPathIntent(path)
}
}
}
}
},
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ enum class RouteName {
SCAN_HISTORY,
MEDIA_PREVIEW,
APPS,
OTHER_FILE,
}
12 changes: 6 additions & 6 deletions app/src/main/java/com/ismartcoding/plain/ui/page/apps/AppPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.core.content.pm.PackageInfoCompat
import androidx.lifecycle.Lifecycle
Expand Down Expand Up @@ -170,11 +171,11 @@ fun AppPage(
SelectionContainer {
Text(
text = item?.id ?: "",
textAlign = TextAlign.Center,
modifier = Modifier
.align(Alignment.CenterHorizontally)
.padding(horizontal = 32.dp),
style = MaterialTheme.typography.titleMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.titleLarge,
color = MaterialTheme.colorScheme.onSurface,
)
}
VerticalSpace(dp = 8.dp)
Expand All @@ -184,16 +185,15 @@ fun AppPage(
R.string.version_name_with_code,
"version_name", item?.version ?: "", "version_code", PackageInfoCompat.getLongVersionCode(item!!.packageInfo)
),
textAlign = TextAlign.Center,
modifier = Modifier
.align(Alignment.CenterHorizontally)
.padding(horizontal = 32.dp),
style = MaterialTheme.typography.titleMedium,
style = MaterialTheme.typography.titleSmall,
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
}
Row(
Modifier
.align(Alignment.CenterHorizontally)
.padding(start = 32.dp, end = 32.dp, top = 8.dp),
verticalAlignment = Alignment.CenterVertically,
) {
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_unknown_file.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:fillColor="@color/primary"
android:pathData="M546,136L222,136v752h582L804,395.3L593,395.3c-26,0 -47,-21 -47,-47L546,136zM610,136v195.3h194v-1.5L610.2,136L610,136zM656.4,80.4l203.2,203.2A56,56 0,0 1,876 323.2L876,896c0,35.3 -28.7,64 -64,64L214,960c-35.3,0 -64,-28.7 -64,-64L150,128c0,-35.3 28.7,-64 64,-64h402.8a56,56 0,0 1,39.6 16.4zM430,524.6c0,-10.4 3.3,-20.9 10,-31.6 6.7,-10.7 16.4,-19.5 29.2,-26.5S496.9,456 514,456c15.9,0 29.9,2.9 42,8.8 12.1,5.9 21.5,13.8 28.1,23.9 6.6,10.1 9.9,21 9.9,32.8 0,9.3 -1.9,17.4 -5.7,24.4 -3.8,7 -8.3,13 -13.5,18.1 -5.2,5.1 -14.5,13.6 -28,25.7 -3.7,3.4 -6.7,6.4 -8.9,8.9 -2.2,2.6 -3.9,4.9 -5,7.1 -1.1,2.1 -1.9,4.3 -2.5,6.4 -0.6,2.1 -1.5,5.9 -2.7,11.2 -2.1,11.4 -8.6,17.1 -19.5,17.1 -5.7,0 -10.5,-1.9 -14.4,-5.6 -3.9,-3.7 -5.8,-9.2 -5.8,-16.6 0,-9.2 1.4,-17.1 4.3,-23.9 2.8,-6.7 6.6,-12.6 11.3,-17.7 4.7,-5.1 11,-11.1 19,-18.1 7,-6.1 12.1,-10.7 15.2,-13.9a47.1,47.1 0,0 0,7.9 -10.4c2.1,-3.8 3.2,-8 3.2,-12.5 0,-8.8 -3.3,-16.1 -9.8,-22.1 -6.5,-6 -14.9,-9 -25.2,-9 -12,0 -20.9,3 -26.6,9.1 -5.7,6.1 -10.5,15 -14.4,26.8 -3.7,12.4 -10.8,18.5 -21.2,18.5 -6.1,0 -11.3,-2.2 -15.5,-6.5 -4.2,-4.3 -6.3,-9 -6.3,-14zM510.1,704.4c-6.7,0 -12.5,-2.2 -17.5,-6.5 -5,-4.3 -7.5,-10.4 -7.5,-18.1 0,-6.9 2.4,-12.7 7.2,-17.4 4.8,-4.7 10.7,-7.1 17.7,-7.1 6.9,0 12.7,2.4 17.4,7.1 4.7,4.7 7.1,10.5 7.1,17.4 0,7.7 -2.5,13.7 -7.4,18 -4.9,4.4 -10.6,6.6 -17.1,6.6z" />
</vector>
2 changes: 2 additions & 0 deletions app/src/main/res/values-bn/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<string name="app_name">PlainApp</string>
<string name="vpn_web_conflict_warning">আপনার ডিভাইসে সক্রিয় ভিপিএন আছে, যা একটি পিসি থেকে অ্যাক্সেস করার সময় ওয়েব সংযোগের সমস্যা উত্পন্ন করতে পারে। এটি সমাধান করতে, আমরা আপনাকে আপনার ভিপিএন সেটিংস পরিবর্তন করে এলএএন ট্র্যাফিক অনুমতি দেওয়া বা আপনার ভিপিএন নিষ্ক্রিয় করতে প্রস্তাবনা দিচ্ছি।</string>
<string name="warning">সতর্কবার্তা</string>
<string name="open_with_other_app">অন্য অ্যাপ দিয়ে খোলুন</string>
<string name="unknown_file_description">প্লেইনঅ্যাপ বর্তমানে এই ধরনের ফাইল খোলার সমর্থন প্রদান করে না। আপনি এটি খোলার জন্য অন্য একটি অ্যাপ্লিকেশন ব্যবহার করতে পারেন।</string>
<string name="generate_password">পাসওয়ার্ড তৈরি করুন</string>
<string name="allow_remote_access_from_pc">পিসি থেকে দূরবর্তী অ্যাক্সেস অনুমোদন দিন</string>
<string name="privacy_policy">গোপনীয়তা নীতি</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<string name="app_name">PlainApp</string>
<string name="vpn_web_conflict_warning">Ihr VPN ist derzeit auf Ihrem Gerät aktiviert, was potenziell zu Webverbindungsproblemen führen kann, wenn es von Ihrem PC aus zugegriffen wird. Um dies zu lösen, empfehlen wir Ihnen, Ihre VPN-Einstellungen anzupassen, um LAN-Verkehr zuzulassen oder Ihr VPN zu deaktivieren.</string>
<string name="warning">Warnung</string>
<string name="open_with_other_app">Mit anderer App öffnen</string>
<string name="unknown_file_description">PlainApp unterstützt derzeit nicht das Öffnen dieses Dateityps. Sie können eine andere App verwenden, um sie zu öffnen.</string>
<string name="generate_password">Passwort generieren</string>
<string name="allow_remote_access_from_pc">Remote-Zugriff vom PC erlauben</string>
<string name="privacy_policy">Datenschutzrichtlinie</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<string name="app_name">PlainApp</string>
<string name="vpn_web_conflict_warning">Su VPN está actualmente habilitado en su dispositivo, lo que podría provocar problemas de conexión web cuando se accede desde su PC. Para resolver esto, le recomendamos ajustar la configuración de su VPN para permitir el tráfico de LAN o desactivar su VPN.</string>
<string name="warning">Advertencia</string>
<string name="open_with_other_app">Abrir con otra aplicación</string>
<string name="unknown_file_description">PlainApp actualmente no admite la apertura de este tipo de archivo. Puedes utilizar otra aplicación para abrirlo.</string>
<string name="generate_password">Generar contraseña</string>
<string name="allow_remote_access_from_pc">Permitir acceso remoto desde PC</string>
<string name="privacy_policy">Política de privacidad</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<string name="app_name">PlainApp</string>
<string name="vpn_web_conflict_warning">Votre VPN est actuellement activé sur votre appareil, ce qui pourrait potentiellement entraîner des problèmes de connexion Web lorsqu\'il est accédé depuis un PC. Pour résoudre cela, nous vous recommandons d\'ajuster les paramètres de votre VPN pour autoriser le trafic LAN ou de désactiver votre VPN.</string>
<string name="warning">Avertissement</string>
<string name="open_with_other_app">Ouvrir avec une autre application</string>
<string name="unknown_file_description">PlainApp ne prend pas en charge l\'ouverture de ce type de fichier pour le moment. Vous pouvez utiliser une autre application pour l\'ouvrir.</string>
<string name="generate_password">Générer un mot de passe</string>
<string name="allow_remote_access_from_pc">Autoriser l\'accès à distance depuis un PC</string>
<string name="privacy_policy">Politique de confidentialité</string>
Expand Down
Loading

0 comments on commit 7c96372

Please sign in to comment.