From c93dadacddd1233b5d39426b809c47a8b5ccc5ff Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 3 Mar 2017 15:25:37 -0800 Subject: [PATCH] Show help icon in actionbar Fix: 35955986 Test: RunSettingsLibRoboTests Change-Id: If4c328cacf1e3c9a5f66eeb248749c97c80cdb6c --- .../res/drawable/ic_help_actionbar.xml | 27 +++++++++++ .../com/android/settingslib/HelpUtils.java | 6 ++- .../android/settingslib/HelpUtilsTest.java | 48 ++++++++++++++++++- 3 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 packages/SettingsLib/res/drawable/ic_help_actionbar.xml diff --git a/packages/SettingsLib/res/drawable/ic_help_actionbar.xml b/packages/SettingsLib/res/drawable/ic_help_actionbar.xml new file mode 100644 index 0000000000000..36146256b28e8 --- /dev/null +++ b/packages/SettingsLib/res/drawable/ic_help_actionbar.xml @@ -0,0 +1,27 @@ + + + + + + diff --git a/packages/SettingsLib/src/com/android/settingslib/HelpUtils.java b/packages/SettingsLib/src/com/android/settingslib/HelpUtils.java index fc697cea40bae..58047bb8e3f3f 100644 --- a/packages/SettingsLib/src/com/android/settingslib/HelpUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/HelpUtils.java @@ -76,12 +76,14 @@ public class HelpUtils { public static boolean prepareHelpMenuItem(Activity activity, Menu menu, String helpUri, String backupContext) { MenuItem helpItem = menu.add(0, MENU_HELP, 0, R.string.help_feedback_label); + helpItem.setIcon(R.drawable.ic_help_actionbar); return prepareHelpMenuItem(activity, helpItem, helpUri, backupContext); } public static boolean prepareHelpMenuItem(Activity activity, Menu menu, int helpUriResource, String backupContext) { MenuItem helpItem = menu.add(0, MENU_HELP, 0, R.string.help_feedback_label); + helpItem.setIcon(R.drawable.ic_help_actionbar); return prepareHelpMenuItem(activity, helpItem, activity.getString(helpUriResource), backupContext); } @@ -125,7 +127,7 @@ public class HelpUtils { return true; } }); - helpMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); + helpMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); helpMenuItem.setVisible(true); } else { helpMenuItem.setVisible(false); @@ -209,7 +211,7 @@ public class HelpUtils { * of the app's package as gotten via the context. * @return the uri with added query parameters */ - public static Uri uriWithAddedParameters(Context context, Uri baseUri) { + private static Uri uriWithAddedParameters(Context context, Uri baseUri) { Uri.Builder builder = baseUri.buildUpon(); // Add in the preferred language diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java index 5d843c1a80cab..56891f66b03c4 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java @@ -16,10 +16,18 @@ package com.android.settingslib; +import android.app.Activity; import android.content.Context; import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.content.res.TypedArray; +import android.provider.Settings; +import android.view.MenuItem; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -27,11 +35,14 @@ import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** @@ -40,6 +51,7 @@ import static org.mockito.Mockito.when; @RunWith(RobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class HelpUtilsTest { + private static final String TEST_HELP_URL = "intent:#Intent;action=com.android.test;end"; private static final String PACKAGE_NAME_KEY = "package-name-key"; private static final String PACKAGE_NAME_VALUE = "package-name-value"; private static final String HELP_INTENT_EXTRA_KEY = "help-intent-extra"; @@ -49,6 +61,11 @@ public class HelpUtilsTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mContext; + @Mock + private Activity mActivity; + @Mock + private PackageManager mPackageManager; + @Before public void setUp() { @@ -65,6 +82,8 @@ public class HelpUtilsTest { .thenReturn(FEEDBACK_INTENT_EXTRA_KEY); when(mContext.getResources().getString(R.string.config_feedbackIntentNameKey)) .thenReturn(FEEDBACK_INTENT_NAME_KEY); + when(mActivity.getPackageManager()).thenReturn(mPackageManager); + } @@ -127,4 +146,31 @@ public class HelpUtilsTest { assertThat(intent.hasExtra(FEEDBACK_INTENT_EXTRA_KEY)).isFalse(); assertThat(intent.hasExtra(FEEDBACK_INTENT_NAME_KEY)).isFalse(); } -} + + @Test + public void prepareHelpMenuItem_shouldShowIcon() { + Settings.Global.putInt(RuntimeEnvironment.application.getContentResolver(), + Settings.Global.DEVICE_PROVISIONED, 1); + final Resources res = mock(Resources.class); + final ResolveInfo resolveInfo = new ResolveInfo(); + resolveInfo.activityInfo = new ActivityInfo(); + resolveInfo.activityInfo.applicationInfo = new ApplicationInfo(); + resolveInfo.activityInfo.applicationInfo.packageName = "pkg"; + resolveInfo.activityInfo.name = "name"; + final MenuItem item = mock(MenuItem.class); + + + when(mActivity.getContentResolver()) + .thenReturn(RuntimeEnvironment.application.getContentResolver()); + when(mActivity.getResources()).thenReturn(res); + when(mActivity.obtainStyledAttributes(any(int[].class))) + .thenReturn(mock(TypedArray.class)); + when(mPackageManager.resolveActivity(any(Intent.class), anyInt())) + .thenReturn(resolveInfo); + + HelpUtils.prepareHelpMenuItem(mActivity, item, TEST_HELP_URL, "backup_url"); + + verify(item).setVisible(true); + verify(item).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + } +} \ No newline at end of file