Merge "[FRP] Show FRP warning when disabling secure unlock" into lmp-mr1-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1162273..6647c6a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5545,8 +5545,6 @@
     <string name="sim_no_inserted_msg">No SIM cards inserted</string>
     <!-- SIM status title  [CHAR LIMIT=40] -->
     <string name="sim_status_title">SIM status</string>
-    <!-- SIM status summary [CHAR LIMIT=60] -->
-    <string name="sim_status_summary">SIM related information</string>
     <!-- Title for call back. [CHAR LIMIT=60] -->
     <string name="sim_call_back_title">Call back from default SIM</string>
     <!-- Title for outgoing back. [CHAR LIMIT=60] -->
@@ -5978,8 +5976,6 @@
     <!-- Title and summary for SIM Status -->
     <!-- Title for IMEI preference [CHAR LIMIT=30] -->
     <string name="imei_information_title">IMEI information</string>
-    <!-- Description for IMEI preference [CHAR LIMIT=40] -->
-    <string name="imei_information_summary">IMEI relative information</string>
 
     <!-- Encryption interstitial title [CHAR LIMIT=30] -->
     <string name="encryption_interstitial_header">Encryption</string>
diff --git a/res/xml/device_info_status.xml b/res/xml/device_info_status.xml
index 26b067b..fc6016f 100644
--- a/res/xml/device_info_status.xml
+++ b/res/xml/device_info_status.xml
@@ -29,14 +29,12 @@
         android:persistent="false" />
     <PreferenceScreen android:key="sim_status"
         android:title="@string/sim_status_title"
-        android:summary="@string/sim_status_summary"
         android:persistent="false">
         <intent android:targetPackage="com.android.settings"
             android:targetClass="com.android.settings.deviceinfo.SimStatus" />
     </PreferenceScreen>
     <PreferenceScreen android:key="imei_info"
         android:title="@string/imei_information_title"
-        android:summary="@string/imei_information_summary"
         android:persistent="false">
         <intent android:targetPackage="com.android.settings"
             android:targetClass="com.android.settings.deviceinfo.ImeiInformation" />
diff --git a/res/xml/sim_lock_settings.xml b/res/xml/sim_lock_settings.xml
index 0e43fcd..0246ea2 100644
--- a/res/xml/sim_lock_settings.xml
+++ b/res/xml/sim_lock_settings.xml
@@ -17,8 +17,8 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
         android:title="@string/sim_lock_settings">
-    
-    <CheckBoxPreference
+
+    <SwitchPreference
             android:key="sim_toggle"
             android:title="@string/sim_pin_toggle"
             android:summaryOn="@string/sim_lock_on"
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index a0a237d..58208fa 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -140,6 +140,7 @@
 import com.android.settings.sim.SimSettings;
 import com.android.settings.widget.ChartDataUsageView;
 import com.android.settings.widget.ChartDataUsageView.DataUsageChartListener;
+import com.android.settings.widget.ChartNetworkSeriesView;
 import com.google.android.collect.Lists;
 
 import libcore.util.Objects;
@@ -209,6 +210,8 @@
     private ViewGroup mTabsContainer;
     private TabWidget mTabWidget;
     private ListView mListView;
+    private ChartNetworkSeriesView mSeries;
+    private ChartNetworkSeriesView mDetailedSeries;
     private DataUsageAdapter mAdapter;
 
     /** Distance to inset content from sides, when needed. */
@@ -400,6 +403,8 @@
             mCycleSpinner.setOnItemSelectedListener(mCycleListener);
             mCycleSummary = (TextView) mCycleView.findViewById(R.id.cycle_summary);
             mNetworkSwitches.addView(mCycleView);
+            mSeries = (ChartNetworkSeriesView)view.findViewById(R.id.series);
+            mDetailedSeries = (ChartNetworkSeriesView)view.findViewById(R.id.detail_series);
         }
 
         mChart = (ChartDataUsageView) mHeader.findViewById(R.id.chart);
@@ -658,16 +663,17 @@
         final Context context = getActivity();
         mTabHost.clearAllTabs();
 
