Merge "Fix the toggle status for show sensitive content switches" into main
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user