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

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

Issue 2862893002: 📰 Add visibility change triggers for bottom sheet content (Closed)
Patch Set: cleanup, support app switching Created 3 years, 7 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
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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.suggestions; 5 package org.chromium.chrome.browser.suggestions;
6 6
7 import android.annotation.SuppressLint; 7 import android.annotation.SuppressLint;
8 import android.support.v7.widget.RecyclerView; 8 import android.support.v7.widget.RecyclerView;
9 import android.support.v7.widget.RecyclerView.OnScrollListener; 9 import android.support.v7.widget.RecyclerView.OnScrollListener;
10 import android.view.LayoutInflater; 10 import android.view.LayoutInflater;
11 import android.view.MotionEvent; 11 import android.view.MotionEvent;
12 import android.view.View; 12 import android.view.View;
13 13
14 import org.chromium.base.ApiCompatibilityUtils; 14 import org.chromium.base.ApiCompatibilityUtils;
15 import org.chromium.base.metrics.RecordUserAction;
15 import org.chromium.chrome.R; 16 import org.chromium.chrome.R;
16 import org.chromium.chrome.browser.ChromeActivity; 17 import org.chromium.chrome.browser.ChromeActivity;
17 import org.chromium.chrome.browser.NativePageHost; 18 import org.chromium.chrome.browser.NativePageHost;
18 import org.chromium.chrome.browser.ntp.ContextMenuManager; 19 import org.chromium.chrome.browser.ntp.ContextMenuManager;
19 import org.chromium.chrome.browser.ntp.ContextMenuManager.TouchEnabledDelegate; 20 import org.chromium.chrome.browser.ntp.ContextMenuManager.TouchEnabledDelegate;
20 import org.chromium.chrome.browser.ntp.cards.NewTabPageAdapter; 21 import org.chromium.chrome.browser.ntp.cards.NewTabPageAdapter;
21 import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge; 22 import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge;
22 import org.chromium.chrome.browser.ntp.snippets.SuggestionsSource; 23 import org.chromium.chrome.browser.ntp.snippets.SuggestionsSource;
23 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; 24 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
24 import org.chromium.chrome.browser.omnibox.LocationBar; 25 import org.chromium.chrome.browser.omnibox.LocationBar;
25 import org.chromium.chrome.browser.profiles.Profile; 26 import org.chromium.chrome.browser.profiles.Profile;
26 import org.chromium.chrome.browser.snackbar.SnackbarManager; 27 import org.chromium.chrome.browser.snackbar.SnackbarManager;
27 import org.chromium.chrome.browser.tabmodel.TabModelSelector; 28 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
28 import org.chromium.chrome.browser.widget.FadingShadow; 29 import org.chromium.chrome.browser.widget.FadingShadow;
29 import org.chromium.chrome.browser.widget.FadingShadowView; 30 import org.chromium.chrome.browser.widget.FadingShadowView;
30 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet; 31 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
31 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContentControll er; 32 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContentControll er;
32 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetObserver; 33 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetObserver;
33 import org.chromium.chrome.browser.widget.bottomsheet.EmptyBottomSheetObserver; 34 import org.chromium.chrome.browser.widget.bottomsheet.SheetContentStateChangeObs erver;
34 import org.chromium.chrome.browser.widget.displaystyle.UiConfig; 35 import org.chromium.chrome.browser.widget.displaystyle.UiConfig;
35 36
36 /** 37 /**
37 * Provides content to be displayed inside of the Home tab of bottom sheet. 38 * Provides content to be displayed inside of the Home tab of bottom sheet.
38 */ 39 */
39 public class SuggestionsBottomSheetContent implements BottomSheet.BottomSheetCon tent { 40 public class SuggestionsBottomSheetContent implements BottomSheet.BottomSheetCon tent {
40 private static SuggestionsSource sSuggestionsSourceForTesting; 41 private static SuggestionsSource sSuggestionsSourceForTesting;
41 private static SuggestionsEventReporter sEventReporterForTesting; 42 private static SuggestionsEventReporter sEventReporterForTesting;
42 43
43 private final View mView; 44 private final View mView;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 } 79 }
79 }); 80 });
80 81
81 UiConfig uiConfig = new UiConfig(mRecyclerView); 82 UiConfig uiConfig = new UiConfig(mRecyclerView);
82 83
83 final NewTabPageAdapter adapter = new NewTabPageAdapter(mSuggestionsUiDe legate, 84 final NewTabPageAdapter adapter = new NewTabPageAdapter(mSuggestionsUiDe legate,
84 /* aboveTheFoldView = */ null, uiConfig, OfflinePageBridge.getFo rProfile(profile), 85 /* aboveTheFoldView = */ null, uiConfig, OfflinePageBridge.getFo rProfile(profile),
85 mContextMenuManager, mTileGroupDelegate); 86 mContextMenuManager, mTileGroupDelegate);
86 mRecyclerView.init(uiConfig, mContextMenuManager, adapter); 87 mRecyclerView.init(uiConfig, mContextMenuManager, adapter);
87 88
88 mBottomSheetObserver = new EmptyBottomSheetObserver() { 89 mBottomSheet = activity.getBottomSheet();
90 mBottomSheetObserver = new SheetContentStateChangeObserver(this, mBottom Sheet) {
89 @Override 91 @Override
90 public void onSheetOpened() { 92 public void onContentShown() {
93 SuggestionsMetrics.recordSurfaceVisible();
94 mSuggestionsUiDelegate.getEventReporter().onSurfaceOpened();
95
91 mRecyclerView.scrollToPosition(0); 96 mRecyclerView.scrollToPosition(0);
92 97
93 adapter.refreshSuggestions(); 98 adapter.refreshSuggestions();
94 mSuggestionsUiDelegate.getEventReporter().onSurfaceOpened();
95 SuggestionsMetrics.recordSurfaceVisible();
96 } 99 }
97 100
98 @Override 101 @Override
99 public void onSheetClosed() { 102 public void onContentHidden() {
100 SuggestionsMetrics.recordSurfaceHidden(); 103 SuggestionsMetrics.recordSurfaceHidden();
101 } 104 }
102 105
106 @Override
107 public void onContentStateChanged(int sheetState) {
108 if (sheetState == BottomSheet.SHEET_STATE_HALF) {
109 RecordUserAction.record("Suggestions.SurfaceHalfVisible");
110 } else if (sheetState == BottomSheet.SHEET_STATE_FULL) {
111 RecordUserAction.record("Suggestions.SurfaceFullyVisible");
112 }
113 }
114
115 @Override
116 public void onSheetBackgrounded() {
117 onContentHidden();
118 }
119
120 @Override
121 public void onSheetForegrounded() {
122 SuggestionsMetrics.recordSurfaceVisible();
123 onContentStateChanged(getCurrentState());
124 }
103 }; 125 };
104 mBottomSheet = activity.getBottomSheet();
105 mBottomSheet.addObserver(mBottomSheetObserver); 126 mBottomSheet.addObserver(mBottomSheetObserver);
106 127
107 if (mBottomSheet.isSheetOpen()) {
108 adapter.refreshSuggestions();
109 mSuggestionsUiDelegate.getEventReporter().onSurfaceOpened();
110 SuggestionsMetrics.recordSurfaceVisible();
111 }
112
113 mShadowView = (FadingShadowView) mView.findViewById(R.id.shadow); 128 mShadowView = (FadingShadowView) mView.findViewById(R.id.shadow);
114 mShadowView.init( 129 mShadowView.init(
115 ApiCompatibilityUtils.getColor(mView.getResources(), R.color.too lbar_shadow_color), 130 ApiCompatibilityUtils.getColor(mView.getResources(), R.color.too lbar_shadow_color),
116 FadingShadow.POSITION_TOP); 131 FadingShadow.POSITION_TOP);
117 132
118 mRecyclerView.addOnScrollListener(new OnScrollListener() { 133 mRecyclerView.addOnScrollListener(new OnScrollListener() {
119 @Override 134 @Override
120 public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 135 public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
121 boolean shadowVisible = mRecyclerView.canScrollVertically(-1); 136 boolean shadowVisible = mRecyclerView.canScrollVertically(-1);
122 mShadowView.setVisibility(shadowVisible ? View.VISIBLE : View.GO NE); 137 mShadowView.setVisibility(shadowVisible ? View.VISIBLE : View.GO NE);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 eventReporter = sEventReporterForTesting; 212 eventReporter = sEventReporterForTesting;
198 } 213 }
199 214
200 SuggestionsUiDelegateImpl delegate = new SuggestionsUiDelegateImpl( 215 SuggestionsUiDelegateImpl delegate = new SuggestionsUiDelegateImpl(
201 suggestionsSource, eventReporter, navigationDelegate, profile, h ost); 216 suggestionsSource, eventReporter, navigationDelegate, profile, h ost);
202 if (snippetsBridge != null) delegate.addDestructionObserver(snippetsBrid ge); 217 if (snippetsBridge != null) delegate.addDestructionObserver(snippetsBrid ge);
203 218
204 return delegate; 219 return delegate;
205 } 220 }
206 } 221 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698