Browse Source

ui: wizard: Allow saving diagnostics text

Peter Cai 1 year ago
parent
commit
0229ef41df

+ 23 - 1
app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardDiagnosticsFragment.kt

@@ -1,12 +1,16 @@
 package im.angry.openeuicc.ui.wizard
 
+import android.icu.text.SimpleDateFormat
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.TextView
+import androidx.activity.result.contract.ActivityResultContracts
 import im.angry.openeuicc.common.R
 import im.angry.openeuicc.util.*
+import java.io.FileOutputStream
+import java.util.Date
 
 class DownloadWizardDiagnosticsFragment : DownloadWizardActivity.DownloadWizardStepFragment() {
     override val hasNext: Boolean
@@ -16,6 +20,16 @@ class DownloadWizardDiagnosticsFragment : DownloadWizardActivity.DownloadWizardS
 
     private lateinit var diagnosticTextView: TextView
 
+    private val saveDiagnostics =
+        registerForActivityResult(ActivityResultContracts.CreateDocument("text/plain")) { uri ->
+            if (uri == null) return@registerForActivityResult
+            requireActivity().contentResolver.openFileDescriptor(uri, "w")?.use {
+                FileOutputStream(it.fileDescriptor).use { os ->
+                    os.write(diagnosticTextView.text.toString().encodeToByteArray())
+                }
+            }
+        }
+
     override fun createNextFragment(): DownloadWizardActivity.DownloadWizardStepFragment? = null
 
     override fun createPrevFragment(): DownloadWizardActivity.DownloadWizardStepFragment? = null
@@ -26,7 +40,15 @@ class DownloadWizardDiagnosticsFragment : DownloadWizardActivity.DownloadWizardS
         savedInstanceState: Bundle?
     ): View? {
         val view = inflater.inflate(R.layout.fragment_download_diagnostics, container, false)
-        diagnosticTextView = view.requireViewById<TextView>(R.id.download_wizard_diagnostics_text)
+        view.requireViewById<View>(R.id.download_wizard_diagnostics_save).setOnClickListener {
+            saveDiagnostics.launch(
+                getString(
+                    R.string.download_wizard_diagnostics_file_template,
+                    SimpleDateFormat.getDateTimeInstance().format(Date())
+                )
+            )
+        }
+        diagnosticTextView = view.requireViewById(R.id.download_wizard_diagnostics_text)
         return view
     }
 

+ 11 - 0
app-common/src/main/res/layout/fragment_download_diagnostics.xml

@@ -26,6 +26,17 @@
             app:layout_constrainedWidth="true"
             app:layout_constraintTop_toTopOf="parent" />
 
+        <ImageButton
+            android:id="@+id/download_wizard_diagnostics_save"
+            android:src="@drawable/ic_save_as_black"
+            android:layout_margin="20dp"
+            android:layout_width="24dp"
+            android:layout_height="24dp"
+            android:contentDescription="@string/download_wizard_diagnostics_save"
+            app:tint="?attr/colorAccent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintEnd_toEndOf="parent" />
+
         <TextView
             android:id="@+id/download_wizard_diagnostics_text"
             android:layout_width="match_parent"

+ 2 - 0
app-common/src/main/res/values-ja/strings.xml

@@ -76,6 +76,8 @@
     <string name="download_wizard_diagnostics_last_apdu_response_success">最終の APDU レスポンス (SIM) は成功しました</string>
     <string name="download_wizard_diagnostics_last_apdu_response_fail">最終の APDU レスポンス (SIM) は失敗しました</string>
     <string name="download_wizard_diagnostics_last_apdu_exception">最終の APDU 例外:</string>
+    <string name="download_wizard_diagnostics_save">保存</string>
+    <string name="download_wizard_diagnostics_file_template">%s のエラー診断</string>
     <string name="profile_rename_new_name">新しいニックネーム</string>
     <string name="profile_delete_confirm">%s のプロファイルを削除してもよろしいですか?この操作は元に戻せません。</string>
     <string name="profile_delete_confirm_input">削除を確認するには「%s」を入力してください</string>

+ 2 - 0
app-common/src/main/res/values/strings.xml

@@ -94,6 +94,8 @@
     <string name="download_wizard_diagnostics_last_apdu_response_success">Last APDU response (from SIM) is successful</string>
     <string name="download_wizard_diagnostics_last_apdu_response_fail">Last APDU response (from SIM) is a failure</string>
     <string name="download_wizard_diagnostics_last_apdu_exception">Last APDU exception:</string>
+    <string name="download_wizard_diagnostics_save">Save</string>
+    <string name="download_wizard_diagnostics_file_template">Diagnostics at %s</string>
 
     <string name="profile_rename_new_name">New nickname</string>