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

Commit 2e3d616f authored by Matías Hernández's avatar Matías Hernández
Browse files

Inline skip_policy_access_nls_check

Fixes: 435426905
Test: N/A
Flag: EXEMPT Inlining flag
Change-Id: I55229d85f919f8510514e6eced95560a0c009dba
parent 8d0e4de2
Loading
Loading
Loading
Loading
+5 −16
Original line number Diff line number Diff line
@@ -123,7 +123,6 @@ import static android.service.notification.Adjustment.KEY_UNCLASSIFY;
import static android.service.notification.Adjustment.TYPE_CONTENT_RECOMMENDATION;
import static android.service.notification.Adjustment.TYPE_NEWS;
import static android.service.notification.Adjustment.TYPE_PROMOTION;
import static android.service.notification.Adjustment.TYPE_SOCIAL_MEDIA;
import static android.service.notification.Flags.FLAG_NOTIFICATION_CONVERSATION_CHANNEL_MANAGEMENT;
import static android.service.notification.Flags.callstyleCallbackApi;
import static android.service.notification.Flags.notificationBitmapOffloading;
@@ -367,7 +366,6 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.compat.IPlatformCompat;
import com.android.internal.config.sysui.SystemUiSystemPropertiesFlags;
import com.android.internal.config.sysui.SystemUiSystemPropertiesFlags.NotificationFlags;
import com.android.internal.logging.InstanceId;
import com.android.internal.logging.InstanceIdSequence;
import com.android.internal.logging.MetricsLogger;
@@ -6844,21 +6842,12 @@ public class NotificationManagerService extends SystemService {
            } catch (NameNotFoundException e) {
                return false;
            }
            if (managedServicesConcurrentMultiuser()) {
                return mConditionProviders.isPackageOrComponentAllowed(pkg, userId)
                        || (!Flags.skipPolicyAccessNlsCheck()
                            && mListeners.isComponentEnabledForPackage(pkg, userId))
                        || (mDpm != null
                            && (mDpm.isActiveProfileOwner(uid) || mDpm.isActiveDeviceOwner(uid)));
            } else {
            // TODO(b/169395065) Figure out if this flow makes sense in Device Owner mode.
            return mConditionProviders.isPackageOrComponentAllowed(pkg, userId)
                        || (!Flags.skipPolicyAccessNlsCheck()
                            && mListeners.isComponentEnabledForPackage(pkg))
                    || (mDpm != null
                        && (mDpm.isActiveProfileOwner(uid) || mDpm.isActiveDeviceOwner(uid)));
        }
        }
        @Override
        protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+0 −10
Original line number Diff line number Diff line
@@ -204,16 +204,6 @@ flag {
  }
}

flag {
  name: "skip_policy_access_nls_check"
  namespace: "systemui"
  description: "When querying whether a caller has Notification Policy Access, don't explicitly look in the NLSes list. All NLSes are also ConditionProviders so this is unnecessary."
  bug: "390441924"
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}

