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

Commit 0844fb92 authored by Pavel Grafov's avatar Pavel Grafov Committed by android-build-team Robot
Browse files

Use primary user's LOCK_SCREEN_SHOW_NOTIFICATIONS.

Only primary user can set LOCK_SCREEN_SHOW_NOTIFICATIONS,
profile can only set notifications to be redacted. When the
user changes notification settings for a work app, this class
is invoked from the profile, meaning it attempts to read
LOCK_SCREEN_SHOW_NOTIFICATIONS for the profile, which is not
there. As a result the function always returs 0 for work apps.

Bug: 111112011
Test: atest packages/apps/Settings/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java
Change-Id: Ifb50209ea8ea8fb6639f00ca8b7cf8a4295890ad
(cherry picked from commit f14de789)
parent 1582ec3d
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -147,8 +147,10 @@ public class VisibilityPreferenceController extends NotificationPreferenceContro
    }

    private boolean getLockscreenNotificationsEnabled() {
        return Settings.Secure.getInt(mContext.getContentResolver(),
                Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0) != 0;
        final UserInfo parentUser = mUm.getProfileParent(UserHandle.myUserId());
        final int primaryUserId = parentUser != null ? parentUser.id : UserHandle.myUserId();
        return Settings.Secure.getIntForUser(mContext.getContentResolver(),
                Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0, primaryUserId) != 0;
    }

    private boolean getLockscreenAllowPrivateNotifications() {
+25 −0
Original line number Diff line number Diff line
@@ -208,6 +208,31 @@ public class VisibilityPreferenceControllerTest {
                .contains(String.valueOf(VISIBILITY_PRIVATE)));
    }

    @Test
    public void testUpdateState_noLockScreenNotificationsGloballyInProfile() {
        final int primaryUserId = 2;
        final UserInfo primaryUserInfo = new UserInfo(primaryUserId, "user 2", 0);
        when(mUm.getProfileParent(anyInt())).thenReturn(primaryUserInfo);

        Settings.Secure.putIntForUser(mContext.getContentResolver(),
                Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0, primaryUserId);

        NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
        NotificationChannel channel = mock(NotificationChannel.class);
        mController.onResume(appRow, channel, null, null);

        RestrictedListPreference pref = mock(RestrictedListPreference.class);
        mController.updateState(pref);

        ArgumentCaptor<CharSequence[]> argumentCaptor =
                ArgumentCaptor.forClass(CharSequence[].class);
        verify(pref, times(1)).setEntryValues(argumentCaptor.capture());
        assertFalse(toStringList(argumentCaptor.getValue())
                .contains(String.valueOf(VISIBILITY_NO_OVERRIDE)));
        assertFalse(toStringList(argumentCaptor.getValue())
                .contains(String.valueOf(VISIBILITY_PRIVATE)));
    }

    @Test
    public void testUpdateState_noPrivateLockScreenNotificationsGlobally() {
        Settings.Secure.putInt(mContext.getContentResolver(),