From b68bb48dbba61941080320317b6707878a1add3f Mon Sep 17 00:00:00 2001 From: septs Date: Wed, 4 Dec 2024 13:12:17 +0800 Subject: [PATCH 1/8] feat: show notification sequence number in top right --- .../openeuicc/ui/NotificationsActivity.kt | 26 ++++++++++++++++--- .../im/angry/openeuicc/ui/SettingsFragment.kt | 3 +++ .../angry/openeuicc/util/PreferenceUtils.kt | 2 ++ .../src/main/res/layout/notification_item.xml | 10 +++++++ app-common/src/main/res/values-ja/strings.xml | 1 - app-common/src/main/res/values/strings.xml | 5 +++- app-common/src/main/res/xml/pref_settings.xml | 6 +++++ 7 files changed, 48 insertions(+), 5 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt index 31b7d7e..d4d36d8 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt @@ -14,6 +14,7 @@ import android.widget.TextView import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AlertDialog import androidx.core.view.forEach +import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager @@ -23,11 +24,14 @@ import im.angry.openeuicc.common.R import im.angry.openeuicc.core.EuiccChannelManager import im.angry.openeuicc.util.* import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import net.typeblog.lpac_jni.LocalProfileNotification class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { + private lateinit var notificationSequenceNumberFlow: StateFlow private lateinit var swipeRefresh: SwipeRefreshLayout private lateinit var notificationList: RecyclerView private val notificationAdapter = NotificationAdapter() @@ -115,13 +119,19 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { private fun refresh() { launchTask { + notificationSequenceNumberFlow = + preferenceRepository.notificationSequenceNumberFlow.stateIn(lifecycleScope) + notificationAdapter.notifications = euiccChannelManager.withEuiccChannel(logicalSlotId) { channel -> - val profiles = channel.lpa.profiles + val profiles = buildMap { + for (profile in channel.lpa.profiles) { + put(profile.iccid, profile) + } + } channel.lpa.notifications.map { - val profile = profiles.find { p -> p.iccid == it.iccid } - LocalProfileNotificationWrapper(it, profile?.displayName ?: "???") + LocalProfileNotificationWrapper(it, profiles[it.iccid]?.displayName ?: "???") } } } @@ -136,6 +146,7 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { inner class NotificationViewHolder(private val root: View): RecyclerView.ViewHolder(root), View.OnCreateContextMenuListener, OnMenuItemClickListener { private val address: TextView = root.requireViewById(R.id.notification_address) + private val seqNumber: TextView = root.requireViewById(R.id.notification_sequence_number) private val profileName: TextView = root.requireViewById(R.id.notification_profile_name) private lateinit var notification: LocalProfileNotificationWrapper @@ -157,6 +168,7 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { } } + private fun operationToLocalizedText(operation: LocalProfileNotification.Operation) = root.context.getText( when (operation) { @@ -169,6 +181,14 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { fun updateNotification(value: LocalProfileNotificationWrapper) { notification = value + if (notificationSequenceNumberFlow.value) { + seqNumber.isVisible = true + seqNumber.text = root.context.getString( + R.string.profile_notification_sequence_number_format, + value.inner.seqNumber + ) + } + address.text = value.inner.notificationAddress profileName.text = Html.fromHtml( root.context.getString(R.string.profile_notification_name_format, diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt index f10f134..f2bf689 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt @@ -81,6 +81,9 @@ class SettingsFragment: PreferenceFragmentCompat() { findPreference("pref_developer_experimental_download_wizard") ?.bindBooleanFlow(preferenceRepository.experimentalDownloadWizardFlow, PreferenceKeys.EXPERIMENTAL_DOWNLOAD_WIZARD) + findPreference("pref_developer_notification_sequence_number") + ?.bindBooleanFlow(preferenceRepository.notificationSequenceNumberFlow, PreferenceKeys.NOTIFICATION_SEQUENCE_NUMBER) + findPreference("pref_developer_unfiltered_profile_list") ?.bindBooleanFlow(preferenceRepository.unfilteredProfileListFlow, PreferenceKeys.UNFILTERED_PROFILE_LIST) diff --git a/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt b/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt index 807706e..10cefb5 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt @@ -32,6 +32,7 @@ object PreferenceKeys { // ---- Developer Options ---- val DEVELOPER_OPTIONS_ENABLED = booleanPreferencesKey("developer_options_enabled") val EXPERIMENTAL_DOWNLOAD_WIZARD = booleanPreferencesKey("experimental_download_wizard") + val NOTIFICATION_SEQUENCE_NUMBER = booleanPreferencesKey("notification_sequence_number") val UNFILTERED_PROFILE_LIST = booleanPreferencesKey("unfiltered_profile_list") val IGNORE_TLS_CERTIFICATE = booleanPreferencesKey("ignore_tls_certificate") } @@ -50,6 +51,7 @@ class PreferenceRepository(private val context: Context) { // ---- Developer Options ---- val developerOptionsEnabledFlow = bindFlow(PreferenceKeys.DEVELOPER_OPTIONS_ENABLED, false) val experimentalDownloadWizardFlow = bindFlow(PreferenceKeys.EXPERIMENTAL_DOWNLOAD_WIZARD, false) + val notificationSequenceNumberFlow = bindFlow(PreferenceKeys.NOTIFICATION_SEQUENCE_NUMBER, false) val unfilteredProfileListFlow = bindFlow(PreferenceKeys.UNFILTERED_PROFILE_LIST, false) val ignoreTLSCertificateFlow = bindFlow(PreferenceKeys.IGNORE_TLS_CERTIFICATE, false) diff --git a/app-common/src/main/res/layout/notification_item.xml b/app-common/src/main/res/layout/notification_item.xml index 6b7253c..3a2641b 100644 --- a/app-common/src/main/res/layout/notification_item.xml +++ b/app-common/src/main/res/layout/notification_item.xml @@ -15,6 +15,16 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + 削除しました 有効化しました 無効化しました - <b>%1$s</b> %2$s (%3$s) 処理 削除 eUICC 情報 diff --git a/app-common/src/main/res/values/strings.xml b/app-common/src/main/res/values/strings.xml index d0813d2..e75e945 100644 --- a/app-common/src/main/res/values/strings.xml +++ b/app-common/src/main/res/values/strings.xml @@ -103,7 +103,8 @@ Deleted Enabled Disabled - <b>%1$s</b> %2$s (%3$s) + <b>%1$s</b> %2$s (%3$s) + #%d Process Delete @@ -153,6 +154,8 @@ Developer Options Experimental Download Wizard Enable the experimental new download wizard. Note that it is not fully working yet. + Show notification sequence number + Display notification sequence number in top right Show unfiltered profile list Include non-production profiles in the list Ignore SM-DP+ TLS certificate diff --git a/app-common/src/main/res/xml/pref_settings.xml b/app-common/src/main/res/xml/pref_settings.xml index 107e0b4..123fe6d 100644 --- a/app-common/src/main/res/xml/pref_settings.xml +++ b/app-common/src/main/res/xml/pref_settings.xml @@ -62,6 +62,12 @@ app:title="@string/pref_developer_experimental_download_wizard" app:summary="@string/pref_developer_experimental_download_wizard_desc" /> + + Date: Wed, 4 Dec 2024 13:25:12 +0800 Subject: [PATCH 2/8] chore: simplify logical --- .../im/angry/openeuicc/ui/NotificationsActivity.kt | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt index d4d36d8..cd9e5ad 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt @@ -181,15 +181,12 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { fun updateNotification(value: LocalProfileNotificationWrapper) { notification = value - if (notificationSequenceNumberFlow.value) { - seqNumber.isVisible = true - seqNumber.text = root.context.getString( - R.string.profile_notification_sequence_number_format, - value.inner.seqNumber - ) - } - address.text = value.inner.notificationAddress + seqNumber.isVisible = notificationSequenceNumberFlow.value + seqNumber.text = root.context.getString( + R.string.profile_notification_sequence_number_format, + value.inner.seqNumber + ) profileName.text = Html.fromHtml( root.context.getString(R.string.profile_notification_name_format, operationToLocalizedText(value.inner.profileManagementOperation), -- 2.45.3 From 54b1f5b9503c6055906ff99b442ddd24c7469763 Mon Sep 17 00:00:00 2001 From: septs Date: Wed, 4 Dec 2024 14:25:39 +0800 Subject: [PATCH 3/8] fix: variable name --- .../java/im/angry/openeuicc/ui/NotificationsActivity.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt index cd9e5ad..8f6040d 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt @@ -146,7 +146,8 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { inner class NotificationViewHolder(private val root: View): RecyclerView.ViewHolder(root), View.OnCreateContextMenuListener, OnMenuItemClickListener { private val address: TextView = root.requireViewById(R.id.notification_address) - private val seqNumber: TextView = root.requireViewById(R.id.notification_sequence_number) + private val sequenceNumber: TextView = + root.requireViewById(R.id.notification_sequence_number) private val profileName: TextView = root.requireViewById(R.id.notification_profile_name) private lateinit var notification: LocalProfileNotificationWrapper @@ -182,8 +183,8 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { notification = value address.text = value.inner.notificationAddress - seqNumber.isVisible = notificationSequenceNumberFlow.value - seqNumber.text = root.context.getString( + sequenceNumber.isVisible = notificationSequenceNumberFlow.value + sequenceNumber.text = root.context.getString( R.string.profile_notification_sequence_number_format, value.inner.seqNumber ) -- 2.45.3 From ce5e3ec37184e1ca636fa5aaf989c0608e6cb307 Mon Sep 17 00:00:00 2001 From: septs Date: Wed, 4 Dec 2024 16:29:53 +0800 Subject: [PATCH 4/8] fix: typo --- app-common/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-common/src/main/res/values/strings.xml b/app-common/src/main/res/values/strings.xml index e75e945..849c7e7 100644 --- a/app-common/src/main/res/values/strings.xml +++ b/app-common/src/main/res/values/strings.xml @@ -155,7 +155,7 @@ Experimental Download Wizard Enable the experimental new download wizard. Note that it is not fully working yet. Show notification sequence number - Display notification sequence number in top right + Display notification sequence number in upper right Show unfiltered profile list Include non-production profiles in the list Ignore SM-DP+ TLS certificate -- 2.45.3 From d0406ddefc2cbe7413f4523c131a4deb3d1b8420 Mon Sep 17 00:00:00 2001 From: septs Date: Wed, 4 Dec 2024 17:38:52 +0800 Subject: [PATCH 5/8] fix: variable name --- .../java/im/angry/openeuicc/ui/NotificationsActivity.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt index 8f6040d..b92228a 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt @@ -31,7 +31,7 @@ import kotlinx.coroutines.withContext import net.typeblog.lpac_jni.LocalProfileNotification class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { - private lateinit var notificationSequenceNumberFlow: StateFlow + private lateinit var sequenceNumberFlow: StateFlow private lateinit var swipeRefresh: SwipeRefreshLayout private lateinit var notificationList: RecyclerView private val notificationAdapter = NotificationAdapter() @@ -119,7 +119,7 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { private fun refresh() { launchTask { - notificationSequenceNumberFlow = + sequenceNumberFlow = preferenceRepository.notificationSequenceNumberFlow.stateIn(lifecycleScope) notificationAdapter.notifications = @@ -183,7 +183,7 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { notification = value address.text = value.inner.notificationAddress - sequenceNumber.isVisible = notificationSequenceNumberFlow.value + sequenceNumber.isVisible = sequenceNumberFlow.value sequenceNumber.text = root.context.getString( R.string.profile_notification_sequence_number_format, value.inner.seqNumber -- 2.45.3 From f936bcbb4d675266d172f08e8426f5f54e979de4 Mon Sep 17 00:00:00 2001 From: septs Date: Wed, 4 Dec 2024 19:16:25 +0800 Subject: [PATCH 6/8] chore: simplify refresh --- .../java/im/angry/openeuicc/ui/NotificationsActivity.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt index b92228a..e935653 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt @@ -124,14 +124,14 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { notificationAdapter.notifications = euiccChannelManager.withEuiccChannel(logicalSlotId) { channel -> - val profiles = buildMap { + val nameMap = buildMap { for (profile in channel.lpa.profiles) { - put(profile.iccid, profile) + put(profile.iccid, profile.displayName) } } channel.lpa.notifications.map { - LocalProfileNotificationWrapper(it, profiles[it.iccid]?.displayName ?: "???") + LocalProfileNotificationWrapper(it, nameMap[it.iccid] ?: "???") } } } -- 2.45.3 From 4e0c6090ead995d675c26a9131fbd007be96371c Mon Sep 17 00:00:00 2001 From: septs Date: Thu, 5 Dec 2024 10:47:12 +0800 Subject: [PATCH 7/8] feat: remove developer options --- .../java/im/angry/openeuicc/ui/NotificationsActivity.kt | 5 ----- .../src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt | 3 --- .../main/java/im/angry/openeuicc/util/PreferenceUtils.kt | 2 -- app-common/src/main/res/layout/notification_item.xml | 1 - app-common/src/main/res/values/strings.xml | 2 -- app-common/src/main/res/xml/pref_settings.xml | 6 ------ 6 files changed, 19 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt index e935653..a5e00f3 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt @@ -31,7 +31,6 @@ import kotlinx.coroutines.withContext import net.typeblog.lpac_jni.LocalProfileNotification class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { - private lateinit var sequenceNumberFlow: StateFlow private lateinit var swipeRefresh: SwipeRefreshLayout private lateinit var notificationList: RecyclerView private val notificationAdapter = NotificationAdapter() @@ -119,9 +118,6 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { private fun refresh() { launchTask { - sequenceNumberFlow = - preferenceRepository.notificationSequenceNumberFlow.stateIn(lifecycleScope) - notificationAdapter.notifications = euiccChannelManager.withEuiccChannel(logicalSlotId) { channel -> val nameMap = buildMap { @@ -183,7 +179,6 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { notification = value address.text = value.inner.notificationAddress - sequenceNumber.isVisible = sequenceNumberFlow.value sequenceNumber.text = root.context.getString( R.string.profile_notification_sequence_number_format, value.inner.seqNumber diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt index f2bf689..f10f134 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt @@ -81,9 +81,6 @@ class SettingsFragment: PreferenceFragmentCompat() { findPreference("pref_developer_experimental_download_wizard") ?.bindBooleanFlow(preferenceRepository.experimentalDownloadWizardFlow, PreferenceKeys.EXPERIMENTAL_DOWNLOAD_WIZARD) - findPreference("pref_developer_notification_sequence_number") - ?.bindBooleanFlow(preferenceRepository.notificationSequenceNumberFlow, PreferenceKeys.NOTIFICATION_SEQUENCE_NUMBER) - findPreference("pref_developer_unfiltered_profile_list") ?.bindBooleanFlow(preferenceRepository.unfilteredProfileListFlow, PreferenceKeys.UNFILTERED_PROFILE_LIST) diff --git a/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt b/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt index 10cefb5..807706e 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt @@ -32,7 +32,6 @@ object PreferenceKeys { // ---- Developer Options ---- val DEVELOPER_OPTIONS_ENABLED = booleanPreferencesKey("developer_options_enabled") val EXPERIMENTAL_DOWNLOAD_WIZARD = booleanPreferencesKey("experimental_download_wizard") - val NOTIFICATION_SEQUENCE_NUMBER = booleanPreferencesKey("notification_sequence_number") val UNFILTERED_PROFILE_LIST = booleanPreferencesKey("unfiltered_profile_list") val IGNORE_TLS_CERTIFICATE = booleanPreferencesKey("ignore_tls_certificate") } @@ -51,7 +50,6 @@ class PreferenceRepository(private val context: Context) { // ---- Developer Options ---- val developerOptionsEnabledFlow = bindFlow(PreferenceKeys.DEVELOPER_OPTIONS_ENABLED, false) val experimentalDownloadWizardFlow = bindFlow(PreferenceKeys.EXPERIMENTAL_DOWNLOAD_WIZARD, false) - val notificationSequenceNumberFlow = bindFlow(PreferenceKeys.NOTIFICATION_SEQUENCE_NUMBER, false) val unfilteredProfileListFlow = bindFlow(PreferenceKeys.UNFILTERED_PROFILE_LIST, false) val ignoreTLSCertificateFlow = bindFlow(PreferenceKeys.IGNORE_TLS_CERTIFICATE, false) diff --git a/app-common/src/main/res/layout/notification_item.xml b/app-common/src/main/res/layout/notification_item.xml index 3a2641b..5d56b3a 100644 --- a/app-common/src/main/res/layout/notification_item.xml +++ b/app-common/src/main/res/layout/notification_item.xml @@ -21,7 +21,6 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="24dp" android:layout_marginVertical="12dp" - android:visibility="invisible" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app-common/src/main/res/values/strings.xml b/app-common/src/main/res/values/strings.xml index 849c7e7..bd89b25 100644 --- a/app-common/src/main/res/values/strings.xml +++ b/app-common/src/main/res/values/strings.xml @@ -154,8 +154,6 @@ Developer Options Experimental Download Wizard Enable the experimental new download wizard. Note that it is not fully working yet. - Show notification sequence number - Display notification sequence number in upper right Show unfiltered profile list Include non-production profiles in the list Ignore SM-DP+ TLS certificate diff --git a/app-common/src/main/res/xml/pref_settings.xml b/app-common/src/main/res/xml/pref_settings.xml index 123fe6d..107e0b4 100644 --- a/app-common/src/main/res/xml/pref_settings.xml +++ b/app-common/src/main/res/xml/pref_settings.xml @@ -62,12 +62,6 @@ app:title="@string/pref_developer_experimental_download_wizard" app:summary="@string/pref_developer_experimental_download_wizard_desc" /> - - Date: Thu, 5 Dec 2024 10:48:56 +0800 Subject: [PATCH 8/8] chore: cleanup unused imports --- .../main/java/im/angry/openeuicc/ui/NotificationsActivity.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt index a5e00f3..c2a1a0f 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt @@ -14,7 +14,6 @@ import android.widget.TextView import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AlertDialog import androidx.core.view.forEach -import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager @@ -24,8 +23,6 @@ import im.angry.openeuicc.common.R import im.angry.openeuicc.core.EuiccChannelManager import im.angry.openeuicc.util.* import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import net.typeblog.lpac_jni.LocalProfileNotification -- 2.45.3