浏览代码

refactor: [4/n] Stop using abstract classes

For the unprivileged case, the barebones base classes should be usable
directly.
Peter Cai 2 年之前
父节点
当前提交
c4869acdea

+ 5 - 3
app-common/src/main/java/im/angry/openeuicc/BaseOpenEuiccApplication.kt → app-common/src/main/java/im/angry/openeuicc/OpenEuiccApplication.kt

@@ -3,14 +3,16 @@ package im.angry.openeuicc
 import android.app.Application
 import android.telephony.SubscriptionManager
 import android.telephony.TelephonyManager
-import im.angry.openeuicc.core.BaseEuiccChannelManager
+import im.angry.openeuicc.core.EuiccChannelManager
 
-abstract class BaseOpenEuiccApplication : Application() {
+open class OpenEuiccApplication : Application() {
     val telephonyManager by lazy {
         getSystemService(TelephonyManager::class.java)!!
     }
 
-    abstract val euiccChannelManager: BaseEuiccChannelManager
+    open val euiccChannelManager: EuiccChannelManager by lazy {
+        EuiccChannelManager(this)
+    }
 
     val subscriptionManager by lazy {
         getSystemService(SubscriptionManager::class.java)!!

+ 8 - 5
app-common/src/main/java/im/angry/openeuicc/core/BaseEuiccChannelManager.kt → app-common/src/main/java/im/angry/openeuicc/core/EuiccChannelManager.kt

@@ -6,7 +6,7 @@ import android.os.HandlerThread
 import android.se.omapi.SEService
 import android.telephony.UiccCardInfo
 import android.util.Log
-import im.angry.openeuicc.BaseOpenEuiccApplication
+import im.angry.openeuicc.OpenEuiccApplication
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.runBlocking
 import kotlinx.coroutines.sync.Mutex
@@ -16,9 +16,9 @@ import java.lang.IllegalArgumentException
 import kotlin.coroutines.resume
 import kotlin.coroutines.suspendCoroutine
 
-abstract class BaseEuiccChannelManager(protected val context: Context) {
+open class EuiccChannelManager(protected val context: Context) {
     companion object {
-        const val TAG = "BaseEuiccChannelManager"
+        const val TAG = "EuiccChannelManager"
     }
 
     private val channels = mutableListOf<EuiccChannel>()
@@ -28,7 +28,7 @@ abstract class BaseEuiccChannelManager(protected val context: Context) {
     private val lock = Mutex()
 
     protected val tm by lazy {
-        (context.applicationContext as BaseOpenEuiccApplication).telephonyManager
+        (context.applicationContext as OpenEuiccApplication).telephonyManager
     }
 
     private val handler = Handler(HandlerThread("BaseEuiccChannelManager").also { it.start() }.looper)
@@ -48,7 +48,10 @@ abstract class BaseEuiccChannelManager(protected val context: Context) {
          }
     }
 
-    abstract fun tryOpenEuiccChannelPrivileged(uiccInfo: UiccCardInfo, channelInfo: EuiccChannelInfo): EuiccChannel?
+    open fun tryOpenEuiccChannelPrivileged(uiccInfo: UiccCardInfo, channelInfo: EuiccChannelInfo): EuiccChannel? {
+        // No-op when unprivileged
+        return null
+    }
 
     private suspend fun tryOpenEuiccChannel(uiccInfo: UiccCardInfo): EuiccChannel? {
         lock.withLock {

+ 2 - 2
app-common/src/main/java/im/angry/openeuicc/ui/EuiccChannelFragmentUtils.kt

@@ -2,7 +2,7 @@ package im.angry.openeuicc.ui
 
 import android.os.Bundle
 import androidx.fragment.app.Fragment
-import im.angry.openeuicc.core.BaseEuiccChannelManager
+import im.angry.openeuicc.core.EuiccChannelManager
 import im.angry.openeuicc.core.EuiccChannel
 import im.angry.openeuicc.util.openEuiccApplication
 
@@ -19,7 +19,7 @@ fun <T> newInstanceEuicc(clazz: Class<T>, slotId: Int): T where T: Fragment, T:
 val <T> T.slotId: Int where T: Fragment, T: EuiccFragmentMarker
     get() = requireArguments().getInt("slotId")
 
-val <T> T.euiccChannelManager: BaseEuiccChannelManager where T: Fragment, T: EuiccFragmentMarker
+val <T> T.euiccChannelManager: EuiccChannelManager where T: Fragment, T: EuiccFragmentMarker
     get() = openEuiccApplication.euiccChannelManager
 
 val <T> T.channel: EuiccChannel where T: Fragment, T: EuiccFragmentMarker

+ 2 - 2
app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt

@@ -11,7 +11,7 @@ import android.widget.Spinner
 import androidx.appcompat.app.AppCompatActivity
 import androidx.lifecycle.lifecycleScope
 import im.angry.openeuicc.common.R
-import im.angry.openeuicc.core.BaseEuiccChannelManager
+import im.angry.openeuicc.core.EuiccChannelManager
 import im.angry.openeuicc.util.*
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
@@ -22,7 +22,7 @@ open class MainActivity : AppCompatActivity() {
         const val TAG = "MainActivity"
     }
 
-    protected lateinit var manager: BaseEuiccChannelManager
+    protected lateinit var manager: EuiccChannelManager
 
     private lateinit var spinnerAdapter: ArrayAdapter<String>
     private lateinit var spinner: Spinner

+ 4 - 4
app-common/src/main/java/im/angry/openeuicc/util/UiUtils.kt

@@ -6,12 +6,12 @@ import android.graphics.Rect
 import android.view.ViewGroup
 import androidx.fragment.app.DialogFragment
 import androidx.fragment.app.Fragment
-import im.angry.openeuicc.BaseOpenEuiccApplication
+import im.angry.openeuicc.OpenEuiccApplication
 
-val Activity.openEuiccApplication: BaseOpenEuiccApplication
-    get() = application as BaseOpenEuiccApplication
+val Activity.openEuiccApplication: OpenEuiccApplication
+    get() = application as OpenEuiccApplication
 
-val Fragment.openEuiccApplication: BaseOpenEuiccApplication
+val Fragment.openEuiccApplication: OpenEuiccApplication
     get() = requireActivity().openEuiccApplication
 
 // Source: <https://stackoverflow.com/questions/12478520/how-to-set-dialogfragments-width-and-height>

+ 3 - 3
app/src/main/java/im/angry/openeuicc/PrivilegedOpenEuiccApplication.kt

@@ -1,10 +1,10 @@
 package im.angry.openeuicc
 
-import im.angry.openeuicc.core.BaseEuiccChannelManager
+import im.angry.openeuicc.core.EuiccChannelManager
 import im.angry.openeuicc.core.PrivilegedEuiccChannelManager
 
-class PrivilegedOpenEuiccApplication: BaseOpenEuiccApplication() {
-    override val euiccChannelManager: BaseEuiccChannelManager by lazy {
+class PrivilegedOpenEuiccApplication: OpenEuiccApplication() {
+    override val euiccChannelManager: EuiccChannelManager by lazy {
         PrivilegedEuiccChannelManager(this)
     }
 

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

@@ -3,12 +3,12 @@ package im.angry.openeuicc.core
 import android.content.Context
 import android.telephony.UiccCardInfo
 import android.util.Log
-import im.angry.openeuicc.BaseOpenEuiccApplication
+import im.angry.openeuicc.OpenEuiccApplication
 import im.angry.openeuicc.util.*
 import java.lang.Exception
 import java.lang.IllegalArgumentException
 
-class PrivilegedEuiccChannelManager(context: Context): BaseEuiccChannelManager(context) {
+class PrivilegedEuiccChannelManager(context: Context): EuiccChannelManager(context) {
     override fun tryOpenEuiccChannelPrivileged(uiccInfo: UiccCardInfo, channelInfo: EuiccChannelInfo): EuiccChannel? {
         if (uiccInfo.isEuicc && !uiccInfo.isRemovable) {
             Log.d(TAG, "Using TelephonyManager for slot ${uiccInfo.slotIndex}")
@@ -38,7 +38,7 @@ class PrivilegedEuiccChannelManager(context: Context): BaseEuiccChannelManager(c
     }
 
     override fun notifyEuiccProfilesChanged(slotId: Int) {
-        (context.applicationContext as BaseOpenEuiccApplication).subscriptionManager.apply {
+        (context.applicationContext as OpenEuiccApplication).subscriptionManager.apply {
             findEuiccChannelBySlotBlocking(slotId)?.let {
                 tryRefreshCachedEuiccInfo(it.cardId)
             }

+ 2 - 2
app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt

@@ -4,13 +4,13 @@ import android.service.euicc.*
 import android.telephony.euicc.DownloadableSubscription
 import android.telephony.euicc.EuiccInfo
 import net.typeblog.lpac_jni.LocalProfileInfo
-import im.angry.openeuicc.BaseOpenEuiccApplication
+import im.angry.openeuicc.OpenEuiccApplication
 import im.angry.openeuicc.core.EuiccChannel
 import im.angry.openeuicc.util.*
 
 class OpenEuiccService : EuiccService() {
     private val openEuiccApplication
-        get() = application as BaseOpenEuiccApplication
+        get() = application as OpenEuiccApplication
 
     private fun findChannel(slotId: Int): EuiccChannel? =
         openEuiccApplication.euiccChannelManager