blob: fe641427cb31f1099dd6c00f4b59f62d2e36f7f5 [file] [log] [blame]
qingxi3d768742017-04-12 11:07:11 -07001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.keyguard;
18
Qingxi Li2febffb2018-01-23 16:16:35 -080019import android.app.AlertDialog;
qingxi7077b912017-05-24 16:04:32 -070020import android.app.PendingIntent;
21import android.content.BroadcastReceiver;
qingxi3d768742017-04-12 11:07:11 -070022import android.content.Context;
qingxi7077b912017-05-24 16:04:32 -070023import android.content.Intent;
24import android.content.IntentFilter;
25import android.os.UserHandle;
Gus Prevasab336792018-11-14 13:52:20 -050026import android.telephony.SubscriptionInfo;
27import android.telephony.SubscriptionManager;
28import android.telephony.euicc.EuiccManager;
qingxi3d768742017-04-12 11:07:11 -070029import android.util.AttributeSet;
Gus Prevasab336792018-11-14 13:52:20 -050030import android.util.Log;
qingxi3d768742017-04-12 11:07:11 -070031import android.view.View;
Qingxi Li2febffb2018-01-23 16:16:35 -080032import android.view.WindowManager;
qingxi3d768742017-04-12 11:07:11 -070033import android.widget.Button;
qingxi3d768742017-04-12 11:07:11 -070034
Sunny Goyal87fccf02019-08-13 17:39:10 -070035import com.android.systemui.R;
36
qingxi3d768742017-04-12 11:07:11 -070037/***
38 * This button is used by the device with embedded SIM card to disable current carrier to unlock
39 * the device with no cellular service.
40 */
41class KeyguardEsimArea extends Button implements View.OnClickListener {
qingxi7077b912017-05-24 16:04:32 -070042 private static final String ACTION_DISABLE_ESIM = "com.android.keyguard.disable_esim";
43 private static final String TAG = "KeyguardEsimArea";
44 private static final String PERMISSION_SELF = "com.android.systemui.permission.SELF";
45
qingxi3d768742017-04-12 11:07:11 -070046 private EuiccManager mEuiccManager;
47
qingxi7077b912017-05-24 16:04:32 -070048 private BroadcastReceiver mReceiver =
49 new BroadcastReceiver() {
50 @Override
51 public void onReceive(Context context, Intent intent) {
52 if (ACTION_DISABLE_ESIM.equals(intent.getAction())) {
53 int resultCode = getResultCode();
54 if (resultCode != EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_OK) {
qingxi7077b912017-05-24 16:04:32 -070055 Log.e(TAG, "Error disabling esim, result code = " + resultCode);
Qingxi Li2febffb2018-01-23 16:16:35 -080056 AlertDialog.Builder builder =
57 new AlertDialog.Builder(mContext)
58 .setMessage(R.string.error_disable_esim_msg)
59 .setTitle(R.string.error_disable_esim_title)
60 .setCancelable(false /* cancelable */)
Qingxi Li3bc25e02018-03-15 10:45:04 -070061 .setPositiveButton(R.string.ok, null /* listener */);
Qingxi Li2febffb2018-01-23 16:16:35 -080062 AlertDialog alertDialog = builder.create();
63 alertDialog.getWindow().setType(
64 WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
65 alertDialog.show();
qingxi7077b912017-05-24 16:04:32 -070066 }
67 }
68 }
69 };
70
qingxi3d768742017-04-12 11:07:11 -070071 public KeyguardEsimArea(Context context) {
72 this(context, null);
73 }
74
75 public KeyguardEsimArea(Context context, AttributeSet attrs) {
76 this(context, attrs, 0);
77 }
78
79 public KeyguardEsimArea(Context context, AttributeSet attrs, int defStyleAttr) {
80 this(context, attrs, defStyleAttr, android.R.style.Widget_Material_Button_Borderless);
81 }
82
83 public KeyguardEsimArea(Context context, AttributeSet attrs, int defStyleAttr,
84 int defStyleRes) {
85 super(context, attrs, defStyleAttr, defStyleRes);
qingxiccae10e2017-08-03 16:24:15 -070086 mEuiccManager = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
qingxi3d768742017-04-12 11:07:11 -070087 setOnClickListener(this);
88 }
89
90 @Override
qingxi7077b912017-05-24 16:04:32 -070091 protected void onAttachedToWindow() {
92 super.onAttachedToWindow();
93 mContext.registerReceiver(mReceiver, new IntentFilter(ACTION_DISABLE_ESIM),
94 PERMISSION_SELF, null /* scheduler */);
qingxi3d768742017-04-12 11:07:11 -070095 }
96
qingxi12f2de42017-05-24 15:33:13 -070097 public static boolean isEsimLocked(Context context, int subId) {
98 EuiccManager euiccManager =
99 (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
qingxidaca6f92017-06-14 11:44:04 -0700100 if (!euiccManager.isEnabled()) {
101 return false;
102 }
103 SubscriptionInfo sub = SubscriptionManager.from(context).getActiveSubscriptionInfo(subId);
104 return sub != null && sub.isEmbedded();
qingxi12f2de42017-05-24 15:33:13 -0700105 }
106
qingxi7077b912017-05-24 16:04:32 -0700107 @Override
108 protected void onDetachedFromWindow() {
109 mContext.unregisterReceiver(mReceiver);
110 super.onDetachedFromWindow();
111 }
112
113 @Override
114 public void onClick(View v) {
Qingxi Li2febffb2018-01-23 16:16:35 -0800115 Intent intent = new Intent(ACTION_DISABLE_ESIM);
qingxi7077b912017-05-24 16:04:32 -0700116 intent.setPackage(mContext.getPackageName());
Qingxi Li2febffb2018-01-23 16:16:35 -0800117 PendingIntent callbackIntent = PendingIntent.getBroadcastAsUser(
qingxi7077b912017-05-24 16:04:32 -0700118 mContext,
119 0 /* requestCode */,
120 intent,
Qingxi Li2febffb2018-01-23 16:16:35 -0800121 PendingIntent.FLAG_UPDATE_CURRENT, UserHandle.SYSTEM);
qingxi7077b912017-05-24 16:04:32 -0700122 mEuiccManager
123 .switchToSubscription(SubscriptionManager.INVALID_SUBSCRIPTION_ID, callbackIntent);
124 }
qingxi3d768742017-04-12 11:07:11 -0700125}