Home | History | Annotate | Download | only in phone
      1 /*
      2  * Copyright (C) 2008 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.phone;
     18 
     19 import android.content.Context;
     20 import android.content.Intent;
     21 import android.content.res.Resources;
     22 import android.os.PersistableBundle;
     23 import android.preference.Preference;
     24 import android.preference.PreferenceActivity;
     25 import android.preference.PreferenceScreen;
     26 import android.provider.Settings;
     27 import android.telephony.CarrierConfigManager;
     28 import android.content.ComponentName;
     29 
     30 import com.android.internal.telephony.PhoneConstants;
     31 import com.android.internal.telephony.PhoneFactory;
     32 
     33 /**
     34  * List of Network-specific settings screens.
     35  */
     36 public class GsmUmtsOptions {
     37     private static final String LOG_TAG = "GsmUmtsOptions";
     38 
     39     private PreferenceScreen mButtonAPNExpand;
     40     private PreferenceScreen mButtonOperatorSelectionExpand;
     41 
     42     private static final String BUTTON_APN_EXPAND_KEY = "button_apn_key";
     43     private static final String BUTTON_OPERATOR_SELECTION_EXPAND_KEY = "button_carrier_sel_key";
     44     private static final String BUTTON_CARRIER_SETTINGS_KEY = "carrier_settings_key";
     45     public static final String EXTRA_SUB_ID = "sub_id";
     46     private PreferenceActivity mPrefActivity;
     47     private PreferenceScreen mPrefScreen;
     48     private int mSubId;
     49 
     50     public GsmUmtsOptions(PreferenceActivity prefActivity, PreferenceScreen prefScreen,
     51             final int subId) {
     52         mPrefActivity = prefActivity;
     53         mPrefScreen = prefScreen;
     54         mSubId = subId;
     55         create();
     56     }
     57 
     58     protected void create() {
     59         mPrefActivity.addPreferencesFromResource(R.xml.gsm_umts_options);
     60         mButtonAPNExpand = (PreferenceScreen) mPrefScreen.findPreference(BUTTON_APN_EXPAND_KEY);
     61         boolean removedAPNExpand = false;
     62         mButtonOperatorSelectionExpand =
     63                 (PreferenceScreen) mPrefScreen.findPreference(BUTTON_OPERATOR_SELECTION_EXPAND_KEY);
     64         if (PhoneFactory.getDefaultPhone().getPhoneType() != PhoneConstants.PHONE_TYPE_GSM) {
     65             log("Not a GSM phone");
     66             mButtonAPNExpand.setEnabled(false);
     67             mButtonOperatorSelectionExpand.setEnabled(false);
     68         } else {
     69             log("Not a CDMA phone");
     70             Resources res = mPrefActivity.getResources();
     71             PersistableBundle carrierConfig =
     72                     PhoneGlobals.getInstance().getCarrierConfigForSubId(mSubId);
     73 
     74             // Determine which options to display. For GSM these are defaulted to true in
     75             // CarrierConfigManager, but they maybe overriden by DefaultCarrierConfigService or a
     76             // carrier app.
     77             // Note: these settings used to be controlled with overlays in
     78             // Telephony/res/values/config.xml
     79             if (!carrierConfig.getBoolean(CarrierConfigManager.KEY_APN_EXPAND_BOOL)
     80                     && mButtonAPNExpand != null) {
     81                 mPrefScreen.removePreference(mButtonAPNExpand);
     82                 removedAPNExpand = true;
     83             }
     84             if (!carrierConfig.getBoolean(
     85                     CarrierConfigManager.KEY_OPERATOR_SELECTION_EXPAND_BOOL)) {
     86                 mPrefScreen.removePreference(mPrefScreen
     87                         .findPreference(BUTTON_OPERATOR_SELECTION_EXPAND_KEY));
     88             }
     89 
     90             if (carrierConfig.getBoolean(CarrierConfigManager.KEY_CSP_ENABLED_BOOL)) {
     91                 if (PhoneFactory.getDefaultPhone().isCspPlmnEnabled()) {
     92                     log("[CSP] Enabling Operator Selection menu.");
     93                     mButtonOperatorSelectionExpand.setEnabled(true);
     94                 } else {
     95                     log("[CSP] Disabling Operator Selection menu.");
     96                     mPrefScreen.removePreference(mPrefScreen
     97                           .findPreference(BUTTON_OPERATOR_SELECTION_EXPAND_KEY));
     98                 }
     99             }
    100 
    101             // Read platform settings for carrier settings
    102             final boolean isCarrierSettingsEnabled = carrierConfig.getBoolean(
    103                 CarrierConfigManager.KEY_CARRIER_SETTINGS_ENABLE_BOOL);
    104             if (!isCarrierSettingsEnabled) {
    105                 Preference pref = mPrefScreen.findPreference(BUTTON_CARRIER_SETTINGS_KEY);
    106                 if (pref != null) {
    107                     mPrefScreen.removePreference(pref);
    108                 }
    109             }
    110         }
    111         if (!removedAPNExpand) {
    112             mButtonAPNExpand.setOnPreferenceClickListener(
    113                     new Preference.OnPreferenceClickListener() {
    114                         @Override
    115                         public boolean onPreferenceClick(Preference preference) {
    116                             // We need to build the Intent by hand as the Preference Framework
    117                             // does not allow to add an Intent with some extras into a Preference
    118                             // XML file
    119                             final Intent intent = new Intent(Settings.ACTION_APN_SETTINGS);
    120                             // This will setup the Home and Search affordance
    121                             intent.putExtra(":settings:show_fragment_as_subsetting", true);
    122                             intent.putExtra(EXTRA_SUB_ID, mSubId);
    123                             mPrefActivity.startActivity(intent);
    124                             return true;
    125                         }
    126             });
    127         }
    128         if (mPrefScreen.findPreference(BUTTON_OPERATOR_SELECTION_EXPAND_KEY) != null) {
    129             mButtonOperatorSelectionExpand.setOnPreferenceClickListener(
    130                     new Preference.OnPreferenceClickListener() {
    131                         @Override
    132                         public boolean onPreferenceClick(Preference preference) {
    133                             final Intent intent = new Intent(Intent.ACTION_MAIN);
    134                             intent.setComponent(new ComponentName("com.android.phone",
    135                                     "com.android.phone.NetworkSetting"));
    136                             intent.putExtra(EXTRA_SUB_ID, mSubId);
    137                             mPrefActivity.startActivity(intent);
    138                             return true;
    139                         }
    140             });
    141         }
    142     }
    143 
    144     public boolean preferenceTreeClick(Preference preference) {
    145         log("preferenceTreeClick: return false");
    146         return false;
    147     }
    148 
    149     protected void log(String s) {
    150         android.util.Log.d(LOG_TAG, s);
    151     }
    152 }
    153