From 6d847723297357a7e35a391ede22b103d60d857d Mon Sep 17 00:00:00 2001 From: septs Date: Thu, 12 Dec 2024 00:09:18 +0800 Subject: [PATCH 1/4] feat: share logs as file --- app-common/src/main/AndroidManifest.xml | 10 +++++++ .../im/angry/openeuicc/ui/LogsActivity.kt | 27 ++++++++++++++++--- .../src/main/res/menu/activity_logs.xml | 3 +++ app-common/src/main/res/values/strings.xml | 1 + .../src/main/res/xml/file_provider_paths.xml | 4 +++ 5 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 app-common/src/main/res/xml/file_provider_paths.xml diff --git a/app-common/src/main/AndroidManifest.xml b/app-common/src/main/AndroidManifest.xml index f53e6ff..728febb 100644 --- a/app-common/src/main/AndroidManifest.xml +++ b/app-common/src/main/AndroidManifest.xml @@ -46,5 +46,15 @@ android:name="im.angry.openeuicc.service.EuiccChannelManagerService" android:foregroundServiceType="shortService" android:exported="false" /> + + + + diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt index 49bfa0f..70c866e 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt @@ -1,5 +1,6 @@ package im.angry.openeuicc.ui +import android.content.Intent import android.icu.text.SimpleDateFormat import android.os.Bundle import android.view.Menu @@ -10,6 +11,7 @@ import android.widget.TextView import androidx.activity.enableEdgeToEdge import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.FileProvider import androidx.lifecycle.lifecycleScope import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import im.angry.openeuicc.common.R @@ -17,9 +19,11 @@ import im.angry.openeuicc.util.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import java.io.File import java.io.FileOutputStream import java.util.Date + class LogsActivity : AppCompatActivity() { private lateinit var swipeRefresh: SwipeRefreshLayout private lateinit var scrollView: ScrollView @@ -76,9 +80,20 @@ class LogsActivity : AppCompatActivity() { true } R.id.save -> { - saveLogs.launch(getString(R.string.logs_filename_template, - SimpleDateFormat.getDateTimeInstance().format(Date()) - )) + saveLogs.launch(fileName) + true + } + R.id.share -> { + val fileUri = File(cacheDir, "$fileName.txt") + .apply { writeText(logStr) } + .let { FileProvider.getUriForFile(this, "$packageName.provider", it) } + val sendIntent = Intent(Intent.ACTION_SEND).apply { + type = "text/plain" + putExtra(Intent.EXTRA_TITLE, fileName) + putExtra(Intent.EXTRA_STREAM, fileUri) + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + } + startActivity(Intent.createChooser(sendIntent, fileName)) true } else -> super.onOptionsItemSelected(item) @@ -100,4 +115,10 @@ class LogsActivity : AppCompatActivity() { scrollView.fullScroll(View.FOCUS_DOWN) } } + + private val fileName: String + get() { + val now = SimpleDateFormat.getDateTimeInstance().format(Date()) + return getString(R.string.logs_filename_template, now) + } } \ No newline at end of file diff --git a/app-common/src/main/res/menu/activity_logs.xml b/app-common/src/main/res/menu/activity_logs.xml index 4fa3aeb..7095be2 100644 --- a/app-common/src/main/res/menu/activity_logs.xml +++ b/app-common/src/main/res/menu/activity_logs.xml @@ -6,4 +6,7 @@ android:icon="@drawable/ic_save_as_black" android:title="@string/logs_save" app:showAsAction="always" /> + \ No newline at end of file diff --git a/app-common/src/main/res/values/strings.xml b/app-common/src/main/res/values/strings.xml index 4a9f529..800a473 100644 --- a/app-common/src/main/res/values/strings.xml +++ b/app-common/src/main/res/values/strings.xml @@ -130,6 +130,7 @@ No Save + Share Logs at %s You are %d steps away from being a developer. diff --git a/app-common/src/main/res/xml/file_provider_paths.xml b/app-common/src/main/res/xml/file_provider_paths.xml new file mode 100644 index 0000000..26062c7 --- /dev/null +++ b/app-common/src/main/res/xml/file_provider_paths.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file -- 2.45.3 From e32a066700b9878800b43199c0f7953908175187 Mon Sep 17 00:00:00 2001 From: septs Date: Thu, 12 Dec 2024 00:14:17 +0800 Subject: [PATCH 2/4] chore: lazy file name --- .../main/java/im/angry/openeuicc/ui/LogsActivity.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt index 70c866e..0772dd3 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt @@ -30,6 +30,11 @@ class LogsActivity : AppCompatActivity() { private lateinit var logText: TextView private lateinit var logStr: String + private val fileName by lazy { + val now = SimpleDateFormat.getDateTimeInstance().format(Date()) + getString(R.string.logs_filename_template, now) + } + private val saveLogs = registerForActivityResult(ActivityResultContracts.CreateDocument("text/plain")) { uri -> if (uri == null) return@registerForActivityResult @@ -115,10 +120,4 @@ class LogsActivity : AppCompatActivity() { scrollView.fullScroll(View.FOCUS_DOWN) } } - - private val fileName: String - get() { - val now = SimpleDateFormat.getDateTimeInstance().format(Date()) - return getString(R.string.logs_filename_template, now) - } } \ No newline at end of file -- 2.45.3 From 77359f010f4912e857882237a3884a45a52bd154 Mon Sep 17 00:00:00 2001 From: septs Date: Thu, 12 Dec 2024 09:12:01 +0800 Subject: [PATCH 3/4] chore: simplify share intent --- .../java/im/angry/openeuicc/ui/LogsActivity.kt | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt index 0772dd3..60abc60 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt @@ -1,6 +1,5 @@ package im.angry.openeuicc.ui -import android.content.Intent import android.icu.text.SimpleDateFormat import android.os.Bundle import android.view.Menu @@ -11,6 +10,7 @@ import android.widget.TextView import androidx.activity.enableEdgeToEdge import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity +import androidx.core.app.ShareCompat import androidx.core.content.FileProvider import androidx.lifecycle.lifecycleScope import androidx.swiperefreshlayout.widget.SwipeRefreshLayout @@ -92,13 +92,11 @@ class LogsActivity : AppCompatActivity() { val fileUri = File(cacheDir, "$fileName.txt") .apply { writeText(logStr) } .let { FileProvider.getUriForFile(this, "$packageName.provider", it) } - val sendIntent = Intent(Intent.ACTION_SEND).apply { - type = "text/plain" - putExtra(Intent.EXTRA_TITLE, fileName) - putExtra(Intent.EXTRA_STREAM, fileUri) - addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) - } - startActivity(Intent.createChooser(sendIntent, fileName)) + ShareCompat.IntentBuilder(this) + .setType("image/plain") + .setChooserTitle(fileName) + .addStream(fileUri) + .startChooser() true } else -> super.onOptionsItemSelected(item) -- 2.45.3 From 1572989192746f946d427a194245a26f82d60fd3 Mon Sep 17 00:00:00 2001 From: septs Date: Thu, 12 Dec 2024 10:31:39 +0800 Subject: [PATCH 4/4] chore: simplify share intent --- .../src/main/java/im/angry/openeuicc/ui/LogsActivity.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt index 60abc60..cfb97d9 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt @@ -89,13 +89,14 @@ class LogsActivity : AppCompatActivity() { true } R.id.share -> { - val fileUri = File(cacheDir, "$fileName.txt") + val authority = "$packageName.provider" + val displayName = "$fileName.txt" + val file = File.createTempFile("logs", ".txt", cacheDir) .apply { writeText(logStr) } - .let { FileProvider.getUriForFile(this, "$packageName.provider", it) } ShareCompat.IntentBuilder(this) .setType("image/plain") .setChooserTitle(fileName) - .addStream(fileUri) + .addStream(FileProvider.getUriForFile(this, authority, file, displayName)) .startChooser() true } -- 2.45.3