flag {
  name: "random_conversation_ids"
  namespace: "systemui"
+11 −93
Original line number Diff line number Diff line
@@ -152,7 +152,6 @@ import static com.android.server.am.PendingIntentRecord.FLAG_BROADCAST_SENDER;
import static com.android.server.am.PendingIntentRecord.FLAG_SERVICE_SENDER;
import static com.android.server.notification.Flags.FLAG_LOG_CACHED_POSTS;
import static com.android.server.notification.Flags.FLAG_MANAGED_SERVICES_CONCURRENT_MULTIUSER;
import static com.android.server.notification.Flags.FLAG_SKIP_POLICY_ACCESS_NLS_CHECK;
import static com.android.server.notification.GroupHelper.AUTOGROUP_KEY;
import static com.android.server.notification.NotificationManagerService.BITMAP_DURATION;
import static com.android.server.notification.NotificationManagerService.DEFAULT_MAX_NOTIFICATION_ENQUEUE_RATE;
@@ -369,13 +368,13 @@ import com.android.server.utils.quota.MultiRateLimiter;
import com.android.server.wm.ActivityTaskManagerInternal;
import com.android.server.wm.WindowManagerInternal;
import libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
import libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
import com.google.android.collect.Lists;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
import libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
@@ -392,6 +391,9 @@ import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
import platform.test.runner.parameterized.Parameters;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
@@ -407,9 +409,6 @@ import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.function.Consumer;
import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
import platform.test.runner.parameterized.Parameters;
@SmallTest
@RunWith(ParameterizedAndroidJunit4.class)
@RunWithLooper
@@ -17388,46 +17387,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
        verify(mDevicePolicyManager, never()).isActiveDeviceOwner(anyInt());
    }
    @Test
    @DisableFlags({FLAG_MANAGED_SERVICES_CONCURRENT_MULTIUSER, FLAG_SKIP_POLICY_ACCESS_NLS_CHECK})
    public void isNotificationPolicyAccessGranted_isNls() throws Exception {
        final String packageName = "target";
        final int uid = 123;
        final var checker = mService.permissionChecker;
        when(mPackageManagerClient.getPackageUidAsUser(eq(packageName), anyInt())).thenReturn(uid);
        when(mListeners.isComponentEnabledForPackage(packageName)).thenReturn(true);
        assertThat(mBinderService.isNotificationPolicyAccessGranted(packageName)).isTrue();
        verify(mPackageManagerClient).getPackageUidAsUser(eq(packageName), eq(mUserId));
        verify(checker).check(android.Manifest.permission.MANAGE_NOTIFICATIONS, uid, -1, true);
        verify(mConditionProviders).isPackageOrComponentAllowed(eq(packageName), eq(mUserId));
        verify(mListeners, Flags.skipPolicyAccessNlsCheck() ? never() : times(1))
                .isComponentEnabledForPackage(packageName);
        verify(mDevicePolicyManager, never()).isActiveDeviceOwner(anyInt());
    }
    @Test
    @EnableFlags(FLAG_MANAGED_SERVICES_CONCURRENT_MULTIUSER)
    @DisableFlags(FLAG_SKIP_POLICY_ACCESS_NLS_CHECK)
    public void isNotificationPolicyAccessGranted_isNls_concurrent_multiUser()
                throws Exception {
        final String packageName = "target";
        final int uid = 123;
        final var checker = mService.permissionChecker;
        when(mPackageManagerClient.getPackageUidAsUser(eq(packageName), anyInt())).thenReturn(uid);
        when(mListeners.isComponentEnabledForPackage(packageName, mUserId)).thenReturn(true);
        assertThat(mBinderService.isNotificationPolicyAccessGranted(packageName)).isTrue();
        verify(mPackageManagerClient).getPackageUidAsUser(eq(packageName), eq(mUserId));
        verify(checker).check(android.Manifest.permission.MANAGE_NOTIFICATIONS, uid, -1, true);
        verify(mConditionProviders).isPackageOrComponentAllowed(eq(packageName), eq(mUserId));
        verify(mListeners, Flags.skipPolicyAccessNlsCheck() ? never() : times(1))
                .isComponentEnabledForPackage(packageName, mUserId);
        verify(mDevicePolicyManager, never()).isActiveDeviceOwner(anyInt());
    }
    @Test
    @DisableFlags(FLAG_MANAGED_SERVICES_CONCURRENT_MULTIUSER)
    public void isNotificationPolicyAccessGranted_isDeviceOwner() throws Exception {
@@ -17442,8 +17401,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
        verify(mPackageManagerClient).getPackageUidAsUser(eq(packageName), eq(mUserId));
        verify(checker).check(android.Manifest.permission.MANAGE_NOTIFICATIONS, uid, -1, true);
        verify(mConditionProviders).isPackageOrComponentAllowed(eq(packageName), eq(mUserId));
        verify(mListeners, Flags.skipPolicyAccessNlsCheck() ? never() : times(1))
                .isComponentEnabledForPackage(packageName);
        verify(mListeners, never()).isComponentEnabledForPackage(packageName);
        verify(mDevicePolicyManager).isActiveDeviceOwner(uid);
    }
@@ -17462,8 +17420,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
        verify(mPackageManagerClient).getPackageUidAsUser(eq(packageName), eq(mUserId));
        verify(checker).check(android.Manifest.permission.MANAGE_NOTIFICATIONS, uid, -1, true);
        verify(mConditionProviders).isPackageOrComponentAllowed(eq(packageName), eq(mUserId));
        verify(mListeners, Flags.skipPolicyAccessNlsCheck() ? never() : times(1))
                .isComponentEnabledForPackage(packageName, mUserId);
        verify(mListeners, never()).isComponentEnabledForPackage(packageName, mUserId);
        verify(mDevicePolicyManager).isActiveDeviceOwner(uid);
    }
