Compare commits

..

No commits in common. "e604f39e0d194c7b3f2c86e950eb6c46281bd1c0" and "c0cd7a25cf036d349594fe670fba3be0afa9ded6" have entirely different histories.

12 changed files with 57 additions and 61 deletions

2
.gitmodules vendored
View file

@ -1,3 +1,3 @@
[submodule "libs/lpac-jni/src/main/jni/lpac"] [submodule "libs/lpac-jni/src/main/jni/lpac"]
path = libs/lpac-jni/src/main/jni/lpac path = libs/lpac-jni/src/main/jni/lpac
url = https://github.com/estkme-group/lpac.git url = https://github.com/estkme/lpac

View file

@ -8,7 +8,7 @@ open class DefaultCustomizableTextProvider(private val context: Context) : Custo
get() = context.getString(R.string.no_euicc) get() = context.getString(R.string.no_euicc)
override val profileSwitchingTimeoutMessage: String override val profileSwitchingTimeoutMessage: String
get() = context.getString(R.string.profile_switch_timeout) get() = context.getString(R.string.enable_disable_timeout)
override fun formatInternalChannelName(logicalSlotId: Int): String = override fun formatInternalChannelName(logicalSlotId: Int): String =
context.getString(R.string.channel_name_format, logicalSlotId) context.getString(R.string.channel_name_format, logicalSlotId)

View file

