Update use of android.webkit.UserPackage.

UserPackage no longer stores a UserInfo, only a UserHandle, to aid in
mainline modularization. Update Settings to fetch the UserInfo itself
when it needs to show the user name.

Bug: 310653407
Test: atest WebViewAppPickerTest
Flag: NONE cannot flag changed types in method signatures
Change-Id: I0e6f58e6b6a353171ddf923279ff08a92e2f040a
This commit is contained in:
Torne (Richard Coles)
2024-09-09 17:58:03 -04:00
parent 7db5b7a084
commit c82baecc32
2 changed files with 25 additions and 19 deletions

View File

@@ -26,6 +26,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageItemInfo; import android.content.pm.PackageItemInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.UserManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.webkit.UserPackage; import android.webkit.UserPackage;
@@ -149,17 +150,20 @@ public class WebViewAppPicker extends DefaultAppPickerFragment {
@VisibleForTesting @VisibleForTesting
String getDisabledReason(WebViewUpdateServiceWrapper webviewUpdateServiceWrapper, String getDisabledReason(WebViewUpdateServiceWrapper webviewUpdateServiceWrapper,
Context context, String packageName) { Context context, String packageName) {
UserManager userManager = context.getSystemService(UserManager.class);
List<UserPackage> userPackages = List<UserPackage> userPackages =
webviewUpdateServiceWrapper.getPackageInfosAllUsers(context, packageName); webviewUpdateServiceWrapper.getPackageInfosAllUsers(context, packageName);
for (UserPackage userPackage : userPackages) { for (UserPackage userPackage : userPackages) {
if (!userPackage.isInstalledPackage()) { if (!userPackage.isInstalledPackage()) {
// Package uninstalled/hidden // Package uninstalled/hidden
return context.getString( return context.getString(
R.string.webview_uninstalled_for_user, userPackage.getUserInfo().name); R.string.webview_uninstalled_for_user,
userManager.getUserInfo(userPackage.getUser().getIdentifier()).name);
} else if (!userPackage.isEnabledPackage()) { } else if (!userPackage.isEnabledPackage()) {
// Package disabled // Package disabled
return context.getString( return context.getString(
R.string.webview_disabled_for_user, userPackage.getUserInfo().name); R.string.webview_disabled_for_user,
userManager.getUserInfo(userPackage.getUser().getIdentifier()).name);
} }
} }
return null; return null;

View File

@@ -35,8 +35,8 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.UserInfo;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.os.UserHandle;
import android.webkit.UserPackage; import android.webkit.UserPackage;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
@@ -71,15 +71,17 @@ import java.util.Collections;
}) })
public class WebViewAppPickerTest { public class WebViewAppPickerTest {
private final static String PACKAGE_NAME = "com.example.test"; private static final String PACKAGE_NAME = "com.example.test";
private final static String PACKAGE_VERSION = "1.0.0"; private static final String PACKAGE_VERSION = "1.0.0";
private static final String FIRST_USER_NAME = "FIRST_USER";
private static final String SECOND_USER_NAME = "SECOND_USER";
@Mock @Mock
private FragmentActivity mActivity; private FragmentActivity mActivity;
private Context mContext; private Context mContext;
private UserInfo mFirstUser; private UserHandle mFirstUser;
private UserInfo mSecondUser; private UserHandle mSecondUser;
private ShadowPackageManager mPackageManager; private ShadowPackageManager mPackageManager;
private WebViewAppPicker mPicker; private WebViewAppPicker mPicker;
private WebViewUpdateServiceWrapper mWvusWrapper; private WebViewUpdateServiceWrapper mWvusWrapper;
@@ -105,8 +107,8 @@ public class WebViewAppPickerTest {
mPackageManager.addPackage(packageInfo); mPackageManager.addPackage(packageInfo);
mPackageManager.setUnbadgedApplicationIcon(PACKAGE_NAME, new ColorDrawable()); mPackageManager.setUnbadgedApplicationIcon(PACKAGE_NAME, new ColorDrawable());
mFirstUser = new UserInfo(0, "FIRST_USER", 0); mFirstUser = mUserManager.addUser(0, FIRST_USER_NAME, 0);
mSecondUser = new UserInfo(0, "SECOND_USER", 0); mSecondUser = mUserManager.addUser(1, SECOND_USER_NAME, 0);
mPicker = new WebViewAppPicker(); mPicker = new WebViewAppPicker();
mPicker = spy(mPicker); mPicker = spy(mPicker);
doNothing().when(mPicker).updateCandidates(); doNothing().when(mPicker).updateCandidates();
@@ -238,13 +240,13 @@ public class WebViewAppPickerTest {
UserPackage packageForFirstUser = mock(UserPackage.class); UserPackage packageForFirstUser = mock(UserPackage.class);
when(packageForFirstUser.isEnabledPackage()).thenReturn(false); when(packageForFirstUser.isEnabledPackage()).thenReturn(false);
when(packageForFirstUser.isInstalledPackage()).thenReturn(true); when(packageForFirstUser.isInstalledPackage()).thenReturn(true);
when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser); when(packageForFirstUser.getUser()).thenReturn(mFirstUser);
WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class); WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
when(wvusWrapper.getPackageInfosAllUsers(any(), eq(PACKAGE_NAME))) when(wvusWrapper.getPackageInfosAllUsers(any(), eq(PACKAGE_NAME)))
.thenReturn(Collections.singletonList(packageForFirstUser)); .thenReturn(Collections.singletonList(packageForFirstUser));
final String expectedReason = String.format("(disabled for user %s)", mFirstUser.name); final String expectedReason = String.format("(disabled for user %s)", FIRST_USER_NAME);
assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, PACKAGE_NAME)) assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, PACKAGE_NAME))
.isEqualTo(expectedReason); .isEqualTo(expectedReason);
} }
@@ -254,13 +256,13 @@ public class WebViewAppPickerTest {
UserPackage packageForFirstUser = mock(UserPackage.class); UserPackage packageForFirstUser = mock(UserPackage.class);
when(packageForFirstUser.isEnabledPackage()).thenReturn(true); when(packageForFirstUser.isEnabledPackage()).thenReturn(true);
when(packageForFirstUser.isInstalledPackage()).thenReturn(false); when(packageForFirstUser.isInstalledPackage()).thenReturn(false);
when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser); when(packageForFirstUser.getUser()).thenReturn(mFirstUser);
WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class); WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
when(wvusWrapper.getPackageInfosAllUsers(any(), eq(PACKAGE_NAME))) when(wvusWrapper.getPackageInfosAllUsers(any(), eq(PACKAGE_NAME)))
.thenReturn(Collections.singletonList(packageForFirstUser)); .thenReturn(Collections.singletonList(packageForFirstUser));
final String expectedReason = String.format("(uninstalled for user %s)", mFirstUser.name); final String expectedReason = String.format("(uninstalled for user %s)", FIRST_USER_NAME);
assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, PACKAGE_NAME)) assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, PACKAGE_NAME))
.isEqualTo(expectedReason); .isEqualTo(expectedReason);
} }
@@ -270,18 +272,18 @@ public class WebViewAppPickerTest {
UserPackage packageForFirstUser = mock(UserPackage.class); UserPackage packageForFirstUser = mock(UserPackage.class);
when(packageForFirstUser.isEnabledPackage()).thenReturn(false); when(packageForFirstUser.isEnabledPackage()).thenReturn(false);
when(packageForFirstUser.isInstalledPackage()).thenReturn(true); when(packageForFirstUser.isInstalledPackage()).thenReturn(true);
when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser); when(packageForFirstUser.getUser()).thenReturn(mFirstUser);
UserPackage packageForSecondUser = mock(UserPackage.class); UserPackage packageForSecondUser = mock(UserPackage.class);
when(packageForSecondUser.isEnabledPackage()).thenReturn(true); when(packageForSecondUser.isEnabledPackage()).thenReturn(true);
when(packageForSecondUser.isInstalledPackage()).thenReturn(false); when(packageForSecondUser.isInstalledPackage()).thenReturn(false);
when(packageForSecondUser.getUserInfo()).thenReturn(mSecondUser); when(packageForSecondUser.getUser()).thenReturn(mSecondUser);
WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class); WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
when(wvusWrapper.getPackageInfosAllUsers(any(), eq(PACKAGE_NAME))) when(wvusWrapper.getPackageInfosAllUsers(any(), eq(PACKAGE_NAME)))
.thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser)); .thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser));
final String expectedReason = String.format("(disabled for user %s)", mFirstUser.name); final String expectedReason = String.format("(disabled for user %s)", FIRST_USER_NAME);
assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, PACKAGE_NAME)) assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, PACKAGE_NAME))
.isEqualTo(expectedReason); .isEqualTo(expectedReason);
} }
@@ -295,18 +297,18 @@ public class WebViewAppPickerTest {
UserPackage packageForFirstUser = mock(UserPackage.class); UserPackage packageForFirstUser = mock(UserPackage.class);
when(packageForFirstUser.isEnabledPackage()).thenReturn(false); when(packageForFirstUser.isEnabledPackage()).thenReturn(false);
when(packageForFirstUser.isInstalledPackage()).thenReturn(false); when(packageForFirstUser.isInstalledPackage()).thenReturn(false);
when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser); when(packageForFirstUser.getUser()).thenReturn(mFirstUser);
UserPackage packageForSecondUser = mock(UserPackage.class); UserPackage packageForSecondUser = mock(UserPackage.class);
when(packageForSecondUser.isEnabledPackage()).thenReturn(true); when(packageForSecondUser.isEnabledPackage()).thenReturn(true);
when(packageForSecondUser.isInstalledPackage()).thenReturn(true); when(packageForSecondUser.isInstalledPackage()).thenReturn(true);
when(packageForSecondUser.getUserInfo()).thenReturn(mSecondUser); when(packageForSecondUser.getUser()).thenReturn(mSecondUser);
WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class); WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
when(wvusWrapper.getPackageInfosAllUsers(any(), eq(PACKAGE_NAME))) when(wvusWrapper.getPackageInfosAllUsers(any(), eq(PACKAGE_NAME)))
.thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser)); .thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser));
final String expectedReason = String.format("(uninstalled for user %s)", mFirstUser.name); final String expectedReason = String.format("(uninstalled for user %s)", FIRST_USER_NAME);
assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, PACKAGE_NAME)) assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, PACKAGE_NAME))
.isEqualTo(expectedReason); .isEqualTo(expectedReason);
} }