Merge "Fix a crash in battery settings page" into qt-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 603900c..764e1d2 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -436,6 +436,17 @@
                 android:value="com.android.settings.biometrics.face.FaceSettings" />
         </activity>
 
+        <activity android:name="Settings$FingerprintSettingsActivity"
+                  android:label="@string/security_settings_fingerprint_preference_title"
+                  android:icon="@drawable/ic_fingerprint_header">
+            <intent-filter>
+                <action android:name="android.settings.FINGERPRINT_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                       android:value="com.android.settings.biometrics.fingerprint.FingerprintSettings$FingerprintSettingsFragment" />
+        </activity>
+
         <activity android:name=".bluetooth.DevicePickerActivity"
                 android:label="@string/device_picker"
                 android:configChanges="orientation|keyboardHidden|screenSize"
diff --git a/res/drawable-nodpi/accessibility_timeout b/res/drawable-nodpi/accessibility_timeout
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/res/drawable-nodpi/accessibility_timeout
diff --git a/res/raw/accessibility_timeout.mp4 b/res/raw/accessibility_timeout.mp4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/res/raw/accessibility_timeout.mp4
diff --git a/res/xml/accessibility_content_timeout_settings.xml b/res/xml/accessibility_content_timeout_settings.xml
index 2d9072b..ea8d88a 100644
--- a/res/xml/accessibility_content_timeout_settings.xml
+++ b/res/xml/accessibility_content_timeout_settings.xml
@@ -25,8 +25,8 @@
     <com.android.settings.widget.VideoPreference
         android:key="accessibility_content_timeout_video"
         android:title="@string/summary_placeholder"
-        settings:animation="@raw/gesture_swipe_up"
-        settings:preview="@drawable/gesture_swipe_up"
+        settings:animation="@raw/accessibility_timeout"
+        settings:preview="@drawable/accessibility_timeout"
         settings:controller="com.android.settings.widget.VideoPreferenceController"
         android:persistent="false" />
 
diff --git a/res/xml/accessibility_control_timeout_settings.xml b/res/xml/accessibility_control_timeout_settings.xml
index ea8d8c6..e5a6e5b 100644
--- a/res/xml/accessibility_control_timeout_settings.xml
+++ b/res/xml/accessibility_control_timeout_settings.xml
@@ -25,8 +25,8 @@
     <com.android.settings.widget.VideoPreference
         android:key="accessibility_control_timeout_video"
         android:title="@string/summary_placeholder"
-        settings:animation="@raw/gesture_swipe_up"
-        settings:preview="@drawable/gesture_swipe_up"
+        settings:animation="@raw/accessibility_timeout"
+        settings:preview="@drawable/accessibility_timeout"
         settings:controller="com.android.settings.widget.VideoPreferenceController"
         android:persistent="false" />
 
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 4cc2f44..f6fe0c2 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -32,6 +32,7 @@
     public static class BluetoothSettingsActivity extends SettingsActivity { /* empty */ }
     public static class CreateShortcutActivity extends SettingsActivity { /* empty */ }
     public static class FaceSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class FingerprintSettingsActivity extends SettingsActivity { /* empty */ }
     public static class SimSettingsActivity extends SettingsActivity { /* empty */ }
     public static class TetherSettingsActivity extends SettingsActivity { /* empty */ }
     public static class WifiTetherSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
index b8ec103..02b0723 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
@@ -30,9 +30,11 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.biometrics.BiometricEnrollBase;
+import com.android.settings.password.ChooseLockSettingsHelper;
 
 import com.google.android.setupcompat.template.FooterBarMixin;
 import com.google.android.setupcompat.template.FooterButton;
+import com.google.android.setupcompat.util.WizardManagerHelper;
 
 /**
  * Activity which concludes fingerprint enrollment.
@@ -40,6 +42,8 @@
 public class FingerprintEnrollFinish extends BiometricEnrollBase {
 
     private static final String TAG = "FingerprintEnrollFinish";
+    private static final String ACTION_FINGERPRINT_SETTINGS =
+            "android.settings.FINGERPRINT_SETTINGS";
     @VisibleForTesting
     static final int REQUEST_ADD_ANOTHER = 1;
     @VisibleForTesting
@@ -104,6 +108,11 @@
     protected void onNextButtonClick(View view) {
         updateFingerprintSuggestionEnableState();
         setResult(RESULT_FINISHED);
+        if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
+            postEnroll();
+        } else {
+            launchFingerprintSettings();
+        }
         finish();
     }
 
@@ -127,6 +136,24 @@
         }
     }
 
+    private void postEnroll() {
+        final FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this);
+        if (fpm != null) {
+            int result = fpm.postEnroll();
+            if (result < 0) {
+                Log.w(TAG, "postEnroll failed: result = " + result);
+            }
+        }
+    }
+
+    private void launchFingerprintSettings() {
+        final Intent intent = new Intent(ACTION_FINGERPRINT_SETTINGS);
+        intent.setPackage(Utils.SETTINGS_PACKAGE_NAME);
+        intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
+        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+        startActivity(intent);
+    }
+
     private void onAddAnotherButtonClick(View view) {
         startActivityForResult(getFingerprintEnrollingIntent(), REQUEST_ADD_ANOTHER);
     }
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index 9418094..9a07821 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -276,6 +276,9 @@
             Activity activity = getActivity();
             mFingerprintManager = Utils.getFingerprintManagerOrNull(activity);
 
+            mToken = getIntent().getByteArrayExtra(
+                    ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
+
             mAuthenticateSidecar = (FingerprintAuthenticateSidecar)
                     getFragmentManager().findFragmentByTag(TAG_AUTHENTICATE_SIDECAR);
             if (mAuthenticateSidecar == null) {
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 24fccef..f50d6ad 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -54,6 +54,7 @@
 import com.android.settings.backup.ToggleBackupSettingFragment;
 import com.android.settings.backup.UserBackupSettingsActivity;
 import com.android.settings.biometrics.face.FaceSettings;
+import com.android.settings.biometrics.fingerprint.FingerprintSettings;
 import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
 import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
 import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
@@ -203,6 +204,7 @@
             AccountSyncSettings.class.getName(),
             AssistGestureSettings.class.getName(),
             FaceSettings.class.getName(),
+            FingerprintSettings.FingerprintSettingsFragment.class.getName(),
             SwipeToNotificationSettings.class.getName(),
             DoubleTapPowerSettings.class.getName(),
             DoubleTapScreenSettings.class.getName(),
diff --git a/src/com/android/settings/notification/AbstractZenModeAutomaticRulePreferenceController.java b/src/com/android/settings/notification/AbstractZenModeAutomaticRulePreferenceController.java
index 58e1916..f7b3222 100644
--- a/src/com/android/settings/notification/AbstractZenModeAutomaticRulePreferenceController.java
+++ b/src/com/android/settings/notification/AbstractZenModeAutomaticRulePreferenceController.java
@@ -123,11 +123,14 @@
             return new ComponentName(ci.packageName, ci.name);
         }
         // old service backed rule
-        final String configurationActivity =
-                ci.metaData.getString(ConditionProviderService.META_DATA_CONFIGURATION_ACTIVITY);
-        if (configurationActivity != null) {
-            return ComponentName.unflattenFromString(configurationActivity);
+        if (ci.metaData != null) {
+            final String configurationActivity = ci.metaData.getString(
+                    ConditionProviderService.META_DATA_CONFIGURATION_ACTIVITY);
+            if (configurationActivity != null) {
+                return ComponentName.unflattenFromString(configurationActivity);
+            }
         }
+
         return null;
     }