Adds screen lock as a suggested activity

Also, fixes a bug where the suggested activity stayed on screen
after the component was disabled causing a crash.

bug:25246207
bug:26770556
Change-Id: I28d784cdc57e464e49887483690ab514ca3bc46a
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c158511..ea1bc89 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1562,6 +1562,34 @@
                 android:value="true" />
         </activity>
 
+        <activity-alias android:name=".suggestion.ChooseLockGeneric"
+            android:icon="@drawable/ic_settings_security"
+            android:targetActivity=".ChooseLockGeneric">
+            <intent-filter android:priority="1">
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.android.settings.suggested.category.LOCK_SCREEN" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.title"
+                       android:resource="@string/suggested_lock_settings_title" />
+            <meta-data android:name="com.android.settings.summary"
+                       android:resource="@string/suggested_lock_settings_summary" />
+        </activity-alias>
+
+        <activity-alias android:name=".suggestion.FingerprintEnrollIntroduction"
+            android:icon="@drawable/ic_settings_security"
+            android:targetActivity=".fingerprint.FingerprintEnrollIntroduction">
+            <intent-filter android:priority="2">
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.android.settings.suggested.category.LOCK_SCREEN" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.require_feature"
+                android:value="android.hardware.fingerprint" />
+            <meta-data android:name="com.android.settings.title"
+                android:resource="@string/suggested_lock_settings_title" />
+            <meta-data android:name="com.android.settings.summary"
+                android:resource="@string/suggested_lock_settings_summary" />
+        </activity-alias>
+
         <activity android:name="ChooseLockGeneric$InternalActivity" android:exported="false"
             android:label="@string/lockpassword_choose_lock_generic_header"
             android:excludeFromRecents="true"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 89c05ad..5826f04 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -970,6 +970,13 @@
     <!-- Unlock Picker Settings --><skip />
 
     <!-- Security Picker --><skip />
+
+    <!-- Title for suggested actions for screen lock -->
+    <string name="suggested_lock_settings_title">Screen lock</string>
+
+    <!-- Summary for suggested actions for screen lock -->
+    <string name="suggested_lock_settings_summary">Protect your device</string>
+
     <!--  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>
 
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 6461b93..0799829 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -24,9 +24,11 @@
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.admin.DevicePolicyManager;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.pm.PackageManager;
 import android.hardware.fingerprint.Fingerprint;
 import android.hardware.fingerprint.FingerprintManager;
 import android.hardware.fingerprint.FingerprintManager.RemovalCallback;
@@ -267,6 +269,7 @@
                     || requestCode == ENABLE_ENCRYPTION_REQUEST) {
                 if (resultCode != RESULT_CANCELED) {
                     getActivity().setResult(resultCode, data);
+                    disableScreenLockSuggestion();
                     finish();
                 }
             } else {
@@ -545,9 +548,30 @@
                 getActivity().setResult(Activity.RESULT_OK);
             } else {
                 removeAllFingerprintTemplatesAndFinish();
+                disableScreenLockSuggestion();
             }
         }
 
+        private void disableScreenLockSuggestion() {
+            final ComponentName suggestionChooseLock = new ComponentName("com.android.settings",
+                    "com.android.settings.suggestion.ChooseLockGeneric");
+            disableComponent(suggestionChooseLock);
+            PackageManager pm = getContext().getPackageManager();
+            if (pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
+                final ComponentName suggestionFingerprint = new ComponentName(
+                        "com.android.settings",
+                        "com.android.settings.suggestion.FingerprintEnrollIntroduction");
+                disableComponent(suggestionFingerprint);
+            }
+        }
+
+        private void disableComponent(ComponentName componentName) {
+            getContext().getPackageManager().setComponentEnabledSetting(
+                    componentName,
+                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+                    PackageManager.DONT_KILL_APP);
+        }
+
         private Intent getIntentForUnlockMethod(int quality, boolean disabled) {
             Intent intent = null;
             final Context context = getActivity();
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 8dffffa..b22431e 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -161,6 +161,9 @@
         List<DashboardCategory> categories =
                 ((SettingsActivity) getActivity()).getDashboardCategories();
         mAdapter.setCategories(categories);
+
+        // recheck to see if any suggestions have been changed.
+        mAdapter.setSuggestions(mSuggestionParser);
         mDashboard.setAdapter(mAdapter);
 
         long delta = System.currentTimeMillis() - start;