Merge "DO NOT MERGE show correct backup status" into mnc-dev
diff --git a/res/drawable-hdpi/setup_illustration_wifi.jpg b/res/drawable-hdpi/setup_illustration_wifi.jpg
index f2b9c6a..2e7241d 100644
--- a/res/drawable-hdpi/setup_illustration_wifi.jpg
+++ b/res/drawable-hdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-mdpi/setup_illustration_wifi.jpg b/res/drawable-mdpi/setup_illustration_wifi.jpg
index 7f5e788..4a9b8a5 100644
--- a/res/drawable-mdpi/setup_illustration_wifi.jpg
+++ b/res/drawable-mdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/setup_illustration_wifi.jpg b/res/drawable-xhdpi/setup_illustration_wifi.jpg
index 19478aa..c03f4dd 100644
--- a/res/drawable-xhdpi/setup_illustration_wifi.jpg
+++ b/res/drawable-xhdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-xxhdpi/setup_illustration_wifi.jpg b/res/drawable-xxhdpi/setup_illustration_wifi.jpg
index a28052b..e0791cd 100644
--- a/res/drawable-xxhdpi/setup_illustration_wifi.jpg
+++ b/res/drawable-xxhdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable-xxxhdpi/setup_illustration_wifi.jpg b/res/drawable-xxxhdpi/setup_illustration_wifi.jpg
index f2187cb..62352d3 100644
--- a/res/drawable-xxxhdpi/setup_illustration_wifi.jpg
+++ b/res/drawable-xxxhdpi/setup_illustration_wifi.jpg
Binary files differ
diff --git a/res/layout/setup_wifi_mac_address.xml b/res/layout/setup_wifi_mac_address.xml
index 8f5703b..60f3212 100644
--- a/res/layout/setup_wifi_mac_address.xml
+++ b/res/layout/setup_wifi_mac_address.xml
@@ -21,7 +21,8 @@
     android:gravity="center_vertical"
     android:orientation="vertical"
     android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:textDirection="locale">
 
     <TextView
         android:layout_width="match_parent"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3a7e6ac..b1628d9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2993,7 +2993,7 @@
     <!-- Manage applications, individual application info screen, section heading for stuff relating to an app's storage settings. -->
     <string name="storage_label">Storage</string>
     <!-- Manage applications, individual application info screen,  heading for settings related to controlling whether this app is the default for some actions -->
-    <string name="auto_launch_label">Launch by default</string>
+    <string name="auto_launch_label">Open by default</string>
     <!-- Manage applications, individual application info screen,  heading for settings related to controlling whether this app is the default for some actions *and* whether the app was given permission by the user to create widgets -->
     <string name="auto_launch_label_generic">Defaults</string>
     <!-- Manage applications, individual application info screen,  heading for settings related to controlling application screen compatibility -->
@@ -6379,16 +6379,16 @@
 
    <!-- New strings needed for App Info 2 -->
    <!-- Preference label for app default launch settings [CHAR LIMIT=35]-->
-   <string name="launch_by_default">Launch by default</string>
+   <string name="launch_by_default">Open by default</string>
 
    <!-- Summary for app storage preference [CHAR LIMIT=15] -->
    <string name="storage_summary_format"><xliff:g id="size" example="30.00MB">%1$s</xliff:g> used in <xliff:g id="storage_type" example="internal storage">%2$s</xliff:g></string>
 
    <!-- Category name for App Launch -->
-   <string name="app_launch_domain_links_title">Domain links</string>
-   <string name="app_launch_open_domain_urls_title">Open Domain URLs</string>
-   <string name="app_launch_open_domain_urls_summary">Allow app to directly open Domain URLs</string>
-   <string name="app_launch_supported_domain_urls_title">Supported domains URLs</string>
+   <string name="app_launch_domain_links_title">App links</string>
+   <string name="app_launch_open_domain_urls_title">Open supported links</string>
+   <string name="app_launch_open_domain_urls_summary">Open without asking</string>
+   <string name="app_launch_supported_domain_urls_title">Supported links</string>
    <string name="app_launch_other_defaults_title">Other defaults</string>
 
    <!-- Summary for app storage preference -->
@@ -6492,22 +6492,22 @@
    <string name="tap_to_wake_summary">Double-tap anywhere on the screen to wake device</string>
 
     <!-- Label for the Domain URLs list that shows domain urls per App [CHAR LIMIT=30] -->
-    <string name="domain_urls_title">Domain URLs</string>
+    <string name="domain_urls_title">App links</string>
 
     <!-- Summary for an App that dont open any domain URLs [CHAR LIMIT=45] -->
-    <string name="domain_urls_summary_none">Don\u2019t open any domain URL</string>
+    <string name="domain_urls_summary_none">Don\u2019t open supported links</string>
 
     <!-- Summary of number of App that can open one and only one domain URLs [CHAR LIMIT=45] -->
