fix: crash (priv) #177

Merged
PeterCxy merged 1 commit from septs/OpenEUICC:fix-crash into master 2025-03-17 00:01:08 +01:00
3 changed files with 9 additions and 14 deletions

View file

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

View file

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

View file

@ -10,16 +10,9 @@ import java.util.concurrent.Executors
import kotlin.coroutines.resume import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine import kotlin.coroutines.suspendCoroutine
interface PrivilegedEuiccContextMarker { interface PrivilegedEuiccContextMarker : OpenEuiccContextMarker {
val privilegedEuiccMarkerContext: Context override val preferenceRepository: PrivilegedPreferenceRepository
get() = when (this) { get() = appContainer.preferenceRepository as PrivilegedPreferenceRepository
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
} }
suspend fun Context.bindServiceSuspended(intent: Intent, flags: Int): Pair<IBinder?, () -> Unit> = suspend fun Context.bindServiceSuspended(intent: Intent, flags: Int): Pair<IBinder?, () -> Unit> =