-        final boolean mobileSplit = isMobilePolicySplit();
-        if (mobileSplit && hasReadyMobile4gRadio(context)) {
-            mTabHost.addTab(buildTabSpec(TAB_3G, R.string.data_usage_tab_3g));
-            mTabHost.addTab(buildTabSpec(TAB_4G, R.string.data_usage_tab_4g));
-        } else if (hasReadyMobileRadio(context)) {
-            addMobileTab(context, mSubInfoList);
+        for (int i = 0; i < mTelephonyManager.getSimCount(); i++) {
+            final SubscriptionInfo sir = Utils.findRecordBySlotId(context, i);
+            if (sir != null) {
+                addMobileTab(context, sir);
+            }
         }
+
         if (mShowWifi && hasWifiRadio(context)) {
             mTabHost.addTab(buildTabSpec(TAB_WIFI, R.string.data_usage_tab_wifi));
         }
+
         if (mShowEthernet && hasEthernet(context)) {
             mTabHost.addTab(buildTabSpec(TAB_ETHERNET, R.string.data_usage_tab_ethernet));
         }
@@ -736,6 +742,7 @@
         if (!isAdded()) return;
 
         final Context context = getActivity();
+        final Resources resources = context.getResources();
         final String currentTab = mTabHost.getCurrentTabTag();
         final boolean isOwner = ActivityManager.getCurrentUser() == UserHandle.USER_OWNER;
 
@@ -799,6 +806,21 @@
         getActivity().invalidateOptionsMenu();
 
         mBinding = false;
+
+        int seriesColor = resources.getColor(R.color.sim_noitification);
+        if (mCurrentTab != null && mCurrentTab.length() > TAB_MOBILE.length() ){
+            final int slotId = Integer.parseInt(mCurrentTab.substring(TAB_MOBILE.length(),
+                    mCurrentTab.length()));
+            final SubscriptionInfo sir = com.android.settings.Utils.findRecordBySlotId(context,
+                    slotId);
+
+            if (sir != null) {
+                seriesColor = sir.getIconTint();
+            }
+        }
+
+        mSeries.setChartColor(Color.BLACK, seriesColor, seriesColor);
+        mDetailedSeries.setChartColor(Color.BLACK, seriesColor, seriesColor);
     }
 
     private boolean isAppDetailMode() {
@@ -2588,13 +2610,11 @@
             }
         };
 