-    <string name="domain_urls_summary_one">Open \u2018<xliff:g id="domain" example="mail.google.com">%s</xliff:g>\u2019</string>
+    <string name="domain_urls_summary_one">Open <xliff:g id="domain" example="mail.google.com">%s</xliff:g></string>
 
     <!-- Summary of number of App that can open several domain URLs [CHAR LIMIT=45] -->
-    <string name="domain_urls_summary_some">Open \u2018<xliff:g id="domain" example="mail.google.com">%s</xliff:g>\u2019 and related URLs</string>
+    <string name="domain_urls_summary_some">Open <xliff:g id="domain" example="mail.google.com">%s</xliff:g> and related URLs</string>
 
     <!-- Description of settings item that leads to list of all apps with Domain URLs [CHAR LIMIT=NONE] -->
     <plurals name="domain_urls_apps_summary">
-        <item quantity="zero">No app can open any domain URL</item>
-        <item quantity="one">One app can open its domain URLs</item>
-        <item quantity="other"><xliff:g id="count" example="10">%d</xliff:g> apps can open their domain URLs</item>
+        <item quantity="zero">No app can open any supported link</item>
+        <item quantity="one">One app can open its supported links</item>
+        <item quantity="other"><xliff:g id="count" example="10">%d</xliff:g> apps can open their supported links</item>
     </plurals>
 
     <!-- Fingerprint hint message when finger was not recognized.-->
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index a9ca053..a24da21 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -65,6 +65,14 @@
         android:persistent="false"
         android:title="@string/system_ui_settings" />
 
+    <ListPreference
+        android:key="night_mode"
+        android:title="@string/night_mode_title"
+        android:summary="@string/night_mode_summary"
+        android:persistent="false"
+        android:entries="@array/night_mode_entries"
+        android:entryValues="@array/night_mode_values" />
+
     <PreferenceCategory android:key="debug_debugging_category"
             android:title="@string/debug_debugging_category">
 
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index 304a77b..e04d818 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -33,6 +33,7 @@
                 android:summary="@string/auto_brightness_summary"
                 android:persistent="false" />
 
+        <!-- Hide night mode for now
         <ListPreference
             android:key="night_mode"
             android:title="@string/night_mode_title"
@@ -40,7 +41,7 @@
             android:summary="@string/night_mode_summary"
             android:persistent="false"
             android:entries="@array/night_mode_entries"
-            android:entryValues="@array/night_mode_values" />
+            android:entryValues="@array/night_mode_values" /> -->
 
         <PreferenceScreen
                 android:key="wallpaper"
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 1ef1dd9..4e9089d 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -23,6 +23,7 @@
 import android.app.AppOpsManager;
 import android.app.AppOpsManager.PackageOps;
 import android.app.Dialog;
+import android.app.UiModeManager;
 import android.app.admin.DevicePolicyManager;
 import android.app.backup.IBackupManager;
 import android.bluetooth.BluetoothAdapter;
@@ -76,10 +77,8 @@
 import com.android.settings.fuelgauge.InactiveApps;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
-import com.android.settings.users.UserDetailsSettings;
 import com.android.settings.widget.SwitchBar;
 
-import java.lang.Process;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
@@ -181,6 +180,8 @@
 
     private static final String TERMINAL_APP_PACKAGE = "com.android.terminal";
 
+    private static final String KEY_NIGHT_MODE = "night_mode";
+
     private static final int RESULT_DEBUG_APP = 1000;
     private static final int RESULT_MOCK_LOCATION_APP = 1001;
 
@@ -264,6 +265,8 @@
 
     private SwitchPreference mShowAllANRs;
 
+    private ListPreference mNightModePreference;
+
     private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
 
     private final ArrayList<SwitchPreference> mResetSwitchPrefs
@@ -423,6 +426,13 @@
             mAllPrefs.add(hdcpChecking);
             removePreferenceForProduction(hdcpChecking);
         }
+
+        mNightModePreference = (ListPreference) findPreference(KEY_NIGHT_MODE);
+        final UiModeManager uiManager = (UiModeManager) getSystemService(
+                Context.UI_MODE_SERVICE);
+        final int currentNightMode = uiManager.getNightMode();
+        mNightModePreference.setValue(String.valueOf(currentNightMode));
+        mNightModePreference.setOnPreferenceChangeListener(this);
     }
 
     private ListPreference addListPreference(String prefKey) {
@@ -1798,6 +1808,16 @@
         } else if (preference == mTunerUiPref) {
             writeTweakUi(newValue);
             return true;
+        } else if (preference == mNightModePreference) {
+            try {
+                final int value = Integer.parseInt((String) newValue);
+                final UiModeManager uiManager = (UiModeManager) getSystemService(
+                        Context.UI_MODE_SERVICE);
+                uiManager.setNightMode(value);
+            } catch (NumberFormatException e) {
+                Log.e(TAG, "could not persist night mode setting", e);
+            }
+            return true;
         }
         return false;
     }
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index d9b6447..e0a3489 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -185,11 +185,13 @@
         }
 
         mNightModePreference = (ListPreference) findPreference(KEY_NIGHT_MODE);
