Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / chrome / android / shell / java / src / org / chromium / chrome / shell / ChromeShellTabModelSelector.java
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.
4
5 package org.chromium.chrome.shell;
6
7 import android.view.LayoutInflater;
8 import android.view.ViewGroup;
9 import android.view.ViewParent;
10
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;
24
25 /**
26  * Basic implementation of TabModelSelector for use in ChromeShell. Only has a regular TabModel,
27  * no incognito one.
28  */
29 class ChromeShellTabModelSelector extends TabModelSelectorBase {
30
31     private final WindowAndroid mWindow;
32     private final ContentVideoViewClient mContentVideoViewClient;
33     private final ViewGroup mParent;
34     private final TabModelOrderController mOrderController;
35
36     private AccessibilityTabModelWrapper mTabModelWrapper;
37     private TabManager mTabManager;
38
39     public ChromeShellTabModelSelector(
40             WindowAndroid window, ContentVideoViewClient videoViewClient, ViewGroup parent,
41             TabManager tabManager) {
42         mWindow = window;
43         mContentVideoViewClient = videoViewClient;
44         mParent = parent;
45         mOrderController = new TabModelOrderController(this);
46         mTabManager = tabManager;
47
48         TabModelDelegate tabModelDelegate = new TabModelDelegate() {
49             @Override
50             public void didCreateNewTab(Tab tab) {}
51
52             @Override
53             public void didChange() {}
54
55             @Override
56             public void selectModel(boolean incognito) {
57                 assert !incognito;
58             }
59
60             @Override
61             public void requestToShowTab(Tab tab, TabSelectionType type) {
62             }
63
64             @Override
65             public boolean isSessionRestoreInProgress() {
66                 return false;
67             }
68
69             @Override
70             public boolean isInOverviewMode() {
71                 return isTabSwitcherVisible();
72             }
73
74             @Override
75             public TabModel getModel(boolean incognito) {
76                 return ChromeShellTabModelSelector.this.getModel(incognito);
77             }
78
79             @Override
80             public TabModel getCurrentModel() {
81                 return ChromeShellTabModelSelector.this.getCurrentModel();
82             }
83         };
84         TabModel tabModel = new ChromeShellTabModel(mOrderController, tabModelDelegate);
85         initialize(false, tabModel, EmptyTabModel.getInstance());
86     }
87
88     @Override
89     public Tab openNewTab(LoadUrlParams loadUrlParams, TabLaunchType type, Tab parent,
90             boolean incognito) {
91         assert !incognito;
92         ContentViewClient client = new ContentViewClient() {
93             @Override
94             public ContentVideoViewClient getContentVideoViewClient() {
95                 return mContentVideoViewClient;
96             }
97         };
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);
104         return tab;
105     }
106
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.from(
133                     mParent.getContext()).inflate(R.layout.accessibility_tab_switcher, 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() == mParent;
145     }
146
147 }