Commit afd0fb4b authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

Download Home : Added back the download settings IPH

Bug: 896480
Change-Id: I9a0b2b041991a1dbcc63f3190df4dec650f4c25a
Reviewed-on: https://chromium-review.googlesource.com/c/1286826
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Reviewed-by: default avatarXing Liu <xingliu@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#601375}
parent 0187b71f
...@@ -124,6 +124,8 @@ public class ToolbarCoordinator implements SelectionObserver<ListItem> { ...@@ -124,6 +124,8 @@ public class ToolbarCoordinator implements SelectionObserver<ListItem> {
mSearchDelegate, R.string.download_manager_search, searchMenuId); mSearchDelegate, R.string.download_manager_search, searchMenuId);
mToolbar.configureWideDisplayStyle(mUiConfig); mToolbar.configureWideDisplayStyle(mUiConfig);
if (isLocationEnabled) ToolbarUtils.setupTrackerForDownloadSettingsIPH(mToolbar);
mShadow.init(ApiCompatibilityUtils.getColor( mShadow.init(ApiCompatibilityUtils.getColor(
context.getResources(), R.color.toolbar_shadow_color), context.getResources(), R.color.toolbar_shadow_color),
FadingShadow.POSITION_TOP); FadingShadow.POSITION_TOP);
......
// Copyright 2018 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.
package org.chromium.chrome.browser.download.home.toolbar;
import android.support.v4.view.ViewCompat;
import android.view.View;
import org.chromium.chrome.browser.download.DirectoryOption;
import org.chromium.chrome.browser.download.DownloadDirectoryProvider;
import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.widget.ViewHighlighter;
import org.chromium.chrome.browser.widget.textbubble.TextBubble;
import org.chromium.components.feature_engagement.FeatureConstants;
import org.chromium.components.feature_engagement.Tracker;
import org.chromium.ui.widget.ViewRectProvider;
import java.util.ArrayList;
/**
* Utility methods for download home toolbar.
*/
public class ToolbarUtils {
/**
* Sets up feature engagement tracker for the download settings in-product-help text bubble.
* @param toolbar The toolbar that contains the settings menu.
*/
public static void setupTrackerForDownloadSettingsIPH(View toolbar) {
final Tracker tracker = TrackerFactory.getTrackerForProfile(Profile.getLastUsedProfile());
tracker.addOnInitializedCallback(
success -> ToolbarUtils.maybeShowDownloadSettingsTextBubble(tracker, toolbar));
}
private static void maybeShowDownloadSettingsTextBubble(Tracker tracker, View toolbar) {
// If the user doesn't have an SD card don't show the IPH.
DownloadDirectoryProvider.getInstance().getAllDirectoriesOptions(
dirs -> { onDirectoryOptionsRetrieved(dirs, tracker, toolbar); });
}
private static void onDirectoryOptionsRetrieved(
ArrayList<DirectoryOption> dirs, Tracker tracker, View rootView) {
if (dirs.size() < 2) return;
// Check to see if the help UI should be triggered.
if (!tracker.shouldTriggerHelpUI(FeatureConstants.DOWNLOAD_SETTINGS_FEATURE)) return;
// Build and show text bubble.
View anchorView = rootView.findViewById(org.chromium.chrome.download.R.id.settings_menu_id);
// Show the setting text bubble after the root view is attached to window.
if (ViewCompat.isAttachedToWindow(rootView)) {
showDownloadSettingsInProductHelp(tracker, anchorView, rootView);
} else {
rootView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
showDownloadSettingsInProductHelp(tracker, anchorView, rootView);
rootView.removeOnAttachStateChangeListener(this);
}
@Override
public void onViewDetachedFromWindow(View v) {}
});
}
}
private static void showDownloadSettingsInProductHelp(
Tracker tracker, View anchorView, View rootView) {
TextBubble textBubble = new TextBubble(rootView.getContext(), rootView,
org.chromium.chrome.download.R.string.iph_download_settings_text,
org.chromium.chrome.download.R.string.iph_download_settings_accessibility_text,
new ViewRectProvider(anchorView));
textBubble.setDismissOnTouchInteraction(true);
textBubble.addOnDismissListener(() -> {
tracker.dismissed(FeatureConstants.DOWNLOAD_SETTINGS_FEATURE);
toggleHighlightForDownloadSettingsTextBubble(anchorView, false);
});
toggleHighlightForDownloadSettingsTextBubble(anchorView, true);
textBubble.show();
}
private static void toggleHighlightForDownloadSettingsTextBubble(
View anchorView, boolean shouldHighlight) {
if (shouldHighlight) {
ViewHighlighter.turnOnHighlight(anchorView, true);
} else {
ViewHighlighter.turnOffHighlight(anchorView);
}
}
}
...@@ -14,10 +14,8 @@ import android.support.v7.widget.RecyclerView; ...@@ -14,10 +14,8 @@ import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar.OnMenuItemClickListener; import android.support.v7.widget.Toolbar.OnMenuItemClickListener;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import org.chromium.base.Callback;
import org.chromium.base.CollectionUtil; import org.chromium.base.CollectionUtil;
import org.chromium.base.DiscardableReferencePool; import org.chromium.base.DiscardableReferencePool;
import org.chromium.base.FileUtils; import org.chromium.base.FileUtils;
...@@ -29,14 +27,12 @@ import org.chromium.base.metrics.RecordUserAction; ...@@ -29,14 +27,12 @@ import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.task.AsyncTask; import org.chromium.base.task.AsyncTask;
import org.chromium.chrome.browser.ChromeApplication; import org.chromium.chrome.browser.ChromeApplication;
import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.download.DirectoryOption;
import org.chromium.chrome.browser.download.DownloadDirectoryProvider;
import org.chromium.chrome.browser.download.DownloadManagerService; import org.chromium.chrome.browser.download.DownloadManagerService;
import org.chromium.chrome.browser.download.DownloadUtils; import org.chromium.chrome.browser.download.DownloadUtils;
import org.chromium.chrome.browser.download.home.DownloadManagerCoordinator; import org.chromium.chrome.browser.download.home.DownloadManagerCoordinator;
import org.chromium.chrome.browser.download.home.UmaUtils; import org.chromium.chrome.browser.download.home.UmaUtils;
import org.chromium.chrome.browser.download.home.toolbar.ToolbarUtils;
import org.chromium.chrome.browser.download.items.OfflineContentAggregatorFactory; import org.chromium.chrome.browser.download.items.OfflineContentAggregatorFactory;
import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.native_page.BasicNativePage; import org.chromium.chrome.browser.native_page.BasicNativePage;
import org.chromium.chrome.browser.preferences.PreferencesLauncher; import org.chromium.chrome.browser.preferences.PreferencesLauncher;
import org.chromium.chrome.browser.preferences.download.DownloadPreferences; import org.chromium.chrome.browser.preferences.download.DownloadPreferences;
...@@ -46,16 +42,11 @@ import org.chromium.chrome.browser.snackbar.SnackbarManager; ...@@ -46,16 +42,11 @@ import org.chromium.chrome.browser.snackbar.SnackbarManager;
import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController; import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController;
import org.chromium.chrome.browser.widget.ThumbnailProvider; import org.chromium.chrome.browser.widget.ThumbnailProvider;
import org.chromium.chrome.browser.widget.ThumbnailProviderImpl; import org.chromium.chrome.browser.widget.ThumbnailProviderImpl;
import org.chromium.chrome.browser.widget.ViewHighlighter;
import org.chromium.chrome.browser.widget.selection.SelectableListLayout; import org.chromium.chrome.browser.widget.selection.SelectableListLayout;
import org.chromium.chrome.browser.widget.selection.SelectableListToolbar.SearchDelegate; import org.chromium.chrome.browser.widget.selection.SelectableListToolbar.SearchDelegate;
import org.chromium.chrome.browser.widget.selection.SelectionDelegate; import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
import org.chromium.chrome.browser.widget.textbubble.TextBubble;
import org.chromium.chrome.download.R; import org.chromium.chrome.download.R;
import org.chromium.components.feature_engagement.FeatureConstants;
import org.chromium.components.feature_engagement.Tracker;
import org.chromium.components.offline_items_collection.OfflineContentProvider; import org.chromium.components.offline_items_collection.OfflineContentProvider;
import org.chromium.ui.widget.ViewRectProvider;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -252,12 +243,7 @@ public class DownloadManagerUi implements OnMenuItemClickListener, SearchDelegat ...@@ -252,12 +243,7 @@ public class DownloadManagerUi implements OnMenuItemClickListener, SearchDelegat
mToolbar.setInfoMenuItem(mInfoMenuId); mToolbar.setInfoMenuItem(mInfoMenuId);
if (isLocationEnabled) { if (isLocationEnabled) ToolbarUtils.setupTrackerForDownloadSettingsIPH(mToolbar);
final Tracker tracker =
TrackerFactory.getTrackerForProfile(Profile.getLastUsedProfile());
tracker.addOnInitializedCallback(
(Callback<Boolean>) success -> maybeShowDownloadSettingsTextBubble(tracker));
}
mSelectableListLayout.configureWideDisplayStyle(); mSelectableListLayout.configureWideDisplayStyle();
mHistoryAdapter.initialize(mBackendProvider, mSelectableListLayout.getUiConfig()); mHistoryAdapter.initialize(mBackendProvider, mSelectableListLayout.getUiConfig());
...@@ -525,64 +511,6 @@ public class DownloadManagerUi implements OnMenuItemClickListener, SearchDelegat ...@@ -525,64 +511,6 @@ public class DownloadManagerUi implements OnMenuItemClickListener, SearchDelegat
mHistoryAdapter.shouldShowStorageInfoHeader()); mHistoryAdapter.shouldShowStorageInfoHeader());
} }
private void maybeShowDownloadSettingsTextBubble(final Tracker tracker) {
// If the user doesn't have an SD card don't show the IPH.
DownloadDirectoryProvider.getInstance().getAllDirectoriesOptions(
(ArrayList<DirectoryOption> dirs) -> {
onDirectoryOptionsRetrieved(dirs, tracker);
});
}
private void onDirectoryOptionsRetrieved(
ArrayList<DirectoryOption> dirs, final Tracker tracker) {
if (dirs.size() < 2) return;
// Check to see if the help UI should be triggered.
if (!tracker.shouldTriggerHelpUI(FeatureConstants.DOWNLOAD_SETTINGS_FEATURE)) return;
// Build and show text bubble.
View anchorView = mToolbar.findViewById(R.id.settings_menu_id);
// Show the setting text bubble after the root view is attached to window.
if (mToolbar.isAttachedToWindow()) {
showDownloadSettingsInProductHelp(tracker, anchorView);
} else {
mToolbar.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
showDownloadSettingsInProductHelp(tracker, anchorView);
mToolbar.removeOnAttachStateChangeListener(this);
}
@Override
public void onViewDetachedFromWindow(View v) {}
});
}
}
private void showDownloadSettingsInProductHelp(final Tracker tracker, View anchorView) {
TextBubble textBubble =
new TextBubble(mActivity, (View) mToolbar, R.string.iph_download_settings_text,
R.string.iph_download_settings_accessibility_text,
new ViewRectProvider(anchorView));
textBubble.setDismissOnTouchInteraction(true);
textBubble.addOnDismissListener(() -> {
tracker.dismissed(FeatureConstants.DOWNLOAD_SETTINGS_FEATURE);
toggleHighlightForDownloadSettingsTextBubble(false);
});
toggleHighlightForDownloadSettingsTextBubble(true);
textBubble.show();
}
private void toggleHighlightForDownloadSettingsTextBubble(boolean shouldHighlight) {
View view = mToolbar.findViewById(R.id.settings_menu_id);
if (shouldHighlight) {
ViewHighlighter.turnOnHighlight(view, true);
} else {
ViewHighlighter.turnOffHighlight(view);
}
}
@VisibleForTesting @VisibleForTesting
public SnackbarManager getSnackbarManagerForTesting() { public SnackbarManager getSnackbarManagerForTesting() {
return mSnackbarManager; return mSnackbarManager;
......
...@@ -551,6 +551,7 @@ chrome_java_sources = [ ...@@ -551,6 +551,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/download/home/storage/StorageSummaryProvider.java", "java/src/org/chromium/chrome/browser/download/home/storage/StorageSummaryProvider.java",
"java/src/org/chromium/chrome/browser/download/home/toolbar/DownloadHomeToolbar.java", "java/src/org/chromium/chrome/browser/download/home/toolbar/DownloadHomeToolbar.java",
"java/src/org/chromium/chrome/browser/download/home/toolbar/ToolbarCoordinator.java", "java/src/org/chromium/chrome/browser/download/home/toolbar/ToolbarCoordinator.java",
"java/src/org/chromium/chrome/browser/download/home/toolbar/ToolbarUtils.java",
"java/src/org/chromium/chrome/browser/download/home/view/SelectionView.java", "java/src/org/chromium/chrome/browser/download/home/view/SelectionView.java",
"java/src/org/chromium/chrome/browser/download/items/DownloadBlockedOfflineContentProvider.java", "java/src/org/chromium/chrome/browser/download/items/DownloadBlockedOfflineContentProvider.java",
"java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorFactory.java", "java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorFactory.java",
......
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