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") {
"//chrome/browser/ui/android/favicon:java",
"//chrome/browser/ui/android/native_page:java",
"//chrome/browser/ui/messages/android:java",
"//chrome/browser/user_education:java",
"//chrome/browser/util:java",
"//chrome/browser/video_tutorials:factory_java",
"//chrome/browser/video_tutorials:java",
......@@ -826,6 +827,7 @@ junit_binary("chrome_junit_tests") {
"//chrome/browser/ui/android/native_page:java",
"//chrome/browser/ui/messages/android:java",
"//chrome/browser/ui/messages/android:junit",
"//chrome/browser/user_education:java",
"//chrome/browser/util:java",
"//chrome/browser/xsurface:java",
"//chrome/test/android:chrome_java_test_support",
......
......@@ -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/UsageStatsService.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/vr/ArDelegate.java",
"java/src/org/chromium/chrome/browser/vr/ArDelegateProvider.java",
......
......@@ -251,7 +251,8 @@ public class FeedSurfaceCoordinator implements FeedSurfaceProvider {
// Mediator should be created before any Stream changes.
mMediator = new FeedSurfaceMediator(this, snapScrollHelper, mPageNavigationDelegate);
mUserEducationHelper = new UserEducationHelper(mActivity, mHandler);
mUserEducationHelper =
new UserEducationHelper(mActivity, mHandler, TrackerFactory::getTrackerForProfile);
}
@Override
......
......@@ -694,6 +694,7 @@ if (enable_feed_in_chrome) {
feed_test_deps = feed_deps + [
"//third_party/google-truth:google_truth_java",
"//chrome/browser/user_education:java",
"//components/feed/core/proto:proto_java",
"//third_party/guava:guava_android_java",
]
......
......@@ -54,7 +54,8 @@ public class ToolbarButtonInProductHelpController
AppMenuCoordinator appMenuCoordinator, ActivityLifecycleDispatcher lifecycleDispatcher,
ActivityTabProvider tabProvider) {
mActivity = activity;
mUserEducationHelper = new UserEducationHelper(mActivity, mHandler);
mUserEducationHelper =
new UserEducationHelper(mActivity, mHandler, TrackerFactory::getTrackerForProfile);
mScreenshotMonitor = new ScreenshotMonitor(this);
lifecycleDispatcher.register(this);
mPageLoadObserver = new ActivityTabTabObserver(tabProvider) {
......
......@@ -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.OverviewModeState;
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.FindToolbarObserver;
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
......@@ -322,7 +323,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
mToolbar = createTopToolbarCoordinator(controlContainer, toolbarLayout, buttonDataProviders,
browsingModeThemeColorProvider, startSurfaceMenuButtonCoordinator, invalidator,
identityDiscController);
mActionModeController =
new ActionModeController(mActivity, mActionBarDelegate, toolbarActionModeCallback);
......@@ -633,8 +633,8 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
IdentityDiscController identityDiscController) {
TopToolbarCoordinator toolbar = new TopToolbarCoordinator(controlContainer, toolbarLayout,
mLocationBarModel, mToolbarTabController,
new UserEducationHelper(mActivity, mHandler), buttonDataProviders,
mOverviewModeBehaviorSupplier, browsingModeThemeColorProvider,
new UserEducationHelper(mActivity, mHandler, TrackerFactory::getTrackerForProfile),
buttonDataProviders, mOverviewModeBehaviorSupplier, browsingModeThemeColorProvider,
mAppThemeColorProvider, mMenuButtonCoordinator, startSurfaceMenuButtonCoordinator,
mMenuButtonCoordinator.getMenuButtonHelperSupplier(), mTabModelSelectorSupplier,
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;
import androidx.annotation.StringRes;
import org.chromium.chrome.R;
import org.chromium.components.browser_ui.widget.textbubble.TextBubble;
import org.chromium.ui.widget.ViewRectProvider;
......@@ -177,7 +176,7 @@ public class IPHCommandBuilder {
if (mInsetRect == null) {
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);
}
......@@ -185,4 +184,4 @@ public class IPHCommandBuilder {
mShouldHighlight, mDismissOnTouch, mAnchorView, mOnDismissCallback, mOnShowCallback,
mInsetRect, mAutoDismissTimeout, mViewRectProvider);
}
}
\ No newline at end of file
}
......@@ -8,7 +8,7 @@ import android.app.Activity;
import android.os.Handler;
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.util.ChromeAccessibilityUtil;
import org.chromium.components.browser_ui.widget.highlight.ViewHighlighter;
......@@ -40,10 +40,13 @@ import org.chromium.ui.widget.ViewRectProvider;
public class UserEducationHelper {
private final Activity mActivity;
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;
mHandler = handler;
mTrackerFromProfileFactory = trackerFromProfileFactory;
}
/**
......@@ -57,7 +60,7 @@ public class UserEducationHelper {
// 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 profile = Profile.getLastUsedRegularProfile();
final Tracker tracker = TrackerFactory.getTrackerForProfile(profile);
final Tracker tracker = mTrackerFromProfileFactory.apply(profile);
tracker.addOnInitializedCallback(success -> showIPH(tracker, iphCommand));
}
......@@ -99,4 +102,4 @@ public class UserEducationHelper {
textBubble.show();
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