• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 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 package com.android.settings.deviceinfo;
17 
18 import com.android.internal.logging.MetricsLogger;
19 import com.android.internal.telephony.Phone;
20 import com.android.internal.telephony.PhoneConstants;
21 import com.android.internal.telephony.PhoneFactory;
22 
23 import android.content.Context;
24 import android.os.Bundle;
25 import android.preference.Preference;
26 import android.preference.PreferenceActivity;
27 import android.preference.PreferenceScreen;
28 import android.telephony.SubscriptionManager;
29 import android.telephony.TelephonyManager;
30 import android.text.TextUtils;
31 import com.android.settings.InstrumentedPreferenceActivity;
32 import com.android.settings.R;
33 
34 public class ImeiInformation extends InstrumentedPreferenceActivity {
35 
36     private static final String KEY_PRL_VERSION = "prl_version";
37     private static final String KEY_MIN_NUMBER = "min_number";
38     private static final String KEY_MEID_NUMBER = "meid_number";
39     private static final String KEY_ICC_ID = "icc_id";
40     private static final String KEY_IMEI = "imei";
41     private static final String KEY_IMEI_SV = "imei_sv";
42 
43     private SubscriptionManager mSubscriptionManager;
44     private boolean isMultiSIM = false;
45 
46     @Override
onCreate(Bundle savedInstanceState)47     protected void onCreate(Bundle savedInstanceState) {
48         super.onCreate(savedInstanceState);
49         mSubscriptionManager = SubscriptionManager.from(this);
50         final TelephonyManager telephonyManager =
51             (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
52         initPreferenceScreen(telephonyManager.getSimCount());
53     }
54 
55     // Since there are multiple phone for dsds, therefore need to show information for different
56     // phones.
initPreferenceScreen(int slotCount)57     private void initPreferenceScreen(int slotCount) {
58         isMultiSIM = (slotCount > 1);
59         for (int slotId = 0; slotId < slotCount; slotId ++) {
60             addPreferencesFromResource(R.xml.device_info_phone_status);
61             setPreferenceValue(slotId);
62             setNewKey(slotId);
63         }
64     }
65 
setPreferenceValue(int phoneId)66     private void setPreferenceValue(int phoneId) {
67         final Phone phone = PhoneFactory.getPhone(phoneId);
68 
69         if (phone != null) {
70             if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
71                 setSummaryText(KEY_MEID_NUMBER, phone.getMeid());
72                 setSummaryText(KEY_MIN_NUMBER, phone.getCdmaMin());
73 
74                 if (getResources().getBoolean(R.bool.config_msid_enable)) {
75                     findPreference(KEY_MIN_NUMBER).setTitle(R.string.status_msid_number);
76                 }
77 
78                 setSummaryText(KEY_PRL_VERSION, phone.getCdmaPrlVersion());
79                 removePreferenceFromScreen(KEY_IMEI_SV);
80 
81                 if (phone.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE) {
82                     // Show ICC ID and IMEI for LTE device
83                     setSummaryText(KEY_ICC_ID, phone.getIccSerialNumber());
84                     setSummaryText(KEY_IMEI, phone.getImei());
85                 } else {
86                     // device is not GSM/UMTS, do not display GSM/UMTS features
87                     // check Null in case no specified preference in overlay xml
88                     removePreferenceFromScreen(KEY_IMEI);
89                     removePreferenceFromScreen(KEY_ICC_ID);
90                 }
91             } else {
92                 setSummaryText(KEY_IMEI, phone.getImei());
93                 setSummaryText(KEY_IMEI_SV, phone.getDeviceSvn());
94                 // device is not CDMA, do not display CDMA features
95                 // check Null in case no specified preference in overlay xml
96                 removePreferenceFromScreen(KEY_PRL_VERSION);
97                 removePreferenceFromScreen(KEY_MEID_NUMBER);
98                 removePreferenceFromScreen(KEY_MIN_NUMBER);
99                 removePreferenceFromScreen(KEY_ICC_ID);
100             }
101         }
102     }
103 
104     // Modify the preference key with prefix "_", so new added information preference can be set
105     // related phone information.
setNewKey(int slotId)106     private void setNewKey(int slotId) {
107         final PreferenceScreen prefScreen = getPreferenceScreen();
108         final int count = prefScreen.getPreferenceCount();
109         for (int i = 0; i < count; i++) {
110             Preference pref = prefScreen.getPreference(i);
111             String key = pref.getKey();
112             if (!key.startsWith("_")){
113                 key = "_" + key + String.valueOf(slotId);
114                 pref.setKey(key);
115                 updateTitle(pref, slotId);
116             }
117         }
118     }
119 
updateTitle(Preference pref, int slotId)120     private void updateTitle(Preference pref, int slotId) {
121         if (pref != null) {
122             String title = pref.getTitle().toString();
123             if (isMultiSIM) {
124                 // Slot starts from 1, slotId starts from 0 so plus 1
125                 title += " " + getResources().getString(R.string.slot_number, slotId + 1);
126             }
127             pref.setTitle(title);
128         }
129     }
130 
setSummaryText(String key, String text)131     private void setSummaryText(String key, String text) {
132         final Preference preference = findPreference(key);
133 
134         if (TextUtils.isEmpty(text)) {
135             text = getResources().getString(R.string.device_info_default);
136         }
137 
138         if (preference != null) {
139             preference.setSummary(text);
140         }
141     }
142 
143     /**
144      * Removes the specified preference, if it exists.
145      * @param key the key for the Preference item
146      */
removePreferenceFromScreen(String key)147     private void removePreferenceFromScreen(String key) {
148         final Preference preference = findPreference(key);
149         if (preference != null) {
150             getPreferenceScreen().removePreference(preference);
151         }
152     }
153 
154     @Override
getMetricsCategory()155     protected int getMetricsCategory() {
156         return MetricsLogger.DEVICEINFO_IMEI_INFORMATION;
157     }
158 }
159