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

Commit b602e4b0 authored by Yining Liu's avatar Yining Liu Committed by Android (Google) Code Review
Browse files

Merge "Fix the toggle status for show sensitive content switches" into main

parents ed4e9d6c 1436bcff
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -81,6 +81,13 @@ public class LockScreenNotificationShowSensitiveController
    public LockScreenNotificationShowSensitiveController(@NonNull Context context,
            @NonNull String preferenceKey) {
        super(context, preferenceKey);

        // This prevents unexpected controller usages.
        if (!KEY_SHOW_SENSITIVE.equals(preferenceKey)
                && !KEY_SHOW_SENSITIVE_WORK_PROFILE.equals(preferenceKey)) {
            throw new IllegalArgumentException("Invalid preference key: " + preferenceKey);
        }

        mContentResolver = context.getContentResolver();

        mUserManager = context.getSystemService(UserManager.class);
@@ -138,13 +145,18 @@ public class LockScreenNotificationShowSensitiveController
    }

    private int getUserId() {
        return KEY_SHOW_SENSITIVE.equals(getPreferenceKey())
                ? UserHandle.myUserId() : mWorkProfileUserId;
        return switch (getPreferenceKey()) {
            case KEY_SHOW_SENSITIVE -> UserHandle.myUserId();
            case KEY_SHOW_SENSITIVE_WORK_PROFILE -> mWorkProfileUserId;
            default -> throw new IllegalArgumentException(
                    "Invalid preference key: " + getPreferenceKey());
        };
    }

    @Override
    public void updateState(@Nullable Preference preference) {
        if (preference == null) return;
        super.updateState(preference);
        setChecked(showSensitiveContentWhenLocked());
        preference.setVisible(isAvailable());
    }
@@ -195,7 +207,7 @@ public class LockScreenNotificationShowSensitiveController
        if (!isLockScreenSecure()) return true;
        if (getEnforcedAdmin(userId) != null) return false;
        return Settings.Secure.getIntForUser(mContext.getContentResolver(),
                Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, ON, userId) == ON;
                Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, ON, userId) != OFF;
    }

    @Override
+32 −0
Original line number Diff line number Diff line
@@ -131,6 +131,14 @@ public class LockScreenNotificationShowSensitiveControllerTest {
        assertThat(mWorkController.mWorkProfileUserId).isEqualTo(10);
    }

    @Test(expected = IllegalArgumentException.class)
    public void validatePreferenceId() {
        new LockScreenNotificationShowSensitiveController(
                mMockContext,
                "Illegal Key"
        );
    }

    @Test
    public void getAvailabilityStatus_noSecureLockscreen() {
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
@@ -266,34 +274,58 @@ public class LockScreenNotificationShowSensitiveControllerTest {

    @Test
    public void isChecked() {
        // Given: screen is secure
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);

        // When: disable LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS
        // then updateState, this mocks the mWorkController.mContentObserver.onChange()
        Settings.Secure.putIntForUser(mContext.getContentResolver(),
                LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
                0, 0);
        mController.updateState(mPreference);

        // Then: the toggle is unchecked
        assertThat(mController.isChecked()).isFalse();
        assertThat(mPreference.isChecked()).isFalse();

        // When: enable LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS
        // then updateState, this mocks the mWorkController.mContentObserver.onChange()
        Settings.Secure.putIntForUser(mContext.getContentResolver(),
                LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
                1, 0);
        mController.updateState(mPreference);

        // Then: the toggle is checked
        assertThat(mController.isChecked()).isTrue();
        assertThat(mPreference.isChecked()).isTrue();
    }

    @Test
    public void isChecked_work() {
        // Given: screen is secure
        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);

        // When: disable LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS for work profile
        // then updateState, this mocks the mWorkController.mContentObserver.onChange()
        Settings.Secure.putIntForUser(mContext.getContentResolver(),
                LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
                0, 10);
        mWorkController.updateState(mWorkPreference);

        // Then: the toggle is unchecked
        assertThat(mWorkController.isChecked()).isFalse();
        assertThat(mWorkPreference.isChecked()).isFalse();

        // When: enable LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS for work profile
        // then updateState, this mocks the mWorkController.mContentObserver.onChange()
        Settings.Secure.putIntForUser(mContext.getContentResolver(),
                LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
                1, 10);
        mWorkController.updateState(mWorkPreference);

        // Then: the toggle is checked
        assertThat(mWorkController.isChecked()).isTrue();
        assertThat(mWorkPreference.isChecked()).isTrue();
    }

    @Test