From 75f0b1b2e43881a19802362763e28b0f693ae724 Mon Sep 17 00:00:00 2001 From: Gustav Sennton Date: Fri, 10 Mar 2017 12:22:06 +0000 Subject: [PATCH] WebView implementation Dev setting: Show the version number after name Show the package version of each WebView implementation after their package name in the WebView Implementation Dev Setting. Showing a package version is useful for debugging purposes. Bug: 35621558 Test: run make RunSettingsRoboTests Test: Ensure package version is shown in titles of items in WebView Implementation Dev Setting. Change-Id: If195dd87aebeac1783600b7c9f376ff8e791c3be --- .../settings/webview/WebViewAppPicker.java | 28 ++++++++++++++--- .../webview/WebViewAppPickerTest.java | 31 ++++++++++++++++++- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/webview/WebViewAppPicker.java b/src/com/android/settings/webview/WebViewAppPicker.java index 586ee36a6c6..f1faf9b2c35 100644 --- a/src/com/android/settings/webview/WebViewAppPicker.java +++ b/src/com/android/settings/webview/WebViewAppPicker.java @@ -21,7 +21,9 @@ import static android.provider.Settings.ACTION_WEBVIEW_SETTINGS; import android.app.Activity; import android.content.Intent; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageItemInfo; import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.content.Context; import android.support.annotation.VisibleForTesting; import android.text.TextUtils; @@ -60,8 +62,8 @@ public class WebViewAppPicker extends DefaultAppPickerFragment { getWebViewUpdateServiceWrapper().getValidWebViewApplicationInfos(getContext()); for (ApplicationInfo ai : pkgs) { packageInfoList.add(createDefaultAppInfo(ai, - getDisabledReason(getWebViewUpdateServiceWrapper(), - getContext(), ai.packageName))); + getDisabledReason(getWebViewUpdateServiceWrapper(), + getContext(), ai.packageName))); } return packageInfoList; } @@ -107,10 +109,26 @@ public class WebViewAppPicker extends DefaultAppPickerFragment { return MetricsEvent.WEBVIEW_IMPLEMENTATION; } + private static class WebViewAppInfo extends DefaultAppInfo { + public WebViewAppInfo(PackageItemInfo packageItemInfo, String summary, boolean enabled) { + super(packageItemInfo, summary, enabled); + } + + @Override + public CharSequence loadLabel(PackageManager pm) { + String versionName = ""; + try { + versionName = pm.getPackageInfo(packageItemInfo.packageName, 0).versionName; + } catch (PackageManager.NameNotFoundException e) { + } + return String.format("%s %s", super.loadLabel(pm), versionName); + } + } + + @VisibleForTesting - DefaultAppInfo createDefaultAppInfo( - ApplicationInfo applicationInfo, String disabledReason) { - return new DefaultAppInfo(applicationInfo, disabledReason, + DefaultAppInfo createDefaultAppInfo(PackageItemInfo packageItemInfo, String disabledReason) { + return new WebViewAppInfo(packageItemInfo, disabledReason, TextUtils.isEmpty(disabledReason) /* enabled */); } diff --git a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java index c58ce37149f..728e35797ce 100644 --- a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java +++ b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java @@ -19,6 +19,7 @@ package com.android.settings.webview; import static android.provider.Settings.ACTION_WEBVIEW_SETTINGS; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; @@ -33,9 +34,11 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageItemInfo; +import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.os.UserManager; -import android.support.v7.preference.PreferenceManager; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; @@ -325,4 +328,30 @@ public class WebViewAppPickerTest { assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)).isEqualTo(EXPECTED_DISABLED_REASON); } + + /** + * Ensure that the version name of a WebView package is displayed after its name in the + * preference title. + */ + @Test + public void testWebViewVersionAddedAfterLabel() throws PackageManager.NameNotFoundException { + PackageItemInfo mockPackageItemInfo = mock(PackageItemInfo.class); + mockPackageItemInfo.packageName = DEFAULT_PACKAGE_NAME; + when(mockPackageItemInfo.loadLabel(any())).thenReturn("myPackage"); + DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo( + mockPackageItemInfo, "" /* disabledReason */); + + PackageInfo packageInfo = new PackageInfo(); + packageInfo.versionName = "myVersionName"; + PackageManager pm = mock(PackageManager.class); + when(pm.getPackageInfo(eq(DEFAULT_PACKAGE_NAME), anyInt())).thenReturn(packageInfo); + when(mPackageManager.getPackageManager()).thenReturn(pm); + + RadioButtonPreference mockPreference = mock(RadioButtonPreference.class); + mPicker.configurePreferenceFromAppInfo(mockPreference, + DEFAULT_PACKAGE_NAME, webviewAppInfo, null, null); + + verify(mockPreference, times(1)).setTitle(eq("myPackage myVersionName")); + verify(mockPreference, times(1)).setTitle(any()); + } }