• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
17 package com.android.settings.deviceinfo.imei;
18 
19 import static android.telephony.TelephonyManager.PHONE_TYPE_CDMA;
20 
21 import android.app.Fragment;
22 import android.content.Context;
23 import android.support.annotation.VisibleForTesting;
24 import android.support.v7.preference.Preference;
25 import android.support.v7.preference.PreferenceScreen;
26 import android.telephony.TelephonyManager;
27 
28 import com.android.settings.R;
29 import com.android.settings.core.PreferenceControllerMixin;
30 import com.android.settingslib.deviceinfo.AbstractSimStatusImeiInfoPreferenceController;
31 
32 import java.util.ArrayList;
33 import java.util.List;
34 
35 /**
36  * Controller that manages preference for single and multi sim devices.
37  */
38 public class ImeiInfoPreferenceController extends
39         AbstractSimStatusImeiInfoPreferenceController implements PreferenceControllerMixin {
40 
41     private static final String KEY_IMEI_INFO = "imei_info";
42 
43     private final boolean mIsMultiSim;
44     private final TelephonyManager mTelephonyManager;
45     private final List<Preference> mPreferenceList = new ArrayList<>();
46     private final Fragment mFragment;
47 
ImeiInfoPreferenceController(Context context, Fragment fragment)48     public ImeiInfoPreferenceController(Context context, Fragment fragment) {
49         super(context);
50 
51         mFragment = fragment;
52         mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
53         mIsMultiSim = mTelephonyManager.getPhoneCount() > 1;
54     }
55 
56     @Override
getPreferenceKey()57     public String getPreferenceKey() {
58         return KEY_IMEI_INFO;
59     }
60 
61     @Override
displayPreference(PreferenceScreen screen)62     public void displayPreference(PreferenceScreen screen) {
63         super.displayPreference(screen);
64         final Preference preference = screen.findPreference(getPreferenceKey());
65         if (!isAvailable() || preference == null || !preference.isVisible()) {
66             return;
67         }
68 
69         mPreferenceList.add(preference);
70         updatePreference(preference, 0 /* sim slot */);
71 
72         final int imeiPreferenceOrder = preference.getOrder();
73         // Add additional preferences for each sim in the device
74         for (int simSlotNumber = 1; simSlotNumber < mTelephonyManager.getPhoneCount();
75                 simSlotNumber++) {
76             final Preference multiSimPreference = createNewPreference(screen.getContext());
77             multiSimPreference.setOrder(imeiPreferenceOrder + simSlotNumber);
78             multiSimPreference.setKey(KEY_IMEI_INFO + simSlotNumber);
79             screen.addPreference(multiSimPreference);
80             mPreferenceList.add(multiSimPreference);
81             updatePreference(multiSimPreference, simSlotNumber);
82         }
83     }
84 
85     @Override
handlePreferenceTreeClick(Preference preference)86     public boolean handlePreferenceTreeClick(Preference preference) {
87         final int simSlot = mPreferenceList.indexOf(preference);
88         if (simSlot == -1) {
89             return false;
90         }
91 
92         ImeiInfoDialogFragment.show(mFragment, simSlot, preference.getTitle().toString());
93         return true;
94     }
95 
updatePreference(Preference preference, int simSlot)96     private void updatePreference(Preference preference, int simSlot) {
97         final int phoneType = mTelephonyManager.getPhoneType();
98         if (phoneType == PHONE_TYPE_CDMA) {
99             preference.setTitle(getTitleForCdmaPhone(simSlot));
100             preference.setSummary(getMeid(simSlot));
101         } else {
102             // GSM phone
103             preference.setTitle(getTitleForGsmPhone(simSlot));
104             preference.setSummary(mTelephonyManager.getImei(simSlot));
105         }
106     }
107 
getTitleForGsmPhone(int simSlot)108     private CharSequence getTitleForGsmPhone(int simSlot) {
109         return mIsMultiSim ? mContext.getString(R.string.imei_multi_sim, simSlot + 1)
110                 : mContext.getString(R.string.status_imei);
111     }
112 
getTitleForCdmaPhone(int simSlot)113     private CharSequence getTitleForCdmaPhone(int simSlot) {
114         return mIsMultiSim ? mContext.getString(R.string.meid_multi_sim, simSlot + 1)
115                 : mContext.getString(R.string.status_meid_number);
116     }
117 
118     @VisibleForTesting
getMeid(int simSlot)119     String getMeid(int simSlot) {
120         return mTelephonyManager.getMeid(simSlot);
121     }
122 
123     @VisibleForTesting
createNewPreference(Context context)124     Preference createNewPreference(Context context) {
125         return new Preference(context);
126     }
127 }
128