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
This commit is contained in:
Udam Saini
2016-01-28 11:09:29 -08:00
parent 3ba50d858a
commit 62a7280cb8
4 changed files with 26 additions and 32 deletions

View File

@@ -1607,33 +1607,35 @@
android:value="true" /> android:value="true" />
</activity> </activity>
<activity-alias android:name=".suggestion.ChooseLockGeneric" <activity android:name=".Settings$ScreenLockSuggestionActivity"
android:icon="@drawable/ic_settings_security" android:icon="@drawable/ic_settings_security">
android:targetActivity=".ChooseLockGeneric">
<intent-filter android:priority="1"> <intent-filter android:priority="1">
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="com.android.settings.suggested.category.LOCK_SCREEN" /> <category android:name="com.android.settings.suggested.category.LOCK_SCREEN" />
</intent-filter> </intent-filter>
<meta-data android:name="com.android.settings.dismiss"
android:value="0,30" />
<meta-data android:name="com.android.settings.title" <meta-data android:name="com.android.settings.title"
android:resource="@string/suggested_lock_settings_title" /> android:resource="@string/suggested_lock_settings_title" />
<meta-data android:name="com.android.settings.summary" <meta-data android:name="com.android.settings.summary"
android:resource="@string/suggested_lock_settings_summary" /> android:resource="@string/suggested_lock_settings_summary" />
</activity-alias> </activity>
<activity-alias android:name=".suggestion.FingerprintEnrollIntroduction" <activity android:name=".Settings$FingerprintEnrollSuggestionActivity"
android:icon="@drawable/ic_settings_security" android:icon="@drawable/ic_settings_security">
android:targetActivity=".fingerprint.FingerprintEnrollIntroduction">
<intent-filter android:priority="2"> <intent-filter android:priority="2">
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="com.android.settings.suggested.category.LOCK_SCREEN" /> <category android:name="com.android.settings.suggested.category.LOCK_SCREEN" />
</intent-filter> </intent-filter>
<meta-data android:name="com.android.settings.dismiss"
android:value="0,30" />
<meta-data android:name="com.android.settings.require_feature" <meta-data android:name="com.android.settings.require_feature"
android:value="android.hardware.fingerprint" /> android:value="android.hardware.fingerprint" />
<meta-data android:name="com.android.settings.title" <meta-data android:name="com.android.settings.title"
android:resource="@string/suggested_lock_settings_title" /> android:resource="@string/suggested_lock_settings_title" />
<meta-data android:name="com.android.settings.summary" <meta-data android:name="com.android.settings.summary"
android:resource="@string/suggested_lock_settings_summary" /> android:resource="@string/suggested_lock_settings_summary" />
</activity-alias> </activity>
<activity android:name="ChooseLockGeneric$InternalActivity" android:exported="false" <activity android:name="ChooseLockGeneric$InternalActivity" android:exported="false"
android:label="@string/lockpassword_choose_lock_generic_header" android:label="@string/lockpassword_choose_lock_generic_header"

View File

