From 4f1ed329f12b590691d273ac2150cb81ded11521 Mon Sep 17 00:00:00 2001 From: septs Date: Thu, 12 Dec 2024 11:37:15 +0800 Subject: [PATCH 1/9] feat: copyable eid string --- .../angry/openeuicc/ui/EuiccInfoActivity.kt | 72 ++++++++++++------- .../openeuicc/ui/EuiccManagementFragment.kt | 3 +- app-common/src/main/res/values-ja/strings.xml | 2 +- .../src/main/res/values-zh-rCN/strings.xml | 2 +- app-common/src/main/res/values/strings.xml | 2 +- .../ui/UnprivilegedSettingsFragment.kt | 3 +- app-unpriv/src/main/res/values-ja/strings.xml | 1 - .../src/main/res/values-zh-rCN/strings.xml | 1 - app-unpriv/src/main/res/values/strings.xml | 3 - 9 files changed, 54 insertions(+), 35 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt index 0a7e16c..ecb41ec 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt @@ -1,13 +1,17 @@ package im.angry.openeuicc.ui import android.annotation.SuppressLint +import android.content.ClipData +import android.content.ClipboardManager import android.os.Bundle import android.view.LayoutInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.TextView +import android.widget.Toast import androidx.activity.enableEdgeToEdge +import androidx.annotation.StringRes import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager @@ -33,6 +37,13 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() { private var logicalSlotId: Int = -1 + data class Item( + @StringRes + val titleResId: Int, + val content: String?, + val copyable: Boolean = false, + ) + override fun onCreate(savedInstanceState: Bundle?) { enableEdgeToEdge() super.onCreate(savedInstanceState) @@ -42,12 +53,11 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() { supportActionBar!!.setDisplayHomeAsUpEnabled(true) swipeRefresh = requireViewById(R.id.swipe_refresh) - infoList = requireViewById(R.id.recycler_view) - - infoList.layoutManager = - LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) - infoList.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL)) - infoList.adapter = EuiccInfoAdapter() + infoList = requireViewById(R.id.recycler_view).also { + it.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) + it.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL)) + it.adapter = EuiccInfoAdapter() + } logicalSlotId = intent.getIntExtra("logicalSlotId", 0) @@ -82,33 +92,31 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() { lifecycleScope.launch { (infoList.adapter!! as EuiccInfoAdapter).euiccInfoItems = - euiccChannelManager.withEuiccChannel(logicalSlotId, ::buildPairs).map { - Pair(getString(it.first), it.second ?: getString(R.string.unknown)) - } + euiccChannelManager.withEuiccChannel(logicalSlotId, ::buildEuiccInfoItems) swipeRefresh.isRefreshing = false } } - private fun buildPairs(channel: EuiccChannel) = buildList { - add(Pair(R.string.euicc_info_access_mode, channel.type)) + private fun buildEuiccInfoItems(channel: EuiccChannel) = buildList { + add(Item(R.string.euicc_info_access_mode, channel.type)) add( - Pair( + Item( R.string.euicc_info_removable, formatByBoolean(channel.port.card.isRemovable, YES_NO) ) ) - add(Pair(R.string.euicc_info_eid, channel.lpa.eID)) + add(Item(R.string.euicc_info_eid, channel.lpa.eID, copyable = true)) channel.lpa.euiccInfo2.let { info -> - add(Pair(R.string.euicc_info_firmware_version, info?.euiccFirmwareVersion)) - add(Pair(R.string.euicc_info_globalplatform_version, info?.globalPlatformVersion)) - add(Pair(R.string.euicc_info_pp_version, info?.ppVersion)) - add(Pair(R.string.euicc_info_sas_accreditation_number, info?.sasAccreditationNumber)) - add(Pair(R.string.euicc_info_free_nvram, info?.freeNvram?.let(::formatFreeSpace))) + add(Item(R.string.euicc_info_firmware_version, info?.euiccFirmwareVersion)) + add(Item(R.string.euicc_info_globalplatform_version, info?.globalPlatformVersion)) + add(Item(R.string.euicc_info_pp_version, info?.ppVersion)) + add(Item(R.string.euicc_info_sas_accreditation_number, info?.sasAccreditationNumber)) + add(Item(R.string.euicc_info_free_nvram, info?.freeNvram?.let(::formatFreeSpace))) } channel.lpa.euiccInfo2?.euiccCiPKIdListForSigning.orEmpty().let { signers -> add( - Pair( + Item( R.string.euicc_info_gsma_prod, formatByBoolean( signers.contains(DEFAULT_PKID_GSMA_RSP2_ROOT_CI1), @@ -117,7 +125,7 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() { ) ) add( - Pair( + Item( R.string.euicc_info_gsma_test, formatByBoolean(PKID_GSMA_TEST_CI.any(signers::contains), SUPPORTED_UNSUPPORTED) ) @@ -134,18 +142,32 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() { } ) - inner class EuiccInfoViewHolder(root: View) : ViewHolder(root) { + inner class EuiccInfoViewHolder(val root: View) : ViewHolder(root) { private val title: TextView = root.requireViewById(R.id.euicc_info_title) private val content: TextView = root.requireViewById(R.id.euicc_info_content) + private var copyable: Boolean = false - fun bind(item: Pair) { - title.text = item.first - content.text = item.second + init { + root.setOnClickListener { + if (!copyable) return@setOnClickListener + val label = title.text.toString() + val message = getString(R.string.toast_copied, label) + root.context.getSystemService(ClipboardManager::class.java)!! + .setPrimaryClip(ClipData.newPlainText(label, content.text)) + Toast.makeText(root.context, message, Toast.LENGTH_SHORT).show() + } + } + + + fun bind(item: Item) { + title.setText(item.titleResId) + content.text = item.content ?: getString(R.string.unknown) + copyable = item.copyable } } inner class EuiccInfoAdapter : RecyclerView.Adapter() { - var euiccInfoItems: List> = listOf() + var euiccInfoItems: List = listOf() @SuppressLint("NotifyDataSetChanged") set(newVal) { field = newVal diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt index 8e7b158..fb0d297 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt @@ -346,9 +346,10 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener, } iccid.setOnLongClickListener { + val message = getString(R.string.toast_copied, "ICCID") requireContext().getSystemService(ClipboardManager::class.java)!! .setPrimaryClip(ClipData.newPlainText("iccid", iccid.text)) - Toast.makeText(requireContext(), R.string.toast_iccid_copied, Toast.LENGTH_SHORT) + Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT) .show() true } diff --git a/app-common/src/main/res/values-ja/strings.xml b/app-common/src/main/res/values-ja/strings.xml index d25af49..9c8b401 100644 --- a/app-common/src/main/res/values-ja/strings.xml +++ b/app-common/src/main/res/values-ja/strings.xml @@ -17,7 +17,7 @@ 操作は成功しましたが、デバイスのモデムが更新を拒否しました。新しいプロファイルを使用するには機内モードに切り替えるか、再起動する必要があります。 新しい eSIM プロファイルに切り替えることができません。 ニックネームは 64 文字以内にしてください - ICCID をクリップボードにコピーしました + %s をクリップボードにコピーしました スロットを選択 選択 USB の権限を許可 diff --git a/app-common/src/main/res/values-zh-rCN/strings.xml b/app-common/src/main/res/values-zh-rCN/strings.xml index 3bb0d04..11faca9 100644 --- a/app-common/src/main/res/values-zh-rCN/strings.xml +++ b/app-common/src/main/res/values-zh-rCN/strings.xml @@ -18,7 +18,7 @@ 操作成功, 但是您手机的基带拒绝刷新。您可能需要切换飞行模式或重新启动,以便使用新的配置文件。 无法切换到新的 eSIM 配置文件。 昵称不能超过 64 个字符 - 已复制 ICCID 到剪贴板 + 已复制 %s 到剪贴板 选择卡槽 选择 授予 USB 权限 diff --git a/app-common/src/main/res/values/strings.xml b/app-common/src/main/res/values/strings.xml index f308826..101a4a5 100644 --- a/app-common/src/main/res/values/strings.xml +++ b/app-common/src/main/res/values/strings.xml @@ -29,7 +29,7 @@ Cannot switch to new eSIM profile. Nickname cannot be longer than 64 characters - ICCID copied to clipboard + %s copied to clipboard Select Slot Select diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedSettingsFragment.kt b/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedSettingsFragment.kt index 1ca9d0f..5d2c0c7 100644 --- a/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedSettingsFragment.kt +++ b/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedSettingsFragment.kt @@ -33,9 +33,10 @@ class UnprivilegedSettingsFragment : SettingsFragment() { findPreference("pref_info_ara_m")?.apply { summary = firstSigner.encodeHex() setOnPreferenceClickListener { + val message = getString(im.angry.openeuicc.common.R.string.toast_copied, title) requireContext().getSystemService(ClipboardManager::class.java)!! .setPrimaryClip(ClipData.newPlainText("ara-m", summary)) - Toast.makeText(requireContext(), R.string.toast_ara_m_copied, Toast.LENGTH_SHORT) + Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT) .show() true } diff --git a/app-unpriv/src/main/res/values-ja/strings.xml b/app-unpriv/src/main/res/values-ja/strings.xml index 053a8d1..b8fac39 100644 --- a/app-unpriv/src/main/res/values-ja/strings.xml +++ b/app-unpriv/src/main/res/values-ja/strings.xml @@ -30,5 +30,4 @@ 挿入された取り外し可能な eSIM がデバイス上で管理できるかどうかは判断できません。デバイスが OMAPI のサポートを宣言していないため、このデバイス上で取り外し可能な eSIM を管理することはサポートされていない可能性があります。\n%s 挿入された取り外し可能な eSIM がデバイス上で管理できるかどうかを確認できません。\n%s ただし、eSIM プロファイルがすでに読み込まれている場合、有効化されたプロファイル自体は引き続き機能します。また、プロファイルが管理できない場合は、このデバイスで USB カードリーダーを介してプロファイルを管理できる可能性があります。 - ARA-M SHA-1 をクリップボードにコピーしました diff --git a/app-unpriv/src/main/res/values-zh-rCN/strings.xml b/app-unpriv/src/main/res/values-zh-rCN/strings.xml index 8d3060d..76b0bfa 100644 --- a/app-unpriv/src/main/res/values-zh-rCN/strings.xml +++ b/app-unpriv/src/main/res/values-zh-rCN/strings.xml @@ -28,5 +28,4 @@ 我们无法确定是否可以在您的设备上管理可插拔 eSIM 卡。由于您的设备未声明支持OMAPI,因此更有可能不支持在此设备上管理可插拔 eSIM。\n%s 我们无法确定是否可以在您的设备上管理可插拔 eSIM 卡。\n%s 然而,已经加载了eSIM配置文件的可插拔 eSIM 卡仍然可以工作; 即使无法在装置上直接管理可插拔 eSIM 卡中的配置文件,您仍然可以使用 USB 卡读卡器来管理配置文件。 - ARA-M SHA-1 已拷贝到剪贴板 \ No newline at end of file diff --git a/app-unpriv/src/main/res/values/strings.xml b/app-unpriv/src/main/res/values/strings.xml index 9d80b0e..8160abd 100644 --- a/app-unpriv/src/main/res/values/strings.xml +++ b/app-unpriv/src/main/res/values/strings.xml @@ -7,9 +7,6 @@ ARA-M SHA-1 - - ARA-M SHA-1 copied to clipboard - System Features Whether your device has all the required features for managing removable eUICC cards. For example, basic telephony and OMAPI support. -- 2.45.3 From 34c5e41dde663026b72b2c80301bfde2d14c0964 Mon Sep 17 00:00:00 2001 From: septs Date: Thu, 12 Dec 2024 11:45:59 +0800 Subject: [PATCH 2/9] chore: simplify clickable --- .../angry/openeuicc/ui/EuiccInfoActivity.kt | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt index ecb41ec..d70aaec 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt @@ -142,27 +142,22 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() { } ) - inner class EuiccInfoViewHolder(val root: View) : ViewHolder(root) { + inner class EuiccInfoViewHolder(val root: View) : ViewHolder(root), View.OnClickListener { private val title: TextView = root.requireViewById(R.id.euicc_info_title) private val content: TextView = root.requireViewById(R.id.euicc_info_content) - private var copyable: Boolean = false - - init { - root.setOnClickListener { - if (!copyable) return@setOnClickListener - val label = title.text.toString() - val message = getString(R.string.toast_copied, label) - root.context.getSystemService(ClipboardManager::class.java)!! - .setPrimaryClip(ClipData.newPlainText(label, content.text)) - Toast.makeText(root.context, message, Toast.LENGTH_SHORT).show() - } - } - fun bind(item: Item) { + root.setOnClickListener(if (item.copyable) this else null) title.setText(item.titleResId) content.text = item.content ?: getString(R.string.unknown) - copyable = item.copyable + } + + override fun onClick(view: View) { + val label = title.text.toString() + val message = getString(R.string.toast_copied, label) + root.context.getSystemService(ClipboardManager::class.java)!! + .setPrimaryClip(ClipData.newPlainText(label, content.text)) + Toast.makeText(root.context, message, Toast.LENGTH_SHORT).show() } } -- 2.45.3 From dc12e8d4107b9c80a1ca2bee0c5897f3e7d8dfa4 Mon Sep 17 00:00:00 2001 From: septs Date: Fri, 13 Dec 2024 12:22:47 +0800 Subject: [PATCH 3/9] revert: unpriv strings --- .../java/im/angry/openeuicc/ui/UnprivilegedSettingsFragment.kt | 3 +-- app-unpriv/src/main/res/values-ja/strings.xml | 1 + app-unpriv/src/main/res/values-zh-rCN/strings.xml | 1 + app-unpriv/src/main/res/values/strings.xml | 3 +++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedSettingsFragment.kt b/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedSettingsFragment.kt index 5d2c0c7..1ca9d0f 100644 --- a/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedSettingsFragment.kt +++ b/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedSettingsFragment.kt @@ -33,10 +33,9 @@ class UnprivilegedSettingsFragment : SettingsFragment() { findPreference("pref_info_ara_m")?.apply { summary = firstSigner.encodeHex() setOnPreferenceClickListener { - val message = getString(im.angry.openeuicc.common.R.string.toast_copied, title) requireContext().getSystemService(ClipboardManager::class.java)!! .setPrimaryClip(ClipData.newPlainText("ara-m", summary)) - Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT) + Toast.makeText(requireContext(), R.string.toast_ara_m_copied, Toast.LENGTH_SHORT) .show() true } diff --git a/app-unpriv/src/main/res/values-ja/strings.xml b/app-unpriv/src/main/res/values-ja/strings.xml index b8fac39..053a8d1 100644 --- a/app-unpriv/src/main/res/values-ja/strings.xml +++ b/app-unpriv/src/main/res/values-ja/strings.xml @@ -30,4 +30,5 @@ 挿入された取り外し可能な eSIM がデバイス上で管理できるかどうかは判断できません。デバイスが OMAPI のサポートを宣言していないため、このデバイス上で取り外し可能な eSIM を管理することはサポートされていない可能性があります。\n%s 挿入された取り外し可能な eSIM がデバイス上で管理できるかどうかを確認できません。\n%s ただし、eSIM プロファイルがすでに読み込まれている場合、有効化されたプロファイル自体は引き続き機能します。また、プロファイルが管理できない場合は、このデバイスで USB カードリーダーを介してプロファイルを管理できる可能性があります。 + ARA-M SHA-1 をクリップボードにコピーしました diff --git a/app-unpriv/src/main/res/values-zh-rCN/strings.xml b/app-unpriv/src/main/res/values-zh-rCN/strings.xml index 76b0bfa..8d3060d 100644 --- a/app-unpriv/src/main/res/values-zh-rCN/strings.xml +++ b/app-unpriv/src/main/res/values-zh-rCN/strings.xml @@ -28,4 +28,5 @@ 我们无法确定是否可以在您的设备上管理可插拔 eSIM 卡。由于您的设备未声明支持OMAPI,因此更有可能不支持在此设备上管理可插拔 eSIM。\n%s 我们无法确定是否可以在您的设备上管理可插拔 eSIM 卡。\n%s 然而,已经加载了eSIM配置文件的可插拔 eSIM 卡仍然可以工作; 即使无法在装置上直接管理可插拔 eSIM 卡中的配置文件,您仍然可以使用 USB 卡读卡器来管理配置文件。 + ARA-M SHA-1 已拷贝到剪贴板 \ No newline at end of file diff --git a/app-unpriv/src/main/res/values/strings.xml b/app-unpriv/src/main/res/values/strings.xml index 8160abd..9d80b0e 100644 --- a/app-unpriv/src/main/res/values/strings.xml +++ b/app-unpriv/src/main/res/values/strings.xml @@ -7,6 +7,9 @@ ARA-M SHA-1 + + ARA-M SHA-1 copied to clipboard + System Features Whether your device has all the required features for managing removable eUICC cards. For example, basic telephony and OMAPI support. -- 2.45.3 From 110d49005a0cba26ee72eedfda0fc9e38a501d2a Mon Sep 17 00:00:00 2001 From: septs Date: Fri, 13 Dec 2024 12:23:21 +0800 Subject: [PATCH 4/9] revert: common strings --- app-common/src/main/res/values-ja/strings.xml | 2 +- app-common/src/main/res/values-zh-rCN/strings.xml | 2 +- app-common/src/main/res/values/strings.xml | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app-common/src/main/res/values-ja/strings.xml b/app-common/src/main/res/values-ja/strings.xml index 9c8b401..d25af49 100644 --- a/app-common/src/main/res/values-ja/strings.xml +++ b/app-common/src/main/res/values-ja/strings.xml @@ -17,7 +17,7 @@ 操作は成功しましたが、デバイスのモデムが更新を拒否しました。新しいプロファイルを使用するには機内モードに切り替えるか、再起動する必要があります。 新しい eSIM プロファイルに切り替えることができません。 ニックネームは 64 文字以内にしてください - %s をクリップボードにコピーしました + ICCID をクリップボードにコピーしました スロットを選択 選択 USB の権限を許可 diff --git a/app-common/src/main/res/values-zh-rCN/strings.xml b/app-common/src/main/res/values-zh-rCN/strings.xml index 11faca9..3bb0d04 100644 --- a/app-common/src/main/res/values-zh-rCN/strings.xml +++ b/app-common/src/main/res/values-zh-rCN/strings.xml @@ -18,7 +18,7 @@ 操作成功, 但是您手机的基带拒绝刷新。您可能需要切换飞行模式或重新启动,以便使用新的配置文件。 无法切换到新的 eSIM 配置文件。 昵称不能超过 64 个字符 - 已复制 %s 到剪贴板 + 已复制 ICCID 到剪贴板 选择卡槽 选择 授予 USB 权限 diff --git a/app-common/src/main/res/values/strings.xml b/app-common/src/main/res/values/strings.xml index cb42ca7..61823f7 100644 --- a/app-common/src/main/res/values/strings.xml +++ b/app-common/src/main/res/values/strings.xml @@ -29,7 +29,8 @@ Cannot switch to new eSIM profile. Nickname cannot be longer than 64 characters - %s copied to clipboard + Confirmation string mismatch + ICCID copied to clipboard Select Slot Select -- 2.45.3 From 1f2b2d73ddfdc690442c0167e7f2f1748a78c921 Mon Sep 17 00:00:00 2001 From: septs Date: Fri, 13 Dec 2024 12:25:01 +0800 Subject: [PATCH 5/9] feat: add euiccinfo activity specific strings --- .../src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt | 2 +- app-common/src/main/res/values/strings.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt index 1e5606e..d1a95ee 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt @@ -149,7 +149,7 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() { override fun onClick(view: View) { val label = title.text.toString() - val message = getString(R.string.toast_copied, label) + val message = getString(R.string.toast_euicc_info_copied, label) root.context.getSystemService(ClipboardManager::class.java)!! .setPrimaryClip(ClipData.newPlainText(label, content.text)) Toast.makeText(root.context, message, Toast.LENGTH_SHORT).show() diff --git a/app-common/src/main/res/values/strings.xml b/app-common/src/main/res/values/strings.xml index 61823f7..6960b98 100644 --- a/app-common/src/main/res/values/strings.xml +++ b/app-common/src/main/res/values/strings.xml @@ -31,6 +31,7 @@ Nickname cannot be longer than 64 characters Confirmation string mismatch ICCID copied to clipboard + %s copied to clipboard Select Slot Select -- 2.45.3 From 41229cac5727001ecb21992f5005b5b96b1d9557 Mon Sep 17 00:00:00 2001 From: septs Date: Fri, 13 Dec 2024 12:27:10 +0800 Subject: [PATCH 6/9] revert: EuiccManagementFragment --- .../main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt index fb0d297..8e7b158 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt @@ -346,10 +346,9 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener, } iccid.setOnLongClickListener { - val message = getString(R.string.toast_copied, "ICCID") requireContext().getSystemService(ClipboardManager::class.java)!! .setPrimaryClip(ClipData.newPlainText("iccid", iccid.text)) - Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT) + Toast.makeText(requireContext(), R.string.toast_iccid_copied, Toast.LENGTH_SHORT) .show() true } -- 2.45.3 From ce854575aae304de68bddc0490998af5729632ab Mon Sep 17 00:00:00 2001 From: septs Date: Fri, 13 Dec 2024 12:27:18 +0800 Subject: [PATCH 7/9] revert: EuiccManagementFragment --- .../src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt index d1a95ee..d98aab6 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt @@ -137,7 +137,7 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() { } ) - inner class EuiccInfoViewHolder(val root: View) : ViewHolder(root), View.OnClickListener { + inner class EuiccInfoViewHolder(private val root: View) : ViewHolder(root), View.OnClickListener { private val title: TextView = root.requireViewById(R.id.euicc_info_title) private val content: TextView = root.requireViewById(R.id.euicc_info_content) -- 2.45.3 From 0b2a4988f2a2c2c7131a06867fc6bf622b281828 Mon Sep 17 00:00:00 2001 From: septs Date: Fri, 13 Dec 2024 12:35:27 +0800 Subject: [PATCH 8/9] refactor: eid copied toast --- .../im/angry/openeuicc/ui/EuiccInfoActivity.kt | 17 ++++++++++++----- app-common/src/main/res/values/strings.xml | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt index d98aab6..9880661 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt @@ -40,7 +40,7 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() { @StringRes val titleResId: Int, val content: String?, - val copyable: Boolean = false, + val copiedToastResId: Int? = null ) override fun onCreate(savedInstanceState: Bundle?) { @@ -105,7 +105,13 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() { formatByBoolean(channel.port.card.isRemovable, YES_NO) ) ) - add(Item(R.string.euicc_info_eid, channel.lpa.eID, copyable = true)) + add( + Item( + R.string.euicc_info_eid, + channel.lpa.eID, + copiedToastResId = R.string.toast_eid_copied + ) + ) channel.lpa.euiccInfo2.let { info -> add(Item(R.string.euicc_info_firmware_version, info?.euiccFirmwareVersion)) add(Item(R.string.euicc_info_globalplatform_version, info?.globalPlatformVersion)) @@ -140,19 +146,20 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() { inner class EuiccInfoViewHolder(private val root: View) : ViewHolder(root), View.OnClickListener { private val title: TextView = root.requireViewById(R.id.euicc_info_title) private val content: TextView = root.requireViewById(R.id.euicc_info_content) + private var copiedToastResId: Int? = null fun bind(item: Item) { - root.setOnClickListener(if (item.copyable) this else null) + copiedToastResId = item.copiedToastResId + root.setOnClickListener(if (copiedToastResId != null) this else null) title.setText(item.titleResId) content.text = item.content ?: getString(R.string.unknown) } override fun onClick(view: View) { val label = title.text.toString() - val message = getString(R.string.toast_euicc_info_copied, label) root.context.getSystemService(ClipboardManager::class.java)!! .setPrimaryClip(ClipData.newPlainText(label, content.text)) - Toast.makeText(root.context, message, Toast.LENGTH_SHORT).show() + Toast.makeText(root.context, copiedToastResId!!, Toast.LENGTH_SHORT).show() } } diff --git a/app-common/src/main/res/values/strings.xml b/app-common/src/main/res/values/strings.xml index 6960b98..f0501bf 100644 --- a/app-common/src/main/res/values/strings.xml +++ b/app-common/src/main/res/values/strings.xml @@ -31,7 +31,7 @@ Nickname cannot be longer than 64 characters Confirmation string mismatch ICCID copied to clipboard - %s copied to clipboard + EID copied to clipboard Select Slot Select -- 2.45.3 From 2a6eb746bff034ed6032b8eac7462963bb39bcf1 Mon Sep 17 00:00:00 2001 From: septs Date: Sat, 14 Dec 2024 11:26:42 +0800 Subject: [PATCH 9/9] feat: hide copied toast in android 13 or higher --- .../src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt index 9880661..0154803 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccInfoActivity.kt @@ -3,6 +3,7 @@ package im.angry.openeuicc.ui import android.annotation.SuppressLint import android.content.ClipData import android.content.ClipboardManager +import android.os.Build import android.os.Bundle import android.view.LayoutInflater import android.view.MenuItem @@ -159,7 +160,9 @@ class EuiccInfoActivity : BaseEuiccAccessActivity() { val label = title.text.toString() root.context.getSystemService(ClipboardManager::class.java)!! .setPrimaryClip(ClipData.newPlainText(label, content.text)) - Toast.makeText(root.context, copiedToastResId!!, Toast.LENGTH_SHORT).show() + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) Toast + .makeText(root.context, copiedToastResId!!, Toast.LENGTH_SHORT) + .show() } } -- 2.45.3