From 5ab71d6c62df39a947e1dd3066bc3190ac870473 Mon Sep 17 00:00:00 2001 From: Chloe Date: Sat, 21 Mar 2026 23:00:38 -0700 Subject: [PATCH] add share button to logs viewer --- .../launcher/preferences/TextViewActivity.kt | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/app/src/main/java/com/geode/launcher/preferences/TextViewActivity.kt b/app/src/main/java/com/geode/launcher/preferences/TextViewActivity.kt index 4b4a327f..d6f129e9 100644 --- a/app/src/main/java/com/geode/launcher/preferences/TextViewActivity.kt +++ b/app/src/main/java/com/geode/launcher/preferences/TextViewActivity.kt @@ -1,7 +1,11 @@ package com.geode.launcher.preferences +import android.content.ActivityNotFoundException +import android.content.Context import android.content.Intent import android.os.Bundle +import android.provider.DocumentsContract +import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.OnBackPressedDispatcher import androidx.activity.compose.setContent @@ -34,17 +38,20 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.geode.launcher.R +import com.geode.launcher.UserDirectoryProvider import com.geode.launcher.ui.theme.GeodeLauncherTheme import com.geode.launcher.ui.theme.LocalTheme import com.geode.launcher.ui.theme.Theme import com.geode.launcher.ui.theme.Typography import com.geode.launcher.ui.theme.robotoMonoFamily +import com.geode.launcher.utils.LaunchUtils import com.geode.launcher.utils.PreferenceUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -90,6 +97,26 @@ class TextViewActivity : ComponentActivity() { } } +fun onShareFile(context: Context, filename: File) { + val baseDirectory = LaunchUtils.getBaseDirectory(context, true) + + val providerLocation = filename.toRelativeString(baseDirectory) + val documentsPath = "${UserDirectoryProvider.ROOT}${providerLocation}" + + val uri = DocumentsContract.buildDocumentUri("${context.packageName}.user", documentsPath) + + val shareIntent = Intent(Intent.ACTION_SEND).apply { + putExtra(Intent.EXTRA_STREAM, uri) + type = "application/octet-stream" + } + + try { + context.startActivity(shareIntent) + } catch (_: ActivityNotFoundException) { + Toast.makeText(context, R.string.no_activity_found, Toast.LENGTH_SHORT).show() + } +} + @OptIn(ExperimentalMaterial3Api::class) @Composable fun GeodeLogView( @@ -138,6 +165,15 @@ fun GeodeLogView( ) }, scrollBehavior = scrollBehavior, + actions = { + val context = LocalContext.current + IconButton(onClick = { onShareFile(context, toRead) }) { + Icon( + painterResource(R.drawable.icon_share), + contentDescription = stringResource(R.string.application_logs_share) + ) + } + } ) if (loadingFile) {