ソースを参照

fix: crash (priv) (#177)

resolves #178

```
1741836445.585 10331 13748 13748 E AndroidRuntime: FATAL EXCEPTION: main
1741836445.585 10331 13748 13748 E AndroidRuntime: Process: im.angry.openeuicc, PID: 13748
1741836445.585 10331 13748 13748 E AndroidRuntime: java.lang.RuntimeException: PrivilegedEuiccContextMarker shall only be used on Fragments or UI types that derive from Context
1741836445.585 10331 13748 13748 E AndroidRuntime: 	at im.angry.openeuicc.util.PrivilegedEuiccContextMarker$DefaultImpls.getPrivilegedEuiccMarkerContext(PrivilegedUtils.kt:18)
```

Reviewed-on: https://gitea.angry.im/PeterCxy/OpenEUICC/pulls/177
Co-authored-by: septs <github@septs.pw>
Co-committed-by: septs <github@septs.pw>
septs 10 ヶ月 前
コミット
6b169c505d

+ 3 - 0
app-common/src/main/java/im/angry/openeuicc/util/Utils.kt

@@ -54,6 +54,9 @@ interface OpenEuiccContextMarker {
     val appContainer: AppContainer
         get() = openEuiccApplication.appContainer
 
+    val preferenceRepository: PreferenceRepository
+        get() = appContainer.preferenceRepository
+
     val telephonyManager: TelephonyManager
         get() = appContainer.telephonyManager
 }

+ 3 - 4
app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt

@@ -10,9 +10,8 @@ import java.lang.IllegalArgumentException
 
 class PrivilegedEuiccChannelFactory(context: Context) : DefaultEuiccChannelFactory(context),
     PrivilegedEuiccContextMarker {
-    private val tm by lazy {
-        (context.applicationContext as OpenEuiccApplication).appContainer.telephonyManager
-    }
+    override val openEuiccMarkerContext: Context
+        get() = context
 
     @Suppress("NAME_SHADOWING")
     override suspend fun tryOpenEuiccChannel(port: UiccPortInfoCompat): EuiccChannel? {
@@ -35,7 +34,7 @@ class PrivilegedEuiccChannelFactory(context: Context) : DefaultEuiccChannelFacto
                     intrinsicChannelName = null,
                     TelephonyManagerApduInterface(
                         port,
-                        tm,
+                        telephonyManager,
                         context.preferenceRepository.verboseLoggingFlow
                     ),
                     context.preferenceRepository.verboseLoggingFlow,

+ 3 - 10
app/src/main/java/im/angry/openeuicc/util/PrivilegedUtils.kt

@@ -10,16 +10,9 @@ import java.util.concurrent.Executors
 import kotlin.coroutines.resume
 import kotlin.coroutines.suspendCoroutine
 
-interface PrivilegedEuiccContextMarker {
-    val privilegedEuiccMarkerContext: Context
-        get() = when (this) {
-            is Context -> this
-            is Fragment -> requireContext()
-            else -> throw RuntimeException("PrivilegedEuiccContextMarker shall only be used on Fragments or UI types that derive from Context")
-        }
-
-    val preferenceRepository: PrivilegedPreferenceRepository
-        get() = privilegedEuiccMarkerContext.preferenceRepository as PrivilegedPreferenceRepository
+interface PrivilegedEuiccContextMarker : OpenEuiccContextMarker {
+    override val preferenceRepository: PrivilegedPreferenceRepository
+        get() = appContainer.preferenceRepository as PrivilegedPreferenceRepository
 }
 
 suspend fun Context.bindServiceSuspended(intent: Intent, flags: Int): Pair<IBinder?, () -> Unit> =