@@ -17485,8 +17442,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
        verify(mPackageManagerClient).getPackageUidAsUser(eq(packageName), eq(mUserId));
        verify(checker).check(android.Manifest.permission.MANAGE_NOTIFICATIONS, uid, -1, true);
        verify(mConditionProviders).isPackageOrComponentAllowed(eq(packageName), eq(mUserId));
        verify(mListeners, Flags.skipPolicyAccessNlsCheck() ? never() : times(1))
                .isComponentEnabledForPackage(packageName);
        verify(mListeners, never()).isComponentEnabledForPackage(packageName);
        verify(mDevicePolicyManager).isActiveDeviceOwner(uid);
        verify(mDevicePolicyManager, never()).isActiveDeviceOwner(callingUid);
    }
@@ -17510,15 +17466,13 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
        verify(mPackageManagerClient).getPackageUidAsUser(eq(packageName), eq(mUserId));
        verify(checker).check(android.Manifest.permission.MANAGE_NOTIFICATIONS, uid, -1, true);
        verify(mConditionProviders).isPackageOrComponentAllowed(eq(packageName), eq(mUserId));
        verify(mListeners, Flags.skipPolicyAccessNlsCheck() ? never() : times(1))
                .isComponentEnabledForPackage(packageName, mUserId);
        verify(mListeners, never()).isComponentEnabledForPackage(packageName, mUserId);
        verify(mDevicePolicyManager).isActiveDeviceOwner(uid);
        verify(mDevicePolicyManager, never()).isActiveDeviceOwner(callingUid);
    }
    @Test
    @DisableFlags(FLAG_MANAGED_SERVICES_CONCURRENT_MULTIUSER)
    @EnableFlags(FLAG_SKIP_POLICY_ACCESS_NLS_CHECK)
    public void isNotificationPolicyAccessGranted_notGranted() throws Exception {
        final String packageName = "target";
        final int uid = 123;
@@ -17536,7 +17490,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
    }
    @Test
    @EnableFlags({FLAG_MANAGED_SERVICES_CONCURRENT_MULTIUSER, FLAG_SKIP_POLICY_ACCESS_NLS_CHECK})
    @EnableFlags({FLAG_MANAGED_SERVICES_CONCURRENT_MULTIUSER})
    public void isNotificationPolicyAccessGranted_notGranted_concurrent_multiUser()
                throws Exception {
        final String packageName = "target";
@@ -17554,42 +17508,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
        verify(mDevicePolicyManager).isActiveDeviceOwner(uid);
    }
    @Test
    @DisableFlags({FLAG_MANAGED_SERVICES_CONCURRENT_MULTIUSER, FLAG_SKIP_POLICY_ACCESS_NLS_CHECK})
    public void isNotificationPolicyAccessGranted_notGranted_badNlsCheck() throws Exception {
        final String packageName = "target";
        final int uid = 123;
        final var checker = mService.permissionChecker;
        when(mPackageManagerClient.getPackageUidAsUser(eq(packageName), anyInt())).thenReturn(uid);
        assertThat(mBinderService.isNotificationPolicyAccessGranted(packageName)).isFalse();
        verify(mPackageManagerClient).getPackageUidAsUser(eq(packageName), eq(mUserId));
        verify(checker).check(android.Manifest.permission.MANAGE_NOTIFICATIONS, uid, -1, true);
        verify(mConditionProviders).isPackageOrComponentAllowed(eq(packageName), eq(mUserId));
        verify(mListeners).isComponentEnabledForPackage(packageName);
        verify(mDevicePolicyManager).isActiveDeviceOwner(uid);
    }
    @Test
    @EnableFlags(FLAG_MANAGED_SERVICES_CONCURRENT_MULTIUSER)
    @DisableFlags(FLAG_SKIP_POLICY_ACCESS_NLS_CHECK)
    public void isNotificationPolicyAccessGranted_notGranted_concurrent_multiUser_badNlsCheck()
            throws Exception {
        final String packageName = "target";
        final int uid = 123;
        final var checker = mService.permissionChecker;
        when(mPackageManagerClient.getPackageUidAsUser(eq(packageName), anyInt())).thenReturn(uid);
        assertThat(mBinderService.isNotificationPolicyAccessGranted(packageName)).isFalse();
        verify(mPackageManagerClient).getPackageUidAsUser(eq(packageName), eq(mUserId));
        verify(checker).check(android.Manifest.permission.MANAGE_NOTIFICATIONS, uid, -1, true);
        verify(mConditionProviders).isPackageOrComponentAllowed(eq(packageName), eq(mUserId));
        verify(mListeners).isComponentEnabledForPackage(packageName, mUserId);
        verify(mDevicePolicyManager).isActiveDeviceOwner(uid);
    }
    @Test
    public void testResetDefaultDnd() {
        TestableNotificationManagerService service = spy(mService);