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

Commit be766495 authored by Torne (Richard Coles)'s avatar Torne (Richard Coles)
Browse files

Replace internal APIs in android.webkit.UserPackage.

UserPackage is only consumed by other WebView-related code (which does
not care about the UserInfo information), and by Settings (which can
query UserInfo itself).

To make it easier to move this to a mainline module, remove references
to the internal UserInfo from the API surface and instead just store a
UserHandle which is a public API.

Replace use of the internal getPackageInfoForUser with equivalent public
APIs.

Bug: 310653407
Test: atest WebViewUpdateManagerTest
Flag: NONE cannot flag changed types in method signatures
Change-Id: I119862b927c30b43e4309828f8fdf42a826a0cb5
parent cd8db6b6
Loading
Loading
Loading
Loading
+18 −22
Original line number Diff line number Diff line
@@ -15,12 +15,14 @@
 */
package android.webkit;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.UserInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.UserHandle;
import android.os.UserManager;

import java.util.ArrayList;
@@ -31,30 +33,31 @@ import java.util.List;
 * @hide
 */
public class UserPackage {
    private final UserInfo mUserInfo;
    private final UserHandle mUser;
    private final PackageInfo mPackageInfo;

    public static final int MINIMUM_SUPPORTED_SDK = Build.VERSION_CODES.TIRAMISU;

    public UserPackage(UserInfo user, PackageInfo packageInfo) {
        this.mUserInfo = user;
        this.mPackageInfo = packageInfo;
    public UserPackage(@NonNull UserHandle user, @Nullable PackageInfo packageInfo) {
        mUser = user;
        mPackageInfo = packageInfo;
    }

    /**
     * Returns a list of (User,PackageInfo) pairs corresponding to the PackageInfos for all
     * device users for the package named {@param packageName}.
     */
    public static List<UserPackage> getPackageInfosAllUsers(Context context,
            String packageName, int packageFlags) {
        List<UserInfo> users = getAllUsers(context);
    public static @NonNull List<UserPackage> getPackageInfosAllUsers(@NonNull Context context,
            @NonNull String packageName, int packageFlags) {
        UserManager userManager = context.getSystemService(UserManager.class);
        List<UserHandle> users = userManager.getUserHandles(false);
        List<UserPackage> userPackages = new ArrayList<UserPackage>(users.size());
        for (UserInfo user : users) {
        for (UserHandle user : users) {
            PackageManager pm = context.createContextAsUser(user, 0).getPackageManager();
            PackageInfo packageInfo = null;
            try {
                packageInfo = context.getPackageManager().getPackageInfoAsUser(
                        packageName, packageFlags, user.id);
            } catch (NameNotFoundException e) {
                packageInfo = pm.getPackageInfo(packageName, packageFlags);
            } catch (PackageManager.NameNotFoundException e) {
            }
            userPackages.add(new UserPackage(user, packageInfo));
        }
@@ -88,18 +91,11 @@ public class UserPackage {
        return packageInfo.applicationInfo.targetSdkVersion >= MINIMUM_SUPPORTED_SDK;
    }

    public UserInfo getUserInfo() {
        return mUserInfo;
    public UserHandle getUser() {
        return mUser;
    }

    public PackageInfo getPackageInfo() {
        return mPackageInfo;
    }


    private static List<UserInfo> getAllUsers(Context context) {
        UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
        return userManager.getUsers();
    }

}
+2 −6
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package com.android.server.webkit;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.UserInfo;
import android.os.UserHandle;
import android.webkit.UserPackage;
import android.webkit.WebViewProviderInfo;

@@ -137,16 +137,12 @@ public class TestSystemImpl implements SystemInterface {
        List<UserPackage> ret = new ArrayList();
        // Loop over defined users, and find the corresponding package for each user.
        for (int userId : mUsers) {
            ret.add(new UserPackage(createUserInfo(userId),
            ret.add(new UserPackage(UserHandle.of(userId),
                    userPackages == null ? null : userPackages.get(userId)));
        }
        return ret;
    }

    private static UserInfo createUserInfo(int userId) {
        return new UserInfo(userId, "User nr. " + userId, 0 /* flags */);
    }

    /**
     * Set package for primary user.
     */