blob: a3288db1df2d4502dde46f5bc9830782a81c2670 [file] [log] [blame]
jeffreyhuangba76fbe2017-11-09 12:15:05 -08001/*
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.settings.deviceinfo;
18
19import android.content.Context;
jeffreyhuangba76fbe2017-11-09 12:15:05 -080020import android.telephony.SubscriptionInfo;
21import android.telephony.SubscriptionManager;
22import android.telephony.TelephonyManager;
23import android.text.TextUtils;
24
Fan Zhang23f8d592018-08-28 15:11:40 -070025import androidx.annotation.VisibleForTesting;
26import androidx.preference.Preference;
Stanley Wang9c63c412021-07-16 19:44:25 +080027import androidx.preference.PreferenceCategory;
Fan Zhang23f8d592018-08-28 15:11:40 -070028import androidx.preference.PreferenceScreen;
29
jeffreyhuangba76fbe2017-11-09 12:15:05 -080030import com.android.settings.R;
tmfange402cb22018-06-22 16:56:37 +080031import com.android.settings.core.BasePreferenceController;
Bonian Chen5dae2422022-10-18 02:00:47 +000032import com.android.settings.network.SubscriptionUtil;
jeffreyhuangba76fbe2017-11-09 12:15:05 -080033
34import java.util.ArrayList;
35import java.util.List;
36
Fan Zhange0a722e2019-02-25 12:46:34 -080037public class PhoneNumberPreferenceController extends BasePreferenceController {
jeffreyhuangba76fbe2017-11-09 12:15:05 -080038
Stanley Wang9c63c412021-07-16 19:44:25 +080039 private static final String KEY_PHONE_NUMBER = "phone_number";
40 private static final String KEY_PREFERENCE_CATEGORY = "basic_info_category";
jeffreyhuangba76fbe2017-11-09 12:15:05 -080041
42 private final TelephonyManager mTelephonyManager;
43 private final SubscriptionManager mSubscriptionManager;
44 private final List<Preference> mPreferenceList = new ArrayList<>();
45
tmfange402cb22018-06-22 16:56:37 +080046 public PhoneNumberPreferenceController(Context context, String key) {
47 super(context, key);
48 mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
Stanley Wang3f80d1b2018-12-12 15:24:21 +080049 mSubscriptionManager = mContext.getSystemService(SubscriptionManager.class);
jeffreyhuangba76fbe2017-11-09 12:15:05 -080050 }
51
52 @Override
tmfange402cb22018-06-22 16:56:37 +080053 public int getAvailabilityStatus() {
Bonian Chen5dae2422022-10-18 02:00:47 +000054 return SubscriptionUtil.isSimHardwareVisible(mContext) ?
55 AVAILABLE : UNSUPPORTED_ON_DEVICE;
jeffreyhuangba76fbe2017-11-09 12:15:05 -080056 }
57
58 @Override
althafvlycc197f42024-06-27 21:19:52 +053059 public CharSequence getSummary() {
60 return mContext.getString(R.string.device_info_protected_single_press);
61 }
62
63 @Override
64 public boolean handlePreferenceTreeClick(Preference preference) {
65 String prefKey = preference.getKey();
66 if (prefKey.startsWith(KEY_PHONE_NUMBER)) {
67 int simSlotNumber = 0;
68 if (!TextUtils.equals(prefKey, KEY_PHONE_NUMBER)) {
69 // Get multisim slot number from preference key.
70 // Multisim preference key is KEY_PHONE_NUMBER + simSlotNumber
71 simSlotNumber = Integer.parseInt(
72 prefKey.replaceAll("[^0-9]", ""));
73 }
74 final Preference simStatusPreference = mPreferenceList.get(simSlotNumber);
75 simStatusPreference.setSummary(getPhoneNumber(simSlotNumber));
76 }
77 return super.handlePreferenceTreeClick(preference);
78 }
79
80 @Override
jeffreyhuangba76fbe2017-11-09 12:15:05 -080081 public void displayPreference(PreferenceScreen screen) {
82 super.displayPreference(screen);
Bonian Chen5dae2422022-10-18 02:00:47 +000083 if (!SubscriptionUtil.isSimHardwareVisible(mContext)) {
84 return;
85 }
jeffreyhuangba76fbe2017-11-09 12:15:05 -080086 final Preference preference = screen.findPreference(getPreferenceKey());
Stanley Wang9c63c412021-07-16 19:44:25 +080087 final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY);
jeffreyhuangba76fbe2017-11-09 12:15:05 -080088 mPreferenceList.add(preference);
89
90 final int phonePreferenceOrder = preference.getOrder();
91 // Add additional preferences for each sim in the device
92 for (int simSlotNumber = 1; simSlotNumber < mTelephonyManager.getPhoneCount();
93 simSlotNumber++) {
94 final Preference multiSimPreference = createNewPreference(screen.getContext());
hoffc56ab5b22024-04-09 09:50:14 +080095 multiSimPreference.setSelectable(false);
Bonian Chen7364b9b2022-10-19 01:47:11 +000096 multiSimPreference.setCopyingEnabled(true);
jeffreyhuangba76fbe2017-11-09 12:15:05 -080097 multiSimPreference.setOrder(phonePreferenceOrder + simSlotNumber);
98 multiSimPreference.setKey(KEY_PHONE_NUMBER + simSlotNumber);
Stanley Wang9c63c412021-07-16 19:44:25 +080099 category.addPreference(multiSimPreference);
jeffreyhuangba76fbe2017-11-09 12:15:05 -0800100 mPreferenceList.add(multiSimPreference);
101 }
102 }
103
104 @Override
105 public void updateState(Preference preference) {
106 for (int simSlotNumber = 0; simSlotNumber < mPreferenceList.size(); simSlotNumber++) {
107 final Preference simStatusPreference = mPreferenceList.get(simSlotNumber);
108 simStatusPreference.setTitle(getPreferenceTitle(simSlotNumber));
althafvlycc197f42024-06-27 21:19:52 +0530109 simStatusPreference.setSummary(getSummary());
jeffreyhuangba76fbe2017-11-09 12:15:05 -0800110 }
111 }
112
tmfange402cb22018-06-22 16:56:37 +0800113 @Override
Fan Zhangb1b07e22019-03-29 15:43:46 -0700114 public boolean useDynamicSliceSummary() {
115 return true;
116 }
117
tmfange402cb22018-06-22 16:56:37 +0800118 private CharSequence getFirstPhoneNumber() {
119 final List<SubscriptionInfo> subscriptionInfoList =
Bonian Chen12477712019-12-16 13:55:54 +0800120 mSubscriptionManager.getActiveSubscriptionInfoList();
Stanley Wangae781842019-05-22 16:21:33 +0800121 if (subscriptionInfoList == null || subscriptionInfoList.isEmpty()) {
tmfange402cb22018-06-22 16:56:37 +0800122 return mContext.getText(R.string.device_info_default);
123 }
124
125 // For now, We only return first result for slice view.
126 return getFormattedPhoneNumber(subscriptionInfoList.get(0));
127 }
128
jeffreyhuangba76fbe2017-11-09 12:15:05 -0800129 private CharSequence getPhoneNumber(int simSlot) {
130 final SubscriptionInfo subscriptionInfo = getSubscriptionInfo(simSlot);
131 if (subscriptionInfo == null) {
tmfange402cb22018-06-22 16:56:37 +0800132 return mContext.getText(R.string.device_info_default);
jeffreyhuangba76fbe2017-11-09 12:15:05 -0800133 }
134
135 return getFormattedPhoneNumber(subscriptionInfo);
136 }
137
138 private CharSequence getPreferenceTitle(int simSlot) {
139 return mTelephonyManager.getPhoneCount() > 1 ? mContext.getString(
140 R.string.status_number_sim_slot, simSlot + 1) : mContext.getString(
141 R.string.status_number);
142 }
143
144 @VisibleForTesting
Jeremy Goldman804b9a42021-02-24 13:19:50 +0800145 protected SubscriptionInfo getSubscriptionInfo(int simSlot) {
jeffreyhuangba76fbe2017-11-09 12:15:05 -0800146 final List<SubscriptionInfo> subscriptionInfoList =
Bonian Chen12477712019-12-16 13:55:54 +0800147 mSubscriptionManager.getActiveSubscriptionInfoList();
jeffreyhuangba76fbe2017-11-09 12:15:05 -0800148 if (subscriptionInfoList != null) {
149 for (SubscriptionInfo info : subscriptionInfoList) {
150 if (info.getSimSlotIndex() == simSlot) {
151 return info;
152 }
153 }
154 }
155 return null;
156 }
157
158 @VisibleForTesting
althafvlycc197f42024-06-27 21:19:52 +0530159 protected CharSequence getFormattedPhoneNumber(SubscriptionInfo subscriptionInfo) {
Bonian Chenc9ace542023-02-13 04:51:06 +0000160 final String phoneNumber = SubscriptionUtil.getBidiFormattedPhoneNumber(mContext,
jeffreyhuangba76fbe2017-11-09 12:15:05 -0800161 subscriptionInfo);
162 return TextUtils.isEmpty(phoneNumber) ? mContext.getString(R.string.device_info_default)
Sunny Shao0f844d12019-11-08 11:44:55 +0800163 : phoneNumber;
jeffreyhuangba76fbe2017-11-09 12:15:05 -0800164 }
165
166 @VisibleForTesting
Jeremy Goldman804b9a42021-02-24 13:19:50 +0800167 protected Preference createNewPreference(Context context) {
althafvlycc197f42024-06-27 21:19:52 +0530168 return new PhoneNumberSummaryPreference(context);
jeffreyhuangba76fbe2017-11-09 12:15:05 -0800169 }
170}