在设置---更多--移动网络中加入移动数据网络开关

  • 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;
     }


猜你喜欢

转载自blog.csdn.net/jydzm/article/details/85776973