|  | /* | 
|  | * Copyright (C) 2017 The Android Open Source Project | 
|  | * | 
|  | * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | * you may not use this file except in compliance with the License. | 
|  | * You may obtain a copy of the License at | 
|  | * | 
|  | *      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, software | 
|  | * distributed under the License is distributed on an "AS IS" BASIS, | 
|  | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | * See the License for the specific language governing permissions and | 
|  | * limitations under the License. | 
|  | */ | 
|  |  | 
|  | package com.android.keyguard; | 
|  |  | 
|  | import android.app.PendingIntent; | 
|  | import android.content.BroadcastReceiver; | 
|  | import android.content.Context; | 
|  | import android.content.Intent; | 
|  | import android.content.IntentFilter; | 
|  | import android.os.UserHandle; | 
|  | import android.util.AttributeSet; | 
|  | import android.view.View; | 
|  | import android.widget.Button; | 
|  | import android.telephony.SubscriptionManager; | 
|  | import android.telephony.SubscriptionInfo; | 
|  | import android.telephony.euicc.EuiccManager; | 
|  | import android.util.Log; | 
|  |  | 
|  | import java.lang.ref.WeakReference; | 
|  |  | 
|  | /*** | 
|  | * This button is used by the device with embedded SIM card to disable current carrier to unlock | 
|  | * the device with no cellular service. | 
|  | */ | 
|  | class KeyguardEsimArea extends Button implements View.OnClickListener { | 
|  | private static final String ACTION_DISABLE_ESIM = "com.android.keyguard.disable_esim"; | 
|  | private static final String TAG = "KeyguardEsimArea"; | 
|  | private static final String PERMISSION_SELF = "com.android.systemui.permission.SELF"; | 
|  |  | 
|  | private EuiccManager mEuiccManager; | 
|  |  | 
|  | private BroadcastReceiver mReceiver = | 
|  | new BroadcastReceiver() { | 
|  | @Override | 
|  | public void onReceive(Context context, Intent intent) { | 
|  | if (ACTION_DISABLE_ESIM.equals(intent.getAction())) { | 
|  | int resultCode = getResultCode(); | 
|  | if (resultCode != EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_OK) { | 
|  | // TODO (b/62680294): Surface more info. to the end users for this failure. | 
|  | Log.e(TAG, "Error disabling esim, result code = " + resultCode); | 
|  | } | 
|  | } | 
|  | } | 
|  | }; | 
|  |  | 
|  | public KeyguardEsimArea(Context context) { | 
|  | this(context, null); | 
|  | } | 
|  |  | 
|  | public KeyguardEsimArea(Context context, AttributeSet attrs) { | 
|  | this(context, attrs, 0); | 
|  | } | 
|  |  | 
|  | public KeyguardEsimArea(Context context, AttributeSet attrs, int defStyleAttr) { | 
|  | this(context, attrs, defStyleAttr, android.R.style.Widget_Material_Button_Borderless); | 
|  | } | 
|  |  | 
|  | public KeyguardEsimArea(Context context, AttributeSet attrs, int defStyleAttr, | 
|  | int defStyleRes) { | 
|  | super(context, attrs, defStyleAttr, defStyleRes); | 
|  | mEuiccManager = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE); | 
|  | setOnClickListener(this); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | protected void onAttachedToWindow() { | 
|  | super.onAttachedToWindow(); | 
|  | mContext.registerReceiver(mReceiver, new IntentFilter(ACTION_DISABLE_ESIM), | 
|  | PERMISSION_SELF, null /* scheduler */); | 
|  | } | 
|  |  | 
|  | public static boolean isEsimLocked(Context context, int subId) { | 
|  | EuiccManager euiccManager = | 
|  | (EuiccManager) context.getSystemService(Context.EUICC_SERVICE); | 
|  | if (!euiccManager.isEnabled()) { | 
|  | return false; | 
|  | } | 
|  | SubscriptionInfo sub = SubscriptionManager.from(context).getActiveSubscriptionInfo(subId); | 
|  | return  sub != null && sub.isEmbedded(); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | protected void onDetachedFromWindow() { | 
|  | mContext.unregisterReceiver(mReceiver); | 
|  | super.onDetachedFromWindow(); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public void onClick(View v) { | 
|  | Intent intent = new Intent(mContext, KeyguardEsimArea.class); | 
|  | intent.setAction(ACTION_DISABLE_ESIM); | 
|  | intent.setPackage(mContext.getPackageName()); | 
|  | PendingIntent callbackIntent = PendingIntent.getBroadcast( | 
|  | mContext, | 
|  | 0 /* requestCode */, | 
|  | intent, | 
|  | PendingIntent.FLAG_UPDATE_CURRENT); | 
|  | mEuiccManager | 
|  | .switchToSubscription(SubscriptionManager.INVALID_SUBSCRIPTION_ID, callbackIntent); | 
|  | } | 
|  | } |