chromium/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/MultiInstanceIphController.java

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.chrome.browser.multiwindow;

import android.app.Activity;
import android.os.Handler;
import android.os.Looper;
import android.view.View;

import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.ui.appmenu.AppMenuHandler;
import org.chromium.chrome.browser.user_education.IPHCommandBuilder;
import org.chromium.chrome.browser.user_education.UserEducationHelper;
import org.chromium.components.feature_engagement.FeatureConstants;

/** Controller to manage when and how we show multi-instance in-product help messages to users. */
public class MultiInstanceIphController {
    /**
     * Attempts to show an IPH text bubble about the instance swicher in app menu.
     *
     * @param activity The current activity.
     * @param profile The current profile.
     * @param toolbarMenuButton The toolbar menu button to which IPH will be anchored.
     * @param appMenuHandler The app menu handler.
     * @param menuId ID of the menu item to be highlighted.
     */
    public static void maybeShowInProductHelp(
            Activity activity,
            Profile profile,
            View toolbarMenuButton,
            AppMenuHandler appMenuHandler,
            int menuId) {
        UserEducationHelper userEducationHelper =
                new UserEducationHelper(activity, profile, new Handler(Looper.getMainLooper()));
        userEducationHelper.requestShowIPH(
                new IPHCommandBuilder(
                                toolbarMenuButton.getContext().getResources(),
                                FeatureConstants.INSTANCE_SWITCHER,
                                R.string.iph_instance_switcher_text,
                                R.string.iph_instance_switcher_text)
                        .setAnchorView(toolbarMenuButton)
                        .setOnShowCallback(
                                () -> {
                                    appMenuHandler.setMenuHighlight(menuId);
                                })
                        .setOnDismissCallback(
                                () -> {
                                    appMenuHandler.clearMenuHighlight();
                                })
                        .build());
    }
}