Reworks lock screen flows.

This also adds frp warning dialogs in case the user skips lock
screen setup initially.

bug:26880444
Change-Id: I732b6a806e139fb6c1c1b334b8d1608c229f217c
diff --git a/proguard.flags b/proguard.flags
index 448cd72..2b5d4fa 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -22,3 +22,7 @@
 -keepclassmembers class com.android.settings.inputmethod.UserDictionaryAddWordActivity {
   *** onClick*(...);
 }
+
+-keep public class * extends com.android.setupwizardlib.items.ItemHierarchy {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
\ No newline at end of file
diff --git a/res/drawable/ic_fingerprint.xml b/res/drawable/ic_fingerprint.xml
index 2f27753..03bc034 100644
--- a/res/drawable/ic_fingerprint.xml
+++ b/res/drawable/ic_fingerprint.xml
@@ -1,18 +1,19 @@
 <!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
+    Copyright (C) 2015 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License
+-->
+
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="32dp"
         android:height="32dp"
diff --git a/res/drawable/ic_fingerprint_list_icon.xml b/res/drawable/ic_fingerprint_list_icon.xml
new file mode 100644
index 0000000..ce1ce5e
--- /dev/null
+++ b/res/drawable/ic_fingerprint_list_icon.xml
@@ -0,0 +1,24 @@
+<!--
+    Copyright (C) 2016 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="?attr/suwListItemIconColor"
+        android:pathData="M17.81,4.47c-0.08,0 -0.16,-0.02 -0.23,-0.06C15.66,3.42 14,3 12.01,3c-1.98,0 -3.86,0.47 -5.57,1.41 -0.24,0.13 -0.54,0.04 -0.68,-0.2 -0.13,-0.24 -0.04,-0.55 0.2,-0.68C7.82,2.52 9.86,2 12.01,2c2.13,0 3.99,0.47 6.03,1.52 0.25,0.13 0.34,0.43 0.21,0.67 -0.09,0.18 -0.26,0.28 -0.44,0.28zM3.5,9.72c-0.1,0 -0.2,-0.03 -0.29,-0.09 -0.23,-0.16 -0.28,-0.47 -0.12,-0.7 0.99,-1.4 2.25,-2.5 3.75,-3.27C9.98,4.04 14,4.03 17.15,5.65c1.5,0.77 2.76,1.86 3.75,3.25 0.16,0.22 0.11,0.54 -0.12,0.7 -0.23,0.16 -0.54,0.11 -0.7,-0.12 -0.9,-1.26 -2.04,-2.25 -3.39,-2.94 -2.87,-1.47 -6.54,-1.47 -9.4,0.01 -1.36,0.7 -2.5,1.7 -3.4,2.96 -0.08,0.14 -0.23,0.21 -0.39,0.21zM9.75,21.79c-0.13,0 -0.26,-0.05 -0.35,-0.15 -0.87,-0.87 -1.34,-1.43 -2.01,-2.64 -0.69,-1.23 -1.05,-2.73 -1.05,-4.34 0,-2.97 2.54,-5.39 5.66,-5.39s5.66,2.42 5.66,5.39c0,0.28 -0.22,0.5 -0.5,0.5s-0.5,-0.22 -0.5,-0.5c0,-2.42 -2.09,-4.39 -4.66,-4.39 -2.57,0 -4.66,1.97 -4.66,4.39 0,1.44 0.32,2.77 0.93,3.85 0.64,1.15 1.08,1.64 1.85,2.42 0.19,0.2 0.19,0.51 0,0.71 -0.11,0.1 -0.24,0.15 -0.37,0.15zM16.92,19.94c-1.19,0 -2.24,-0.3 -3.1,-0.89 -1.49,-1.01 -2.38,-2.65 -2.38,-4.39 0,-0.28 0.22,-0.5 0.5,-0.5s0.5,0.22 0.5,0.5c0,1.41 0.72,2.74 1.94,3.56 0.71,0.48 1.54,0.71 2.54,0.71 0.24,0 0.64,-0.03 1.04,-0.1 0.27,-0.05 0.53,0.13 0.58,0.41 0.05,0.27 -0.13,0.53 -0.41,0.58 -0.57,0.11 -1.07,0.12 -1.21,0.12zM14.91,22c-0.04,0 -0.09,-0.01 -0.13,-0.02 -1.59,-0.44 -2.63,-1.03 -3.72,-2.1 -1.4,-1.39 -2.17,-3.24 -2.17,-5.22 0,-1.62 1.38,-2.94 3.08,-2.94 1.7,0 3.08,1.32 3.08,2.94 0,1.07 0.93,1.94 2.08,1.94s2.08,-0.87 2.08,-1.94c0,-3.77 -3.25,-6.83 -7.25,-6.83 -2.84,0 -5.44,1.58 -6.61,4.03 -0.39,0.81 -0.59,1.76 -0.59,2.8 0,0.78 0.07,2.01 0.67,3.61 0.1,0.26 -0.03,0.55 -0.29,0.64 -0.26,0.1 -0.55,-0.04 -0.64,-0.29 -0.49,-1.31 -0.73,-2.61 -0.73,-3.96 0,-1.2 0.23,-2.29 0.68,-3.24 1.33,-2.79 4.28,-4.6 7.51,-4.6 4.55,0 8.25,3.51 8.25,7.83 0,1.62 -1.38,2.94 -3.08,2.94s-3.08,-1.32 -3.08,-2.94c0,-1.07 -0.93,-1.94 -2.08,-1.94s-2.08,0.87 -2.08,1.94c0,1.71 0.66,3.31 1.87,4.51 0.95,0.94 1.86,1.46 3.27,1.85 0.27,0.07 0.42,0.35 0.35,0.61 -0.05,0.23 -0.26,0.38 -0.47,0.38z"/>
+</vector>
diff --git a/res/drawable/ic_skip.xml b/res/drawable/ic_skip.xml
new file mode 100644
index 0000000..4376215
--- /dev/null
+++ b/res/drawable/ic_skip.xml
@@ -0,0 +1,26 @@
+<!--
+    Copyright (C) 2016 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24"
+        android:viewportHeight="24"
+        android:autoMirrored="true">
+    <path
+        android:fillColor="?attr/suwListItemIconColor"
+        android:pathData="M18.4,10.6C16.55,8.99 14.15,8 11.5,8c-4.65,0 -8.58,3.03 -9.96,7.22L3.9,16c1.05,-3.19 4.05,-5.5 7.6,-5.5 1.95,0 3.73,0.72 5.12,1.88L13,16h9V7l-3.6,3.6z"/>
+</vector>
diff --git a/res/layout/fingerprint_enroll_introduction.xml b/res/layout/fingerprint_enroll_introduction.xml
index b05abd8..ee2a95f 100644
--- a/res/layout/fingerprint_enroll_introduction.xml
+++ b/res/layout/fingerprint_enroll_introduction.xml
@@ -1,89 +1,24 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
+    Copyright (C) 2015 The Android Open Source Project
 
-<com.android.setupwizardlib.SetupWizardLayout
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License
+-->
+
+<com.android.setupwizardlib.SetupWizardItemsLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    style="?attr/fingerprint_layout_theme">
-
-    <LinearLayout
-        style="@style/SuwContentFrame"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical"
-        android:clipToPadding="false"
-        android:clipChildren="false">
-
-        <TextView
-            style="@style/TextAppearance.FingerprintMessage"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/suw_description_margin_top"
-            android:text="@string/security_settings_fingerprint_enroll_introduction_message"/>
-
-        <TextView
-            style="@style/TextAppearance.FingerprintMessage"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="24dp"
-            android:text="@string/security_settings_fingerprint_enroll_introduction_message_warning"/>
-
-        <TextView
-            style="@style/TextAppearance.FingerprintLink"
-            android:id="@+id/learn_more_button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="4dp"
-            android:text="@string/security_settings_fingerprint_enroll_introduction_risk_link_text"/>
-
-        <View
-            android:layout_height="0dp"
-            android:layout_width="match_parent"
-            android:layout_weight="1"/>
-
-        <LinearLayout
-            android:id="@+id/button_bar"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginEnd="-12dp"
-            android:layout_marginBottom="4dp"
-            android:layout_gravity="end"
-            android:orientation="horizontal">
-
-            <Button
-                style="@style/Button.FingerprintButton"
-                android:id="@+id/cancel_button"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginEnd="8dp"
-                android:text="@string/security_settings_fingerprint_enroll_introduction_cancel" />
-
-            <Button
-                style="@style/Button.FingerprintButton"
-                android:id="@+id/next_button"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:gravity="end|center_vertical"
-                android:text="@string/security_settings_fingerprint_enroll_introduction_continue" />
-
-        </LinearLayout>
-
-    </LinearLayout>
-
-</com.android.setupwizardlib.SetupWizardLayout>
+    android:entries="@xml/fingerprint_enroll_introduction_items"
+    style="?attr/fingerprint_layout_theme" />
diff --git a/res/layout/setup_choose_lock_generic_fingerprint_header.xml b/res/layout/setup_choose_lock_generic_fingerprint_header.xml
new file mode 100644
index 0000000..d4e5af7
--- /dev/null
+++ b/res/layout/setup_choose_lock_generic_fingerprint_header.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2016 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center_vertical"
+        android:minHeight="56dp"
+        android:paddingBottom="@dimen/suw_description_margin_bottom"
+        android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+        android:paddingTop="@dimen/suw_description_margin_top"
+        android:text="@string/setup_lock_settings_picker_fingerprint_message"
+        android:lineSpacingExtra="@dimen/suw_description_line_spacing_extra"
+        android:textAppearance="?android:attr/textAppearanceListItem" />
diff --git a/res/layout/setup_choose_lock_generic_header.xml b/res/layout/setup_choose_lock_generic_header.xml
new file mode 100644
index 0000000..074f816
--- /dev/null
+++ b/res/layout/setup_choose_lock_generic_header.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2016 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center_vertical"
+        android:minHeight="56dp"
+        android:paddingBottom="@dimen/suw_description_margin_bottom"
+        android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+        android:paddingTop="@dimen/suw_description_margin_top"
+        android:text="@string/setup_lock_settings_picker_message"
+        android:lineSpacingExtra="@dimen/suw_description_line_spacing_extra"
+        android:textAppearance="?android:attr/textAppearanceListItem" />
diff --git a/res/layout/setup_fingerprint_enroll_find_sensor_base.xml b/res/layout/setup_fingerprint_enroll_find_sensor_base.xml
index 9bb216b..184d6b9 100644
--- a/res/layout/setup_fingerprint_enroll_find_sensor_base.xml
+++ b/res/layout/setup_fingerprint_enroll_find_sensor_base.xml
@@ -1,18 +1,18 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
+    Copyright (C) 2015 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License
   -->
 
 <com.android.setupwizardlib.SetupWizardLayout
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5d093f1..0d76780 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -739,13 +739,27 @@
     <!-- Introduction detail message shown in fingerprint enrollment dialog [CHAR LIMIT=NONE]-->
     <string name="security_settings_fingerprint_enroll_introduction_message">Just touch the fingerprint sensor to unlock your phone, authorize purchases, or sign in to apps. \n\n Be careful whose fingerprints you add - any fingerprints added will be able to do these things.</string>
     <!-- Introduction detail message shown in fingerprint enrollment dialog to warn the user [CHAR LIMIT=NONE]-->
-    <string name="security_settings_fingerprint_enroll_introduction_message_warning">Note: Your fingerprint may be less secure than a strong pattern or PIN.</string>
-    <!-- Link text shown bellow the warning to learn morn about fingerprint risk [CHAR LIMIT=22]-->
-    <string name="security_settings_fingerprint_enroll_introduction_risk_link_text">Learn more</string>
+    <string name="security_settings_fingerprint_enroll_introduction_message_warning">Note: Your fingerprint may be less secure than a strong pattern or PIN. <annotation id="url">Learn more</annotation></string>
     <!-- Button text to cancel enrollment from the introduction [CHAR LIMIT=22] -->
     <string name="security_settings_fingerprint_enroll_introduction_cancel">Cancel</string>
     <!-- Button text to continue to the next screen from the introduction [CHAR LIMIT=22] -->
     <string name="security_settings_fingerprint_enroll_introduction_continue">Continue</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning them of potential consequences of not doing so, including loss of factory reset protection. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_intro_skip_dialog_text_frp" product="tablet">Device protection features will not be activated. You won\u2019t be able to prevent others from using this tablet if it\u2019s lost, stolen or wiped.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning them of potential consequences of not doing so, including loss of factory reset protection. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_intro_skip_dialog_text_frp" product="device">Device protection features will not be activated. You won\u2019t be able to prevent others from using this device if it\u2019s lost, stolen or wiped.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning them of potential consequences of not doing so, including loss of factory reset protection. (phone) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_intro_skip_dialog_text_frp" product="default">Device protection features will not be activated. You won\u2019t be able to prevent others from using this phone if it\u2019s lost, stolen or wiped.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning them of potential consequences of not doing so. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_intro_skip_dialog_text" product="tablet">Device protection features will not be activated. You won\u2019t be able to prevent others from using this tablet if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning them of potential consequences of not doing so. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_intro_skip_dialog_text" product="device">Device protection features will not be activated. You won\u2019t be able to prevent others from using this device if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning them of potential consequences of not doing so. (phone) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_intro_skip_dialog_text" product="default">Device protection features will not be activated. You won\u2019t be able to prevent others from using this phone if it\u2019s lost or stolen.</string>
+    <!-- Button for skipping a step after having been warned of a potential concern [CHAR LIMIT=30] -->
+    <string name="skip_anyway_button_label">Skip anyway</string>
+    <!-- Button for going to the previous screen or step [CHAR LIMIT=20] -->
+    <string name="go_back_button_label">Go back</string>
     <!-- Introduction title shown in fingerprint enrollment dialog to locate the sensor [CHAR LIMIT=29] -->
     <string name="security_settings_fingerprint_enroll_find_sensor_title">Find the sensor</string>
     <!-- Message shown in fingerprint enrollment dialog to locate the sensor -->
@@ -972,8 +986,18 @@
     <!--  Title for security picker to choose the unlock method: None/Pattern/PIN/Password [CHAR LIMIT=22] -->
     <string name="lock_settings_picker_title">Choose screen lock</string>
 
-    <!-- Title for screen in setup wizard, prompting user to choose the unlock method: None/Pattern/PIN/Password [CHAR LIMIT=40] -->
-    <string name="setup_lock_settings_picker_title">Choose screen lock</string>
+    <!--  Title for security picker in setup wizard to choose the unlock method: None/Pattern/PIN/Password [CHAR LIMIT=22] -->
+    <string name="setup_lock_settings_picker_title">Protect your phone</string>
+
+    <!-- Title for screen in setup wizard, prompting user to choose the their backup screen lock method [CHAR LIMIT=NONE] -->
+    <string name="setup_lock_settings_picker_fingerprint_message">Fingerprint may be less secure than a strong pattern, PIN or password. Set up a backup lock screen to be secure.</string>
+
+    <!-- Description text for screen in setup wizard asking user to set up screen lock, explaining to the user how setting up a screen lock protect them from losing data. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="setup_lock_settings_picker_message" product="tablet">Prevent others from using this tablet without your permission by activating device protection features. Choose the screen lock you want to use.</string>
+    <!-- Description text for screen in setup wizard asking user to set up screen lock, explaining to the user how setting up a screen lock protect them from losing data. (device) [CHAR LIMIT=NONE] -->
+    <string name="setup_lock_settings_picker_message" product="device">Prevent others from using this device without your permission by activating device protection features. Choose the screen lock you want to use.</string>
+    <!-- Description text for screen in setup wizard asking user to set up screen lock, explaining to the user how setting up a screen lock protect them from losing data. (phone) [CHAR LIMIT=NONE] -->
+    <string name="setup_lock_settings_picker_message" product="default">Prevent others from using this phone without your permission by activating device protection features. Choose the screen lock you want to use.</string>
 
     <!-- Message shown in screen lock picker while setting up the backup/fallback screen lock method for fingerprint. Users can choose to use this method to unlock the screen instead of fingerprint, or when fingerprint is not accepted. [CHAR LIMIT=80] [BACKUP_MESSAGE_ID=2799884038398627882] -->
     <string name="lock_settings_picker_fingerprint_message">Choose your backup screen lock method</string>
@@ -1016,6 +1040,9 @@
     <!-- Title for preference that guides the user through creating an unlock password [CHAR LIMIT=45] -->
     <string name="unlock_set_unlock_password_summary">High security</string>
 
+    <!-- Title for preference that allows the user to setup their lock screen preference later [CHAR LIMIT=22] -->
+    <string name="unlock_set_do_later_title">Not now</string>
+
     <!-- Summary specifying that this is the current screen lock setting [CHAR LIMIT=45] -->
     <string name="current_screen_lock">Current screen lock</string>
 
diff --git a/res/values/themes.xml b/res/values/themes.xml
index ae7149c..5bab837 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -283,8 +283,13 @@
     </style>
 
     <style name="Theme.FingerprintEnroll" parent="@*android:style/Theme.Material.Settings.NoActionBar">
+        <item name="android:listPreferredItemHeight">@dimen/suw_items_preferred_height</item>
+        <item name="android:listPreferredItemPaddingEnd">@dimen/suw_layout_margin_sides</item>
+        <item name="android:listPreferredItemPaddingStart">@dimen/suw_layout_margin_sides</item>
+        <item name="android:textAppearanceListItemSmall">@android:style/TextAppearance.Material.Body1</item>
         <item name="android:windowAnimationStyle">@style/Animation.SuwWindowAnimation</item>
 
+        <item name="suwListItemIconColor">?android:attr/colorAccent</item>
         <item name="suwMarginSides">@dimen/suw_layout_margin_sides</item>
     </style>
 
diff --git a/res/xml/fingerprint_enroll_introduction_items.xml b/res/xml/fingerprint_enroll_introduction_items.xml
new file mode 100644
index 0000000..3368843
--- /dev/null
+++ b/res/xml/fingerprint_enroll_introduction_items.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2016 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<ItemGroup xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <Item
+        android:enabled="false"
+        android:layout="@layout/suw_items_description"
+        android:title="@string/security_settings_fingerprint_enroll_introduction_message" />
+
+    <Item
+        android:enabled="false"
+        android:id="@+id/fingerprint_introduction_message_warning"
+        android:layout="@layout/suw_items_description" />
+
+    <Item
+        android:id="@+id/next_button"
+        android:icon="@drawable/ic_fingerprint_list_icon"
+        android:title="@string/security_settings_fingerprint_enroll_introduction_continue" />
+
+    <Item
+        android:id="@+id/cancel_button"
+        android:icon="@drawable/ic_skip"
+        android:title="@string/security_settings_fingerprint_enroll_introduction_cancel" />
+
+</ItemGroup>
\ No newline at end of file
diff --git a/res/xml/setup_security_settings_picker.xml b/res/xml/setup_security_settings_picker.xml
new file mode 100644
index 0000000..6441b03
--- /dev/null
+++ b/res/xml/setup_security_settings_picker.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2016 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/lock_settings_picker_title"
+        android:key="lock_settings_picker">
+
+    <com.android.settingslib.RestrictedPreference
+            android:key="unlock_set_off"
+            android:title="@string/unlock_set_unlock_off_title"
+            android:persistent="false"/>
+
+    <com.android.settingslib.RestrictedPreference
+            android:key="unlock_set_none"
+            android:title="@string/unlock_set_unlock_none_title"
+            android:persistent="false"/>
+
+    <com.android.settingslib.RestrictedPreference
+            android:key="unlock_set_pattern"
+            android:title="@string/unlock_set_unlock_pattern_title"
+            android:persistent="false"/>
+
+    <com.android.settingslib.RestrictedPreference
+            android:key="unlock_set_pin"
+            android:title="@string/unlock_set_unlock_pin_title"
+            android:persistent="false"/>
+
+    <com.android.settingslib.RestrictedPreference
+            android:key="unlock_set_password"
+            android:title="@string/unlock_set_unlock_password_title"
+            android:persistent="false"/>
+
+    <com.android.settingslib.RestrictedPreference
+            android:key="unlock_set_do_later"
+            android:title="@string/unlock_set_do_later_title"
+            android:persistent="false"/>
+
+</PreferenceScreen>
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index c0027d5..2592e83 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -104,7 +104,6 @@
         private int mEncryptionRequestQuality;
         private boolean mEncryptionRequestDisabled;
         private boolean mRequirePassword;
-        private boolean mForFingerprint = false;
         private boolean mForChangeCredRequiredForBoot = false;
         private String mUserPassword;
         private LockPatternUtils mLockPatternUtils;
@@ -130,6 +129,8 @@
             }
         };
 