@@ -24,11 +24,9 @@ import android.app.DialogFragment;
import android.app.Fragment; import android.app.Fragment;
import android.app.FragmentManager; import android.app.FragmentManager;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.Fingerprint; import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintManager.RemovalCallback; import android.hardware.fingerprint.FingerprintManager.RemovalCallback;
@@ -269,7 +267,6 @@ public class ChooseLockGeneric extends SettingsActivity {
|| requestCode == ENABLE_ENCRYPTION_REQUEST) { || requestCode == ENABLE_ENCRYPTION_REQUEST) {
if (resultCode != RESULT_CANCELED) { if (resultCode != RESULT_CANCELED) {
getActivity().setResult(resultCode, data); getActivity().setResult(resultCode, data);
disableScreenLockSuggestion();
finish(); finish();
} }
} else { } else {
@@ -548,30 +545,9 @@ public class ChooseLockGeneric extends SettingsActivity {
getActivity().setResult(Activity.RESULT_OK); getActivity().setResult(Activity.RESULT_OK);
} else { } else {
removeAllFingerprintTemplatesAndFinish(); 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) { private Intent getIntentForUnlockMethod(int quality, boolean disabled) {
Intent intent = null; Intent intent = null;
final Context context = getActivity(); final Context context = getActivity();

View File

@@ -17,6 +17,7 @@
package com.android.settings; package com.android.settings;
import com.android.settings.applications.AppOpsSummary; import com.android.settings.applications.AppOpsSummary;
import com.android.settings.fingerprint.FingerprintEnrollIntroduction;
import com.android.settings.fingerprint.FingerprintSettings; import com.android.settings.fingerprint.FingerprintSettings;
/** /**
@@ -129,6 +130,10 @@ public class Settings extends SettingsActivity {
public static class ZenModeAutomationSuggestionActivity extends SettingsActivity { /* empty */ } public static class ZenModeAutomationSuggestionActivity extends SettingsActivity { /* empty */ }
public static class WallpaperSuggestionActivity extends SettingsActivity { /* empty */ } public static class WallpaperSuggestionActivity extends SettingsActivity { /* empty */ }
public static class FingerprintSuggestionActivity extends FingerprintSettings { /* empty */ } public static class FingerprintSuggestionActivity extends FingerprintSettings { /* empty */ }
public static class FingerprintEnrollSuggestionActivity extends FingerprintEnrollIntroduction {
/* empty */
}
public static class ScreenLockSuggestionActivity extends ChooseLockGeneric { /* empty */ }
// Categories. // Categories.
public static class WirelessSettings extends SettingsActivity { /* empty */ } public static class WirelessSettings extends SettingsActivity { /* empty */ }

View File

@@ -18,6 +18,7 @@ import android.app.AutomaticZenRule;
import android.app.IWallpaperManager; import android.app.IWallpaperManager;
import android.app.IWallpaperManager.Stub; import android.app.IWallpaperManager.Stub;
import android.app.IWallpaperManagerCallback; import android.app.IWallpaperManagerCallback;
import android.app.KeyguardManager;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
@@ -26,7 +27,9 @@ import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import com.android.ims.ImsManager; import com.android.ims.ImsManager;
import com.android.settings.Settings.FingerprintEnrollSuggestionActivity;
import com.android.settings.Settings.FingerprintSuggestionActivity; import com.android.settings.Settings.FingerprintSuggestionActivity;
import com.android.settings.Settings.ScreenLockSuggestionActivity;
import com.android.settings.Settings.WallpaperSuggestionActivity; import com.android.settings.Settings.WallpaperSuggestionActivity;
import com.android.settings.Settings.WifiCallingSuggestionActivity; import com.android.settings.Settings.WifiCallingSuggestionActivity;
import com.android.settings.Settings.ZenModeAutomationSuggestionActivity; import com.android.settings.Settings.ZenModeAutomationSuggestionActivity;
@@ -55,10 +58,18 @@ public class SuggestionsChecks {
return isWifiCallingUnavailableOrEnabled(); return isWifiCallingUnavailableOrEnabled();
} else if (className.equals(FingerprintSuggestionActivity.class.getName())) { } else if (className.equals(FingerprintSuggestionActivity.class.getName())) {
return isNotSingleFingerprintEnrolled(); return isNotSingleFingerprintEnrolled();
} else if (className.equals(ScreenLockSuggestionActivity.class.getName())
|| className.equals(FingerprintEnrollSuggestionActivity.class.getName())) {
return isDeviceSecured();
} }
return false; return false;
} }
private boolean isDeviceSecured() {
KeyguardManager km = mContext.getSystemService(KeyguardManager.class);
return km.isKeyguardSecure();
}
private boolean isNotSingleFingerprintEnrolled() { private boolean isNotSingleFingerprintEnrolled() {
FingerprintManager manager = mContext.getSystemService(FingerprintManager.class); FingerprintManager manager = mContext.getSystemService(FingerprintManager.class);
return manager == null || manager.getEnrolledFingerprints().size() != 1; return manager == null || manager.getEnrolledFingerprints().size() != 1;