Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62a7280c authored by Udam Saini's avatar Udam Saini
Browse files

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
parent 3ba50d85
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -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"
+0 −24
Original line number Diff line number Diff line
@@ -24,11 +24,9 @@ import android.app.DialogFragment;
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 @@ public class ChooseLockGeneric extends SettingsActivity {
                    || requestCode == ENABLE_ENCRYPTION_REQUEST) {
                if (resultCode != RESULT_CANCELED) {
                    getActivity().setResult(resultCode, data);
                    disableScreenLockSuggestion();
                    finish();
                }
            } else {
@@ -548,30 +545,9 @@ public class ChooseLockGeneric extends SettingsActivity {
                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();
+5 −0
Original line number Diff line number Diff line
@@ -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 class Settings extends SettingsActivity {
    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 */ }
+11 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ import android.app.AutomaticZenRule;
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.IBinder;
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 @@ public class SuggestionsChecks {
            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;