浏览代码

ui: Better placeholder for the no-eSIM case

Peter Cai 1 年之前
父节点
当前提交
2061e6fea3

+ 4 - 0
app-common/src/main/java/im/angry/openeuicc/di/DefaultUiComponentFactory.kt

@@ -1,9 +1,13 @@
 package im.angry.openeuicc.di
 
+import androidx.fragment.app.Fragment
 import im.angry.openeuicc.core.EuiccChannel
 import im.angry.openeuicc.ui.EuiccManagementFragment
+import im.angry.openeuicc.ui.NoEuiccPlaceholderFragment
 
 open class DefaultUiComponentFactory : UiComponentFactory {
     override fun createEuiccManagementFragment(channel: EuiccChannel): EuiccManagementFragment =
         EuiccManagementFragment.newInstance(channel.slotId, channel.portId)
+
+    override fun createNoEuiccPlaceholderFragment(): Fragment = NoEuiccPlaceholderFragment()
 }

+ 2 - 0
app-common/src/main/java/im/angry/openeuicc/di/UiComponentFactory.kt

@@ -1,8 +1,10 @@
 package im.angry.openeuicc.di
 
+import androidx.fragment.app.Fragment
 import im.angry.openeuicc.core.EuiccChannel
 import im.angry.openeuicc.ui.EuiccManagementFragment
 
 interface UiComponentFactory {
     fun createEuiccManagementFragment(channel: EuiccChannel): EuiccManagementFragment
+    fun createNoEuiccPlaceholderFragment(): Fragment
 }

+ 4 - 4
app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt

@@ -29,8 +29,6 @@ open class MainActivity : AppCompatActivity(), OpenEuiccContextMarker {
 
     private val fragments = arrayListOf<EuiccManagementFragment>()
 
-    private lateinit var noEuiccPlaceholder: View
-
     protected lateinit var tm: TelephonyManager
 
     override fun onCreate(savedInstanceState: Bundle?) {
@@ -38,7 +36,10 @@ open class MainActivity : AppCompatActivity(), OpenEuiccContextMarker {
         setContentView(R.layout.activity_main)
         setSupportActionBar(requireViewById(R.id.toolbar))
 
-        noEuiccPlaceholder = requireViewById(R.id.no_euicc_placeholder)
+        supportFragmentManager.beginTransaction().replace(
+            R.id.fragment_root,
+            appContainer.uiComponentFactory.createNoEuiccPlaceholderFragment()
+        ).commit()
 
         tm = telephonyManager
 
@@ -108,7 +109,6 @@ open class MainActivity : AppCompatActivity(), OpenEuiccContextMarker {
             }
 
             if (fragments.isNotEmpty()) {
-                noEuiccPlaceholder.visibility = View.GONE
                 supportFragmentManager.beginTransaction().replace(R.id.fragment_root, fragments.first()).commit()
             }
         }

+ 18 - 0
app-common/src/main/java/im/angry/openeuicc/ui/NoEuiccPlaceholderFragment.kt

@@ -0,0 +1,18 @@
+package im.angry.openeuicc.ui
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import im.angry.openeuicc.common.R
+
+class NoEuiccPlaceholderFragment : Fragment() {
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        return inflater.inflate(R.layout.fragment_no_euicc_placeholder, container, false)
+    }
+}

+ 1 - 10
app-common/src/main/res/layout/activity_main.xml

@@ -21,15 +21,6 @@
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toRightOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/toolbar">
-        <TextView
-            android:id="@+id/no_euicc_placeholder"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_marginStart="40dp"
-            android:layout_marginEnd="40dp"
-            android:gravity="center"
-            android:text="@string/no_euicc" />
-    </FrameLayout>
+        app:layout_constraintTop_toBottomOf="@id/toolbar"/>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 13 - 0
app-common/src/main/res/layout/fragment_no_euicc_placeholder.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <TextView
+        android:id="@+id/no_euicc_placeholder"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginStart="40dp"
+        android:layout_marginEnd="40dp"
+        android:gravity="center"
+        android:text="@string/no_euicc" />
+</FrameLayout>

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

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <string name="no_euicc">No eUICC card on this device is accessible by this app.\nInsert a supported eUICC card, or try out the privileged OpenEUICC app instead.</string>
+    <string name="no_euicc">No removable eUICC card accessible by this app is detected on this device.</string>
     <string name="unknown">Unknown</string>
     <string name="help">Help</string>
 

+ 5 - 0
app-unpriv/src/main/java/im/angry/openeuicc/UnprivilegedOpenEuiccApplication.kt

@@ -1,12 +1,17 @@
 package im.angry.openeuicc
 
 import android.content.Intent
+import im.angry.openeuicc.di.UnprivilegedAppContainer
 import im.angry.openeuicc.ui.LogsActivity
 import im.angry.openeuicc.util.*
 import kotlinx.coroutines.runBlocking
 import kotlin.system.exitProcess
 
 class UnprivilegedOpenEuiccApplication : OpenEuiccApplication() {
+    override val appContainer by lazy {
+        UnprivilegedAppContainer(this)
+    }
+
     override fun onCreate() {
         super.onCreate()
 

+ 9 - 0
app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedAppContainer.kt

@@ -0,0 +1,9 @@
+package im.angry.openeuicc.di
+
+import android.content.Context
+
+class UnprivilegedAppContainer(context: Context) : DefaultAppContainer(context) {
+    override val uiComponentFactory by lazy {
+        UnprivilegedUiComponentFactory()
+    }
+}

+ 9 - 0
app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedUiComponentFactory.kt

@@ -0,0 +1,9 @@
+package im.angry.openeuicc.di
+
+import androidx.fragment.app.Fragment
+import im.angry.openeuicc.ui.UnprivilegedNoEuiccPlaceholderFragment
+
+class UnprivilegedUiComponentFactory : DefaultUiComponentFactory() {
+    override fun createNoEuiccPlaceholderFragment(): Fragment =
+        UnprivilegedNoEuiccPlaceholderFragment()
+}

+ 29 - 0
app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedNoEuiccPlaceholderFragment.kt

@@ -0,0 +1,29 @@
+package im.angry.openeuicc.ui
+
+import android.content.Intent
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import im.angry.easyeuicc.R
+
+class UnprivilegedNoEuiccPlaceholderFragment : Fragment() {
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        val view = inflater.inflate(
+            R.layout.fragment_no_euicc_placeholder_unprivileged,
+            container,
+            false
+        )
+
+        view.findViewById<View>(R.id.compatibility_check).setOnClickListener {
+            startActivity(Intent(requireContext(), CompatibilityCheckActivity::class.java))
+        }
+
+        return view
+    }
+}

+ 28 - 0
app-unpriv/src/main/res/layout/fragment_no_euicc_placeholder_unprivileged.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <TextView
+        android:id="@+id/no_euicc_placeholder"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="40dp"
+        android:layout_marginEnd="40dp"
+        android:gravity="center"
+        android:text="@string/no_euicc"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent" />
+
+    <com.google.android.material.button.MaterialButton
+        android:id="@+id/compatibility_check"
+        android:text="@string/compatibility_check"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        app:layout_constraintTop_toBottomOf="@id/no_euicc_placeholder"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>