Added 4g LTE option to Cellular Network Settings
- Data enabled removed.
+ Enchanced 4G LTE added.
+ Themed to Setting's Material.
Bug: 16213269
Change-Id: I36b21b0e7a5b1cab5f06b2ecb363cf94a9bf1986
diff --git a/res/drawable/preference_background.xml b/res/drawable/preference_background.xml
new file mode 100644
index 0000000..19ca432
--- /dev/null
+++ b/res/drawable/preference_background.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+ android:insetLeft="0dip"
+ android:insetTop="0dip"
+ android:insetRight="0dip"
+ android:insetBottom="0dip">
+
+ <shape android:shape="rectangle">
+ <solid android:color="@*android:color/background_material_light" />
+ </shape>
+
+</inset>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 7eec223..30da2f7 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -49,4 +49,6 @@
<enum name="not_reachable" value="3" />
</attr>
</declare-styleable>
+
+ <attr name="preferenceBackgroundColor" format="color" />
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 70dcfc2..c343deb 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -134,6 +134,8 @@
<string name="voicemail_abbreviated">VM:</string>
<!-- Mobile network settings screen, setting option name -->
<string name="networks">Network operators</string>
+ <!-- Cell Broadcast settings title. [CHAR LIMIT=50] -->
+ <string name="cell_broadcast_settings">Emergency broadcasts</string>
<!-- Call settings screen title -->
<string name="call_settings">Call Settings</string>
<!-- GSM Call settings screen, setting option name -->
@@ -369,6 +371,10 @@
<item>"1"</item>
<item>"0"</item>
</string-array>
+ <!-- Cellular network 4G title [CHAR LIMIT=30] -->
+ <string name="enhanced_4g_lte_mode_title">Enhanced 4G LTE Mode</string>
+ <!-- Cellular network 4G summary [CHAR LIMIT=80] -->
+ <string name="enhanced_4g_lte_mode_summary">Use LTE services to improve voice and other communications (recommended)</string>
<!-- Mobile network settings screen, data enabling checkbox name -->
<string name="data_enabled">Data enabled</string>
<!-- Mobile network settings screen, setting summary text when check box is not selected (explains what selecting it would do) [CHAR LIMITS=40] -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 426de7f..3a025e2 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -286,4 +286,9 @@
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
+
+ <style name="Theme.Material.Settings" parent="@android:style/Theme.Material.Settings">
+ <item name="@*android:actionBarSize">56dip</item>
+ <item name="preferenceBackgroundColor">@drawable/preference_background</item>
+ </style>
</resources>
diff --git a/res/xml/network_setting.xml b/res/xml/network_setting.xml
index 00430e8..fcd4439 100644
--- a/res/xml/network_setting.xml
+++ b/res/xml/network_setting.xml
@@ -22,13 +22,7 @@
android:title="@string/cdma_lte_data_service">
</PreferenceScreen>
- <CheckBoxPreference
- android:key="button_data_enabled_key"
- android:title="@string/data_enabled"
- android:persistent="false"
- android:summary="@string/data_enable_summary"/>
-
- <CheckBoxPreference
+ <SwitchPreference
android:key="button_roaming_key"
android:title="@string/roaming"
android:persistent="false"
@@ -51,4 +45,10 @@
android:entryValues="@array/enabled_networks_values"
android:dialogTitle="@string/preferred_network_mode_dialogtitle" />
+ <SwitchPreference
+ android:key="enhanced_4g_lte"
+ android:title="@string/enhanced_4g_lte_mode_title"
+ android:persistent="false"
+ android:summary="@string/enhanced_4g_lte_mode_summary"/>
+
</PreferenceScreen>
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
index 492ccc5..d077aa8 100644
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -16,16 +16,22 @@
package com.android.phone;
+import com.android.ims.ImsConfig;
+import com.android.ims.ImsManager;
+import com.android.ims.ImsException;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyProperties;
+import java.util.Map;
+
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.AsyncResult;
@@ -33,12 +39,15 @@
import android.os.Handler;
import android.os.Message;
import android.os.SystemProperties;
+import android.os.UserHandle;
import android.os.UserManager;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
+import android.preference.SwitchPreference;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -63,14 +72,17 @@
// debug data
private static final String LOG_TAG = "NetworkSettings";
private static final boolean DBG = true;
+ private static final String IMS_SHARED_PREFERENCES = "IMS_PREFERENCES";
+ private static final String KEY_IMS_ON = "IMS";
public static final int REQUEST_CODE_EXIT_ECM = 17;
//String keys for preference lookup
- private static final String BUTTON_DATA_ENABLED_KEY = "button_data_enabled_key";
private static final String BUTTON_PREFERED_NETWORK_MODE = "preferred_network_mode_key";
private static final String BUTTON_ROAMING_KEY = "button_roaming_key";
private static final String BUTTON_CDMA_LTE_DATA_SERVICE_KEY = "cdma_lte_data_service_key";
private static final String BUTTON_ENABLED_NETWORKS_KEY = "enabled_networks_key";
+ private static final String BUTTON_4G_LTE_KEY = "enhanced_4g_lte";
+ private static final String BUTTON_CELL_BROADCAST_SETTINGS = "cell_broadcast_settings";
static final int preferredNetworkMode = Phone.PREFERRED_NT_MODE;
@@ -82,8 +94,8 @@
//UI objects
private ListPreference mButtonPreferredNetworkMode;
private ListPreference mButtonEnabledNetworks;
- private CheckBoxPreference mButtonDataRoam;
- private CheckBoxPreference mButtonDataEnabled;
+ private SwitchPreference mButtonDataRoam;
+ private SwitchPreference mButton4glte;
private Preference mLteDataServicePref;
private static final String iface = "rmnet0"; //TODO: this will go away
@@ -114,6 +126,7 @@
}
}
+ @Override
public void onDismiss(DialogInterface dialog) {
// Assuming that onClick gets called first
if (!mOkClicked) {
@@ -129,7 +142,9 @@
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
/** TODO: Refactor and get rid of the if's using subclasses */
- if (mGsmUmtsOptions != null &&
+ if (preference.getKey().equals(BUTTON_4G_LTE_KEY)) {
+ return true;
+ } else if (mGsmUmtsOptions != null &&
mGsmUmtsOptions.preferenceTreeClick(preference) == true) {
return true;
} else if (mCdmaOptions != null &&
@@ -152,30 +167,6 @@
preferredNetworkMode);
mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode));
return true;
- } else if (preference == mButtonDataRoam) {
- if (DBG) log("onPreferenceTreeClick: preference == mButtonDataRoam.");
-
- //normally called on the toggle click
- if (mButtonDataRoam.isChecked()) {
- // First confirm with a warning dialog about charges
- mOkClicked = false;
- new AlertDialog.Builder(this).setMessage(
- getResources().getString(R.string.roaming_warning))
- .setTitle(android.R.string.dialog_alert_title)
- .setIconAttribute(android.R.attr.alertDialogIcon)
- .setPositiveButton(android.R.string.yes, this)
- .setNegativeButton(android.R.string.no, this)
- .show()
- .setOnDismissListener(this);
- } else {
- mPhone.setDataRoamingEnabled(false);
- }
- return true;
- } else if (preference == mButtonDataEnabled) {
- if (DBG) log("onPreferenceTreeClick: preference == mButtonDataEnabled.");
-
- mPhone.setDataEnabled(mButtonDataEnabled.isChecked());
- return true;
} else if (preference == mLteDataServicePref) {
String tmpl = android.provider.Settings.Global.getString(getContentResolver(),
android.provider.Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
@@ -210,8 +201,23 @@
}
}
+ public boolean isIMSOn() {
+ SharedPreferences imsPref =
+ getSharedPreferences(IMS_SHARED_PREFERENCES, Context.MODE_WORLD_READABLE);
+
+ return imsPref.getBoolean(KEY_IMS_ON, true);
+ }
+
+ private void setIMS(boolean turnOn) {
+ SharedPreferences imsPref =
+ getSharedPreferences(IMS_SHARED_PREFERENCES, Context.MODE_WORLD_READABLE);
+
+ imsPref.edit().putBoolean(KEY_IMS_ON, turnOn).commit();
+ }
+
@Override
protected void onCreate(Bundle icicle) {
+ setTheme(R.style.Theme_Material_Settings);
super.onCreate(icicle);
mPhone = PhoneGlobals.getPhone();
@@ -226,6 +232,11 @@
addPreferencesFromResource(R.xml.network_setting);
+ mButton4glte = (SwitchPreference)findPreference(BUTTON_4G_LTE_KEY);
+
+ mButton4glte.setOnPreferenceChangeListener(this);
+ mButton4glte.setChecked(isIMSOn());
+
try {
Context con = createPackageContext("com.android.systemui", 0);
int id = con.getResources().getIdentifier("config_show4GForLTE",
@@ -239,12 +250,12 @@
//get UI object references
PreferenceScreen prefSet = getPreferenceScreen();
- mButtonDataEnabled = (CheckBoxPreference) prefSet.findPreference(BUTTON_DATA_ENABLED_KEY);
- mButtonDataRoam = (CheckBoxPreference) prefSet.findPreference(BUTTON_ROAMING_KEY);
+ mButtonDataRoam = (SwitchPreference) prefSet.findPreference(BUTTON_ROAMING_KEY);
mButtonPreferredNetworkMode = (ListPreference) prefSet.findPreference(
BUTTON_PREFERED_NETWORK_MODE);
mButtonEnabledNetworks = (ListPreference) prefSet.findPreference(
BUTTON_ENABLED_NETWORKS_KEY);
+ mButtonDataRoam.setOnPreferenceChangeListener(this);
mLteDataServicePref = prefSet.findPreference(BUTTON_CDMA_LTE_DATA_SERVICE_KEY);
@@ -337,6 +348,19 @@
// android.R.id.home will be triggered in onOptionsItemSelected()
actionBar.setDisplayHomeAsUpEnabled(true);
}
+
+ final boolean isSecondaryUser = UserHandle.myUserId() != UserHandle.USER_OWNER;
+ // Enable link to CMAS app settings depending on the value in config.xml.
+ final boolean isCellBroadcastAppLinkEnabled = this.getResources().getBoolean(
+ com.android.internal.R.bool.config_cellBroadcastAppLinks);
+ if (isSecondaryUser || !isCellBroadcastAppLinkEnabled
+ || mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_CELL_BROADCASTS)) {
+ PreferenceScreen root = getPreferenceScreen();
+ Preference ps = findPreference(BUTTON_CELL_BROADCAST_SETTINGS);
+ if (ps != null) {
+ root.removePreference(ps);
+ }
+ }
}
@Override
@@ -351,8 +375,6 @@
// preferences.
getPreferenceScreen().setEnabled(true);
- mButtonDataEnabled.setChecked(mPhone.getDataEnabled());
-
// Set UI state in onResume because a user could go home, launch some
// app to change this setting's backend, and re-launch this settings app
// and the UI state would be inconsistent with actual state
@@ -462,6 +484,46 @@
mPhone.setPreferredNetworkType(modemNetworkMode, mHandler
.obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
}
+ } else if (preference == mButton4glte) {
+ ImsManager imsMan = ImsManager.getInstance(getBaseContext(),
+ SubscriptionManager.getDefaultVoiceSubId());
+ SwitchPreference ltePref = (SwitchPreference)preference;
+
+ if (imsMan != null) {
+ try {
+ if (ltePref.isChecked()) {
+ imsMan.turnOffIms();
+ } else {
+ imsMan.turnOnIms();
+ }
+ } catch(ImsException ie) {
+ ltePref.setChecked(ltePref.isChecked());
+ return false;
+ }
+ ltePref.setChecked(!ltePref.isChecked());
+ setIMS(ltePref.isChecked());
+ } else {
+ ltePref.setChecked(false);
+ }
+ } else if (preference == mButtonDataRoam) {
+ if (DBG) log("onPreferenceTreeClick: preference == mButtonDataRoam.");
+
+ //normally called on the toggle click
+ if (!mButtonDataRoam.isChecked()) {
+ // First confirm with a warning dialog about charges
+ mOkClicked = false;
+ new AlertDialog.Builder(this).setMessage(
+ getResources().getString(R.string.roaming_warning))
+ .setTitle(android.R.string.dialog_alert_title)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
+ .setPositiveButton(android.R.string.yes, this)
+ .setNegativeButton(android.R.string.no, this)
+ .show()
+ .setOnDismissListener(this);
+ } else {
+ mPhone.setDataRoamingEnabled(false);
+ }
+ return true;
}
// always let the preference setting proceed.