From 5f9a348f7e8a4c3a5f7968e4dfb3ae77cd2b55ce Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Thu, 22 Mar 2018 15:28:46 -0700 Subject: [PATCH] Get rid of UserPackageWrapper util. Robolectric can support framework private classes now, so there is no need to use wrappers. Bug: 76167422 Test: robotests Change-Id: I034a9f0a9856348bff491f2e9b2b1f7d682ab942 --- .../settings/webview/WebViewAppPicker.java | 6 +-- .../webview/WebViewUpdateServiceWrapper.java | 16 ++----- .../settings/wrapper/UserPackageWrapper.java | 29 ------------ .../wrapper/UserPackageWrapperImpl.java | 46 ------------------- .../webview/WebViewAppPickerTest.java | 35 +++++++------- 5 files changed, 26 insertions(+), 106 deletions(-) delete mode 100644 src/com/android/settings/wrapper/UserPackageWrapper.java delete mode 100644 src/com/android/settings/wrapper/UserPackageWrapperImpl.java diff --git a/src/com/android/settings/webview/WebViewAppPicker.java b/src/com/android/settings/webview/WebViewAppPicker.java index a5fef46ee2b..f68d27bdc46 100644 --- a/src/com/android/settings/webview/WebViewAppPicker.java +++ b/src/com/android/settings/webview/WebViewAppPicker.java @@ -27,11 +27,11 @@ import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.support.annotation.VisibleForTesting; import android.text.TextUtils; +import android.webkit.UserPackage; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.applications.defaultapps.DefaultAppPickerFragment; -import com.android.settings.wrapper.UserPackageWrapper; import com.android.settingslib.applications.DefaultAppInfo; import com.android.settingslib.wrapper.PackageManagerWrapper; @@ -150,9 +150,9 @@ public class WebViewAppPicker extends DefaultAppPickerFragment { @VisibleForTesting String getDisabledReason(WebViewUpdateServiceWrapper webviewUpdateServiceWrapper, Context context, String packageName) { - List userPackages = + List userPackages = webviewUpdateServiceWrapper.getPackageInfosAllUsers(context, packageName); - for (UserPackageWrapper userPackage : userPackages) { + for (UserPackage userPackage : userPackages) { if (!userPackage.isInstalledPackage()) { // Package uninstalled/hidden return context.getString( diff --git a/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java b/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java index fa1cd3de726..fd13586f460 100644 --- a/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java +++ b/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java @@ -28,8 +28,6 @@ import android.webkit.WebViewProviderInfo; import android.widget.Toast; import com.android.settings.R; -import com.android.settings.wrapper.UserPackageWrapper; -import com.android.settings.wrapper.UserPackageWrapperImpl; import java.util.ArrayList; import java.util.List; @@ -37,7 +35,8 @@ import java.util.List; public class WebViewUpdateServiceWrapper { private static final String TAG = "WVUSWrapper"; - public WebViewUpdateServiceWrapper() {} + public WebViewUpdateServiceWrapper() { + } /** * Fetch the package currently used as WebView implementation. @@ -75,6 +74,7 @@ public class WebViewUpdateServiceWrapper { /** * Change WebView provider to {@param packageName}. + * * @return whether the change succeeded. */ public boolean setWebViewProvider(String packageName) { @@ -90,14 +90,8 @@ public class WebViewUpdateServiceWrapper { /** * Fetch PackageInfos for the package named {@param packageName} for all users on the device. */ - public List getPackageInfosAllUsers(Context context, String packageName) { - List userPackageWrappers = new ArrayList<>(); - List userPackages = - UserPackage.getPackageInfosAllUsers(context, packageName, PACKAGE_FLAGS); - for (UserPackage userPackage : userPackages) { - userPackageWrappers.add(new UserPackageWrapperImpl(userPackage)); - } - return userPackageWrappers; + public List getPackageInfosAllUsers(Context context, String packageName) { + return UserPackage.getPackageInfosAllUsers(context, packageName, PACKAGE_FLAGS); } /** diff --git a/src/com/android/settings/wrapper/UserPackageWrapper.java b/src/com/android/settings/wrapper/UserPackageWrapper.java deleted file mode 100644 index afa1d82d314..00000000000 --- a/src/com/android/settings/wrapper/UserPackageWrapper.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the - * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.android.settings.wrapper; - -import android.content.pm.PackageInfo; -import android.content.pm.UserInfo; - -/** - * Wrapper class around android.webkit.UserPackage - to be able to use UserPackage in Robolectric - * tests (such tests currently don't support mocking hidden classes). - */ -public interface UserPackageWrapper { - UserInfo getUserInfo(); - PackageInfo getPackageInfo(); - boolean isEnabledPackage(); - boolean isInstalledPackage(); -} diff --git a/src/com/android/settings/wrapper/UserPackageWrapperImpl.java b/src/com/android/settings/wrapper/UserPackageWrapperImpl.java deleted file mode 100644 index 0a2b9cde1cb..00000000000 --- a/src/com/android/settings/wrapper/UserPackageWrapperImpl.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the - * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.android.settings.wrapper; - -import android.content.pm.PackageInfo; -import android.content.pm.UserInfo; -import android.webkit.UserPackage; - -/** - * Default implementation of UserPackageWrapper. - */ -public class UserPackageWrapperImpl implements UserPackageWrapper { - private final UserPackage mUserPackage; - - public UserPackageWrapperImpl(UserPackage userPackage) { - mUserPackage = userPackage; - } - - public UserInfo getUserInfo() { - return mUserPackage.getUserInfo(); - } - - public PackageInfo getPackageInfo() { - return mUserPackage.getPackageInfo(); - } - - public boolean isEnabledPackage() { - return mUserPackage.isEnabledPackage(); - } - - public boolean isInstalledPackage() { - return mUserPackage.isInstalledPackage(); - } -} diff --git a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java index 7ed8756eafc..2a95bc2e95a 100644 --- a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java +++ b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java @@ -39,10 +39,10 @@ import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.os.UserManager; +import android.webkit.UserPackage; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.widget.RadioButtonPreference; -import com.android.settings.wrapper.UserPackageWrapper; import com.android.settingslib.applications.DefaultAppInfo; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.wrapper.PackageManagerWrapper; @@ -135,7 +135,7 @@ public class WebViewAppPickerTest { private void testSuccessfulClickChangesProvider() { when(mWvusWrapper.getValidWebViewApplicationInfos(any())) - .thenReturn(Collections.singletonList(createApplicationInfo(DEFAULT_PACKAGE_NAME))); + .thenReturn(Collections.singletonList(createApplicationInfo(DEFAULT_PACKAGE_NAME))); when(mWvusWrapper.setWebViewProvider(eq(DEFAULT_PACKAGE_NAME))).thenReturn(true); RadioButtonPreference defaultPackagePref = mock(RadioButtonPreference.class); @@ -149,7 +149,7 @@ public class WebViewAppPickerTest { private void testFailingClickUpdatesSetting() { when(mWvusWrapper.getValidWebViewApplicationInfos(any())) - .thenReturn(Collections.singletonList(createApplicationInfo(DEFAULT_PACKAGE_NAME))); + .thenReturn(Collections.singletonList(createApplicationInfo(DEFAULT_PACKAGE_NAME))); when(mWvusWrapper.setWebViewProvider(eq(DEFAULT_PACKAGE_NAME))).thenReturn(false); RadioButtonPreference defaultPackagePref = mock(RadioButtonPreference.class); @@ -229,24 +229,24 @@ public class WebViewAppPickerTest { @Test public void testDisabledReasonNullIfPackagesOk() { - UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class); + UserPackage packageForFirstUser = mock(UserPackage.class); when(packageForFirstUser.isEnabledPackage()).thenReturn(true); when(packageForFirstUser.isInstalledPackage()).thenReturn(true); - UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class); + UserPackage packageForSecondUser = mock(UserPackage.class); when(packageForSecondUser.isEnabledPackage()).thenReturn(true); when(packageForSecondUser.isInstalledPackage()).thenReturn(true); WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class); when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME))) - .thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser)); + .thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser)); assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)).isNull(); } @Test public void testDisabledReasonForSingleUserDisabledPackage() { - UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class); + UserPackage packageForFirstUser = mock(UserPackage.class); when(packageForFirstUser.isEnabledPackage()).thenReturn(false); when(packageForFirstUser.isInstalledPackage()).thenReturn(true); when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser); @@ -257,12 +257,12 @@ public class WebViewAppPickerTest { final String expectedReason = String.format("(disabled for user %s)", mFirstUser.name); assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)) - .isEqualTo(expectedReason); + .isEqualTo(expectedReason); } @Test public void testDisabledReasonForSingleUserUninstalledPackage() { - UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class); + UserPackage packageForFirstUser = mock(UserPackage.class); when(packageForFirstUser.isEnabledPackage()).thenReturn(true); when(packageForFirstUser.isInstalledPackage()).thenReturn(false); when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser); @@ -273,17 +273,17 @@ public class WebViewAppPickerTest { final String expectedReason = String.format("(uninstalled for user %s)", mFirstUser.name); assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)) - .isEqualTo(expectedReason); + .isEqualTo(expectedReason); } @Test public void testDisabledReasonSeveralUsers() { - UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class); + UserPackage packageForFirstUser = mock(UserPackage.class); when(packageForFirstUser.isEnabledPackage()).thenReturn(false); when(packageForFirstUser.isInstalledPackage()).thenReturn(true); when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser); - UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class); + UserPackage packageForSecondUser = mock(UserPackage.class); when(packageForSecondUser.isEnabledPackage()).thenReturn(true); when(packageForSecondUser.isInstalledPackage()).thenReturn(false); when(packageForSecondUser.getUserInfo()).thenReturn(mSecondUser); @@ -294,7 +294,7 @@ public class WebViewAppPickerTest { final String expectedReason = String.format("(disabled for user %s)", mFirstUser.name); assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)) - .isEqualTo(expectedReason); + .isEqualTo(expectedReason); } /** @@ -303,12 +303,12 @@ public class WebViewAppPickerTest { */ @Test public void testDisabledReasonUninstalledAndDisabled() { - UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class); + UserPackage packageForFirstUser = mock(UserPackage.class); when(packageForFirstUser.isEnabledPackage()).thenReturn(false); when(packageForFirstUser.isInstalledPackage()).thenReturn(false); when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser); - UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class); + UserPackage packageForSecondUser = mock(UserPackage.class); when(packageForSecondUser.isEnabledPackage()).thenReturn(true); when(packageForSecondUser.isInstalledPackage()).thenReturn(true); when(packageForSecondUser.getUserInfo()).thenReturn(mSecondUser); @@ -319,7 +319,7 @@ public class WebViewAppPickerTest { final String expectedReason = String.format("(uninstalled for user %s)", mFirstUser.name); assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)) - .isEqualTo(expectedReason); + .isEqualTo(expectedReason); } /** @@ -343,7 +343,8 @@ public class WebViewAppPickerTest { RadioButtonPreference mockPreference = mock(RadioButtonPreference.class); mPicker.bindPreference(mockPreference, DEFAULT_PACKAGE_NAME, webviewAppInfo, null); mPicker - .bindPreferenceExtra(mockPreference, DEFAULT_PACKAGE_NAME, webviewAppInfo, null, null); + .bindPreferenceExtra(mockPreference, DEFAULT_PACKAGE_NAME, webviewAppInfo, null, + null); verify(mockPreference, times(1)).setTitle(eq("myPackage myVersionName")); verify(mockPreference, times(1)).setTitle(any()); }