- alps/packages/services/Telephony/res/xml/network_setting.xml
--- a/alps/packages/services/Telephony/res/xml/network_setting.xml
+++ b/alps/packages/services/Telephony/res/xml/network_setting.xml
@@ -20,7 +20,12 @@
android:key="cdma_lte_data_service_key"
android:title="@string/cdma_lte_data_service">
</PreferenceScreen>
+ <SwitchPreference
+ android:key="button_enable_data_use_mobile"
+ android:title="@string/data_enabled"
+ android:persistent="false" />
<com.android.phone.RestrictedSwitchPreference
android:key="button_roaming_key"
android:title="@string/roaming"
- alps/packages/services/Telephony/src/com/android/phone/MobileNetworkSettings.java
--- a/alps/packages/services/Telephony/src/com/android/phone/MobileNetworkSettings.java
+++ b/alps/packages/services/Telephony/src/com/android/phone/MobileNetworkSettings.java
@@ -84,7 +84,12 @@ import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabHost.TabContentFactory;
import android.widget.TabHost.TabSpec;
import android.widget.TabHost;
+import android.widget.Toast;
+import android.telecom.TelecomManager;
+import java.util.HashMap;
+import java.util.Map;
/**
* "Mobile network settings" screen. This preference screen lets you
* enable/disable mobile data, and control data roaming and other
@@ -112,6 +117,7 @@ public class MobileNetworkSettings extends PreferenceActivity implements
//String keys for preference lookup
public 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_ENABLE_DATA_USE_MOBILE = "button_enable_data_use_mobile";
private static final String BUTTON_CDMA_LTE_DATA_SERVICE_KEY = "cdma_lte_data_service_key";
public static final String BUTTON_ENABLED_NETWORKS_KEY = "enabled_networks_key";
private static final String BUTTON_4G_LTE_KEY = "enhanced_4g_lte";
@@ -135,6 +141,7 @@ public class MobileNetworkSettings extends PreferenceActivity implements
private ListPreference mButtonPreferredNetworkMode;
private ListPreference mButtonEnabledNetworks;
private RestrictedSwitchPreference mButtonDataRoam;
+ private SwitchPreference mButtonEnableDataUse;
private SwitchPreference mButton4glte;
private Preference mLteDataServicePref;
@@ -161,6 +168,9 @@ public class MobileNetworkSettings extends PreferenceActivity implements
/// Add for C2K OM features
private CdmaNetworkSettings mCdmaNetworkSettings;
+ private int simCurrentTab;
+ private List<SubscriptionInfo> mSubInfoList;
+
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
/*
* Enable/disable the 'Enhanced 4G LTE Mode' when in/out of a call
@@ -291,6 +301,9 @@ public class MobileNetworkSettings extends PreferenceActivity implements
} else if (preference == mButtonDataRoam) {
// Do not disable the preference screen if the user clicks Data roaming.
return true;
+ } else if (preference == mButtonEnableDataUse) {
+ // Do not disable the preference screen if the user clicks Data roaming.
+ return true;
} else {
// if the button is anything but the simple toggle preference,
// we'll need to disable all preferences to reject all click
@@ -515,6 +528,11 @@ public class MobileNetworkSettings extends PreferenceActivity implements
BUTTON_ENABLED_NETWORKS_KEY);
mButtonDataRoam.setOnPreferenceChangeListener(this);
+ mButtonEnableDataUse = (SwitchPreference)prefSet.findPreference(BUTTON_ENABLE_DATA_USE_MOBILE);
+ mButtonEnableDataUse.setOnPreferenceChangeListener(this);
+ mSubInfoList = mSubscriptionManager.getActiveSubscriptionInfoList();
+
mLteDataServicePref = prefSet.findPreference(BUTTON_CDMA_LTE_DATA_SERVICE_KEY);
// Initialize mActiveSubInfo
@@ -648,6 +666,7 @@ public class MobileNetworkSettings extends PreferenceActivity implements
prefSet.addPreference(mButtonPreferredNetworkMode);
prefSet.addPreference(mButtonEnabledNetworks);
prefSet.addPreference(mButton4glte);
+ prefSet.addPreference(mButtonEnableDataUse);
}
int settingsNetworkMode = android.provider.Settings.Global.getInt(
@@ -864,6 +883,8 @@ public class MobileNetworkSettings extends PreferenceActivity implements
// Get the networkMode from Settings.System and displays it
mButtonDataRoam.setChecked(mPhone.getDataRoamingEnabled());
+ mButtonEnableDataUse.setChecked(isMobileDataEnabled(phoneSubId));
+
mButtonEnabledNetworks.setValue(Integer.toString(settingsNetworkMode));
mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode));
UpdatePreferredNetworkModeSummary(settingsNetworkMode);
@@ -957,7 +978,79 @@ public class MobileNetworkSettings extends PreferenceActivity implements
.removeOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
if (DBG) log("onPause:-");
}*/
+/
+ /**
+ * Local cache of value, used to work around delay when
+ * {@link ConnectivityManager#setMobileDataEnabled(boolean)} is async.
+ */
+ private final Map<String, Boolean> mMobileDataEnabled = new HashMap<String, Boolean>();
+ private void setMobileDataEnabled(int subId, boolean enabled) {
+ mTelephonyManager.setDataEnabled(subId, enabled);
+ mMobileDataEnabled.put(String.valueOf(subId), enabled);
+ }
+
+ private boolean isMobileDataEnabled(int subId) {
+ boolean isEnable = false;
+ if (mMobileDataEnabled.get(String.valueOf(subId)) != null) {
+ isEnable = mMobileDataEnabled.get(String.valueOf(subId)).booleanValue();
+ } else {
+ // SUB SELECT
+ isEnable = mTelephonyManager.getDataEnabled(subId);
+ }
+ return isEnable;
+ }
+
+
+ /**
+ * Remember to check {@link #mDataEnabledListener} onClick method, keep sync
+ */
+ private void handleDataEnableViewClick(int subId) {
+ final boolean dataEnabled = !mButtonEnableDataUse.isChecked();
+ if (dataEnabled) {
+ handleMultiSimDataDialog(subId);
+ } else {
+ setMobileDataEnabled(subId,false);
+ }
+ updateBody();
+ }
+
+ private void handleMultiSimDataDialog(int subId) {
+ final Context context = getApplicationContext();
+ final SubscriptionInfo currentSir = mSubscriptionManager
+ .getActiveSubscriptionInfoForSimSlotIndex(simCurrentTab);
+
+ //If sim has not loaded after toggling data switch, return.
+ if (currentSir == null) {
+ return;
+ }
+
+ final SubscriptionInfo nextSir = mSubscriptionManager.getDefaultDataSubscriptionInfo();
+
+ if (nextSir != null && currentSir != null && currentSir.getSubscriptionId() == nextSir.getSubscriptionId()) {
+ setMobileDataEnabled(currentSir.getSubscriptionId(), true);
+ disableDataForOtherSubscriptions(currentSir);
+ updateBody();
+ return;
+ }
+ mSubscriptionManager.setDefaultDataSubId(currentSir.getSubscriptionId());
+ setMobileDataEnabled(currentSir.getSubscriptionId(), true);
+ disableDataForOtherSubscriptions(currentSir);
+ updateBody();
+ }
+
+ private void disableDataForOtherSubscriptions(SubscriptionInfo currentSir) {
+ if (mSubInfoList != null) {
+ for (SubscriptionInfo subInfo : mSubInfoList) {
+ if (subInfo.getSubscriptionId() != currentSir.getSubscriptionId()) {
+ setMobileDataEnabled(subInfo.getSubscriptionId(), false);
+ }
+ }
+ }
+ }
+
/**
* Implemented to support onPreferenceChangeListener to look for preference
* changes specifically on CLIR.
@@ -1123,6 +1216,9 @@ public class MobileNetworkSettings extends PreferenceActivity implements
mPhone.setDataRoamingEnabled(false);
}
return true;
+ }else if (preference == mButtonEnableDataUse) {
+ handleDataEnableViewClick(phoneSubId);
+ return true;
}
/// Add for Plug-in @{
@@ -2024,6 +2120,7 @@ public class MobileNetworkSettings extends PreferenceActivity implements
log("convertTabToSlot: info size=" + mActiveSubInfos.size() +
" currentTab=" + currentTab + " slotId=" + slotId);
}
+ simCurrentTab = slotId;
return slotId;
}