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