浏览代码

Implement subscription switching for OpenEuiccService

Peter Cai 3 年之前
父节点
当前提交
864476939f
共有 1 个文件被更改,包括 27 次插入1 次删除
  1. 27 1
      app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt

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

@@ -4,6 +4,7 @@ import android.service.euicc.*
 import android.telephony.euicc.DownloadableSubscription
 import android.telephony.euicc.EuiccInfo
 import com.truphone.lpa.LocalProfileInfo
+import com.truphone.lpad.progress.Progress
 import com.truphone.util.TextUtil
 import im.angry.openeuicc.OpenEuiccApplication
 import im.angry.openeuicc.core.EuiccChannel
@@ -91,7 +92,32 @@ class OpenEuiccService : EuiccService() {
         iccid: String?,
         forceDeactivateSim: Boolean
     ): Int {
-        TODO("Not yet implemented")
+        try {
+            val channel = findChannel(slotId) ?: return RESULT_FIRST_USER
+            if (iccid == null) {
+                // Disable active profile
+                val activeProfile = channel.lpa.profiles.filter {
+                    it.state == LocalProfileInfo.State.Enabled
+                }[0] ?: return RESULT_OK
+
+                return if (channel.lpa.disableProfile(activeProfile.iccid, Progress()) == "0") {
+                    RESULT_OK
+                } else {
+                    RESULT_FIRST_USER
+                }
+            } else {
+                val iccidBig = TextUtil.iccidLittleToBig(iccid)
+                return if (channel.lpa.enableProfile(iccidBig, Progress()) == "0") {
+                    RESULT_OK
+                } else {
+                    RESULT_FIRST_USER
+                }
+            }
+        } catch (e: Exception) {
+            return RESULT_FIRST_USER
+        } finally {
+            openEuiccApplication.euiccChannelManager.invalidate()
+        }
     }
 
     override fun onUpdateSubscriptionNickname(slotId: Int, iccid: String, nickname: String?): Int {