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

Commit 43f2be20 authored by Curtis Belmonte's avatar Curtis Belmonte
Browse files

Use correct user ID for face bypass pref controller

Ensures that the lockscreen bypass preference toggle shown on the face
unlock settings screen always uses the correct user ID. This fixes an
issue where the preference toggle for a guest user would use the
primary user's setting when multiple biometrics are supported.

Test: Manual:
1. Turn on Settings > System > Multiple users > Use multiple users
2. Add a guest account and switch to it
3. Enroll a face for Face Unlock on the guest account
4. From the Face Unlock settings screen, toggle "Skip lock screen"
5. Ensure that face bypasses lock screen iff this toggle is on
6. Switch back to the owner account and repeat steps 3-5

Fixes: 193488905
Change-Id: I2da4ce466fe0446cccc9119c90bd322daf627339
parent d7753f4c
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -162,6 +162,11 @@ public class FaceSettings extends DashboardFragment {
                    R.string.security_settings_face_profile_preference_title));
        }

        mLockscreenController = Utils.isMultipleBiometricsSupported(context)
                ? use(BiometricLockscreenBypassPreferenceController.class)
                : use(FaceSettingsLockscreenBypassPreferenceController.class);
        mLockscreenController.setUserId(mUserId);

        Preference keyguardPref = findPreference(FaceSettingsKeyguardPreferenceController.KEY);
        Preference appPref = findPreference(FaceSettingsAppPreferenceController.KEY);
        Preference attentionPref = findPreference(FaceSettingsAttentionPreferenceController.KEY);
@@ -195,14 +200,6 @@ public class FaceSettings extends DashboardFragment {
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        mLockscreenController = use(FaceSettingsLockscreenBypassPreferenceController.class);
        mLockscreenController.setUserId(mUserId);
    }

    @Override
    public void onResume() {
        super.onResume();
+8 −4
Original line number Diff line number Diff line
@@ -56,13 +56,13 @@ public class FaceSettingsLockscreenBypassPreferenceController
        int defaultValue = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_faceAuthDismissesKeyguard) ? 1 : 0;
        return Settings.Secure.getIntForUser(mContext.getContentResolver(),
                Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, defaultValue, getUserId()) != 0;
                Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, defaultValue, getUserHandle()) != 0;
    }

    @Override
    public boolean setChecked(boolean isChecked) {
        Settings.Secure.putInt(mContext.getContentResolver(),
                Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, isChecked ? 1 : 0);
        Settings.Secure.putIntForUser(mContext.getContentResolver(),
                Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, isChecked ? 1 : 0, getUserHandle());
        return true;
    }

@@ -88,7 +88,7 @@ public class FaceSettingsLockscreenBypassPreferenceController
        if (Utils.isMultipleBiometricsSupported(mContext)) {
            return UNSUPPORTED_ON_DEVICE;
        }
        if (mUserManager.isManagedProfile(UserHandle.myUserId())) {
        if (mUserManager.isManagedProfile(getUserId())) {
            return UNSUPPORTED_ON_DEVICE;
        }

@@ -99,4 +99,8 @@ public class FaceSettingsLockscreenBypassPreferenceController
            return UNSUPPORTED_ON_DEVICE;
        }
    }

    private int getUserHandle() {
        return UserHandle.of(getUserId()).getIdentifier();
    }
}