瀏覽代碼

ProfileDownloadFragment: Allow customizing IMEI sent to the server

Peter Cai 2 年之前
父節點
當前提交
434a173cb1

+ 13 - 3
app/src/main/java/im/angry/openeuicc/ui/ProfileDownloadFragment.kt

@@ -2,6 +2,7 @@ package im.angry.openeuicc.ui
 
 import android.app.Dialog
 import android.os.Bundle
+import android.text.Editable
 import android.util.Log
 import android.view.*
 import android.widget.ProgressBar
@@ -32,6 +33,7 @@ class ProfileDownloadFragment : DialogFragment(), EuiccFragmentMarker, Toolbar.O
     private lateinit var profileDownloadServer: TextInputLayout
     private lateinit var profileDownloadCode: TextInputLayout
     private lateinit var profileDownloadConfirmationCode: TextInputLayout
+    private lateinit var profileDownloadIMEI: TextInputLayout
     private lateinit var progress: ProgressBar
 
     private var downloading = false
@@ -57,6 +59,7 @@ class ProfileDownloadFragment : DialogFragment(), EuiccFragmentMarker, Toolbar.O
         profileDownloadServer = view.findViewById(R.id.profile_download_server)
         profileDownloadCode = view.findViewById(R.id.profile_download_code)
         profileDownloadConfirmationCode = view.findViewById(R.id.profile_download_confirmation_code)
+        profileDownloadIMEI = view.findViewById(R.id.profile_download_imei)
         progress = view.findViewById(R.id.progress)
 
         toolbar.inflateMenu(R.menu.fragment_profile_download)
@@ -96,6 +99,11 @@ class ProfileDownloadFragment : DialogFragment(), EuiccFragmentMarker, Toolbar.O
         setWidthPercent(95)
     }
 
+    override fun onStart() {
+        super.onStart()
+        profileDownloadIMEI.editText!!.text = Editable.Factory.getInstance().newEditable(channel.imei)
+    }
+
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         return super.onCreateDialog(savedInstanceState).also {
             it.window?.requestFeature(Window.FEATURE_NO_TITLE)
@@ -117,6 +125,8 @@ class ProfileDownloadFragment : DialogFragment(), EuiccFragmentMarker, Toolbar.O
             .ifBlank { null }
         val confirmationCode = profileDownloadConfirmationCode.editText!!.text.toString().trim()
             .ifBlank { null }
+        val imei = profileDownloadIMEI.editText!!.text.toString().trim()
+            .ifBlank { null }
 
         downloading = true
 
@@ -128,7 +138,7 @@ class ProfileDownloadFragment : DialogFragment(), EuiccFragmentMarker, Toolbar.O
 
         lifecycleScope.launch {
             try {
-                doDownloadProfile(server, code, confirmationCode)
+                doDownloadProfile(server, code, confirmationCode, imei)
             } catch (e: Exception) {
                 Log.d(TAG, "Error downloading profile")
                 Log.d(TAG, Log.getStackTraceString(e))
@@ -142,8 +152,8 @@ class ProfileDownloadFragment : DialogFragment(), EuiccFragmentMarker, Toolbar.O
         }
     }
 
-    private suspend fun doDownloadProfile(server: String, code: String?, confirmationCode: String?) = withContext(Dispatchers.IO) {
-        channel.lpa.downloadProfile(server, code, channel.imei, confirmationCode, object : ProfileDownloadCallback {
+    private suspend fun doDownloadProfile(server: String, code: String?, confirmationCode: String?, imei: String?) = withContext(Dispatchers.IO) {
+        channel.lpa.downloadProfile(server, code, imei, confirmationCode, object : ProfileDownloadCallback {
             override fun onStateUpdate(state: ProfileDownloadCallback.DownloadState) {
                 lifecycleScope.launch(Dispatchers.Main) {
                     progress.isIndeterminate = false

+ 22 - 1
app/src/main/res/layout/fragment_profile_download.xml

@@ -85,7 +85,6 @@
         app:layout_constraintTop_toBottomOf="@id/profile_download_code"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toRightOf="parent"
-        app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintWidth_percent=".8">
 
         <com.google.android.material.textfield.TextInputEditText
@@ -95,4 +94,26 @@
 
     </com.google.android.material.textfield.TextInputLayout>
 
+    <com.google.android.material.textfield.TextInputLayout
+        android:id="@+id/profile_download_imei"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginVertical="15dp"
+        android:hint="@string/profile_download_imei"
+        style="@style/Widget.OpenEUICC.Input"
+        app:layout_constraintTop_toBottomOf="@id/profile_download_confirmation_code"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintWidth_percent=".8"
+        app:passwordToggleEnabled="true">
+
+        <com.google.android.material.textfield.TextInputEditText
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:inputType="textPassword"
+            android:theme="@style/Theme.OpenEUICC.Input.Cursor"/>
+
+    </com.google.android.material.textfield.TextInputLayout>
+
 </androidx.constraintlayout.widget.ConstraintLayout>

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

@@ -24,6 +24,7 @@
     <string name="profile_download_server">Server (RSP / SM-DP+)</string>
     <string name="profile_download_code">Activation Code</string>
     <string name="profile_download_confirmation_code">Confirmation Code (Optional)</string>
+    <string name="profile_download_imei">IMEI (Optional)</string>
     <string name="profile_download_scan">Scan QR Code</string>
     <string name="profile_download_ok">Download</string>
     <string name="profile_download_failed">Failed to download eSIM. Check your activation / QR code.</string>