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
diff --git a/src/com/android/settings/webview/WebViewAppPicker.java b/src/com/android/settings/webview/WebViewAppPicker.java
index 586ee36..f1faf9b 100644
--- a/src/com/android/settings/webview/WebViewAppPicker.java
+++ b/src/com/android/settings/webview/WebViewAppPicker.java
@@ -21,7 +21,9 @@
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 @@
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 @@
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 c58ce37..728e357 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 @@
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.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 @@
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());
+ }
}