Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 98f1c9fe authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Prevent add menu item twice"

parents d6b82993 d080b93d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -4,6 +4,10 @@ android_library {
    srcs: ["src/**/*.java"],
    resource_dirs: ["res"],

    libs: [
        "androidx.annotation_annotation",
    ],

    sdk_version: "system_current",
    min_sdk_version: "21",
}
+23 −9
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;

import androidx.annotation.VisibleForTesting;

import com.android.settingslib.widget.R;

import java.net.URISyntaxException;
@@ -45,7 +47,8 @@ import java.util.Locale;
public class HelpUtils {
    private final static String TAG = HelpUtils.class.getSimpleName();

    private static final int MENU_HELP = Menu.FIRST + 100;
    @VisibleForTesting
    static final int MENU_HELP = Menu.FIRST + 100;

    /**
     * Help URL query parameter key for the preferred language.
@@ -69,10 +72,15 @@ public class HelpUtils {
    private static String sCachedVersionCode = null;

    /** Static helper that is not instantiable */
    private HelpUtils() { }
    private HelpUtils() {
    }

    public static boolean prepareHelpMenuItem(Activity activity, Menu menu, String helpUri,
            String backupContext) {
        // menu contains help item, skip it
        if (menu.findItem(MENU_HELP) != null) {
            return false;
        }
        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);
@@ -80,6 +88,10 @@ public class HelpUtils {

    public static boolean prepareHelpMenuItem(Activity activity, Menu menu, int helpUriResource,
            String backupContext) {
        // menu contains help item, skip it
        if (menu.findItem(MENU_HELP) != null) {
            return false;
        }
        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),
@@ -94,7 +106,8 @@ public class HelpUtils {
     *
     * @return returns whether the help menu item has been made visible.
     */
    public static boolean prepareHelpMenuItem(final Activity activity, MenuItem helpMenuItem,
    @VisibleForTesting
    static boolean prepareHelpMenuItem(final Activity activity, MenuItem helpMenuItem,
            String helpUriString, String backupContext) {
        if (Global.getInt(activity.getContentResolver(), Global.DEVICE_PROVISIONED, 0) == 0) {
            return false;
@@ -212,6 +225,7 @@ public class HelpUtils {
    /**
     * Adds two query parameters into the Uri, namely the language code and the version code
     * of the app's package as gotten via the context.
     *
     * @return the uri with added query parameters
     */
    private static Uri uriWithAddedParameters(Context context, Uri baseUri) {
+35 −0
Original line number Diff line number Diff line
@@ -16,11 +16,15 @@

package com.android.settingslib;

import static com.android.settingslib.HelpUtils.MENU_HELP;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@@ -35,6 +39,7 @@ import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.provider.Settings;
import android.view.Menu;
import android.view.MenuItem;

import org.junit.Before;
@@ -171,4 +176,34 @@ public class HelpUtilsTest {
        verify(item).setVisible(true);
        verify(item).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    }

    @Test
    public void prepareHelpMenuItem_noItem_addItem() {
        final Menu item = mock(Menu.class);
        when(item.findItem(MENU_HELP)).thenReturn(null);
        when(item.add(0, MENU_HELP, 0,
                com.android.settingslib.widget.R.string.help_feedback_label)).thenReturn(
                mock(MenuItem.class));

        HelpUtils.prepareHelpMenuItem(mActivity, item, TEST_HELP_URL, "backup_url");
        HelpUtils.prepareHelpMenuItem(mActivity, item, 0, "backup_url");

        verify(item, times(2)).add(0, MENU_HELP, 0,
                com.android.settingslib.widget.R.string.help_feedback_label);
    }

    @Test
    public void prepareHelpMenuItem_hasItem_notAddItem() {
        final Menu item = mock(Menu.class);
        when(item.findItem(MENU_HELP)).thenReturn(mock(MenuItem.class));
        when(item.add(0, MENU_HELP, 0,
                com.android.settingslib.widget.R.string.help_feedback_label)).thenReturn(
                mock(MenuItem.class));

        HelpUtils.prepareHelpMenuItem(mActivity, item, TEST_HELP_URL, "backup_url");
        HelpUtils.prepareHelpMenuItem(mActivity, item, 0, "backup_url");

        verify(item, never()).add(0, MENU_HELP, 0,
                com.android.settingslib.widget.R.string.help_feedback_label);
    }
}