From 331137a5eed3dc5ecab97f0d8e423e39e9f04673 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 1 May 2022 15:21:23 -0400 Subject: [PATCH] Implement profile disabling Because we cannot directly delete an active profile --- .../openeuicc/ui/EuiccManagementFragment.kt | 23 +++++++++++++++---- app/src/main/res/menu/profile_options.xml | 4 ++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt b/app/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt index 296046e..cbf5000 100644 --- a/app/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt +++ b/app/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt @@ -85,19 +85,23 @@ class EuiccManagementFragment : Fragment(), EuiccFragmentMarker, EuiccProfilesCh } } - private fun enableProfile(iccid: String) { + private fun enableOrDisableProfile(iccid: String, enable: Boolean) { binding.swipeRefresh.isRefreshing = true binding.swipeRefresh.isEnabled = false binding.fab.isEnabled = false lifecycleScope.launch { try { - doEnableProfile(iccid) + if (enable) { + doEnableProfile(iccid) + } else { + doDisableProfile(iccid) + } Toast.makeText(context, R.string.toast_profile_enabled, Toast.LENGTH_LONG).show() // The APDU channel will be invalid when the SIM reboots. For now, just exit the app requireActivity().finish() } catch (e: Exception) { - Log.d(TAG, "Failed to enable profile $iccid") + Log.d(TAG, "Failed to enable / disable profile $iccid") Log.d(TAG, Log.getStackTraceString(e)) binding.fab.isEnabled = true binding.swipeRefresh.isEnabled = true @@ -111,6 +115,11 @@ class EuiccManagementFragment : Fragment(), EuiccFragmentMarker, EuiccProfilesCh channel.lpa.enableProfile(iccid, Progress()) } + private suspend fun doDisableProfile(iccid: String) = + withContext(Dispatchers.IO) { + channel.lpa.disableProfile(iccid, Progress()) + } + inner class ViewHolder(private val binding: EuiccProfileBinding) : RecyclerView.ViewHolder(binding.root) { init { binding.iccid.setOnClickListener { @@ -159,6 +168,8 @@ class EuiccManagementFragment : Fragment(), EuiccFragmentMarker, EuiccProfilesCh if (isEnabled()) { menu.findItem(R.id.enable).isVisible = false menu.findItem(R.id.delete).isVisible = false + } else { + menu.findItem(R.id.disable).isVisible = false } show() } @@ -167,7 +178,11 @@ class EuiccManagementFragment : Fragment(), EuiccFragmentMarker, EuiccProfilesCh private fun onMenuItemClicked(item: MenuItem): Boolean = when (item.itemId) { R.id.enable -> { - enableProfile(profile[ICCID.name]!!) + enableOrDisableProfile(profile[ICCID.name]!!, true) + true + } + R.id.disable -> { + enableOrDisableProfile(profile[ICCID.name]!!, false) true } R.id.rename -> { diff --git a/app/src/main/res/menu/profile_options.xml b/app/src/main/res/menu/profile_options.xml index 658b4e4..4c9bede 100644 --- a/app/src/main/res/menu/profile_options.xml +++ b/app/src/main/res/menu/profile_options.xml @@ -4,6 +4,10 @@ android:id="@+id/enable" android:title="@string/enable"/> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4534c11..78f6010 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -9,6 +9,7 @@ ICCID: Enable + Disable Delete Rename