Dynamically checks if screen lock suggestion is needed

Fixes a bug where if you upgrade a device with screen lock,
screen lock suggestion would show (upgrade such as N->N developer
builds) or from a user test case like M->N

bug:26844580
Change-Id: Ic779ff28f5895e407c2c96771dbbc622e6026a7f
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3764b95..5cdd5fd 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1607,33 +1607,35 @@
                 android:value="true" />
         </activity>
 
-        <activity-alias android:name=".suggestion.ChooseLockGeneric"
-            android:icon="@drawable/ic_settings_security"
-            android:targetActivity=".ChooseLockGeneric">
+        <activity android:name=".Settings$ScreenLockSuggestionActivity"
+            android:icon="@drawable/ic_settings_security">
             <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.dismiss"
+                       android:value="0,30" />
             <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>
 
-        <activity-alias android:name=".suggestion.FingerprintEnrollIntroduction"
-            android:icon="@drawable/ic_settings_security"
-            android:targetActivity=".fingerprint.FingerprintEnrollIntroduction">
+        <activity android:name=".Settings$FingerprintEnrollSuggestionActivity"
+            android:icon="@drawable/ic_settings_security">
             <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.dismiss"
+                       android:value="0,30" />
             <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>
 
         <activity android:name="ChooseLockGeneric$InternalActivity" android:exported="false"
             android:label="@string/lockpassword_choose_lock_generic_header"
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index d2eae7e..b44ee48 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -24,11 +24,9 @@
 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;
@@ -269,7 +267,6 @@
                     || requestCode == ENABLE_ENCRYPTION_REQUEST) {
                 if (resultCode != RESULT_CANCELED) {
                     getActivity().setResult(resultCode, data);
-                    disableScreenLockSuggestion();
                     finish();
                 }
             } else {
@@ -548,30 +545,9 @@
                 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/Settings.java b/src/com/android/settings/Settings.java
index 5d2468e..494fd3b 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -17,6 +17,7 @@
 package com.android.settings;
 
 import com.android.settings.applications.AppOpsSummary;
+import com.android.settings.fingerprint.FingerprintEnrollIntroduction;
 import com.android.settings.fingerprint.FingerprintSettings;
 
 /**
@@ -129,6 +130,10 @@
     public static class ZenModeAutomationSuggestionActivity extends SettingsActivity { /* empty */ }
     public static class WallpaperSuggestionActivity extends SettingsActivity { /* empty */ }
     public static class FingerprintSuggestionActivity extends FingerprintSettings { /* empty */ }
+    public static class FingerprintEnrollSuggestionActivity extends FingerprintEnrollIntroduction {
+        /* empty */
+    }
+    public static class ScreenLockSuggestionActivity extends ChooseLockGeneric { /* empty */ }
 
     // Categories.
     public static class WirelessSettings extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/dashboard/SuggestionsChecks.java b/src/com/android/settings/dashboard/SuggestionsChecks.java
index fde7bc1..d465942 100644
--- a/src/com/android/settings/dashboard/SuggestionsChecks.java
+++ b/src/com/android/settings/dashboard/SuggestionsChecks.java
@@ -18,6 +18,7 @@
 import android.app.IWallpaperManager;
 import android.app.IWallpaperManager.Stub;
 import android.app.IWallpaperManagerCallback;
+import android.app.KeyguardManager;
 import android.app.NotificationManager;
 import android.content.Context;
 import android.hardware.fingerprint.FingerprintManager;
@@ -26,7 +27,9 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import com.android.ims.ImsManager;
+import com.android.settings.Settings.FingerprintEnrollSuggestionActivity;
 import com.android.settings.Settings.FingerprintSuggestionActivity;
+import com.android.settings.Settings.ScreenLockSuggestionActivity;
 import com.android.settings.Settings.WallpaperSuggestionActivity;
 import com.android.settings.Settings.WifiCallingSuggestionActivity;
 import com.android.settings.Settings.ZenModeAutomationSuggestionActivity;
@@ -55,10 +58,18 @@
             return isWifiCallingUnavailableOrEnabled();
         } else if (className.equals(FingerprintSuggestionActivity.class.getName())) {
             return isNotSingleFingerprintEnrolled();
+        } else if (className.equals(ScreenLockSuggestionActivity.class.getName())
+                || className.equals(FingerprintEnrollSuggestionActivity.class.getName())) {
+            return isDeviceSecured();
         }
         return false;
     }
 
+    private boolean isDeviceSecured() {
+        KeyguardManager km = mContext.getSystemService(KeyguardManager.class);
+        return km.isKeyguardSecure();
+    }
+
     private boolean isNotSingleFingerprintEnrolled() {
         FingerprintManager manager = mContext.getSystemService(FingerprintManager.class);
         return manager == null || manager.getEnrolledFingerprints().size() != 1;