Commit ab1884e7 authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Android: Modularize user_education (IPH)

user_education/ is used as a shim allowing the classes in
chrome/android::chrome_java to use feature_engagement component. This
CL modularizes it under chrome/browser/user_education so that toolbar/
can use it without relying on chrome_java.

Bug: 1127732
Change-Id: I33d2e4851914f743f72540181f1cc222f2c6d70e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2422060
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Reviewed-by: default avatarPatrick Noland <pnoland@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#811048}
parent 298d31c9
...@@ -347,6 +347,7 @@ android_library("chrome_java") { ...@@ -347,6 +347,7 @@ android_library("chrome_java") {
"//chrome/browser/ui/android/favicon:java", "//chrome/browser/ui/android/favicon:java",
"//chrome/browser/ui/android/native_page:java", "//chrome/browser/ui/android/native_page:java",
"//chrome/browser/ui/messages/android:java", "//chrome/browser/ui/messages/android:java",
"//chrome/browser/user_education:java",
"//chrome/browser/util:java", "//chrome/browser/util:java",
"//chrome/browser/video_tutorials:factory_java", "//chrome/browser/video_tutorials:factory_java",
"//chrome/browser/video_tutorials:java", "//chrome/browser/video_tutorials:java",
...@@ -826,6 +827,7 @@ junit_binary("chrome_junit_tests") { ...@@ -826,6 +827,7 @@ junit_binary("chrome_junit_tests") {
"//chrome/browser/ui/android/native_page:java", "//chrome/browser/ui/android/native_page:java",
"//chrome/browser/ui/messages/android:java", "//chrome/browser/ui/messages/android:java",
"//chrome/browser/ui/messages/android:junit", "//chrome/browser/ui/messages/android:junit",
"//chrome/browser/user_education:java",
"//chrome/browser/util:java", "//chrome/browser/util:java",
"//chrome/browser/xsurface:java", "//chrome/browser/xsurface:java",
"//chrome/test/android:chrome_java_test_support", "//chrome/test/android:chrome_java_test_support",
......
...@@ -1634,9 +1634,6 @@ chrome_java_sources = [ ...@@ -1634,9 +1634,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/usage_stats/UsageStatsMetricsReporter.java", "java/src/org/chromium/chrome/browser/usage_stats/UsageStatsMetricsReporter.java",
"java/src/org/chromium/chrome/browser/usage_stats/UsageStatsService.java", "java/src/org/chromium/chrome/browser/usage_stats/UsageStatsService.java",
"java/src/org/chromium/chrome/browser/usage_stats/WebsiteEvent.java", "java/src/org/chromium/chrome/browser/usage_stats/WebsiteEvent.java",
"java/src/org/chromium/chrome/browser/user_education/IPHCommand.java",
"java/src/org/chromium/chrome/browser/user_education/IPHCommandBuilder.java",
"java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java",
"java/src/org/chromium/chrome/browser/video_tutorials/NewTabPageVideoIPHManager.java", "java/src/org/chromium/chrome/browser/video_tutorials/NewTabPageVideoIPHManager.java",
"java/src/org/chromium/chrome/browser/vr/ArDelegate.java", "java/src/org/chromium/chrome/browser/vr/ArDelegate.java",
"java/src/org/chromium/chrome/browser/vr/ArDelegateProvider.java", "java/src/org/chromium/chrome/browser/vr/ArDelegateProvider.java",
......
...@@ -251,7 +251,8 @@ public class FeedSurfaceCoordinator implements FeedSurfaceProvider { ...@@ -251,7 +251,8 @@ public class FeedSurfaceCoordinator implements FeedSurfaceProvider {
// Mediator should be created before any Stream changes. // Mediator should be created before any Stream changes.
mMediator = new FeedSurfaceMediator(this, snapScrollHelper, mPageNavigationDelegate); mMediator = new FeedSurfaceMediator(this, snapScrollHelper, mPageNavigationDelegate);
mUserEducationHelper = new UserEducationHelper(mActivity, mHandler); mUserEducationHelper =
new UserEducationHelper(mActivity, mHandler, TrackerFactory::getTrackerForProfile);
} }
@Override @Override
......
...@@ -694,6 +694,7 @@ if (enable_feed_in_chrome) { ...@@ -694,6 +694,7 @@ if (enable_feed_in_chrome) {
feed_test_deps = feed_deps + [ feed_test_deps = feed_deps + [
"//third_party/google-truth:google_truth_java", "//third_party/google-truth:google_truth_java",
"//chrome/browser/user_education:java",
"//components/feed/core/proto:proto_java", "//components/feed/core/proto:proto_java",
"//third_party/guava:guava_android_java", "//third_party/guava:guava_android_java",
] ]
......
...@@ -54,7 +54,8 @@ public class ToolbarButtonInProductHelpController ...@@ -54,7 +54,8 @@ public class ToolbarButtonInProductHelpController
AppMenuCoordinator appMenuCoordinator, ActivityLifecycleDispatcher lifecycleDispatcher, AppMenuCoordinator appMenuCoordinator, ActivityLifecycleDispatcher lifecycleDispatcher,
ActivityTabProvider tabProvider) { ActivityTabProvider tabProvider) {
mActivity = activity; mActivity = activity;
mUserEducationHelper = new UserEducationHelper(mActivity, mHandler); mUserEducationHelper =
new UserEducationHelper(mActivity, mHandler, TrackerFactory::getTrackerForProfile);
mScreenshotMonitor = new ScreenshotMonitor(this); mScreenshotMonitor = new ScreenshotMonitor(this);
lifecycleDispatcher.register(this); lifecycleDispatcher.register(this);
mPageLoadObserver = new ActivityTabTabObserver(tabProvider) { mPageLoadObserver = new ActivityTabTabObserver(tabProvider) {
......
...@@ -47,6 +47,7 @@ import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior; ...@@ -47,6 +47,7 @@ import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior.OverviewModeObserver; import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior.OverviewModeObserver;
import org.chromium.chrome.browser.compositor.layouts.OverviewModeState; import org.chromium.chrome.browser.compositor.layouts.OverviewModeState;
import org.chromium.chrome.browser.compositor.layouts.SceneChangeObserver; import org.chromium.chrome.browser.compositor.layouts.SceneChangeObserver;
import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.findinpage.FindToolbarManager; import org.chromium.chrome.browser.findinpage.FindToolbarManager;
import org.chromium.chrome.browser.findinpage.FindToolbarObserver; import org.chromium.chrome.browser.findinpage.FindToolbarObserver;
import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.fullscreen.FullscreenManager;
...@@ -322,7 +323,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve ...@@ -322,7 +323,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
mToolbar = createTopToolbarCoordinator(controlContainer, toolbarLayout, buttonDataProviders, mToolbar = createTopToolbarCoordinator(controlContainer, toolbarLayout, buttonDataProviders,
browsingModeThemeColorProvider, startSurfaceMenuButtonCoordinator, invalidator, browsingModeThemeColorProvider, startSurfaceMenuButtonCoordinator, invalidator,
identityDiscController); identityDiscController);
mActionModeController = mActionModeController =
new ActionModeController(mActivity, mActionBarDelegate, toolbarActionModeCallback); new ActionModeController(mActivity, mActionBarDelegate, toolbarActionModeCallback);
...@@ -633,8 +633,8 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve ...@@ -633,8 +633,8 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
IdentityDiscController identityDiscController) { IdentityDiscController identityDiscController) {
TopToolbarCoordinator toolbar = new TopToolbarCoordinator(controlContainer, toolbarLayout, TopToolbarCoordinator toolbar = new TopToolbarCoordinator(controlContainer, toolbarLayout,
mLocationBarModel, mToolbarTabController, mLocationBarModel, mToolbarTabController,
new UserEducationHelper(mActivity, mHandler), buttonDataProviders, new UserEducationHelper(mActivity, mHandler, TrackerFactory::getTrackerForProfile),
mOverviewModeBehaviorSupplier, browsingModeThemeColorProvider, buttonDataProviders, mOverviewModeBehaviorSupplier, browsingModeThemeColorProvider,
mAppThemeColorProvider, mMenuButtonCoordinator, startSurfaceMenuButtonCoordinator, mAppThemeColorProvider, mMenuButtonCoordinator, startSurfaceMenuButtonCoordinator,
mMenuButtonCoordinator.getMenuButtonHelperSupplier(), mTabModelSelectorSupplier, mMenuButtonCoordinator.getMenuButtonHelperSupplier(), mTabModelSelectorSupplier,
mHomeButtonVisibilitySupplier, mIdentityDiscStateSupplier, (client) -> { mHomeButtonVisibilitySupplier, mIdentityDiscStateSupplier, (client) -> {
......
# Copyright 2020 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
import("//chrome/browser/buildflags.gni")
android_library("java") {
sources = [
"java/src/org/chromium/chrome/browser/user_education/IPHCommand.java",
"java/src/org/chromium/chrome/browser/user_education/IPHCommandBuilder.java",
"java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java",
]
deps = [
":java_resources",
"//base:base_java",
"//chrome/browser/profiles/android:java",
"//chrome/browser/util:java",
"//components/browser_ui/util/android:java",
"//components/browser_ui/widget/android:java",
"//components/feature_engagement/public:public_java",
"//third_party/android_deps:androidx_annotation_annotation_java",
"//third_party/android_deps:androidx_core_core_java",
"//ui/android:ui_full_java",
]
resources_package = "org.chromium.chrome.browser.user_education"
}
android_resources("java_resources") {
sources = [ "java/res/values/dimens.xml" ]
create_srcjar = false
}
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2020 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. -->
<resources xmlns:tools="http://schemas.android.com/tools">
<dimen name="iph_text_bubble_menu_anchor_y_inset">14dp</dimen>
</resources>
...@@ -10,7 +10,6 @@ import android.view.View; ...@@ -10,7 +10,6 @@ import android.view.View;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import org.chromium.chrome.R;
import org.chromium.components.browser_ui.widget.textbubble.TextBubble; import org.chromium.components.browser_ui.widget.textbubble.TextBubble;
import org.chromium.ui.widget.ViewRectProvider; import org.chromium.ui.widget.ViewRectProvider;
...@@ -177,7 +176,7 @@ public class IPHCommandBuilder { ...@@ -177,7 +176,7 @@ public class IPHCommandBuilder {
if (mInsetRect == null) { if (mInsetRect == null) {
int yInsetPx = int yInsetPx =
mResources.getDimensionPixelOffset(R.dimen.text_bubble_menu_anchor_y_inset); mResources.getDimensionPixelOffset(R.dimen.iph_text_bubble_menu_anchor_y_inset);
mInsetRect = new Rect(0, 0, 0, yInsetPx); mInsetRect = new Rect(0, 0, 0, yInsetPx);
} }
...@@ -185,4 +184,4 @@ public class IPHCommandBuilder { ...@@ -185,4 +184,4 @@ public class IPHCommandBuilder {
mShouldHighlight, mDismissOnTouch, mAnchorView, mOnDismissCallback, mOnShowCallback, mShouldHighlight, mDismissOnTouch, mAnchorView, mOnDismissCallback, mOnShowCallback,
mInsetRect, mAutoDismissTimeout, mViewRectProvider); mInsetRect, mAutoDismissTimeout, mViewRectProvider);
} }
} }
\ No newline at end of file
...@@ -8,7 +8,7 @@ import android.app.Activity; ...@@ -8,7 +8,7 @@ import android.app.Activity;
import android.os.Handler; import android.os.Handler;
import android.view.View; import android.view.View;
import org.chromium.chrome.browser.feature_engagement.TrackerFactory; import org.chromium.base.Function;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.util.ChromeAccessibilityUtil; import org.chromium.chrome.browser.util.ChromeAccessibilityUtil;
import org.chromium.components.browser_ui.widget.highlight.ViewHighlighter; import org.chromium.components.browser_ui.widget.highlight.ViewHighlighter;
...@@ -40,10 +40,13 @@ import org.chromium.ui.widget.ViewRectProvider; ...@@ -40,10 +40,13 @@ import org.chromium.ui.widget.ViewRectProvider;
public class UserEducationHelper { public class UserEducationHelper {
private final Activity mActivity; private final Activity mActivity;
private final Handler mHandler; private final Handler mHandler;
private final Function<Profile, Tracker> mTrackerFromProfileFactory;
public UserEducationHelper(Activity activity, Handler handler) { public UserEducationHelper(Activity activity, Handler handler,
Function<Profile, Tracker> trackerFromProfileFactory) {
mActivity = activity; mActivity = activity;
mHandler = handler; mHandler = handler;
mTrackerFromProfileFactory = trackerFromProfileFactory;
} }
/** /**
...@@ -57,7 +60,7 @@ public class UserEducationHelper { ...@@ -57,7 +60,7 @@ public class UserEducationHelper {
// incognito profile) instead of always using regular profile. Currently always original // incognito profile) instead of always using regular profile. Currently always original
// profile is used not to start popping IPH messages as soon as opening an incognito tab. // profile is used not to start popping IPH messages as soon as opening an incognito tab.
Profile profile = Profile.getLastUsedRegularProfile(); Profile profile = Profile.getLastUsedRegularProfile();
final Tracker tracker = TrackerFactory.getTrackerForProfile(profile); final Tracker tracker = mTrackerFromProfileFactory.apply(profile);
tracker.addOnInitializedCallback(success -> showIPH(tracker, iphCommand)); tracker.addOnInitializedCallback(success -> showIPH(tracker, iphCommand));
} }
...@@ -99,4 +102,4 @@ public class UserEducationHelper { ...@@ -99,4 +102,4 @@ public class UserEducationHelper {
textBubble.show(); textBubble.show();
iphCommand.onShowCallback.run(); iphCommand.onShowCallback.run();
} }
} }
\ No newline at end of file
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