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