浏览代码

refactor: Add UiComponentFactory to manual DI

Peter Cai 1 年之前
父节点
当前提交
4dd14d23f2

+ 1 - 0
app-common/src/main/java/im/angry/openeuicc/di/AppContainer.kt

@@ -10,4 +10,5 @@ interface AppContainer {
     val euiccChannelManager: IEuiccChannelManager
     val subscriptionManager: SubscriptionManager
     val preferenceRepository: PreferenceRepository
+    val uiComponentFactory: UiComponentFactory
 }

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

@@ -23,4 +23,8 @@ open class DefaultAppContainer(context: Context) : AppContainer {
     override val preferenceRepository by lazy {
         PreferenceRepository(context)
     }
+
+    override val uiComponentFactory by lazy {
+        DefaultUiComponentFactory()
+    }
 }

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

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

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

@@ -0,0 +1,8 @@
+package im.angry.openeuicc.di
+
+import im.angry.openeuicc.core.EuiccChannel
+import im.angry.openeuicc.ui.EuiccManagementFragment
+
+interface UiComponentFactory {
+    fun createEuiccManagementFragment(channel: EuiccChannel): EuiccManagementFragment
+}

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

@@ -88,10 +88,6 @@ open class MainActivity : AppCompatActivity(), OpenEuiccContextMarker {
             else -> super.onOptionsItemSelected(item)
         }
 
-
-    protected open fun createEuiccManagementFragment(channel: EuiccChannel): EuiccManagementFragment =
-        EuiccManagementFragment.newInstance(channel.slotId, channel.portId)
-
     private suspend fun init() {
         withContext(Dispatchers.IO) {
             euiccChannelManager.enumerateEuiccChannels()
@@ -108,7 +104,7 @@ open class MainActivity : AppCompatActivity(), OpenEuiccContextMarker {
         withContext(Dispatchers.Main) {
             euiccChannelManager.knownChannels.sortedBy { it.logicalSlotId }.forEach { channel ->
                 spinnerAdapter.add(getString(R.string.channel_name_format, channel.logicalSlotId))
-                fragments.add(createEuiccManagementFragment(channel))
+                fragments.add(appContainer.uiComponentFactory.createEuiccManagementFragment(channel))
             }
 
             if (fragments.isNotEmpty()) {

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

@@ -8,4 +8,8 @@ class PrivilegedAppContainer(context: Context) : DefaultAppContainer(context) {
     override val euiccChannelManager: IEuiccChannelManager by lazy {
         PrivilegedEuiccChannelManager(context)
     }
+
+    override val uiComponentFactory by lazy {
+        PrivilegedUiComponentFactory()
+    }
 }

+ 10 - 0
app/src/main/java/im/angry/openeuicc/di/PrivilegedUiComponentFactory.kt

@@ -0,0 +1,10 @@
+package im.angry.openeuicc.di
+
+import im.angry.openeuicc.core.EuiccChannel
+import im.angry.openeuicc.ui.EuiccManagementFragment
+import im.angry.openeuicc.ui.PrivilegedEuiccManagementFragment
+
+class PrivilegedUiComponentFactory : DefaultUiComponentFactory() {
+    override fun createEuiccManagementFragment(channel: EuiccChannel): EuiccManagementFragment =
+        PrivilegedEuiccManagementFragment.newInstance(channel.slotId, channel.portId)
+}

+ 0 - 4
app/src/main/java/im/angry/openeuicc/ui/PrivilegedMainActivity.kt

@@ -4,7 +4,6 @@ import android.view.Menu
 import android.view.MenuItem
 import android.widget.Toast
 import im.angry.openeuicc.R
-import im.angry.openeuicc.core.EuiccChannel
 import im.angry.openeuicc.util.*
 
 class PrivilegedMainActivity : MainActivity() {
@@ -37,7 +36,4 @@ class PrivilegedMainActivity : MainActivity() {
         }
         else -> super.onOptionsItemSelected(item)
     }
-
-    override fun createEuiccManagementFragment(channel: EuiccChannel): EuiccManagementFragment =
-        PrivilegedEuiccManagementFragment.newInstance(channel.slotId, channel.portId)
 }