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

Commit c139927c authored by Hai Zhang's avatar Hai Zhang
Browse files

Remove default app permission granting from DefaultPermissionGrantPolicy.

This change removes the permission granting for non-system dialer and
SMS apps in DefaultPermissionGrantPolicy. Permission granting to
system apps is left unchanged. Package manager is also made to query
role manager for the current default dialer instead of maintaining its
own storage.

Bug: 124452117
Bug: 129211673
Test: presubmit
Change-Id: I3c5c122802c3ecf15984a24c24c69a9e2f310bb7
parent 42dd2ded
Loading
Loading
Loading
Loading
+23 −8
Original line number Diff line number Diff line
@@ -173,6 +173,22 @@ public abstract class PackageManagerInternal {
        void setDefaultBrowserAsync(@Nullable String packageName, @UserIdInt int userId);
    }

    /**
     * Provider for default dialer
     */
    public interface DefaultDialerProvider {

        /**
         * Get the package name of the default dialer.
         *
         * @param userId the user id
         *
         * @return the package name of the default dialer, or {@code null} if none
         */
        @Nullable
        String getDefaultDialer(@UserIdInt int userId);
    }

    /**
     * Provider for default home
     */
@@ -229,14 +245,6 @@ public abstract class PackageManagerInternal {
     */
    public abstract void setSyncAdapterPackagesprovider(SyncAdapterPackagesProvider provider);

    /**
     * Called when the package for the default dialer changed
     *
     * @param packageName the new dialer package
     * @param userId user for which the change was made
     */
    public void onDefaultDialerAppChanged(String packageName, int userId) {}

    /**
     * Called when the package for the default SMS handler changed
     *
@@ -931,6 +939,13 @@ public abstract class PackageManagerInternal {
     */
    public abstract void setDefaultBrowserProvider(@NonNull DefaultBrowserProvider provider);

    /**
     * Sets the default dialer provider.
     *
     * @param provider the provider
     */
    public abstract void setDefaultDialerProvider(@NonNull DefaultDialerProvider provider);

    /**
     * Sets the default home provider.
     *
+19 −9
Original line number Diff line number Diff line
@@ -1007,6 +1007,9 @@ public class PackageManagerService extends IPackageManager.Stub
    @GuardedBy("mPackages")
    private PackageManagerInternal.DefaultBrowserProvider mDefaultBrowserProvider;
    @GuardedBy("mPackages")
    private PackageManagerInternal.DefaultDialerProvider mDefaultDialerProvider;
    @GuardedBy("mPackages")
    private PackageManagerInternal.DefaultHomeProvider mDefaultHomeProvider;
@@ -13960,10 +13963,17 @@ public class PackageManagerService extends IPackageManager.Stub
        return resolveInfo == null ? null : resolveInfo.activityInfo.packageName;
    }
    private String getDefaultDialerPackageName(int userId) {
    @Nullable
    private String getDefaultDialerPackageName(@UserIdInt int userId) {
        PackageManagerInternal.DefaultDialerProvider provider;
        synchronized (mPackages) {
            return mSettings.getDefaultDialerPackageNameLPw(userId);
            provider = mDefaultDialerProvider;
        }
        if (provider == null) {
            Slog.e(TAG, "mDefaultDialerProvider is null");
            return null;
        }
        return provider.getDefaultDialer(userId);
    }
    @Override
@@ -24157,13 +24167,6 @@ public class PackageManagerService extends IPackageManager.Stub
            mDefaultPermissionPolicy.setSyncAdapterPackagesProvider(provider);
        }
        @Override
        public void onDefaultDialerAppChanged(String packageName, int userId) {
            synchronized (mPackages) {
                mSettings.setDefaultDialerPackageNameLPw(packageName, userId);
            }
        }
        @Override
        public void grantDefaultPermissionsToDefaultUseOpenWifiApp(String packageName, int userId) {
            mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultUseOpenWifiApp(
@@ -24709,6 +24712,13 @@ public class PackageManagerService extends IPackageManager.Stub
            }
        }
        @Override
        public void setDefaultDialerProvider(@NonNull DefaultDialerProvider provider) {
            synchronized (mPackages) {
                mDefaultDialerProvider = provider;
            }
        }
        @Override
        public void setDefaultHomeProvider(@NonNull DefaultHomeProvider provider) {
            synchronized (mPackages) {
+1 −24
Original line number Diff line number Diff line
@@ -362,9 +362,6 @@ public final class Settings {
    // For every user, it is used to find the package name of the default Browser App.
    final SparseArray<String> mDefaultBrowserApp = new SparseArray<String>();

    // For every user, a record of the package name of the default Dialer App.
    final SparseArray<String> mDefaultDialerApp = new SparseArray<String>();

    // App-link priority tracking, per-user
    final SparseIntArray mNextAppLinkGeneration = new SparseIntArray();

@@ -1270,19 +1267,6 @@ public final class Settings {
        return (userId == UserHandle.USER_ALL) ? null : mDefaultBrowserApp.removeReturnOld(userId);
    }

    boolean setDefaultDialerPackageNameLPw(String packageName, int userId) {
        if (userId == UserHandle.USER_ALL) {
            return false;
        }
        mDefaultDialerApp.put(userId, packageName);
        writePackageRestrictionsLPr(userId);
        return true;
    }

    String getDefaultDialerPackageNameLPw(int userId) {
        return (userId == UserHandle.USER_ALL) ? null : mDefaultDialerApp.get(userId);
    }

    private File getUserPackagesStateFile(int userId) {
        // TODO: Implement a cleaner solution when adding tests.
        // This instead of Environment.getUserSystemDirectory(userId) to support testing.
@@ -1482,8 +1466,7 @@ public final class Settings {
                String packageName = parser.getAttributeValue(null, ATTR_PACKAGE_NAME);
                mDefaultBrowserApp.put(userId, packageName);
            } else if (tagName.equals(TAG_DEFAULT_DIALER)) {
                String packageName = parser.getAttributeValue(null, ATTR_PACKAGE_NAME);
                mDefaultDialerApp.put(userId, packageName);
                // Ignored.
            } else {
                String msg = "Unknown element under " +  TAG_DEFAULT_APPS + ": " +
                        parser.getName();
@@ -1938,12 +1921,6 @@ public final class Settings {
            serializer.attribute(null, ATTR_PACKAGE_NAME, defaultBrowser);
            serializer.endTag(null, TAG_DEFAULT_BROWSER);
        }
        String defaultDialer = mDefaultDialerApp.get(userId);
        if (!TextUtils.isEmpty(defaultDialer)) {
            serializer.startTag(null, TAG_DEFAULT_DIALER);
            serializer.attribute(null, ATTR_PACKAGE_NAME, defaultDialer);
            serializer.endTag(null, TAG_DEFAULT_DIALER);
        }
        serializer.endTag(null, TAG_DEFAULT_APPS);
    }

+0 −15
Original line number Diff line number Diff line
@@ -855,21 +855,6 @@ public final class DefaultPermissionGrantPolicy {
        grantPermissionsToSystemPackage(useOpenWifiPackage, userId, ALWAYS_LOCATION_PERMISSIONS);
    }

    public void grantDefaultPermissionsToDefaultSmsApp(String packageName, int userId) {
        Log.i(TAG, "Granting permissions to default sms app for user:" + userId);
        grantIgnoringSystemPackage(packageName, userId,
                PHONE_PERMISSIONS, CONTACTS_PERMISSIONS, SMS_PERMISSIONS, STORAGE_PERMISSIONS,
                MICROPHONE_PERMISSIONS, CAMERA_PERMISSIONS);
    }

    public void grantDefaultPermissionsToDefaultDialerApp(String packageName, int userId) {
        mServiceInternal.onDefaultDialerAppChanged(packageName, userId);
        Log.i(TAG, "Granting permissions to default dialer app for user:" + userId);
        grantIgnoringSystemPackage(packageName, userId,
                PHONE_PERMISSIONS, CONTACTS_PERMISSIONS, SMS_PERMISSIONS,
                MICROPHONE_PERMISSIONS, CAMERA_PERMISSIONS);
    }

    public void grantDefaultPermissionsToDefaultUseOpenWifiApp(String packageName, int userId) {
        Log.i(TAG, "Granting permissions to default Use Open WiFi app for user:" + userId);
        grantIgnoringSystemPackage(packageName, userId, ALWAYS_LOCATION_PERMISSIONS);
+11 −0
Original line number Diff line number Diff line
@@ -156,6 +156,7 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
        PackageManagerInternal packageManagerInternal = LocalServices.getService(
                PackageManagerInternal.class);
        packageManagerInternal.setDefaultBrowserProvider(new DefaultBrowserProvider());
        packageManagerInternal.setDefaultDialerProvider(new DefaultDialerProvider());
        packageManagerInternal.setDefaultHomeProvider(new DefaultHomeProvider());

        registerUserRemovedReceiver();
@@ -772,6 +773,16 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
        }
    }

    private class DefaultDialerProvider implements PackageManagerInternal.DefaultDialerProvider {

        @Nullable
        @Override
        public String getDefaultDialer(@UserIdInt int userId) {
            return CollectionUtils.firstOrNull(getOrCreateUserState(userId).getRoleHolders(
                    RoleManager.ROLE_DIALER));
        }
    }

    private class DefaultHomeProvider implements PackageManagerInternal.DefaultHomeProvider {

        @Nullable
Loading