浏览代码

refactor: Channel format should use DI instead of resource overriding

i18n makes resource overriding unreliable.
Peter Cai 1 年之前
父节点
当前提交
aefa79b18b

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

@@ -15,4 +15,5 @@ interface AppContainer {
     val preferenceRepository: PreferenceRepository
     val uiComponentFactory: UiComponentFactory
     val euiccChannelFactory: EuiccChannelFactory
+    val customizableTextProvider: CustomizableTextProvider
 }

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

@@ -0,0 +1,9 @@
+package im.angry.openeuicc.di
+
+interface CustomizableTextProvider {
+    /**
+     * Format the name of a logical slot; internal only -- not intended for
+     * other channels such as USB.
+     */
+    fun formatInternalChannelName(logicalSlotId: Int): String
+}

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

@@ -38,4 +38,8 @@ open class DefaultAppContainer(context: Context) : AppContainer {
     override val euiccChannelFactory by lazy {
         DefaultEuiccChannelFactory(context)
     }
+
+    override val customizableTextProvider by lazy {
+        DefaultCustomizableTextProvider(context)
+    }
 }

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

@@ -0,0 +1,9 @@
+package im.angry.openeuicc.di
+
+import android.content.Context
+import im.angry.openeuicc.common.R
+
+open class DefaultCustomizableTextProvider(private val context: Context) : CustomizableTextProvider {
+    override fun formatInternalChannelName(logicalSlotId: Int): String =
+        context.getString(R.string.channel_name_format, logicalSlotId)
+}

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

@@ -163,7 +163,8 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker {
                 // but it could change in the future
                 euiccChannelManager.notifyEuiccProfilesChanged(channel.logicalSlotId)
 
-                val channelName = getString(R.string.channel_name_format, channel.logicalSlotId)
+                val channelName =
+                    appContainer.customizableTextProvider.formatInternalChannelName(channel.logicalSlotId)
                 newPages.add(Page(channel.logicalSlotId, channelName) {
                     appContainer.uiComponentFactory.createEuiccManagementFragment(slotId, portId)
                 })

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

@@ -179,7 +179,7 @@ class DownloadWizardSlotSelectFragment : DownloadWizardActivity.DownloadWizardSt
             title.text = if (item.logicalSlotId == EuiccChannelManager.USB_CHANNEL_ID) {
                 root.context.getString(R.string.usb)
             } else {
-                root.context.getString(R.string.download_wizard_slot_title, item.logicalSlotId)
+                appContainer.customizableTextProvider.formatInternalChannelName(item.logicalSlotId)
             }
             eID.text = item.eID
             activeProfile.text = item.enabledProfileName ?: root.context.getString(R.string.unknown)

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

@@ -43,7 +43,6 @@
     <string name="download_wizard_back">戻る</string>
     <string name="download_wizard_next">次へ</string>
     <string name="download_wizard_slot_select">ダウンロードする eSIM を選択または確認:</string>
-    <string name="download_wizard_slot_title">論理スロット %d</string>
     <string name="download_wizard_slot_type">タイプ:</string>
     <string name="download_wizard_slot_type_removable">リムーバブル</string>
     <string name="download_wizard_slot_type_internal">内部</string>

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

@@ -81,7 +81,6 @@
     <string name="download_wizard_back">返回</string>
     <string name="download_wizard_next">下一步</string>
     <string name="download_wizard_slot_select">请选择或确认下载目标 eSIM 卡槽:</string>
-    <string name="download_wizard_slot_title">逻辑卡槽 %d</string>
     <string name="download_wizard_slot_type">类型:</string>
     <string name="download_wizard_slot_type_removable">可插拔</string>
     <string name="download_wizard_slot_type_internal">内置</string>

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

@@ -64,7 +64,6 @@
     <string name="download_wizard_back">Back</string>
     <string name="download_wizard_next">Next</string>
     <string name="download_wizard_slot_select">Select or confirm the eSIM you would like to download to:</string>
-    <string name="download_wizard_slot_title">Logical slot %d</string>
     <string name="download_wizard_slot_type">Type:</string>
     <string name="download_wizard_slot_type_removable">Removable</string>
     <string name="download_wizard_slot_type_internal">Internal</string>

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

@@ -6,4 +6,8 @@ class UnprivilegedAppContainer(context: Context) : DefaultAppContainer(context)
     override val uiComponentFactory by lazy {
         UnprivilegedUiComponentFactory()
     }
+
+    override val customizableTextProvider by lazy {
+        UnprivilegedCustomizableTextProvider(context)
+    }
 }

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

@@ -0,0 +1,10 @@
+package im.angry.openeuicc.di
+
+import android.content.Context
+import im.angry.easyeuicc.R
+
+class UnprivilegedCustomizableTextProvider(private val context: Context) :
+    DefaultCustomizableTextProvider(context) {
+    override fun formatInternalChannelName(logicalSlotId: Int): String =
+        context.getString(R.string.channel_name_format_unpriv, logicalSlotId)
+}

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

@@ -1,6 +1,6 @@
 <resources>
     <string name="app_name" translatable="false">EasyEUICC</string>
-    <string name="channel_name_format" translatable="false">SIM %d</string>
+    <string name="channel_name_format_unpriv" translatable="false">SIM %d</string>
     <string name="compatibility_check">Compatibility Check</string>
     <string name="open_sim_toolkit">Open SIM Toolkit</string>