Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(410)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java

Issue 2815183002: IPH - Added triggers to show Download Home message (Closed)
Patch Set: comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser; 5 package org.chromium.chrome.browser;
6 6
7 import android.annotation.SuppressLint; 7 import android.annotation.SuppressLint;
8 import android.annotation.TargetApi; 8 import android.annotation.TargetApi;
9 import android.app.Activity; 9 import android.app.Activity;
10 import android.app.ActivityManager; 10 import android.app.ActivityManager;
(...skipping 13 matching lines...) Expand all
24 import android.util.Pair; 24 import android.util.Pair;
25 import android.view.KeyEvent; 25 import android.view.KeyEvent;
26 import android.view.KeyboardShortcutGroup; 26 import android.view.KeyboardShortcutGroup;
27 import android.view.Menu; 27 import android.view.Menu;
28 import android.view.View; 28 import android.view.View;
29 import android.view.View.OnClickListener; 29 import android.view.View.OnClickListener;
30 import android.view.ViewGroup; 30 import android.view.ViewGroup;
31 import android.view.Window; 31 import android.view.Window;
32 import android.view.WindowManager; 32 import android.view.WindowManager;
33 import android.widget.FrameLayout; 33 import android.widget.FrameLayout;
34 import android.widget.PopupWindow.OnDismissListener;
34 35
35 import org.chromium.base.ActivityState; 36 import org.chromium.base.ActivityState;
36 import org.chromium.base.ApiCompatibilityUtils; 37 import org.chromium.base.ApiCompatibilityUtils;
37 import org.chromium.base.ApplicationStatus; 38 import org.chromium.base.ApplicationStatus;
39 import org.chromium.base.Callback;
38 import org.chromium.base.CommandLine; 40 import org.chromium.base.CommandLine;
39 import org.chromium.base.ContextUtils; 41 import org.chromium.base.ContextUtils;
40 import org.chromium.base.Log; 42 import org.chromium.base.Log;
41 import org.chromium.base.MemoryPressureListener; 43 import org.chromium.base.MemoryPressureListener;
42 import org.chromium.base.TraceEvent; 44 import org.chromium.base.TraceEvent;
43 import org.chromium.base.VisibleForTesting; 45 import org.chromium.base.VisibleForTesting;
44 import org.chromium.base.library_loader.LibraryLoader; 46 import org.chromium.base.library_loader.LibraryLoader;
45 import org.chromium.base.metrics.RecordHistogram; 47 import org.chromium.base.metrics.RecordHistogram;
46 import org.chromium.base.metrics.RecordUserAction; 48 import org.chromium.base.metrics.RecordUserAction;
47 import org.chromium.chrome.R; 49 import org.chromium.chrome.R;
48 import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate; 50 import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate;
49 import org.chromium.chrome.browser.IntentHandler.TabOpenType; 51 import org.chromium.chrome.browser.IntentHandler.TabOpenType;
50 import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegate; 52 import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegate;
51 import org.chromium.chrome.browser.bookmarks.BookmarkUtils; 53 import org.chromium.chrome.browser.bookmarks.BookmarkUtils;
52 import org.chromium.chrome.browser.compositor.CompositorViewHolder; 54 import org.chromium.chrome.browser.compositor.CompositorViewHolder;
53 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChange Reason; 55 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChange Reason;
54 import org.chromium.chrome.browser.compositor.layouts.Layout; 56 import org.chromium.chrome.browser.compositor.layouts.Layout;
55 import org.chromium.chrome.browser.compositor.layouts.LayoutManager; 57 import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
56 import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome; 58 import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome;
57 import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone; 59 import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone;
58 import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromeTablet; 60 import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromeTablet;
59 import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior.Overv iewModeObserver; 61 import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior.Overv iewModeObserver;
60 import org.chromium.chrome.browser.compositor.layouts.phone.StackLayout; 62 import org.chromium.chrome.browser.compositor.layouts.phone.StackLayout;
61 import org.chromium.chrome.browser.cookies.CookiesFetcher; 63 import org.chromium.chrome.browser.cookies.CookiesFetcher;
62 import org.chromium.chrome.browser.device.DeviceClassManager; 64 import org.chromium.chrome.browser.device.DeviceClassManager;
63 import org.chromium.chrome.browser.document.ChromeLauncherActivity; 65 import org.chromium.chrome.browser.document.ChromeLauncherActivity;
64 import org.chromium.chrome.browser.document.DocumentUtils; 66 import org.chromium.chrome.browser.document.DocumentUtils;
65 import org.chromium.chrome.browser.download.DownloadUtils; 67 import org.chromium.chrome.browser.download.DownloadUtils;
68 import org.chromium.chrome.browser.feature_engagement_tracker.FeatureEngagementT rackerFactory;
66 import org.chromium.chrome.browser.firstrun.FirstRunActivity; 69 import org.chromium.chrome.browser.firstrun.FirstRunActivity;
67 import org.chromium.chrome.browser.firstrun.FirstRunFlowSequencer; 70 import org.chromium.chrome.browser.firstrun.FirstRunFlowSequencer;
68 import org.chromium.chrome.browser.firstrun.FirstRunSignInProcessor; 71 import org.chromium.chrome.browser.firstrun.FirstRunSignInProcessor;
69 import org.chromium.chrome.browser.firstrun.FirstRunStatus; 72 import org.chromium.chrome.browser.firstrun.FirstRunStatus;
70 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; 73 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
71 import org.chromium.chrome.browser.fullscreen.ComposedBrowserControlsVisibilityD elegate; 74 import org.chromium.chrome.browser.fullscreen.ComposedBrowserControlsVisibilityD elegate;
72 import org.chromium.chrome.browser.incognito.IncognitoNotificationManager; 75 import org.chromium.chrome.browser.incognito.IncognitoNotificationManager;
73 import org.chromium.chrome.browser.infobar.DataReductionPromoInfoBar; 76 import org.chromium.chrome.browser.infobar.DataReductionPromoInfoBar;
74 import org.chromium.chrome.browser.locale.LocaleManager; 77 import org.chromium.chrome.browser.locale.LocaleManager;
75 import org.chromium.chrome.browser.metrics.ActivityStopMetrics; 78 import org.chromium.chrome.browser.metrics.ActivityStopMetrics;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver; 112 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver;
110 import org.chromium.chrome.browser.tabmodel.TabModelUtils; 113 import org.chromium.chrome.browser.tabmodel.TabModelUtils;
111 import org.chromium.chrome.browser.tabmodel.TabWindowManager; 114 import org.chromium.chrome.browser.tabmodel.TabWindowManager;
112 import org.chromium.chrome.browser.toolbar.ToolbarControlContainer; 115 import org.chromium.chrome.browser.toolbar.ToolbarControlContainer;
113 import org.chromium.chrome.browser.util.FeatureUtilities; 116 import org.chromium.chrome.browser.util.FeatureUtilities;
114 import org.chromium.chrome.browser.util.IntentUtils; 117 import org.chromium.chrome.browser.util.IntentUtils;
115 import org.chromium.chrome.browser.vr_shell.VrShellDelegate; 118 import org.chromium.chrome.browser.vr_shell.VrShellDelegate;
116 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet; 119 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
117 import org.chromium.chrome.browser.widget.emptybackground.EmptyBackgroundViewWra pper; 120 import org.chromium.chrome.browser.widget.emptybackground.EmptyBackgroundViewWra pper;
118 import org.chromium.chrome.browser.widget.findinpage.FindToolbarManager; 121 import org.chromium.chrome.browser.widget.findinpage.FindToolbarManager;
122 import org.chromium.chrome.browser.widget.textbubble.ViewAnchoredTextBubble;
123 import org.chromium.components.feature_engagement_tracker.FeatureConstants;
124 import org.chromium.components.feature_engagement_tracker.FeatureEngagementTrack er;
119 import org.chromium.content.browser.ContentVideoView; 125 import org.chromium.content.browser.ContentVideoView;
120 import org.chromium.content.browser.ContentViewCore; 126 import org.chromium.content.browser.ContentViewCore;
121 import org.chromium.content.browser.crypto.CipherFactory; 127 import org.chromium.content.browser.crypto.CipherFactory;
122 import org.chromium.content.common.ContentSwitches; 128 import org.chromium.content.common.ContentSwitches;
123 import org.chromium.content_public.browser.LoadUrlParams; 129 import org.chromium.content_public.browser.LoadUrlParams;
124 import org.chromium.content_public.common.Referrer; 130 import org.chromium.content_public.common.Referrer;
125 import org.chromium.ui.base.DeviceFormFactor; 131 import org.chromium.ui.base.DeviceFormFactor;
126 import org.chromium.ui.base.PageTransition; 132 import org.chromium.ui.base.PageTransition;
127 import org.chromium.ui.base.WindowAndroid; 133 import org.chromium.ui.base.WindowAndroid;
128 import org.chromium.ui.widget.Toast; 134 import org.chromium.ui.widget.Toast;
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 tabSwitcherClickHandler, newTabClickHandler, bookmarkClickHa ndler, null); 690 tabSwitcherClickHandler, newTabClickHandler, bookmarkClickHa ndler, null);
685 691
686 if (isTablet()) { 692 if (isTablet()) {
687 EmptyBackgroundViewWrapper bgViewWrapper = new EmptyBackgroundVi ewWrapper( 693 EmptyBackgroundViewWrapper bgViewWrapper = new EmptyBackgroundVi ewWrapper(
688 getTabModelSelector(), getTabCreator(false), ChromeTabbe dActivity.this, 694 getTabModelSelector(), getTabCreator(false), ChromeTabbe dActivity.this,
689 getAppMenuHandler(), getSnackbarManager(), mLayoutManage r); 695 getAppMenuHandler(), getSnackbarManager(), mLayoutManage r);
690 bgViewWrapper.initialize(); 696 bgViewWrapper.initialize();
691 } 697 }
692 698
693 mLayoutManager.hideOverview(false); 699 mLayoutManager.hideOverview(false);
700 FeatureEngagementTracker tracker =
701 FeatureEngagementTrackerFactory.getFeatureEngagementTrackerF orProfile(
702 Profile.getLastUsedProfile());
703 tracker.addOnInitializedCallback(new Callback<Boolean>() {
704 @Override
705 public void onResult(Boolean result) {
706 showFeatureEngagementTextBubbleForDownloadHome();
707 }
708 });
694 709
695 mUIInitialized = true; 710 mUIInitialized = true;
696 } finally { 711 } finally {
697 TraceEvent.end("ChromeTabbedActivity.initializeUI"); 712 TraceEvent.end("ChromeTabbedActivity.initializeUI");
698 } 713 }
699 } 714 }
700 715
716 private void showFeatureEngagementTextBubbleForDownloadHome() {
717 final FeatureEngagementTracker tracker =
718 FeatureEngagementTrackerFactory.getFeatureEngagementTrackerForPr ofile(
719 Profile.getLastUsedProfile());
720 if (!tracker.shouldTriggerHelpUI(FeatureConstants.DOWNLOAD_HOME_FEATURE) ) return;
721
722 ViewAnchoredTextBubble textBubble = new ViewAnchoredTextBubble(
723 this, getToolbarManager().getMenuAnchor(), R.string.iph_download _home_text);
724 textBubble.setDismissOnTouchInteraction(true);
725 textBubble.addOnDismissListener(new OnDismissListener() {
726 @Override
727 public void onDismiss() {
728 mHandler.post(new Runnable() {
David Trainor- moved to gerrit 2017/04/25 03:45:30 If we're doing this often, maybe we should change
729 @Override
730 public void run() {
731 tracker.dismissed();
732 getAppMenuHandler().setMenuHighlight(null);
733 }
734 });
735 }
736 });
737 getAppMenuHandler().setMenuHighlight(R.id.downloads_menu_id);
738 int yInsetPx =
739 getResources().getDimensionPixelOffset(R.dimen.text_bubble_menu_ anchor_y_inset);
740 textBubble.setInsetPx(0, yInsetPx, 0, 0);
741 textBubble.show();
742 }
743
701 private boolean isMainIntent(Intent intent) { 744 private boolean isMainIntent(Intent intent) {
702 return intent != null && TextUtils.equals(intent.getAction(), Intent.ACT ION_MAIN); 745 return intent != null && TextUtils.equals(intent.getAction(), Intent.ACT ION_MAIN);
703 } 746 }
704 747
705 private void logMainIntentBehavior(Intent intent) { 748 private void logMainIntentBehavior(Intent intent) {
706 assert isMainIntent(intent); 749 assert isMainIntent(intent);
707 long currentTime = System.currentTimeMillis(); 750 long currentTime = System.currentTimeMillis();
708 long lastBackgroundedTimeMs = ContextUtils.getAppSharedPreferences().get Long( 751 long lastBackgroundedTimeMs = ContextUtils.getAppSharedPreferences().get Long(
709 LAST_BACKGROUNDED_TIME_MS_PREF, currentTime); 752 LAST_BACKGROUNDED_TIME_MS_PREF, currentTime);
710 mMainIntentMetrics.onMainIntentWithNative(currentTime - lastBackgrounded TimeMs); 753 mMainIntentMetrics.onMainIntentWithNative(currentTime - lastBackgrounded TimeMs);
(...skipping 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1988 2031
1989 ActivityManager manager = (ActivityManager) getSystemService(Context.ACT IVITY_SERVICE); 2032 ActivityManager manager = (ActivityManager) getSystemService(Context.ACT IVITY_SERVICE);
1990 for (AppTask task : manager.getAppTasks()) { 2033 for (AppTask task : manager.getAppTasks()) {
1991 RecentTaskInfo info = DocumentUtils.getTaskInfoFromTask(task); 2034 RecentTaskInfo info = DocumentUtils.getTaskInfoFromTask(task);
1992 if (info == null) continue; 2035 if (info == null) continue;
1993 if (info.id == sMergedInstanceTaskId) return true; 2036 if (info.id == sMergedInstanceTaskId) return true;
1994 } 2037 }
1995 return false; 2038 return false;
1996 } 2039 }
1997 } 2040 }
OLDNEW
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698