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

Commit 704a8909 authored by Nate Myren's avatar Nate Myren
Browse files

Exempt TV devices from Notification Permission

Do not implicitly add the notification permission to apps on TV devices,
and automatically grant the permission as GRANTED_BY_DEFAULT to
explicit requesters.

Bug: 220968160
Test: Manual
Change-Id: I9aeef86871ab7ca912cc30e1cf4ebd84d7014992
parent 45889be1
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -55,8 +55,10 @@ public final class PermissionHelper {
    private final PermissionManagerServiceInternal mPmi;
    private final IPackageManager mPackageManager;
    private final IPermissionManager mPermManager;
    // TODO (b/194833441): Remove when the migration is enabled
    // TODO (b/194833441): Remove this boolean (but keep the isMigrationEnabled() method)
    //  when the migration is enabled
    private final boolean mMigrationEnabled;
    private final boolean mIsTv;
    private final boolean mForceUserSetOnUpgrade;

    public PermissionHelper(PermissionManagerServiceInternal pmi, IPackageManager packageManager,
@@ -67,10 +69,17 @@ public final class PermissionHelper {
        mPermManager = permManager;
        mMigrationEnabled = migrationEnabled;
        mForceUserSetOnUpgrade = forceUserSetOnUpgrade;
        boolean isTv;
        try {
            isTv = mPackageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK, 0);
        } catch (RemoteException e) {
            isTv = false;
        }
        mIsTv = isTv;
    }

    public boolean isMigrationEnabled() {
        return mMigrationEnabled;
        return mMigrationEnabled && !mIsTv;
    }

    /**
+11 −0
Original line number Diff line number Diff line
@@ -296,6 +296,8 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
            .OnRuntimePermissionStateChangedListener>
            mRuntimePermissionStateChangedListeners = new ArrayList<>();

    private final boolean mIsLeanback;

    @NonNull
    private final OnPermissionChangeListeners mOnPermissionChangeListeners;

@@ -379,6 +381,7 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
        mContext = context;
        mPackageManagerInt = LocalServices.getService(PackageManagerInternal.class);
        mUserManagerInt = LocalServices.getService(UserManagerInternal.class);
        mIsLeanback = availableFeatures.containsKey(PackageManager.FEATURE_LEANBACK);

        mPrivilegedPermissionAllowlistSourcePackageNames.add(PLATFORM_PACKAGE_NAME);
        // PackageManager.hasSystemFeature() is not used here because PackageManagerService
@@ -2821,6 +2824,14 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
                                    }
                                }
                            }
                            if (mIsLeanback && NOTIFICATION_PERMISSIONS.contains(permName)) {
                                uidState.grantPermission(bp);
                                if (origPermState == null || !origPermState.isGranted()) {
                                    if (uidState.grantPermission(bp)) {
                                        wasChanged = true;
                                    }
                                }
                            }
                        } else {
                            if (origPermState == null) {
                                // New permission