@ -253,7 +253,7 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener,
if (!isUsb) { if (!isUsb) {
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
AlertDialog.Builder(requireContext()).apply { AlertDialog.Builder(requireContext()).apply {
setMessage(R.string.profile_switch_did_not_refresh) setMessage(R.string.switch_did_not_refresh)
setPositiveButton(android.R.string.ok) { dialog, _ -> setPositiveButton(android.R.string.ok) { dialog, _ ->
dialog.dismiss() dialog.dismiss()
requireActivity().finish() requireActivity().finish()
@ -380,9 +380,9 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener,
state.setText( state.setText(
if (profile.isEnabled) { if (profile.isEnabled) {
R.string.profile_state_enabled R.string.enabled
} else { } else {
R.string.profile_state_disabled R.string.disabled
} }
) )
provider.text = profile.providerName provider.text = profile.providerName

View file

@ -65,7 +65,7 @@ class ProfileRenameFragment : BaseMaterialDialogFragment(), EuiccChannelFragment
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
profileRenameNewName.editText!!.setText(currentName) profileRenameNewName.editText!!.setText(currentName)
toolbar.apply { toolbar.apply {
setTitle(R.string.profile_rename) setTitle(R.string.rename)
setNavigationOnClickListener { setNavigationOnClickListener {
if (!renaming) dismiss() if (!renaming) dismiss()
} }

View file

@ -54,7 +54,7 @@
<TextView <TextView
android:id="@+id/provider_label" android:id="@+id/provider_label"
android:text="@string/profile_provider" android:text="@string/provider"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="6dp" android:layout_marginTop="6dp"
@ -106,7 +106,7 @@
<TextView <TextView
android:id="@+id/iccid_label" android:id="@+id/iccid_label"
android:text="@string/profile_iccid" android:text="@string/iccid"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="6dp" android:layout_marginTop="6dp"

View file

@ -4,6 +4,6 @@
<item <item
android:id="@+id/ok" android:id="@+id/ok"
android:icon="@drawable/ic_check_black" android:icon="@drawable/ic_check_black"
android:title="@string/profile_rename" android:title="@string/rename"
app:showAsAction="ifRoom"/> app:showAsAction="ifRoom"/>
</menu> </menu>

View file

@ -2,18 +2,18 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item <item
android:id="@+id/enable" android:id="@+id/enable"
android:title="@string/profile_enable"/> android:title="@string/enable"/>
<item <item
android:id="@+id/disable" android:id="@+id/disable"
android:visible="false" android:visible="false"
android:title="@string/profile_disable"/> android:title="@string/disable"/>
<item <item
android:id="@+id/rename" android:id="@+id/rename"
android:title="@string/profile_rename"/> android:title="@string/rename"/>
<item <item
android:id="@+id/delete" android:id="@+id/delete"
android:title="@string/profile_delete"/> android:title="@string/delete"/>
</menu> </menu>

View file

@ -7,19 +7,19 @@
<string name="help">ヘルプ</string> <string name="help">ヘルプ</string>
<string name="reload">スロットを再読み込み</string> <string name="reload">スロットを再読み込み</string>
<string name="channel_name_format">論理スロット %d</string> <string name="channel_name_format">論理スロット %d</string>
<string name="profile_state_enabled">有効済み</string> <string name="enabled">有効済み</string>
<string name="profile_state_disabled">無効済み</string> <string name="disabled">無効済み</string>
<string name="profile_provider">プロバイダー:</string> <string name="provider">プロバイダー:</string>
<string name="profile_class">クラス:</string> <string name="profile_class">クラス:</string>
<string name="profile_class_testing">テスト中</string> <string name="profile_class_testing">テスト中</string>
<string name="profile_class_provisioning">プロビジョニング</string> <string name="profile_class_provisioning">プロビジョニング</string>
<string name="profile_class_operational">稼働中</string> <string name="profile_class_operational">稼働中</string>
<string name="profile_enable">有効化</string> <string name="enable">有効化</string>
<string name="profile_disable">無効化</string> <string name="disable">無効化</string>
<string name="profile_delete">削除</string> <string name="delete">削除</string>
<string name="profile_rename">名前を変更</string> <string name="rename">名前を変更</string>
<string name="profile_switch_timeout">eSIM チップがプロファイルの切り替えの待機中にタイムアウトしました。これはデバイスのモデムファームウェアのバグの可能性があります。機内モードに切り替えるかアプリを再起動、デバイスを再起動してください。</string> <string name="enable_disable_timeout">eSIM チップがプロファイルの切り替えの待機中にタイムアウトしました。これはデバイスのモデムファームウェアのバグの可能性があります。機内モードに切り替えるかアプリを再起動、デバイスを再起動してください。</string>
<string name="profile_switch_did_not_refresh">操作は成功しましたが、デバイスのモデムが更新を拒否しました。新しいプロファイルを使用するには機内モードに切り替えるか、再起動する必要があります。</string> <string name="switch_did_not_refresh">操作は成功しましたが、デバイスのモデムが更新を拒否しました。新しいプロファイルを使用するには機内モードに切り替えるか、再起動する必要があります。</string>
<string name="toast_profile_enable_failed">新しい eSIM プロファイルに切り替えることができません。</string> <string name="toast_profile_enable_failed">新しい eSIM プロファイルに切り替えることができません。</string>
<string name="toast_profile_delete_confirm_text_mismatched">確認文字列が一致しません</string> <string name="toast_profile_delete_confirm_text_mismatched">確認文字列が一致しません</string>
<string name="toast_iccid_copied">ICCID をクリップボードにコピーしました</string> <string name="toast_iccid_copied">ICCID をクリップボードにコピーしました</string>

View file

@ -6,16 +6,16 @@
<string name="help">帮助</string> <string name="help">帮助</string>
<string name="reload">重新加载卡槽</string> <string name="reload">重新加载卡槽</string>
<string name="channel_name_format">逻辑卡槽 %d</string> <string name="channel_name_format">逻辑卡槽 %d</string>
<string name="profile_state_enabled">已启用</string> <string name="enabled">已启用</string>
<string name="profile_state_disabled">已禁用</string> <string name="disabled">已禁用</string>
<string name="profile_provider">提供商:</string> <string name="provider">提供商:</string>
<string name="profile_class">类型:</string> <string name="profile_class">类型:</string>
<string name="profile_enable">启用</string> <string name="enable">启用</string>
<string name="profile_disable">禁用</string> <string name="disable">禁用</string>
<string name="profile_delete">删除</string> <string name="delete">删除</string>
<string name="profile_rename">重命名</string> <string name="rename">重命名</string>
<string name="profile_switch_timeout">等待 eSIM 芯片切换配置文件时超时。这可能是您手机基带固件中的一个错误。请尝试切换飞行模式、重新启动应用程序或重新启动手机</string> <string name="enable_disable_timeout">等待 eSIM 芯片切换配置文件时超时。这可能是您手机基带固件中的一个错误。请尝试切换飞行模式、重新启动应用程序或重新启动手机</string>
<string name="profile_switch_did_not_refresh">操作成功, 但是您手机的基带拒绝刷新。您可能需要切换飞行模式或重新启动,以便使用新的配置文件。</string> <string name="switch_did_not_refresh">操作成功, 但是您手机的基带拒绝刷新。您可能需要切换飞行模式或重新启动,以便使用新的配置文件。</string>
<string name="toast_profile_enable_failed">无法切换到新的 eSIM 配置文件。</string> <string name="toast_profile_enable_failed">无法切换到新的 eSIM 配置文件。</string>
<string name="toast_profile_delete_confirm_text_mismatched">输入的确认文本不匹配</string> <string name="toast_profile_delete_confirm_text_mismatched">输入的确认文本不匹配</string>
<string name="toast_iccid_copied">已复制 ICCID 到剪贴板</string> <string name="toast_iccid_copied">已复制 ICCID 到剪贴板</string>

View file

@ -6,16 +6,16 @@
<string name="help">幫助</string> <string name="help">幫助</string>
<string name="reload">重新載入卡槽</string> <string name="reload">重新載入卡槽</string>
<string name="channel_name_format">虛擬卡槽 %d</string> <string name="channel_name_format">虛擬卡槽 %d</string>
<string name="profile_state_enabled">已啟用</string> <string name="enabled">已啟用</string>
<string name="profile_state_disabled">已停用</string> <string name="disabled">已停用</string>
<string name="profile_provider">電信業者:</string> <string name="provider">電信業者:</string>
<string name="profile_class">類型:</string> <string name="profile_class">類型:</string>
<string name="profile_enable">啟用</string> <string name="enable">啟用</string>
<string name="profile_disable">停用</string> <string name="disable">停用</string>
<string name="profile_delete">刪除</string> <string name="delete">刪除</string>
<string name="profile_rename">重新命名</string> <string name="rename">重新命名</string>
<string name="profile_switch_timeout">等待 eSIM 切換設定檔時逾時。這可能是您手機基頻處理器韌體中的一個錯誤。請嘗試切換飛航模式、重新啟動應用程式或重新啟動手機</string> <string name="enable_disable_timeout">等待 eSIM 切換設定檔時逾時。這可能是您手機基頻處理器韌體中的一個錯誤。請嘗試切換飛航模式、重新啟動應用程式或重新啟動手機</string>
<string name="profile_switch_did_not_refresh">操作成功, 但是您手機的基頻處理器沒有重新整理。您可能需要切換飛航模式或重新啟動,以便使用新的設定檔。</string> <string name="switch_did_not_refresh">操作成功, 但是您手機的基頻處理器沒有重新整理。您可能需要切換飛航模式或重新啟動,以便使用新的設定檔。</string>
<string name="toast_profile_enable_failed">無法切換到新的 eSIM 設定檔。</string> <string name="toast_profile_enable_failed">無法切換到新的 eSIM 設定檔。</string>
<string name="toast_profile_delete_confirm_text_mismatched">輸入的確認文字不匹配</string> <string name="toast_profile_delete_confirm_text_mismatched">輸入的確認文字不匹配</string>
<string name="toast_iccid_copied">已複製 ICCID 到剪貼簿</string> <string name="toast_iccid_copied">已複製 ICCID 到剪貼簿</string>

View file

@ -11,24 +11,23 @@
<string name="usb" translatable="false">USB</string> <string name="usb" translatable="false">USB</string>
<string name="omapi" translatable="false">OpenMobile API (OMAPI)</string> <string name="omapi" translatable="false">OpenMobile API (OMAPI)</string>
<!-- Profile --> <string name="enabled">Enabled</string>
<string name="profile_state_enabled">Enabled</string> <string name="disabled">Disabled</string>
<string name="profile_state_disabled">Disabled</string> <string name="provider">Provider:</string>
<string name="profile_provider">Provider:</string>
<string name="profile_class">Class:</string> <string name="profile_class">Class:</string>
<string name="profile_class_testing">Testing</string> <string name="profile_class_testing">Testing</string>
<string name="profile_class_provisioning">Provisioning</string> <string name="profile_class_provisioning">Provisioning</string>
<string name="profile_class_operational">Operational</string> <string name="profile_class_operational">Operational</string>
<string name="profile_iccid" translatable="false">ICCID:</string> <string name="iccid" translatable="false">ICCID:</string>
<string name="profile_sequence_number_format" translatable="false">#%d</string> <string name="profile_sequence_number_format" translatable="false">#%d</string>
<string name="profile_enable">Enable</string> <string name="enable">Enable</string>
<string name="profile_disable">Disable</string> <string name="disable">Disable</string>
<string name="profile_delete">Delete</string> <string name="delete">Delete</string>
<string name="profile_rename">Rename</string> <string name="rename">Rename</string>
<string name="profile_switch_timeout">Timed out waiting for the eSIM chip to switch profiles. This may be a bug in your phone\'s modem firmware. Try toggling airplane mode, restarting the application, or rebooting the phone.</string> <string name="enable_disable_timeout">Timed out waiting for the eSIM chip to switch profiles. This may be a bug in your phone\'s modem firmware. Try toggling airplane mode, restarting the application, or rebooting the phone.</string>
<string name="profile_switch_did_not_refresh">The operation was successful, but your phone\'s modem refused to refresh. You might need to toggle airplane mode or reboot in order to use the new profile.</string> <string name="switch_did_not_refresh">The operation was successful, but your phone\'s modem refused to refresh. You might need to toggle airplane mode or reboot in order to use the new profile.</string>
<string name="toast_profile_enable_failed">Cannot switch to new eSIM profile.</string> <string name="toast_profile_enable_failed">Cannot switch to new eSIM profile.</string>
<string name="toast_profile_delete_confirm_text_mismatched">Confirmation string mismatch</string> <string name="toast_profile_delete_confirm_text_mismatched">Confirmation string mismatch</string>

View file

@ -127,9 +127,8 @@ open class QuickCompatibilityFragment : Fragment(), UnprivilegedEuiccContextMark
if (!service.isConnected) { if (!service.isConnected) {
return CompatibilityResult(Compatibility.NOT_COMPATIBLE) return CompatibilityResult(Compatibility.NOT_COMPATIBLE)
} }
val readers = service.readers.filter(Reader::isSIM) val omapiSlots = service.readers.filter { it.isSIM }.map { it.slotIndex }
val omapiSlots = readers.mapNotNull(Reader::slotIndex) val slots = service.readers.filter { it.isSIM }.mapNotNull { reader ->
val slots = readers.mapNotNull { reader ->
try { try {
// Note: we ONLY check the default ISD-R AID, because this test is for the _device_, // Note: we ONLY check the default ISD-R AID, because this test is for the _device_,
// NOT the eUICC. We don't care what AID a potential eUICC might use, all we need to // NOT the eUICC. We don't care what AID a potential eUICC might use, all we need to
@ -148,12 +147,10 @@ open class QuickCompatibilityFragment : Fragment(), UnprivilegedEuiccContextMark
if (omapiSlots.isEmpty()) { if (omapiSlots.isEmpty()) {
return CompatibilityResult(Compatibility.NOT_COMPATIBLE) return CompatibilityResult(Compatibility.NOT_COMPATIBLE)
} }
val formatChannelName = appContainer.customizableTextProvider::formatInternalChannelName
return CompatibilityResult( return CompatibilityResult(
Compatibility.COMPATIBLE, Compatibility.COMPATIBLE,
slotsOmapi = omapiSlots.map(formatChannelName), slotsOmapi = omapiSlots.map { "SIM$it" },
slotsIsdr = slots.map(formatChannelName), slotsIsdr = slots.map { "SIM$it" })
)
} }
open fun formatConclusion(result: CompatibilityResult): String { open fun formatConclusion(result: CompatibilityResult): String {
@ -179,8 +176,8 @@ open class QuickCompatibilityFragment : Fragment(), UnprivilegedEuiccContextMark
} }
} }
private inline val Reader.isSIM: Boolean val Reader.isSIM: Boolean
get() = name.startsWith("SIM") get() = name.startsWith("SIM")
private inline val Reader.slotIndex: Int val Reader.slotIndex: Int
get() = (name.replace("SIM", "").toIntOrNull() ?: 1) - 1 // 0-based index get() = (name.replace("SIM", "").toIntOrNull() ?: 1)