-        private void addMobileTab(Context context, List<SubscriptionInfo> subInfoList) {
-            if (subInfoList != null && mMobileTagMap != null) {
-                for (SubscriptionInfo subInfo : mSubInfoList) {
-                    if (hasReadyMobileRadio(context, subInfo.getSubscriptionId())) {
-                        mTabHost.addTab(buildTabSpec(mMobileTagMap.get(subInfo.getSubscriptionId()),
-                                subInfo.getDisplayName()));
-                    }
+        private void addMobileTab(Context context, SubscriptionInfo subInfo) {
+            if (subInfo != null && mMobileTagMap != null) {
+                if (hasReadyMobileRadio(context, subInfo.getSubscriptionId())) {
+                    mTabHost.addTab(buildTabSpec(mMobileTagMap.get(subInfo.getSubscriptionId()),
+                            subInfo.getDisplayName()));
                 }
             }
         }
@@ -2620,13 +2640,17 @@
          * @return The map or null if no activated subscription
          */
         private Map<Integer, String> initMobileTabTag(List<SubscriptionInfo> subInfoList) {
+            final Context context = getActivity();
             Map<Integer, String> map = null;
             if (subInfoList != null) {
                 String mobileTag;
                 map = new HashMap<Integer, String>();
-                for (SubscriptionInfo subInfo : subInfoList) {
-                    mobileTag = TAB_MOBILE + String.valueOf(subInfo.getSubscriptionId());
-                    map.put(subInfo.getSubscriptionId(), mobileTag);
+                for (int i = 0; i < mTelephonyManager.getSimCount(); i++) {
+                    final SubscriptionInfo subInfo = Utils.findRecordBySlotId(context, i);
+                    mobileTag = TAB_MOBILE + i;
+                    if (subInfo != null) {
+                        map.put(subInfo.getSubscriptionId(), mobileTag);
+                    }
                 }
             }
             return map;
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index cfe27bb..5201375 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -25,10 +25,10 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
-import android.preference.CheckBoxPreference;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
+import android.preference.SwitchPreference;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
@@ -106,7 +106,7 @@
     private Phone mPhone;
 
     private EditPinPreference mPinDialog;
-    private CheckBoxPreference mPinToggle;
+    private SwitchPreference mPinToggle;
 
     private Resources mRes;
 
@@ -173,7 +173,7 @@
         addPreferencesFromResource(R.xml.sim_lock_settings);
 
         mPinDialog = (EditPinPreference) findPreference(PIN_DIALOG);
-        mPinToggle = (CheckBoxPreference) findPreference(PIN_TOGGLE);
+        mPinToggle = (SwitchPreference) findPreference(PIN_TOGGLE);
         if (savedInstanceState != null && savedInstanceState.containsKey(DIALOG_STATE)) {
             mDialogState = savedInstanceState.getInt(DIALOG_STATE);
             mPin = savedInstanceState.getString(DIALOG_PIN);
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index fe45299..858880b 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -91,20 +91,20 @@
                         new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
-                        // TODO: We need an API to remove an account from a different user.
-                        // See: http://b/15466880
-                        AccountManager.get(AccountSyncSettings.this.getActivity())
-                                .removeAccountAsUser(mAccount,
-                                new AccountManagerCallback<Boolean>() {
+                        Activity activity = getActivity();
+                        AccountManager.get(activity)
+                                .removeAccountAsUser(mAccount, activity,
+                                new AccountManagerCallback<Bundle>() {
                             @Override
-                            public void run(AccountManagerFuture<Boolean> future) {
+                            public void run(AccountManagerFuture<Bundle> future) {
                                 // If already out of this screen, don't proceed.
                                 if (!AccountSyncSettings.this.isResumed()) {
                                     return;
                                 }
                                 boolean failed = true;
                                 try {
-                                    if (future.getResult() == true) {
+                                    if (future.getResult()
+                                            .getBoolean(AccountManager.KEY_BOOLEAN_RESULT)) {
                                         failed = false;
                                     }
                                 } catch (OperationCanceledException e) {
diff --git a/src/com/android/settings/deviceinfo/SimStatus.java b/src/com/android/settings/deviceinfo/SimStatus.java
index 11daf0c..2afdb84 100644
--- a/src/com/android/settings/deviceinfo/SimStatus.java
+++ b/src/com/android/settings/deviceinfo/SimStatus.java
@@ -22,6 +22,8 @@
 import android.content.IntentFilter;
 import android.content.res.Resources;
 import android.os.Bundle;
+import android.os.ServiceManager;
+import android.os.RemoteException;
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.preference.Preference;
@@ -34,9 +36,11 @@
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
+import android.provider.Telephony;
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.internal.telephony.ITelephony;
 import com.android.internal.telephony.DefaultPhoneNotifier;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
@@ -232,11 +236,18 @@
     private void updateNetworkType() {
         // Whether EDGE, UMTS, etc...
         String networktype = null;
-        if (TelephonyManager.NETWORK_TYPE_UNKNOWN
-                != mTelephonyManager.getNetworkType(mSir.getSubscriptionId())) {
-            networktype = mTelephonyManager.getNetworkTypeName(
-                    mTelephonyManager.getNetworkType(mSir.getSubscriptionId()));
+        final ITelephony telephony = ITelephony.Stub.asInterface(
+                ServiceManager.getService(Context.TELEPHONY_SERVICE));
+        try {
+            final int actualNetworkType = telephony.getVoiceNetworkTypeForSubscriber(
+                    mSir.getSubscriptionId());
+            if (TelephonyManager.NETWORK_TYPE_UNKNOWN != actualNetworkType) {
+                networktype = mTelephonyManager.getNetworkTypeName(actualNetworkType);
+            }
+        } catch (RemoteException remoteException){
+            // Do nothing, networkType will remain null.
         }
+
         setSummaryText(KEY_NETWORK_TYPE, networktype);
     }
 
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index e6dd9c7..b00faf1 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -307,7 +307,8 @@
             }
         }
 
-        if (mEdit || (mAccessPoint.getState() == null && mAccessPoint.getLevel() != -1)){
+        if ((mEdit) || (mAccessPoint != null
+                && mAccessPoint.getState() == null && mAccessPoint.getLevel() != -1)){
             mConfigUi.setCancelButton(res.getString(R.string.wifi_cancel));
         }else{
             mConfigUi.setCancelButton(res.getString(R.string.wifi_display_options_done));
diff --git a/src/com/android/settings/wifi/WifiSetupActivity.java b/src/com/android/settings/wifi/WifiSetupActivity.java
index 1d0e824..a036bae 100644
--- a/src/com/android/settings/wifi/WifiSetupActivity.java
+++ b/src/com/android/settings/wifi/WifiSetupActivity.java
@@ -239,7 +239,7 @@
             return new AlertDialog.Builder(getActivity())
                     .setMessage(messageRes)
                     .setCancelable(false)
-                    .setNegativeButton(R.string.wifi_skip_anyway,
+                    .setPositiveButton(R.string.wifi_skip_anyway,
                             new DialogInterface.OnClickListener() {
                         @Override
                         public void onClick(DialogInterface dialog, int id) {
@@ -247,7 +247,7 @@
                             activity.finishOrNext(RESULT_SKIP);
                         }
                     })
-                    .setPositiveButton(R.string.wifi_dont_skip,
+                    .setNegativeButton(R.string.wifi_dont_skip,
                             new DialogInterface.OnClickListener() {
                         @Override
                         public void onClick(DialogInterface dialog, int id) {