OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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.shell; | 5 package org.chromium.chrome.shell; |
6 | 6 |
7 import android.view.LayoutInflater; | 7 import android.content.Context; |
8 import android.view.ViewGroup; | |
9 import android.view.ViewParent; | |
10 | 8 |
11 import org.chromium.chrome.browser.Tab; | 9 import org.chromium.chrome.browser.Tab; |
12 import org.chromium.chrome.browser.tabmodel.EmptyTabModel; | 10 import org.chromium.chrome.browser.tabmodel.EmptyTabModel; |
13 import org.chromium.chrome.browser.tabmodel.TabModel; | 11 import org.chromium.chrome.browser.tabmodel.TabModel; |
14 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; | 12 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; |
15 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType; | 13 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType; |
16 import org.chromium.chrome.browser.tabmodel.TabModelDelegate; | 14 import org.chromium.chrome.browser.tabmodel.TabModelDelegate; |
17 import org.chromium.chrome.browser.tabmodel.TabModelOrderController; | 15 import org.chromium.chrome.browser.tabmodel.TabModelOrderController; |
18 import org.chromium.chrome.browser.tabmodel.TabModelSelectorBase; | 16 import org.chromium.chrome.browser.tabmodel.TabModelSelectorBase; |
19 import org.chromium.chrome.browser.widget.accessibility.AccessibilityTabModelWra
pper; | |
20 import org.chromium.content.browser.ContentVideoViewClient; | 17 import org.chromium.content.browser.ContentVideoViewClient; |
21 import org.chromium.content.browser.ContentViewClient; | 18 import org.chromium.content.browser.ContentViewClient; |
22 import org.chromium.content_public.browser.LoadUrlParams; | 19 import org.chromium.content_public.browser.LoadUrlParams; |
23 import org.chromium.ui.base.WindowAndroid; | 20 import org.chromium.ui.base.WindowAndroid; |
24 | 21 |
25 /** | 22 /** |
26 * Basic implementation of TabModelSelector for use in ChromeShell. Only has a r
egular TabModel, | 23 * Basic implementation of TabModelSelector for use in ChromeShell. Only has a r
egular TabModel, |
27 * no incognito one. | 24 * no incognito one. |
28 */ | 25 */ |
29 class ChromeShellTabModelSelector extends TabModelSelectorBase { | 26 class ChromeShellTabModelSelector extends TabModelSelectorBase { |
30 | 27 |
31 private final WindowAndroid mWindow; | 28 private final WindowAndroid mWindow; |
32 private final ContentVideoViewClient mContentVideoViewClient; | 29 private final ContentVideoViewClient mContentVideoViewClient; |
33 private final ViewGroup mParent; | 30 private final Context mContext; |
34 private final TabModelOrderController mOrderController; | 31 private final TabModelOrderController mOrderController; |
35 | 32 |
36 private AccessibilityTabModelWrapper mTabModelWrapper; | |
37 private TabManager mTabManager; | 33 private TabManager mTabManager; |
38 | 34 |
39 public ChromeShellTabModelSelector( | 35 public ChromeShellTabModelSelector( |
40 WindowAndroid window, ContentVideoViewClient videoViewClient, ViewGr
oup parent, | 36 WindowAndroid window, ContentVideoViewClient videoViewClient, Contex
t context, |
41 TabManager tabManager) { | 37 TabManager tabManager) { |
42 mWindow = window; | 38 mWindow = window; |
43 mContentVideoViewClient = videoViewClient; | 39 mContentVideoViewClient = videoViewClient; |
44 mParent = parent; | 40 mContext = context; |
45 mOrderController = new TabModelOrderController(this); | 41 mOrderController = new TabModelOrderController(this); |
46 mTabManager = tabManager; | 42 mTabManager = tabManager; |
47 | 43 |
48 TabModelDelegate tabModelDelegate = new TabModelDelegate() { | 44 TabModelDelegate tabModelDelegate = new TabModelDelegate() { |
49 @Override | 45 @Override |
50 public void didCreateNewTab(Tab tab) {} | 46 public void didCreateNewTab(Tab tab) {} |
51 | 47 |
52 @Override | 48 @Override |
53 public void didChange() {} | 49 public void didChange() {} |
54 | 50 |
55 @Override | 51 @Override |
56 public void selectModel(boolean incognito) { | 52 public void selectModel(boolean incognito) { |
57 assert !incognito; | 53 assert !incognito; |
58 } | 54 } |
59 | 55 |
60 @Override | 56 @Override |
61 public void requestToShowTab(Tab tab, TabSelectionType type) { | 57 public void requestToShowTab(Tab tab, TabSelectionType type) { |
62 } | 58 } |
63 | 59 |
64 @Override | 60 @Override |
65 public boolean isSessionRestoreInProgress() { | 61 public boolean isSessionRestoreInProgress() { |
66 return false; | 62 return false; |
67 } | 63 } |
68 | 64 |
69 @Override | 65 @Override |
70 public boolean isInOverviewMode() { | 66 public boolean isInOverviewMode() { |
71 return isTabSwitcherVisible(); | 67 return mTabManager.isTabSwitcherVisible(); |
72 } | 68 } |
73 | 69 |
74 @Override | 70 @Override |
75 public TabModel getModel(boolean incognito) { | 71 public TabModel getModel(boolean incognito) { |
76 return ChromeShellTabModelSelector.this.getModel(incognito); | 72 return ChromeShellTabModelSelector.this.getModel(incognito); |
77 } | 73 } |
78 | 74 |
79 @Override | 75 @Override |
80 public TabModel getCurrentModel() { | 76 public TabModel getCurrentModel() { |
81 return ChromeShellTabModelSelector.this.getCurrentModel(); | 77 return ChromeShellTabModelSelector.this.getCurrentModel(); |
82 } | 78 } |
83 }; | 79 }; |
84 TabModel tabModel = new ChromeShellTabModel(mOrderController, tabModelDe
legate); | 80 TabModel tabModel = new ChromeShellTabModel(mOrderController, tabModelDe
legate); |
85 initialize(false, tabModel, EmptyTabModel.getInstance()); | 81 initialize(false, tabModel, EmptyTabModel.getInstance()); |
86 } | 82 } |
87 | 83 |
88 @Override | 84 @Override |
89 public Tab openNewTab(LoadUrlParams loadUrlParams, TabLaunchType type, Tab p
arent, | 85 public Tab openNewTab(LoadUrlParams loadUrlParams, TabLaunchType type, Tab p
arent, |
90 boolean incognito) { | 86 boolean incognito) { |
91 assert !incognito; | 87 assert !incognito; |
92 ContentViewClient client = new ContentViewClient() { | 88 ContentViewClient client = new ContentViewClient() { |
93 @Override | 89 @Override |
94 public ContentVideoViewClient getContentVideoViewClient() { | 90 public ContentVideoViewClient getContentVideoViewClient() { |
95 return mContentVideoViewClient; | 91 return mContentVideoViewClient; |
96 } | 92 } |
97 }; | 93 }; |
98 ChromeShellTab tab = new ChromeShellTab( | 94 ChromeShellTab tab = new ChromeShellTab( |
99 mParent.getContext(), loadUrlParams.getUrl(), mWindow, client, m
TabManager); | 95 mContext, loadUrlParams.getUrl(), mWindow, client, mTabManager); |
100 int index = mOrderController.determineInsertionIndex(type, tab); | 96 int index = mOrderController.determineInsertionIndex(type, tab); |
101 TabModel tabModel = getCurrentModel(); | 97 TabModel tabModel = getCurrentModel(); |
102 tabModel.addTab(tab, index, type); | 98 tabModel.addTab(tab, index, type); |
103 tabModel.setIndex(index, TabSelectionType.FROM_NEW); | 99 tabModel.setIndex(index, TabSelectionType.FROM_NEW); |
104 return tab; | 100 return tab; |
105 } | 101 } |
106 | 102 |
107 /** | |
108 * Toggles the tab switcher visibility. | |
109 */ | |
110 public void toggleTabSwitcher() { | |
111 if (!isTabSwitcherVisible()) { | |
112 showTabSwitcher(); | |
113 } else { | |
114 hideTabSwitcher(); | |
115 } | |
116 } | |
117 | |
118 /* | |
119 * Hide the tab switcher. | |
120 */ | |
121 public void hideTabSwitcher() { | |
122 if (mTabModelWrapper == null) return; | |
123 ViewParent parent = mTabModelWrapper.getParent(); | |
124 if (parent != null) { | |
125 assert parent == mParent; | |
126 mParent.removeView(mTabModelWrapper); | |
127 } | |
128 } | |
129 | |
130 private void showTabSwitcher() { | |
131 if (mTabModelWrapper == null) { | |
132 mTabModelWrapper = (AccessibilityTabModelWrapper) LayoutInflater.fro
m( | |
133 mParent.getContext()).inflate(R.layout.accessibility_tab_swi
tcher, null); | |
134 mTabModelWrapper.setup(null); | |
135 mTabModelWrapper.setTabModelSelector(this); | |
136 } | |
137 | |
138 if (mTabModelWrapper.getParent() == null) { | |
139 mParent.addView(mTabModelWrapper); | |
140 } | |
141 } | |
142 | |
143 public boolean isTabSwitcherVisible() { | |
144 return mTabModelWrapper != null && mTabModelWrapper.getParent() == mPare
nt; | |
145 } | |
146 | |
147 } | 103 } |
OLD | NEW |