-        final UiModeManager uiManager = (UiModeManager) getSystemService(
-                Context.UI_MODE_SERVICE);
-        final int currentNightMode = uiManager.getNightMode();
-        mNightModePreference.setValue(String.valueOf(currentNightMode));
-        mNightModePreference.setOnPreferenceChangeListener(this);
+        if (mNightModePreference != null) {
+            final UiModeManager uiManager = (UiModeManager) getSystemService(
+                    Context.UI_MODE_SERVICE);
+            final int currentNightMode = uiManager.getNightMode();
+            mNightModePreference.setValue(String.valueOf(currentNightMode));
+            mNightModePreference.setOnPreferenceChangeListener(this);
+        }
     }
 
     private static boolean allowAllRotations(Context context) {
diff --git a/src/com/android/settings/fingerprint/FingerprintSettings.java b/src/com/android/settings/fingerprint/FingerprintSettings.java
index 56f3ff6..0c45cd9 100644
--- a/src/com/android/settings/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/fingerprint/FingerprintSettings.java
@@ -127,7 +127,6 @@
 
         private FingerprintManager mFingerprintManager;
         private EditText mDialogTextField;
-        private PreferenceGroup mManageCategory;
         private CancellationSignal mFingerprintCancel;
         private int mMaxFingerprintAttempts;
         private byte[] mToken;
@@ -148,7 +147,7 @@
             @Override
             public void onAuthenticationError(int errMsgId, CharSequence errString) {
                 // get activity will be null on a screen rotation
-                Activity activity = getActivity();
+                final Activity activity = getActivity();
                 if (activity != null) {
                     Toast.makeText(activity, errString, Toast.LENGTH_SHORT);
                 }
@@ -159,7 +158,10 @@
 
             @Override
             public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
-                Toast.makeText(getActivity(), helpString, Toast.LENGTH_SHORT);
+                final Activity activity = getActivity();
+                if (activity != null) {
+                    Toast.makeText(activity, helpString, Toast.LENGTH_SHORT);
+                }
             }
         };
         private RemovalCallback mRemoveCallback = new RemovalCallback() {
@@ -172,7 +174,10 @@
 
             @Override
             public void onRemovalError(Fingerprint fp, int errMsgId, CharSequence errString) {
-                Toast.makeText(getActivity(), errString, Toast.LENGTH_SHORT);
+                final Activity activity = getActivity();
+                if (activity != null) {
+                    Toast.makeText(activity, errString, Toast.LENGTH_SHORT);
+                }
             }
         };
         private final Handler mHandler = new Handler() {
@@ -186,7 +191,7 @@
                         retryFingerprint(true);
                     break;
                     case MSG_FINGER_AUTH_FAIL:
-                        retryFingerprint(false);
+                        retryFingerprint(true);
                     break;
                 }
             };
@@ -440,29 +445,33 @@
 
         private Drawable getHighlightDrawable() {
             if (mHighlightDrawable == null) {
-                mHighlightDrawable = getActivity().getDrawable(R.drawable.preference_highlight);
+                final Activity activity = getActivity();
+                if (activity != null) {
+                    mHighlightDrawable = activity.getDrawable(R.drawable.preference_highlight);
+                }
             }
             return mHighlightDrawable;
         }
 
         private void highlightFingerprintItem(int fpId) {
             String prefName = genKey(fpId);
-            FingerprintPreference fpref =
-                    (FingerprintPreference) mManageCategory.findPreference(prefName);
+            FingerprintPreference fpref = (FingerprintPreference) findPreference(prefName);
             final Drawable highlight = getHighlightDrawable();
-            final View view = fpref.getView();
-            final int centerX = view.getWidth() / 2;
-            final int centerY = view.getHeight() / 2;
-            highlight.setHotspot(centerX, centerY);
-            view.setBackground(highlight);
-            view.setPressed(true);
-            mHandler.postDelayed(new Runnable() {
-                @Override
-                public void run() {
-                    view.setPressed(false);
-                    view.setBackground(null);
-                }
-            }, RESET_HIGHLIGHT_DELAY_MS);
+            if (highlight != null) {
+                final View view = fpref.getView();
+                final int centerX = view.getWidth() / 2;
+                final int centerY = view.getHeight() / 2;
+                highlight.setHotspot(centerX, centerY);
+                view.setBackground(highlight);
+                view.setPressed(true);
+                mHandler.postDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        view.setPressed(false);
+                        view.setBackground(null);
+                    }
+                }, RESET_HIGHLIGHT_DELAY_MS);
+            }
         }
 
         private void launchChooseOrConfirmLock() {