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 
GsmUmtsOptions(PreferenceActivity prefActivity, PreferenceScreen prefScreen, final int subId)50     public GsmUmtsOptions(PreferenceActivity prefActivity, PreferenceScreen prefScreen,
51             final int subId) {
52         mPrefActivity = prefActivity;
53         mPrefScreen = prefScreen;
54         mSubId = subId;
55         create();
56     }
57 
create()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 
preferenceTreeClick(Preference preference)144     public boolean preferenceTreeClick(Preference preference) {
145         log("preferenceTreeClick: return false");
146         return false;
147     }
148 
log(String s)149     protected void log(String s) {
150         android.util.Log.d(LOG_TAG, s);
151     }
152 }
153