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

Commit 92be54d3 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Call into role controller asynchronously when holding mPackages."

parents d3269219 fafe5257
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -160,6 +160,14 @@ public abstract class PackageManagerInternal {
         * @return whether the default browser was successfully set.
         */
        boolean setDefaultBrowser(@Nullable String packageName, @UserIdInt int userId);

        /**
         * Set the package name of the default browser asynchronously.
         *
         * @param packageName package name of the default browser, or {@code null} to remove
         * @param userId the user id
         */
        void setDefaultBrowserAsync(@Nullable String packageName, @UserIdInt int userId);
    }

    /**
+18 −1
Original line number Diff line number Diff line
@@ -1935,7 +1935,7 @@ public class PackageManagerService extends IPackageManager.Stub
                            final PackageSetting pkgSetting = mSettings.mPackages.get(packageName);
                            if (pkgSetting.getInstallReason(userId)
                                    != PackageManager.INSTALL_REASON_DEVICE_RESTORE) {
                                setDefaultBrowserPackageName(null, userId);
                                setDefaultBrowserAsyncLPw(null, userId);
                            }
                        }
@@ -13687,6 +13687,23 @@ public class PackageManagerService extends IPackageManager.Stub
        return true;
    }
    private void setDefaultBrowserAsyncLPw(@Nullable String packageName, @UserIdInt int userId) {
        if (userId == UserHandle.USER_ALL) {
            return;
        }
        if (mDefaultBrowserProvider == null) {
            Slog.e(TAG, "mDefaultBrowserProvider is null");
            return;
        }
        mDefaultBrowserProvider.setDefaultBrowserAsync(packageName, userId);
        if (packageName != null) {
            synchronized (mPackages) {
                mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultBrowser(packageName,
                        userId);
            }
        }
    }
    @Override
    public String getDefaultBrowserPackageName(int userId) {
        if (UserHandle.getCallingUserId() != userId) {
+19 −0
Original line number Diff line number Diff line
@@ -743,6 +743,25 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
                return false;
            }
        }

        @Override
        public void setDefaultBrowserAsync(@Nullable String packageName, @UserIdInt int userId) {
            IRoleManagerCallback callback = new IRoleManagerCallback.Stub() {
                @Override
                public void onSuccess() {}
                @Override
                public void onFailure() {
                    Slog.e(LOG_TAG, "Failed to set default browser: " + packageName);
                }
            };
            if (packageName != null) {
                getOrCreateControllerService(userId).onAddRoleHolder(RoleManager.ROLE_BROWSER,
                        packageName, 0, callback);
            } else {
                getOrCreateControllerService(userId).onClearRoleHolders(RoleManager.ROLE_BROWSER, 0,
                        callback);
            }
        }
    }

    private class DefaultHomeProvider implements PackageManagerInternal.DefaultHomeProvider {