瀏覽代碼

Make TelephonyManager and EuiccChannelManager lazy

Peter Cai 3 年之前
父節點
當前提交
fb1f698398

+ 8 - 1
app/src/main/java/im/angry/openeuicc/OpenEUICCApplication.kt

@@ -1,8 +1,15 @@
 package im.angry.openeuicc
 
 import android.app.Application
+import android.telephony.TelephonyManager
 import im.angry.openeuicc.core.EuiccChannelManager
 
 class OpenEUICCApplication : Application() {
-    val euiccChannelManager = EuiccChannelManager(this)
+    val telephonyManager by lazy {
+        getSystemService(TelephonyManager::class.java)!!
+    }
+
+    val euiccChannelManager by lazy {
+        EuiccChannelManager(this)
+    }
 }

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

@@ -2,9 +2,9 @@ package im.angry.openeuicc.ui
 
 import android.os.Bundle
 import androidx.fragment.app.Fragment
-import im.angry.openeuicc.OpenEUICCApplication
 import im.angry.openeuicc.core.EuiccChannel
 import im.angry.openeuicc.core.EuiccChannelManager
+import im.angry.openeuicc.util.openEuiccApplication
 
 interface EuiccFragmentMarker
 
@@ -20,7 +20,7 @@ val <T> T.slotId: Int where T: Fragment, T: EuiccFragmentMarker
     get() = requireArguments().getInt("slotId")
 
 val <T> T.euiccChannelManager: EuiccChannelManager where T: Fragment, T: EuiccFragmentMarker
-    get() = (requireActivity().application as OpenEUICCApplication).euiccChannelManager
+    get() = openEuiccApplication.euiccChannelManager
 
 val <T> T.channel: EuiccChannel where T: Fragment, T: EuiccFragmentMarker
     get() =

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

@@ -12,11 +12,11 @@ import android.widget.Spinner
 import android.widget.Toast
 import androidx.appcompat.app.AppCompatActivity
 import androidx.lifecycle.lifecycleScope
-import im.angry.openeuicc.OpenEUICCApplication
 import im.angry.openeuicc.R
 import im.angry.openeuicc.core.EuiccChannelManager
 import im.angry.openeuicc.databinding.ActivityMainBinding
 import im.angry.openeuicc.util.dsdsEnabled
+import im.angry.openeuicc.util.openEuiccApplication
 import im.angry.openeuicc.util.supportsDSDS
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
@@ -43,9 +43,9 @@ class MainActivity : AppCompatActivity() {
         binding = ActivityMainBinding.inflate(layoutInflater)
         setContentView(binding.root)
 
-        tm = getSystemService(TelephonyManager::class.java)
+        tm = openEuiccApplication.telephonyManager
 
-        manager = (application as OpenEUICCApplication).euiccChannelManager
+        manager = openEuiccApplication.euiccChannelManager
 
         spinnerAdapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item)
 

+ 9 - 0
app/src/main/java/im/angry/openeuicc/util/UiUtils.kt

@@ -1,9 +1,18 @@
 package im.angry.openeuicc.util
 
+import android.app.Activity
 import android.content.res.Resources
 import android.graphics.Rect
 import android.view.ViewGroup
 import androidx.fragment.app.DialogFragment
+import androidx.fragment.app.Fragment
+import im.angry.openeuicc.OpenEUICCApplication
+
+val Activity.openEuiccApplication: OpenEUICCApplication
+    get() = application as OpenEUICCApplication
+
+val Fragment.openEuiccApplication: OpenEUICCApplication
+    get() = requireActivity().openEuiccApplication
 
 // Source: <https://stackoverflow.com/questions/12478520/how-to-set-dialogfragments-width-and-height>
 /**