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
3 // found in the LICENSE file.
5 package org.chromium.chrome.shell;
7 import android.view.LayoutInflater;
8 import android.view.ViewGroup;
9 import android.view.ViewParent;
11 import org.chromium.chrome.browser.Tab;
12 import org.chromium.chrome.browser.tabmodel.EmptyTabModel;
13 import org.chromium.chrome.browser.tabmodel.TabModel;
14 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
15 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
16 import org.chromium.chrome.browser.tabmodel.TabModelDelegate;
17 import org.chromium.chrome.browser.tabmodel.TabModelOrderController;
18 import org.chromium.chrome.browser.tabmodel.TabModelSelectorBase;
19 import org.chromium.chrome.browser.widget.accessibility.AccessibilityTabModelWrapper;
20 import org.chromium.content.browser.ContentVideoViewClient;
21 import org.chromium.content.browser.ContentViewClient;
22 import org.chromium.content_public.browser.LoadUrlParams;
23 import org.chromium.ui.base.WindowAndroid;
26 * Basic implementation of TabModelSelector for use in ChromeShell. Only has a regular TabModel,
29 class ChromeShellTabModelSelector extends TabModelSelectorBase {
31 private final WindowAndroid mWindow;
32 private final ContentVideoViewClient mContentVideoViewClient;
33 private final ViewGroup mParent;
34 private final TabModelOrderController mOrderController;
36 private AccessibilityTabModelWrapper mTabModelWrapper;
37 private TabManager mTabManager;
39 public ChromeShellTabModelSelector(
40 WindowAndroid window, ContentVideoViewClient videoViewClient, ViewGroup parent,
41 TabManager tabManager) {
43 mContentVideoViewClient = videoViewClient;
45 mOrderController = new TabModelOrderController(this);
46 mTabManager = tabManager;
48 TabModelDelegate tabModelDelegate = new TabModelDelegate() {
50 public void didCreateNewTab(Tab tab) {}
53 public void didChange() {}
56 public void selectModel(boolean incognito) {
61 public void requestToShowTab(Tab tab, TabSelectionType type) {
65 public boolean isSessionRestoreInProgress() {
70 public boolean isInOverviewMode() {
71 return isTabSwitcherVisible();
75 public TabModel getModel(boolean incognito) {
76 return ChromeShellTabModelSelector.this.getModel(incognito);
80 public TabModel getCurrentModel() {
81 return ChromeShellTabModelSelector.this.getCurrentModel();
84 TabModel tabModel = new ChromeShellTabModel(mOrderController, tabModelDelegate);
85 initialize(false, tabModel, EmptyTabModel.getInstance());
89 public Tab openNewTab(LoadUrlParams loadUrlParams, TabLaunchType type, Tab parent,
92 ContentViewClient client = new ContentViewClient() {
94 public ContentVideoViewClient getContentVideoViewClient() {
95 return mContentVideoViewClient;
98 ChromeShellTab tab = new ChromeShellTab(
99 mParent.getContext(), loadUrlParams.getUrl(), mWindow, client, mTabManager);
100 int index = mOrderController.determineInsertionIndex(type, tab);
101 TabModel tabModel = getCurrentModel();
102 tabModel.addTab(tab, index, type);
103 tabModel.setIndex(index, TabSelectionType.FROM_NEW);
108 * Toggles the tab switcher visibility.
110 public void toggleTabSwitcher() {
111 if (!isTabSwitcherVisible()) {
119 * Hide the tab switcher.
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);
130 private void showTabSwitcher() {
131 if (mTabModelWrapper == null) {
132 mTabModelWrapper = (AccessibilityTabModelWrapper) LayoutInflater.from(
133 mParent.getContext()).inflate(R.layout.accessibility_tab_switcher, null);
134 mTabModelWrapper.setup(null);
135 mTabModelWrapper.setTabModelSelector(this);
138 if (mTabModelWrapper.getParent() == null) {
139 mParent.addView(mTabModelWrapper);
143 public boolean isTabSwitcherVisible() {
144 return mTabModelWrapper != null && mTabModelWrapper.getParent() == mParent;