在設定---更多--行動網路中加入移動資料網路開關
阿新 • • 發佈:2019-01-08
- 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; }