+        protected boolean mForFingerprint = false;
+
         @Override
         protected int getMetricsCategory() {
             return MetricsEvent.CHOOSE_LOCK_GENERIC;
@@ -204,6 +205,10 @@
                     mWaitingForConfirmation = true;
                 }
             }
+            addHeaderView();
+        }
+
+        protected void addHeaderView() {
             if (mForFingerprint) {
                 setHeaderView(R.layout.choose_lock_generic_fingerprint_header);
             }
@@ -323,7 +328,7 @@
                 if (prefScreen != null) {
                     prefScreen.removeAll();
                 }
-                addPreferencesFromResource(R.xml.security_settings_picker);
+                addPreferences();
                 disableUnusablePreferences(quality, hideDisabledPrefs);
                 updatePreferenceText();
                 updateCurrentPreference();
@@ -333,6 +338,10 @@
             }
         }
 
+        protected void addPreferences() {
+            addPreferencesFromResource(R.xml.security_settings_picker);
+        }
+
         private void updatePreferenceText() {
             if (mForFingerprint) {
                 Preference pattern = findPreference(KEY_UNLOCK_SET_PATTERN);
diff --git a/src/com/android/settings/SetupChooseLockGeneric.java b/src/com/android/settings/SetupChooseLockGeneric.java
index 9559f8d..f1fbfc9 100644
--- a/src/com/android/settings/SetupChooseLockGeneric.java
+++ b/src/com/android/settings/SetupChooseLockGeneric.java
@@ -23,10 +23,13 @@
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.os.UserHandle;
+import android.support.v7.preference.Preference;
 import android.support.v14.preference.PreferenceFragment;
 import android.view.View;
+import android.widget.Button;
 
 import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.fingerprint.SetupSkipDialog;
 import com.android.setupwizardlib.SetupWizardLayout;
 import com.android.setupwizardlib.view.NavigationBar;
 
@@ -39,6 +42,8 @@
  */
 public class SetupChooseLockGeneric extends ChooseLockGeneric {
 
+    private static final String KEY_UNLOCK_SET_DO_LATER = "unlock_set_do_later";
+
     @Override
     protected boolean isValidFragment(String fragmentName) {
         return SetupChooseLockGenericFragment.class.getName().equals(fragmentName);
@@ -58,7 +63,7 @@
     public static class SetupChooseLockGenericFragment extends ChooseLockGenericFragment
             implements NavigationBar.NavigationBarListener {
 
-        private static final String EXTRA_PASSWORD_QUALITY = ":settings:password_quality";
+        public static final String EXTRA_PASSWORD_QUALITY = ":settings:password_quality";
 
         @Override
         public void onViewCreated(View view, Bundle savedInstanceState) {
@@ -68,12 +73,28 @@
 
             SetupWizardLayout layout = (SetupWizardLayout) view;
             final NavigationBar navigationBar = layout.getNavigationBar();
-            navigationBar.getNextButton().setEnabled(false);
+            Button nextButton = navigationBar.getNextButton();
+            nextButton.setText(null);
+            nextButton.setEnabled(false);
             navigationBar.setNavigationBarListener(this);
 
             layout.setIllustration(R.drawable.setup_illustration_lock_screen,
                     R.drawable.setup_illustration_horizontal_tile);
-            layout.setHeaderText(R.string.setup_lock_settings_picker_title);
+            if (!mForFingerprint) {
+                layout.setHeaderText(R.string.setup_lock_settings_picker_title);
+            } else {
+                layout.setHeaderText(R.string.lock_settings_picker_title);
+            }
+
+        }
+
+        @Override
+        protected void addHeaderView() {
+            if (mForFingerprint) {
+                setHeaderView(R.layout.setup_choose_lock_generic_fingerprint_header);
+            } else {
+                setHeaderView(R.layout.setup_choose_lock_generic_header);
+            }
         }
 
         @Override
@@ -113,6 +134,28 @@
         }
 
         @Override
+        protected void addPreferences() {
+            if (mForFingerprint) {
+                super.addPreferences();
+            } else {
+                addPreferencesFromResource(R.xml.setup_security_settings_picker);
+            }
+        }
+
+        @Override
+        public boolean onPreferenceTreeClick(Preference preference) {
+            final String key = preference.getKey();
+            if (KEY_UNLOCK_SET_DO_LATER.equals(key)) {
+                // show warning.
+                SetupSkipDialog dialog = SetupSkipDialog.newInstance(getActivity().getIntent()
+                        .getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false));
+                dialog.show(getFragmentManager());
+                return true;
+            }
+            return super.onPreferenceTreeClick(preference);
+        }
+
+        @Override
         protected Intent getLockPasswordIntent(Context context, int quality,
                 int minLength, final int maxLength,
                 boolean requirePasswordToDecrypt, boolean confirmCredentials, int userId) {
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java
index 83d936f..7144745 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java
@@ -16,26 +16,43 @@
 
 package com.android.settings.fingerprint;
 
+import android.app.Activity;
 import android.app.admin.DevicePolicyManager;
+import android.content.ActivityNotFoundException;
+import android.content.Context;
 import android.content.Intent;
 import android.hardware.fingerprint.FingerprintManager;
+import android.graphics.Typeface;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.UserHandle;
+import android.text.Annotation;
+import android.text.SpannableString;
+import android.text.SpannableStringBuilder;
+import android.text.TextPaint;
+import android.text.method.LinkMovementMethod;
+import android.text.style.URLSpan;
+import android.util.Log;
 import android.view.View;
+import android.widget.AdapterView;
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.ChooseLockGeneric;
 import com.android.settings.ChooseLockSettingsHelper;
 import com.android.settings.HelpUtils;
 import com.android.settings.R;
+import com.android.setupwizardlib.SetupWizardItemsLayout;
+import com.android.setupwizardlib.items.Item;
+import com.android.setupwizardlib.items.ItemAdapter;
 
 /**
  * Onboarding activity for fingerprint enrollment.
  */
-public class FingerprintEnrollIntroduction extends FingerprintEnrollBase {
+public class FingerprintEnrollIntroduction extends FingerprintEnrollBase
+        implements AdapterView.OnItemClickListener {
 
-    private static final int CHOOSE_LOCK_GENERIC_REQUEST = 1;
-    private static final int FINGERPRINT_FIND_SENSOR_REQUEST = 2;
+    protected static final int CHOOSE_LOCK_GENERIC_REQUEST = 1;
+    protected static final int FINGERPRINT_FIND_SENSOR_REQUEST = 2;
 
     private boolean mHasPassword;
 
@@ -44,8 +61,14 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.fingerprint_enroll_introduction);
         setHeaderText(R.string.security_settings_fingerprint_enroll_introduction_title);
-        findViewById(R.id.cancel_button).setOnClickListener(this);
-        findViewById(R.id.learn_more_button).setOnClickListener(this);
+        final SetupWizardItemsLayout layout =
+                (SetupWizardItemsLayout) findViewById(R.id.setup_wizard_layout);
+        layout.getListView().setOnItemClickListener(this);
+        final ItemAdapter adapter = (ItemAdapter) layout.getAdapter();
+        Item item = (Item) adapter.findItemById(R.id.fingerprint_introduction_message_warning);
+        item.setTitle(LearnMoreSpan.linkify(
+                getText(R.string.security_settings_fingerprint_enroll_introduction_message_warning),
+                getString(R.string.help_url_fingerprint)));
         updatePasswordQuality();
     }
 
@@ -107,7 +130,7 @@
         if (requestCode == FINGERPRINT_FIND_SENSOR_REQUEST) {
             if (isResultFinished || resultCode == RESULT_SKIP) {
                 final int result = isResultFinished ? RESULT_OK : RESULT_SKIP;
-                setResult(result);
+                setResult(result, data);
                 finish();
                 return;
             }
@@ -124,24 +147,66 @@
     }
 
     @Override
-    public void onClick(View v) {
-        if (v.getId() == R.id.cancel_button) {
-            finish();
+    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+        final Item item = (Item) parent.getItemAtPosition(position);
+        switch (item.getId()) {
+            case R.id.next_button:
+                onNextButtonClick();
+                break;
+            case R.id.cancel_button:
+                onCancelButtonClick();
+                break;
         }
-        if (v.getId() == R.id.learn_more_button) {
-            launchFingerprintHelp();
-        }
-        super.onClick(v);
-    }
-
-    private void launchFingerprintHelp() {
-        Intent helpIntent = HelpUtils.getHelpIntent(this,
-                getString(R.string.help_url_fingerprint), getClass().getName());
-        startActivity(helpIntent);
     }
 
     @Override
     protected int getMetricsCategory() {
         return MetricsEvent.FINGERPRINT_ENROLL_INTRO;
     }
+
+    protected void onCancelButtonClick() {
+        finish();
+    }
+
+    private static class LearnMoreSpan extends URLSpan {
+        private static final String TAG = "LearnMoreSpan";
+        private static final Typeface TYPEFACE_MEDIUM =
+                Typeface.create("sans-serif-medium", Typeface.NORMAL);
+
+        private LearnMoreSpan(String url) {
+            super(url);
+        }
+
+        @Override
+        public void onClick(View widget) {
+            Context ctx = widget.getContext();
+            Intent intent = HelpUtils.getHelpIntent(ctx, getURL(), ctx.getClass().getName());
+            try {
+                ((Activity) ctx).startActivity(intent);
+            } catch (ActivityNotFoundException e) {
+                Log.w(LearnMoreSpan.TAG,
+                        "Actvity was not found for intent, " + intent.toString());
+            }
+        }
+
+        @Override
+        public void updateDrawState(TextPaint ds) {
+            super.updateDrawState(ds);
+            ds.setUnderlineText(false);
+            ds.setTypeface(TYPEFACE_MEDIUM);
+        }
+
+        public static CharSequence linkify(CharSequence rawText, String uri) {
+            SpannableString msg = new SpannableString(rawText);
+            Annotation[] spans = msg.getSpans(0, msg.length(), Annotation.class);
+            SpannableStringBuilder builder = new SpannableStringBuilder(msg);
+            for (Annotation annotation : spans) {
+                int start = msg.getSpanStart(annotation);
+                int end = msg.getSpanEnd(annotation);
+                LearnMoreSpan link = new LearnMoreSpan(uri);
+                builder.setSpan(link, start, end, msg.getSpanFlags(link));
+            }
+            return builder;
+        }
+    }
 }
diff --git a/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroduction.java b/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroduction.java
index ec6d3cf..0c142b6 100644
--- a/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroduction.java
@@ -18,10 +18,13 @@
 
 import android.content.Intent;
 import android.content.res.Resources;
+import android.os.UserHandle;
+import android.support.v14.preference.PreferenceFragment;
 import android.view.View;
 import android.widget.Button;
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
+import com.android.internal.widget.LockPatternUtils;
 import com.android.settings.R;
 import com.android.settings.SetupChooseLockGeneric;
 import com.android.settings.SetupWizardUtils;
@@ -53,18 +56,31 @@
     @Override
     protected void initViews() {
         SetupWizardUtils.setImmersiveMode(this);
-
-        final View buttonBar = findViewById(R.id.button_bar);
-        if (buttonBar != null) {
-            buttonBar.setVisibility(View.GONE);
-        }
-
         getNavigationBar().setNavigationBarListener(this);
+        Button nextButton = getNavigationBar().getNextButton();
+        nextButton.setText(null);
+        nextButton.setEnabled(false);
     }
 
     @Override
-    protected Button getNextButton() {
-        return getNavigationBar().getNextButton();
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == FINGERPRINT_FIND_SENSOR_REQUEST) {
+            if (data == null) {
+                data = new Intent();
+            }
+            LockPatternUtils lockPatternUtils = new LockPatternUtils(this);
+            data.putExtra(SetupChooseLockGeneric.
+                    SetupChooseLockGenericFragment.EXTRA_PASSWORD_QUALITY,
+                    lockPatternUtils.getKeyguardStoredPasswordQuality(UserHandle.myUserId()));
+        }
+        super.onActivityResult(requestCode, resultCode, data);
+    }
+
+    @Override
+    protected void onCancelButtonClick() {
+        SetupSkipDialog dialog = SetupSkipDialog.newInstance(
+                getIntent().getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false));
+        dialog.show(getFragmentManager());
     }
 
     @Override
@@ -74,7 +90,7 @@
 
     @Override
     public void onNavigateNext() {
-        onNextButtonClick();
+        // next is handled via the onNextButtonClick method in FingerprintEnrollIntroduction
     }
 
     @Override
diff --git a/src/com/android/settings/fingerprint/SetupSkipDialog.java b/src/com/android/settings/fingerprint/SetupSkipDialog.java
new file mode 100644
index 0000000..11e6936
--- /dev/null
+++ b/src/com/android/settings/fingerprint/SetupSkipDialog.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.fingerprint;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.content.DialogInterface;
+import android.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.annotation.NonNull;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+
+import com.android.settings.R;
+import com.android.setupwizardlib.util.SystemBarHelper;
+
+public class SetupSkipDialog extends DialogFragment implements DialogInterface.OnClickListener {
+
+    public static final String EXTRA_FRP_SUPPORTED = ":settings:frp_supported";
+
+    private static final String ARG_FRP_SUPPORTED = "frp_supported";
+    private static final String TAG_SKIP_DIALOG = "skip_dialog";
+    private static final int RESULT_SKIP = Activity.RESULT_FIRST_USER + 10;
+
+    public static SetupSkipDialog newInstance(boolean isFrpSupported) {
+        SetupSkipDialog dialog = new SetupSkipDialog();
+        Bundle args = new Bundle();
+        args.putBoolean(ARG_FRP_SUPPORTED, isFrpSupported);
+        dialog.setArguments(args);
+        return dialog;
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        final AlertDialog dialog = onCreateDialogBuilder().create();
+        // hide system status bar.
+        SystemBarHelper.hideSystemBars(dialog);
+        return dialog;
+    }
+
+    @NonNull
+    public AlertDialog.Builder onCreateDialogBuilder() {
+        Bundle args = getArguments();
+        return new AlertDialog.Builder(getContext())
+                .setPositiveButton(R.string.skip_anyway_button_label, this)
+                .setNegativeButton(R.string.go_back_button_label, this)
+                .setMessage(args.getBoolean(ARG_FRP_SUPPORTED) ?
+                        R.string.lock_screen_intro_skip_dialog_text_frp :
+                        R.string.lock_screen_intro_skip_dialog_text);
+    }
+
+    @Override
+    public void onClick(DialogInterface dialog, int button) {
+        switch (button) {
+            case DialogInterface.BUTTON_POSITIVE:
+                Activity activity = getActivity();
+                activity.setResult(RESULT_SKIP);
+                activity.finish();
+                break;
+        }
+    }
+
+    public void show(FragmentManager manager) {
+        show(manager, TAG_SKIP_DIALOG);
+    }
+}
\ No newline at end of file