1a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville/* 2a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * Copyright (C) 2008 The Android Open Source Project 3a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * 4a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * you may not use this file except in compliance with the License. 6a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * You may obtain a copy of the License at 7a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * 8a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 9a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * 10a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * Unless required by applicable law or agreed to in writing, software 11a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * See the License for the specific language governing permissions and 14a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * limitations under the License. 15a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville */ 16a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 17a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Savillepackage com.android.phone; 18a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 19dbbe12871889e7712f222e34b4aeb6ea61a41db6Freeman Ngimport android.content.Context; 2017318edf3a7c62ac5c8b2731509951c0cf6690c9Freeman Ngimport android.content.Intent; 2117318edf3a7c62ac5c8b2731509951c0cf6690c9Freeman Ngimport android.net.Uri; 227ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Savilleimport android.os.SystemProperties; 23a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Savilleimport android.preference.Preference; 24a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Savilleimport android.preference.PreferenceActivity; 25a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Savilleimport android.preference.PreferenceScreen; 2617318edf3a7c62ac5c8b2731509951c0cf6690c9Freeman Ngimport android.provider.Settings; 27dbbe12871889e7712f222e34b4aeb6ea61a41db6Freeman Ngimport android.telephony.TelephonyManager; 287ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Savilleimport android.text.TextUtils; 29a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 304889581a05d50da6923e4e79148df0df5b241403Wink Savilleimport com.android.internal.telephony.Phone; 31b0f85b4a78abead921c363f9c8e247d5bdd20c74Wink Savilleimport com.android.internal.telephony.PhoneConstants; 3217318edf3a7c62ac5c8b2731509951c0cf6690c9Freeman Ngimport com.android.internal.telephony.TelephonyProperties; 3317318edf3a7c62ac5c8b2731509951c0cf6690c9Freeman Ng 34a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville/** 35a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville * List of Phone-specific settings screens. 36a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville */ 377ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Savillepublic class CdmaOptions { 387ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville private static final String LOG_TAG = "CdmaOptions"; 397ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville 407ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville private CdmaSystemSelectListPreference mButtonCdmaSystemSelect; 417ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville private CdmaSubscriptionListPreference mButtonCdmaSubscription; 427ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville 437ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville private static final String BUTTON_CDMA_SYSTEM_SELECT_KEY = "cdma_system_select_key"; 447ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville private static final String BUTTON_CDMA_SUBSCRIPTION_KEY = "cdma_subscription_key"; 4517318edf3a7c62ac5c8b2731509951c0cf6690c9Freeman Ng private static final String BUTTON_CDMA_ACTIVATE_DEVICE_KEY = "cdma_activate_device_key"; 469ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 477ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville private PreferenceActivity mPrefActivity; 487ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville private PreferenceScreen mPrefScreen; 494889581a05d50da6923e4e79148df0df5b241403Wink Saville private Phone mPhone; 507ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville 514889581a05d50da6923e4e79148df0df5b241403Wink Saville public CdmaOptions(PreferenceActivity prefActivity, PreferenceScreen prefScreen, Phone phone) { 527ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville mPrefActivity = prefActivity; 537ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville mPrefScreen = prefScreen; 544889581a05d50da6923e4e79148df0df5b241403Wink Saville mPhone = phone; 557ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville create(); 567ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville } 579ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 587ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville protected void create() { 597ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville mPrefActivity.addPreferencesFromResource(R.xml.cdma_options); 60a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 617ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville mButtonCdmaSystemSelect = (CdmaSystemSelectListPreference)mPrefScreen 627ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville .findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY); 63a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 647ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville mButtonCdmaSubscription = (CdmaSubscriptionListPreference)mPrefScreen 657ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville .findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY); 66a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 677ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville mButtonCdmaSystemSelect.setEnabled(true); 687ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville if(deviceSupportsNvAndRuim()) { 697ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville log("Both NV and Ruim supported, ENABLE subscription type selection"); 707ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville mButtonCdmaSubscription.setEnabled(true); 717ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville } else { 727ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville log("Both NV and Ruim NOT supported, REMOVE subscription type selection"); 737ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville mPrefScreen.removePreference(mPrefScreen 747ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville .findPreference(BUTTON_CDMA_SUBSCRIPTION_KEY)); 75a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 76237906121f0bd15db988085589f9a0b89e48d9baDaisuke Miyakawa 77237906121f0bd15db988085589f9a0b89e48d9baDaisuke Miyakawa final boolean voiceCapable = mPrefActivity.getResources().getBoolean( 78237906121f0bd15db988085589f9a0b89e48d9baDaisuke Miyakawa com.android.internal.R.bool.config_voice_capable); 79b0f85b4a78abead921c363f9c8e247d5bdd20c74Wink Saville final boolean isLTE = mPhone.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE; 8017318edf3a7c62ac5c8b2731509951c0cf6690c9Freeman Ng if (voiceCapable || isLTE) { 8117318edf3a7c62ac5c8b2731509951c0cf6690c9Freeman Ng // This option should not be available on voice-capable devices (i.e. regular phones) 8217318edf3a7c62ac5c8b2731509951c0cf6690c9Freeman Ng // and is replaced by the LTE data service item on LTE devices 8317318edf3a7c62ac5c8b2731509951c0cf6690c9Freeman Ng mPrefScreen.removePreference( 8417318edf3a7c62ac5c8b2731509951c0cf6690c9Freeman Ng mPrefScreen.findPreference(BUTTON_CDMA_ACTIVATE_DEVICE_KEY)); 8517318edf3a7c62ac5c8b2731509951c0cf6690c9Freeman Ng } 86a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 87a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 887ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville private boolean deviceSupportsNvAndRuim() { 897ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville // retrieve the list of subscription types supported by device. 907ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville String subscriptionsSupported = SystemProperties.get("ril.subscription.types"); 917ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville boolean nvSupported = false; 927ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville boolean ruimSupported = false; 937ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville 947ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville log("deviceSupportsnvAnRum: prop=" + subscriptionsSupported); 957ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville if (!TextUtils.isEmpty(subscriptionsSupported)) { 967ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville // Searches through the comma-separated list for a match for "NV" 977ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville // and "RUIM" to update nvSupported and ruimSupported. 987ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville for (String subscriptionType : subscriptionsSupported.split(",")) { 997ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville subscriptionType = subscriptionType.trim(); 1007ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville if (subscriptionType.equalsIgnoreCase("NV")) { 1017ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville nvSupported = true; 1027ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville } 1037ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville if (subscriptionType.equalsIgnoreCase("RUIM")) { 1047ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville ruimSupported = true; 1057ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville } 1067ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville } 1077ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville } 1087ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville 1097ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville log("deviceSupportsnvAnRum: nvSupported=" + nvSupported + 1107ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville " ruimSupported=" + ruimSupported); 1117ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville return (nvSupported && ruimSupported); 1127ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville } 1137ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville 1147ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville public boolean preferenceTreeClick(Preference preference) { 1157ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville if (preference.getKey().equals(BUTTON_CDMA_SYSTEM_SELECT_KEY)) { 1167ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville log("preferenceTreeClick: return BUTTON_CDMA_ROAMING_KEY true"); 1177ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville return true; 1187ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville } 1197ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville if (preference.getKey().equals(BUTTON_CDMA_SUBSCRIPTION_KEY)) { 1207ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville log("preferenceTreeClick: return CDMA_SUBSCRIPTION_KEY true"); 1219ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang return true; 122a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1239ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang return false; 124a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1257ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville 1267ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville public void showDialog(Preference preference) { 1277ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville if (preference.getKey().equals(BUTTON_CDMA_SYSTEM_SELECT_KEY)) { 1287ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville mButtonCdmaSystemSelect.showDialog(null); 1297ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville } else if (preference.getKey().equals(BUTTON_CDMA_SUBSCRIPTION_KEY)) { 1307ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville mButtonCdmaSubscription.showDialog(null); 1317ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville } 1327ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville } 1337ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville 1347ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville protected void log(String s) { 1357ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville android.util.Log.d(LOG_TAG, s); 1367ddbcfad4b2e6701df889a34f79e9b46f79a988eWink Saville } 137a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville} 138