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
This commit is contained in:
Gustav Sennton
2017-03-10 12:22:06 +00:00
parent e11cb90ed2
commit 75f0b1b2e4
2 changed files with 53 additions and 6 deletions

View File

@@ -21,7 +21,9 @@ import static android.provider.Settings.ACTION_WEBVIEW_SETTINGS;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageItemInfo;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.Context; import android.content.Context;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.text.TextUtils; import android.text.TextUtils;
@@ -107,10 +109,26 @@ public class WebViewAppPicker extends DefaultAppPickerFragment {
return MetricsEvent.WEBVIEW_IMPLEMENTATION; 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 @VisibleForTesting
DefaultAppInfo createDefaultAppInfo( DefaultAppInfo createDefaultAppInfo(PackageItemInfo packageItemInfo, String disabledReason) {
ApplicationInfo applicationInfo, String disabledReason) { return new WebViewAppInfo(packageItemInfo, disabledReason,
return new DefaultAppInfo(applicationInfo, disabledReason,
TextUtils.isEmpty(disabledReason) /* enabled */); TextUtils.isEmpty(disabledReason) /* enabled */);
} }

View File

@@ -19,6 +19,7 @@ package com.android.settings.webview;
import static android.provider.Settings.ACTION_WEBVIEW_SETTINGS; import static android.provider.Settings.ACTION_WEBVIEW_SETTINGS;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq; import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
@@ -33,9 +34,11 @@ import android.app.Activity;
import android.content.Context; 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.PackageItemInfo;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo; import android.content.pm.UserInfo;
import android.os.UserManager; import android.os.UserManager;
import android.support.v7.preference.PreferenceManager;
import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
@@ -325,4 +328,30 @@ public class WebViewAppPickerTest {
assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, assertThat(mPicker.getDisabledReason(wvusWrapper, mContext,
DEFAULT_PACKAGE_NAME)).isEqualTo(EXPECTED_DISABLED_REASON); 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());
}
} }