Commit 23f02cf0 authored by Brandon Wylie's avatar Brandon Wylie Committed by Chromium LUCI CQ

Remove ChromeActivity reference in ToolbarButtonInProductHelpController

Bug: 1123209
Change-Id: I5a379fb181f277cd3cd67c193912e29a0b949836
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2566738
Commit-Queue: Yaron Friedman <yfriedman@chromium.org>
Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarPatrick Noland <pnoland@chromium.org>
Cr-Commit-Position: refs/heads/master@{#837105}
parent b002f221
...@@ -339,9 +339,6 @@ specific_include_rules = { ...@@ -339,9 +339,6 @@ specific_include_rules = {
"ReturnToChromeExperimentsUtil\.java": [ "ReturnToChromeExperimentsUtil\.java": [
"+chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java", "+chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java",
], ],
"ToolbarButtonInProductHelpController\.java": [
"+chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java",
],
"CustomTabToolbar\.java": [ "CustomTabToolbar\.java": [
"+chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java", "+chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java",
], ],
......
...@@ -330,8 +330,10 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { ...@@ -330,8 +330,10 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
if (mActivity == null) return; if (mActivity == null) return;
mToolbarButtonIphTabSupplier = new ObservableSupplierImpl<>(); mToolbarButtonIphTabSupplier = new ObservableSupplierImpl<>();
mToolbarButtonInProductHelpController = mToolbarButtonInProductHelpController =
new ToolbarButtonInProductHelpController(mActivity, mAppMenuCoordinator, new ToolbarButtonInProductHelpController(mActivity, mActivity.getWindowAndroid(),
mActivity.getLifecycleDispatcher(), mToolbarButtonIphTabSupplier); mAppMenuCoordinator, mActivity.getLifecycleDispatcher(),
mToolbarButtonIphTabSupplier, mActivity::isInOverviewMode,
mToolbarManager.getMenuButtonView(), mToolbarManager.getSecurityIconView());
ActivityTabProvider activityTabProvider = mActivity.getActivityTabProvider(); ActivityTabProvider activityTabProvider = mActivity.getActivityTabProvider();
mToolbarButtonIphTabObserver = new ActivityTabTabObserver(activityTabProvider) { mToolbarButtonIphTabObserver = new ActivityTabTabObserver(activityTabProvider) {
@Override @Override
......
...@@ -2,8 +2,10 @@ noparent = True ...@@ -2,8 +2,10 @@ noparent = True
include_rules = [ include_rules = [
"-chrome/android/java/src/org/chromium/chrome/browser", "-chrome/android/java/src/org/chromium/chrome/browser",
"+base/android/java/src/org/chromium/base/supplier",
"+chrome/android/java/src/org/chromium/chrome/browser/toolbar", "+chrome/android/java/src/org/chromium/chrome/browser/toolbar",
"+chrome/android/java/src/org/chromium/chrome/browser/omnibox", "+chrome/android/java/src/org/chromium/chrome/browser/omnibox",
"+ui/android/java/src/org/chromium/ui/base",
] ]
specific_include_rules = { specific_include_rules = {
......
// Copyright 2018 The Chromium Authors. All rights reserved. // Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
package org.chromium.chrome.browser.toolbar; package org.chromium.chrome.browser.toolbar;
import android.app.Activity;
import android.os.Handler; import android.os.Handler;
import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.Supplier;
import org.chromium.base.task.PostTask; import org.chromium.base.task.PostTask;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl;
import org.chromium.chrome.browser.datareduction.DataReductionSavingsMilestonePromo; import org.chromium.chrome.browser.datareduction.DataReductionSavingsMilestonePromo;
import org.chromium.chrome.browser.download.DownloadUtils; import org.chromium.chrome.browser.download.DownloadUtils;
...@@ -43,6 +45,8 @@ import org.chromium.components.feature_engagement.EventConstants; ...@@ -43,6 +45,8 @@ import org.chromium.components.feature_engagement.EventConstants;
import org.chromium.components.feature_engagement.FeatureConstants; import org.chromium.components.feature_engagement.FeatureConstants;
import org.chromium.components.feature_engagement.Tracker; import org.chromium.components.feature_engagement.Tracker;
import org.chromium.content_public.browser.UiThreadTaskTraits; import org.chromium.content_public.browser.UiThreadTaskTraits;
import org.chromium.ui.base.DeviceFormFactor;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.url.GURL; import org.chromium.url.GURL;
/** /**
...@@ -52,29 +56,49 @@ import org.chromium.url.GURL; ...@@ -52,29 +56,49 @@ import org.chromium.url.GURL;
public class ToolbarButtonInProductHelpController public class ToolbarButtonInProductHelpController
implements ScreenshotMonitorDelegate, PauseResumeWithNativeObserver { implements ScreenshotMonitorDelegate, PauseResumeWithNativeObserver {
private final CurrentTabObserver mPageLoadObserver; private final CurrentTabObserver mPageLoadObserver;
private final ChromeActivity mActivity; private final Activity mActivity;
private final WindowAndroid mWindowAndroid;
private final ActivityLifecycleDispatcher mLifecycleDispatcher;
private final AppMenuPropertiesDelegate mAppMenuPropertiesDelegate; private final AppMenuPropertiesDelegate mAppMenuPropertiesDelegate;
private final ScreenshotMonitor mScreenshotMonitor; private final ScreenshotMonitor mScreenshotMonitor;
private AppMenuHandler mAppMenuHandler;
private UserEducationHelper mUserEducationHelper;
private final Handler mHandler = new Handler(); private final Handler mHandler = new Handler();
private final View mMenuButtonAnchorView;
private final View mSecurityIconAnchorView;
private final AppMenuHandler mAppMenuHandler;
private final UserEducationHelper mUserEducationHelper;
private final Supplier<Tab> mCurrentTabSupplier;
private final Supplier<Boolean> mIsInOverviewModeSupplier;
/** /**
* @param activity {@link ChromeActivity} on which this class runs. * @param activity {@link Activity} on which this class runs.
* @param windowAndroid {@link WindowAndroid} for the current Activity.
* @param appMenuCoordinator {@link AppMenuCoordinator} whose visual state is to be updated * @param appMenuCoordinator {@link AppMenuCoordinator} whose visual state is to be updated
* accordingly. * accordingly.
* @param lifecycleDispatcher {@link LifecycleDispatcher} that helps observe activity lifecycle. * @param lifecycleDispatcher {@link LifecycleDispatcher} that helps observe activity lifecycle.
* @param tabSupplier An observable supplier of the current {@link Tab}. * @param tabSupplier An observable supplier of the current {@link Tab}.
* @param isInOverviewModeSupplier Supplies whether the app is in overview mode.
* @param menuButtonAnchorView The menu button view to serve as an anchor.
* @param securityIconAnchorView The security icon to serve as an anchor.
*/ */
public ToolbarButtonInProductHelpController(@NonNull final ChromeActivity activity, public ToolbarButtonInProductHelpController(@NonNull Activity activity,
@NonNull AppMenuCoordinator appMenuCoordinator, @NonNull WindowAndroid windowAndroid, @NonNull AppMenuCoordinator appMenuCoordinator,
@NonNull ActivityLifecycleDispatcher lifecycleDispatcher, @NonNull ActivityLifecycleDispatcher lifecycleDispatcher,
@NonNull ObservableSupplier<Tab> tabSupplier) { @NonNull ObservableSupplier<Tab> tabSupplier,
@NonNull Supplier<Boolean> isInOverviewModeSupplier, @NonNull View menuButtonAnchorView,
@NonNull View securityIconAnchorView) {
mActivity = activity; mActivity = activity;
mWindowAndroid = windowAndroid;
mAppMenuHandler = appMenuCoordinator.getAppMenuHandler();
mAppMenuPropertiesDelegate = appMenuCoordinator.getAppMenuPropertiesDelegate();
mMenuButtonAnchorView = menuButtonAnchorView;
mSecurityIconAnchorView = securityIconAnchorView;
mIsInOverviewModeSupplier = isInOverviewModeSupplier;
mUserEducationHelper = mUserEducationHelper =
new UserEducationHelper(mActivity, mHandler, TrackerFactory::getTrackerForProfile); new UserEducationHelper(mActivity, mHandler, TrackerFactory::getTrackerForProfile);
mScreenshotMonitor = new ScreenshotMonitor(this); mScreenshotMonitor = new ScreenshotMonitor(this);
lifecycleDispatcher.register(this); mLifecycleDispatcher = lifecycleDispatcher;
mLifecycleDispatcher.register(this);
mCurrentTabSupplier = tabSupplier;
mPageLoadObserver = new CurrentTabObserver(tabSupplier, new EmptyTabObserver() { mPageLoadObserver = new CurrentTabObserver(tabSupplier, new EmptyTabObserver() {
/** /**
* Stores total data saved at the start of a page load. Used to calculate delta at the * Stores total data saved at the start of a page load. Used to calculate delta at the
...@@ -123,7 +147,7 @@ public class ToolbarButtonInProductHelpController ...@@ -123,7 +147,7 @@ public class ToolbarButtonInProductHelpController
} }
private void handleIPHForErrorPageShown(Tab tab) { private void handleIPHForErrorPageShown(Tab tab) {
if (!(mActivity instanceof ChromeTabbedActivity) || mActivity.isTablet()) { if (DeviceFormFactor.isWindowOnTablet(mWindowAndroid)) {
return; return;
} }
...@@ -139,13 +163,11 @@ public class ToolbarButtonInProductHelpController ...@@ -139,13 +163,11 @@ public class ToolbarButtonInProductHelpController
tracker.notifyEvent(EventConstants.USER_HAS_SEEN_DINO); tracker.notifyEvent(EventConstants.USER_HAS_SEEN_DINO);
} }
}); });
mAppMenuHandler = appMenuCoordinator.getAppMenuHandler();
mAppMenuPropertiesDelegate = appMenuCoordinator.getAppMenuPropertiesDelegate();
} }
public void destroy() { public void destroy() {
mPageLoadObserver.destroy(); mPageLoadObserver.destroy();
mLifecycleDispatcher.unregister(this);
} }
/** /**
...@@ -157,9 +179,8 @@ public class ToolbarButtonInProductHelpController ...@@ -157,9 +179,8 @@ public class ToolbarButtonInProductHelpController
FeatureConstants.DOWNLOAD_INFOBAR_DOWNLOAD_CONTINUING_FEATURE, FeatureConstants.DOWNLOAD_INFOBAR_DOWNLOAD_CONTINUING_FEATURE,
R.string.iph_download_infobar_download_continuing_text, R.string.iph_download_infobar_download_continuing_text,
R.string.iph_download_infobar_download_continuing_text) R.string.iph_download_infobar_download_continuing_text)
.setAnchorView(mActivity.getToolbarManager().getMenuButtonView()) .setAnchorView(mMenuButtonAnchorView)
.setOnShowCallback( .setOnShowCallback(() -> turnOnHighlightForMenuItem(R.id.downloads_menu_id))
() -> turnOnHighlightForMenuItem(R.id.downloads_menu_id))
.setOnDismissCallback(this::turnOffHighlightForMenuItem) .setOnDismissCallback(this::turnOffHighlightForMenuItem)
.build()); .build());
} }
...@@ -178,7 +199,7 @@ public class ToolbarButtonInProductHelpController ...@@ -178,7 +199,7 @@ public class ToolbarButtonInProductHelpController
// left until onScreenshotTaken() since it is less expensive to keep monitoring on and // left until onScreenshotTaken() since it is less expensive to keep monitoring on and
// check when the help UI is accessed than it is to start/stop monitoring per tab change // check when the help UI is accessed than it is to start/stop monitoring per tab change
// (e.g. tab switch or in overview mode). // (e.g. tab switch or in overview mode).
if (mActivity.isTablet()) return; if (DeviceFormFactor.isWindowOnTablet(mWindowAndroid)) return;
mScreenshotMonitor.startMonitoring(); mScreenshotMonitor.startMonitoring();
mHandler.post(this::showVideoTutorialTryNowUIForDownload); mHandler.post(this::showVideoTutorialTryNowUIForDownload);
} }
...@@ -191,17 +212,16 @@ public class ToolbarButtonInProductHelpController ...@@ -191,17 +212,16 @@ public class ToolbarButtonInProductHelpController
@Override @Override
public void onScreenshotTaken() { public void onScreenshotTaken() {
boolean isIncognito = boolean isIncognito =
mActivity.getActivityTab() != null && mActivity.getActivityTab().isIncognito(); mCurrentTabSupplier.get() != null && mCurrentTabSupplier.get().isIncognito();
Profile profile = IncognitoUtils.getProfileFromWindowAndroid( Profile profile = IncognitoUtils.getProfileFromWindowAndroid(mWindowAndroid, isIncognito);
mActivity.getWindowAndroid(), isIncognito);
Tracker tracker = TrackerFactory.getTrackerForProfile(profile); Tracker tracker = TrackerFactory.getTrackerForProfile(profile);
tracker.notifyEvent(EventConstants.SCREENSHOT_TAKEN_CHROME_IN_FOREGROUND); tracker.notifyEvent(EventConstants.SCREENSHOT_TAKEN_CHROME_IN_FOREGROUND);
PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> { PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> {
showDownloadPageTextBubble( showDownloadPageTextBubble(
mActivity.getActivityTab(), FeatureConstants.DOWNLOAD_PAGE_SCREENSHOT_FEATURE); mCurrentTabSupplier.get(), FeatureConstants.DOWNLOAD_PAGE_SCREENSHOT_FEATURE);
ScreenshotTabObserver tabObserver = ScreenshotTabObserver tabObserver =
ScreenshotTabObserver.from(mActivity.getActivityTab()); ScreenshotTabObserver.from(mCurrentTabSupplier.get());
if (tabObserver != null) tabObserver.onScreenshotTaken(); if (tabObserver != null) tabObserver.onScreenshotTaken();
}); });
} }
...@@ -218,11 +238,10 @@ public class ToolbarButtonInProductHelpController ...@@ -218,11 +238,10 @@ public class ToolbarButtonInProductHelpController
FeatureConstants.DATA_SAVER_DETAIL_FEATURE, FeatureConstants.DATA_SAVER_DETAIL_FEATURE,
R.string.iph_data_saver_detail_text, R.string.iph_data_saver_detail_text,
R.string.iph_data_saver_detail_accessibility_text) R.string.iph_data_saver_detail_accessibility_text)
.setAnchorView(mActivity.getToolbarManager().getMenuButtonView()) .setAnchorView(mMenuButtonAnchorView)
.setOnShowCallback( .setOnShowCallback(()
() -> turnOnHighlightForMenuItem(
-> turnOnHighlightForMenuItem( getDataReductionMenuItemHighlight()))
getDataReductionMenuItemHighlight()))
.setOnDismissCallback(this::turnOffHighlightForMenuItem) .setOnDismissCallback(this::turnOffHighlightForMenuItem)
.build()); .build());
} }
...@@ -243,25 +262,22 @@ public class ToolbarButtonInProductHelpController ...@@ -243,25 +262,22 @@ public class ToolbarButtonInProductHelpController
new IPHCommandBuilder(mActivity.getResources(), new IPHCommandBuilder(mActivity.getResources(),
FeatureConstants.DATA_SAVER_MILESTONE_PROMO_FEATURE, promo.getPromoText(), FeatureConstants.DATA_SAVER_MILESTONE_PROMO_FEATURE, promo.getPromoText(),
promo.getPromoText()) promo.getPromoText())
.setAnchorView(mActivity.getToolbarManager().getMenuButtonView()) .setAnchorView(mMenuButtonAnchorView)
.setOnShowCallback( .setOnShowCallback(()
() -> turnOnHighlightForMenuItem(
-> turnOnHighlightForMenuItem( getDataReductionMenuItemHighlight()))
getDataReductionMenuItemHighlight()))
.setOnDismissCallback(dismissCallback) .setOnDismissCallback(dismissCallback)
.build()); .build());
} }
// Attempts to show an IPH text bubble for page in preview mode. // Attempts to show an IPH text bubble for page in preview mode.
private void showPreviewVerboseStatus() { private void showPreviewVerboseStatus() {
mUserEducationHelper.requestShowIPH( mUserEducationHelper.requestShowIPH(new IPHCommandBuilder(mActivity.getResources(),
new IPHCommandBuilder(mActivity.getResources(), FeatureConstants.PREVIEWS_OMNIBOX_UI_FEATURE, R.string.iph_previews_omnibox_ui_text,
FeatureConstants.PREVIEWS_OMNIBOX_UI_FEATURE, R.string.iph_previews_omnibox_ui_accessibility_text)
R.string.iph_previews_omnibox_ui_text, .setAnchorView(mSecurityIconAnchorView)
R.string.iph_previews_omnibox_ui_accessibility_text) .setShouldHighlight(false)
.setAnchorView(mActivity.getToolbarManager().getSecurityIconView()) .build());
.setShouldHighlight(false)
.build());
} }
private void showDownloadHomeIPH() { private void showDownloadHomeIPH() {
...@@ -269,9 +285,8 @@ public class ToolbarButtonInProductHelpController ...@@ -269,9 +285,8 @@ public class ToolbarButtonInProductHelpController
new IPHCommandBuilder(mActivity.getResources(), new IPHCommandBuilder(mActivity.getResources(),
FeatureConstants.DOWNLOAD_HOME_FEATURE, R.string.iph_download_home_text, FeatureConstants.DOWNLOAD_HOME_FEATURE, R.string.iph_download_home_text,
R.string.iph_download_home_accessibility_text) R.string.iph_download_home_accessibility_text)
.setAnchorView(mActivity.getToolbarManager().getMenuButtonView()) .setAnchorView(mMenuButtonAnchorView)
.setOnShowCallback( .setOnShowCallback(() -> turnOnHighlightForMenuItem(R.id.downloads_menu_id))
() -> turnOnHighlightForMenuItem(R.id.downloads_menu_id))
.setOnDismissCallback(this::turnOffHighlightForMenuItem) .setOnDismissCallback(this::turnOffHighlightForMenuItem)
.build()); .build());
} }
...@@ -282,8 +297,9 @@ public class ToolbarButtonInProductHelpController ...@@ -282,8 +297,9 @@ public class ToolbarButtonInProductHelpController
*/ */
private void showDownloadPageTextBubble(final Tab tab, String featureName) { private void showDownloadPageTextBubble(final Tab tab, String featureName) {
if (tab == null) return; if (tab == null) return;
if (!(mActivity instanceof ChromeTabbedActivity) || mActivity.isTablet() if (DeviceFormFactor.isWindowOnTablet(mWindowAndroid)
|| mActivity.isInOverviewMode() || !DownloadUtils.isAllowedToDownloadPage(tab)) { || (mIsInOverviewModeSupplier.get() != null && mIsInOverviewModeSupplier.get())
|| !DownloadUtils.isAllowedToDownloadPage(tab)) {
return; return;
} }
...@@ -296,7 +312,7 @@ public class ToolbarButtonInProductHelpController ...@@ -296,7 +312,7 @@ public class ToolbarButtonInProductHelpController
-> turnOnHighlightForMenuItem( -> turnOnHighlightForMenuItem(
AppMenuPropertiesDelegateImpl.getOfflinePageId())) AppMenuPropertiesDelegateImpl.getOfflinePageId()))
.setOnDismissCallback(this::turnOffHighlightForMenuItem) .setOnDismissCallback(this::turnOffHighlightForMenuItem)
.setAnchorView(mActivity.getToolbarManager().getMenuButtonView()) .setAnchorView(mMenuButtonAnchorView)
.build()); .build());
// Record metrics if we show Download IPH after a screenshot of the page. // Record metrics if we show Download IPH after a screenshot of the page.
ScreenshotTabObserver tabObserver = ScreenshotTabObserver.from(tab); ScreenshotTabObserver tabObserver = ScreenshotTabObserver.from(tab);
...@@ -322,10 +338,9 @@ public class ToolbarButtonInProductHelpController ...@@ -322,10 +338,9 @@ public class ToolbarButtonInProductHelpController
FeatureConstants.TRANSLATE_MENU_BUTTON_FEATURE, FeatureConstants.TRANSLATE_MENU_BUTTON_FEATURE,
R.string.iph_translate_menu_button_text, R.string.iph_translate_menu_button_text,
R.string.iph_translate_menu_button_accessibility_text) R.string.iph_translate_menu_button_accessibility_text)
.setOnShowCallback( .setOnShowCallback(() -> turnOnHighlightForMenuItem(R.id.translate_id))
() -> turnOnHighlightForMenuItem(R.id.translate_id))
.setOnDismissCallback(this::turnOffHighlightForMenuItem) .setOnDismissCallback(this::turnOffHighlightForMenuItem)
.setAnchorView(mActivity.getToolbarManager().getMenuButtonView()) .setAnchorView(mMenuButtonAnchorView)
.build()); .build());
} }
...@@ -336,7 +351,7 @@ public class ToolbarButtonInProductHelpController ...@@ -336,7 +351,7 @@ public class ToolbarButtonInProductHelpController
return; return;
} }
Integer menuItemId = DownloadUtils.isAllowedToDownloadPage(mActivity.getActivityTab()) Integer menuItemId = DownloadUtils.isAllowedToDownloadPage(mCurrentTabSupplier.get())
? AppMenuPropertiesDelegateImpl.getOfflinePageId() ? AppMenuPropertiesDelegateImpl.getOfflinePageId()
: R.id.downloads_menu_id; : R.id.downloads_menu_id;
...@@ -344,7 +359,7 @@ public class ToolbarButtonInProductHelpController ...@@ -344,7 +359,7 @@ public class ToolbarButtonInProductHelpController
new IPHCommandBuilder(mActivity.getResources(), null, new IPHCommandBuilder(mActivity.getResources(), null,
R.string.video_tutorials_iph_tap_here_to_start, R.string.video_tutorials_iph_tap_here_to_start,
R.string.video_tutorials_iph_tap_here_to_start) R.string.video_tutorials_iph_tap_here_to_start)
.setAnchorView(mActivity.getToolbarManager().getMenuButtonView()) .setAnchorView(mMenuButtonAnchorView)
.setOnShowCallback(() -> turnOnHighlightForMenuItem(menuItemId)) .setOnShowCallback(() -> turnOnHighlightForMenuItem(menuItemId))
.setOnDismissCallback(this::turnOffHighlightForMenuItem) .setOnDismissCallback(this::turnOffHighlightForMenuItem)
.build()); .build());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment