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

Commit b4f9e332 authored by Matías Hernández's avatar Matías Hernández Committed by Automerger Merge Worker
Browse files

Merge "Forbid granting access to NLSes with too-long component names" into...

Merge "Forbid granting access to NLSes with too-long component names" into udc-dev am: b84f6a4e am: f978d18e

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23728044



Change-Id: Icf61cefe68662d97ee2ec12d5867033cc7ffa3e0
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 66ae1a15 f978d18e
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -571,6 +571,12 @@ public class NotificationManager {
     */
    public static final int BUBBLE_PREFERENCE_SELECTED = 2;

    /**
     * Maximum length of the component name of a registered NotificationListenerService.
     * @hide
     */
    public static int MAX_SERVICE_COMPONENT_NAME_LENGTH = 500;

    @UnsupportedAppUsage
    private static INotificationManager sService;

+6 −2
Original line number Diff line number Diff line
@@ -243,7 +243,9 @@ public class RestrictedSwitchPreference extends SwitchPreference {
        return mHelper != null ? mHelper.packageName : null;
    }

    public void updateState(@NonNull String packageName, int uid, boolean isEnabled) {
    /** Updates enabled state based on associated package. */
    public void updateState(
            @NonNull String packageName, int uid, boolean isEnableAllowed, boolean isEnabled) {
        mHelper.updatePackageDetails(packageName, uid);
        if (mAppOpsManager == null) {
            mAppOpsManager = getContext().getSystemService(AppOpsManager.class);
@@ -254,7 +256,9 @@ public class RestrictedSwitchPreference extends SwitchPreference {
        final boolean ecmEnabled = getContext().getResources().getBoolean(
                com.android.internal.R.bool.config_enhancedConfirmationModeEnabled);
        final boolean appOpsAllowed = !ecmEnabled || mode == AppOpsManager.MODE_ALLOWED;
        if (isEnabled) {
        if (!isEnableAllowed && !isEnabled) {
            setEnabled(false);
        } else if (isEnabled) {
            setEnabled(true);
        } else if (appOpsAllowed && isDisabledByAppOps()) {
            setEnabled(true);
+5 −0
Original line number Diff line number Diff line
@@ -5594,6 +5594,11 @@ public class NotificationManagerService extends SystemService {
                boolean granted, boolean userSet) {
            Objects.requireNonNull(listener);
            checkNotificationListenerAccess();
            if (granted && listener.flattenToString().length()
                    > NotificationManager.MAX_SERVICE_COMPONENT_NAME_LENGTH) {
                throw new IllegalArgumentException(
                        "Component name too long: " + listener.flattenToString());
            }
            if (!userSet && isNotificationListenerAccessUserSet(listener)) {
                // Don't override user's choice
                return;
+5 −1
Original line number Diff line number Diff line
@@ -1049,7 +1049,11 @@ public class VrManagerService extends SystemService

        for (ComponentName c : possibleServices) {
            if (Objects.equals(c.getPackageName(), pkg)) {
                try {
                    nm.setNotificationListenerAccessGrantedForUser(c, userId, true);
                } catch (Exception e) {
                    Slog.w(TAG, "Could not grant NLS access to package " + pkg, e);
                }
            }
        }
    }
+24 −0
Original line number Diff line number Diff line
@@ -4147,6 +4147,30 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
                any(), anyInt(), anyBoolean(), anyBoolean(), anyBoolean());
    }
    @Test
    public void testSetListenerAccessForUser_grantWithNameTooLong_throws() {
        UserHandle user = UserHandle.of(mContext.getUserId() + 10);
        ComponentName c = new ComponentName("com.example.package",
                com.google.common.base.Strings.repeat("Blah", 150));
        assertThrows(IllegalArgumentException.class,
                () -> mBinderService.setNotificationListenerAccessGrantedForUser(
                        c, user.getIdentifier(), /* enabled= */ true, true));
    }
    @Test
    public void testSetListenerAccessForUser_revokeWithNameTooLong_okay() throws Exception {
        UserHandle user = UserHandle.of(mContext.getUserId() + 10);
        ComponentName c = new ComponentName("com.example.package",
                com.google.common.base.Strings.repeat("Blah", 150));
        mBinderService.setNotificationListenerAccessGrantedForUser(
                c, user.getIdentifier(), /* enabled= */ false, true);
        verify(mListeners).setPackageOrComponentEnabled(
                c.flattenToString(), user.getIdentifier(), true, /* enabled= */ false, true);
    }
    @Test
    public void testSetAssistantAccessForUser() throws Exception {
        UserInfo ui = new UserInfo();