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

Side by Side Diff: chrome/android/java_staging/src/org/chromium/chrome/browser/widget/emptybackground/EmptyBackgroundViewWrapper.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 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
(Empty)
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
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.widget.emptybackground;
6
7 import android.app.Activity;
8 import android.view.View;
9 import android.view.View.OnAttachStateChangeListener;
10 import android.view.ViewStub;
11
12 import com.google.android.apps.chrome.R;
13
14 import org.chromium.chrome.browser.Tab;
15 import org.chromium.chrome.browser.appmenu.AppMenuHandler;
16 import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
17 import org.chromium.chrome.browser.tabmodel.ChromeTabCreator;
18 import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
19 import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
20 import org.chromium.chrome.browser.tabmodel.TabModel;
21 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
22 import org.chromium.chrome.browser.tabmodel.TabModelObserver;
23 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
24 import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver;
25
26 import java.util.List;
27
28 /**
29 * Handler for {@link EmptyBackgroundViewTablet}.
30 */
31 public class EmptyBackgroundViewWrapper {
32 private final Activity mActivity;
33 private final TabModelSelector mTabModelSelector;
34 private final ChromeTabCreator mTabCreator;
35 private final TabModelObserver mTabModelObserver;
36 private final TabModelSelectorObserver mTabModelSelectorObserver;
37 private final OverviewModeBehavior mOverviewModeBehavior;
38
39 private EmptyBackgroundViewTablet mBackgroundView;
40 private final AppMenuHandler mMenuHandler;
41
42 /**
43 * Creates a {@link EmptyBackgroundViewWrapper} instance that will lazily in flate.
44 * @param selector A {@link TabModelSelector} that will be used to query system
45 * state.
46 * @param tabCreator A {@link ChromeTabCreator} that will be used to open the New Tab
47 * Page.
48 * @param activity An {@link Activity} that represents a parent of the
49 * {@link android.view.ViewStub}.
50 * @param menuHandler A {@link AppMenuHandler} to handle menu touch events.
51 * @param overviewModeBehavior A {@link OverviewModeBehavior} instance to de tect when the app
52 * is in overview mode.
53 */
54 public EmptyBackgroundViewWrapper(TabModelSelector selector, ChromeTabCreato r tabCreator,
55 Activity activity, AppMenuHandler menuHandler,
56 OverviewModeBehavior overviewModeBehavior) {
57 mActivity = activity;
58 mMenuHandler = menuHandler;
59 mTabModelSelector = selector;
60 mTabCreator = tabCreator;
61 mOverviewModeBehavior = overviewModeBehavior;
62 mTabModelObserver = new EmptyTabModelObserver() {
63 @Override
64 public void didAddTab(Tab tab, TabLaunchType type) {
65 updateEmptyContainerState();
66 }
67
68 @Override
69 public void tabClosureUndone(Tab tab) {
70 updateEmptyContainerState();
71 }
72
73 @Override
74 public void didCloseTab(Tab tab) {
75 updateEmptyContainerState();
76 }
77
78 @Override
79 public void tabPendingClosure(Tab tab) {
80 updateEmptyContainerState();
81 }
82
83 @Override
84 public void allTabsPendingClosure(List<Integer> tabIds) {
85 updateEmptyContainerState();
86 }
87 };
88 mTabModelSelectorObserver = new EmptyTabModelSelectorObserver() {
89 @Override
90 public void onTabModelSelected(TabModel newModel, TabModel oldModel) {
91 updateEmptyContainerState();
92 }
93 };
94 }
95
96 /**
97 * Initialize the wrapper to listen for the proper notifications.
98 */
99 public void initialize() {
100 for (TabModel model : mTabModelSelector.getModels()) model.addObserver(m TabModelObserver);
101 mTabModelSelector.addObserver(mTabModelSelectorObserver);
102 }
103
104 /**
105 * Unregister all dependencies and listeners.
106 */
107 public void uninitialize() {
108 for (TabModel model : mTabModelSelector.getModels()) {
109 model.removeObserver(mTabModelObserver);
110 }
111 mTabModelSelector.removeObserver(mTabModelSelectorObserver);
112 }
113
114 private void inflateViewIfNecessary() {
115 if (mBackgroundView != null) return;
116
117 mBackgroundView = (EmptyBackgroundViewTablet) ((ViewStub) mActivity.find ViewById(
118 R.id.empty_container_stub)).inflate();
119 mBackgroundView.setTabModelSelector(mTabModelSelector);
120 mBackgroundView.setTabCreator(mTabCreator);
121 mBackgroundView.setMenuOnTouchListener(mMenuHandler);
122 mBackgroundView.addOnAttachStateChangeListener(new OnAttachStateChangeLi stener() {
123 @Override
124 public void onViewDetachedFromWindow(View v) {
125 uninitialize();
126 }
127
128 @Override
129 public void onViewAttachedToWindow(View v) {
130 }
131 });
132 }
133
134 private void updateEmptyContainerState() {
135 boolean showEmptyBackground = shouldShowEmptyContainer();
136 if (showEmptyBackground) {
137 inflateViewIfNecessary();
138 }
139
140 if (mBackgroundView != null) {
141 mBackgroundView.setEmptyContainerState(showEmptyBackground);
142 }
143 }
144
145 private boolean shouldShowEmptyContainer() {
146 TabModel model = mTabModelSelector.getModel(false);
147 if (model == null) {
148 return false;
149 }
150 boolean isIncognitoEmpty = mTabModelSelector.getModel(true).getCount() = = 0;
151 boolean incognitoSelected = mTabModelSelector.isIncognitoSelected();
152
153 // Only show the empty container if:
154 // 1. There are no tabs in the normal TabModel AND
155 // 2. Overview mode is not showing AND
156 // 3. We're in the normal TabModel OR there are no tabs present in eithe r model
157 return model.getCount() == 0 && !mOverviewModeBehavior.overviewVisible()
158 && (!incognitoSelected || isIncognitoEmpty);
159 }
160 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698