chromium/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/IPHCommand.java

// Copyright 2020 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.user_education;

import android.content.res.Resources;
import android.graphics.Rect;
import android.view.View;

import androidx.annotation.Nullable;

import org.chromium.components.browser_ui.widget.highlight.ViewHighlighter.HighlightParams;
import org.chromium.ui.widget.AnchoredPopupWindow;
import org.chromium.ui.widget.ViewRectProvider;

/** Class encapsulating the data needed to show in-product help (IPH). */
public class IPHCommand {
    private Resources mResources;
    public final String featureName;
    public final int stringId;
    public Object[] stringArgs;
    public String contentString;
    public final int accessibilityStringId;
    public Object[] accessibilityStringArgs;
    public String accessibilityText;
    public final boolean dismissOnTouch;
    public final View anchorView;
    @Nullable public final Runnable onDismissCallback;
    @Nullable public final Runnable onShowCallback;
    @Nullable public final Runnable onBlockedCallback;
    public Rect insetRect;
    public final long autoDismissTimeout;
    public final ViewRectProvider viewRectProvider;
    @Nullable public final HighlightParams highlightParams;
    public final Rect anchorRect;
    public final boolean removeArrow;
    public final boolean showTextBubble;
    @AnchoredPopupWindow.VerticalOrientation public final int preferredVerticalOrientation;

    public void fetchFromResources() {
        if (contentString == null) {
            assert mResources != null;
            if (stringArgs != null) {
                contentString = mResources.getString(stringId, stringArgs);
            } else {
                contentString = mResources.getString(stringId);
            }
        }

        if (accessibilityText == null) {
            assert mResources != null;
            if (accessibilityStringArgs != null) {
                accessibilityText =
                        mResources.getString(accessibilityStringId, accessibilityStringArgs);
            } else {
                accessibilityText = mResources.getString(accessibilityStringId);
            }
        }

        if (insetRect == null && anchorRect == null) {
            int yInsetPx =
                    mResources.getDimensionPixelOffset(R.dimen.iph_text_bubble_menu_anchor_y_inset);
            insetRect = new Rect(0, 0, 0, yInsetPx);
        }
    }

    IPHCommand(
            Resources resources,
            String featureName,
            int stringId,
            Object[] stringArgs,
            int accessibilityStringId,
            Object[] accessibilityStringArgs,
            boolean dismissOnTouch,
            View anchorView,
            Runnable onDismissCallback,
            Runnable onShowCallback,
            Runnable onBlockedCallback,
            long autoDismissTimeout,
            ViewRectProvider viewRectProvider,
            HighlightParams params,
            Rect anchorRect,
            boolean removeArrow,
            boolean showTextBubble,
            @AnchoredPopupWindow.VerticalOrientation int preferredVerticalOrientation,
            Rect insetRect) {
        this.mResources = resources;
        this.featureName = featureName;
        this.stringId = stringId;
        this.stringArgs = stringArgs;
        this.accessibilityStringId = accessibilityStringId;
        this.accessibilityStringArgs = accessibilityStringArgs;
        this.dismissOnTouch = dismissOnTouch;
        this.anchorView = anchorView;
        this.onDismissCallback = onDismissCallback;
        this.onShowCallback = onShowCallback;
        this.onBlockedCallback = onBlockedCallback;
        this.autoDismissTimeout = autoDismissTimeout;
        this.viewRectProvider = viewRectProvider;
        this.highlightParams = params;
        this.anchorRect = anchorRect;
        this.removeArrow = removeArrow;
        this.showTextBubble = showTextBubble;
        this.preferredVerticalOrientation = preferredVerticalOrientation;
        this.insetRect = insetRect;
    }
}