OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 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.webapps; | 5 package org.chromium.chrome.browser.webapps; |
6 | 6 |
7 import android.content.Intent; | 7 import android.content.Intent; |
8 import android.util.Pair; | 8 import android.util.Pair; |
9 import android.view.View; | 9 import android.view.View; |
10 import android.view.ViewGroup; | 10 import android.view.ViewGroup; |
(...skipping 28 matching lines...) Expand all Loading... |
39 * Activity would be webapps and streaming media activities - anything where use
r interaction with | 39 * Activity would be webapps and streaming media activities - anything where use
r interaction with |
40 * the regular browser's UI is either unnecessary or undesirable. | 40 * the regular browser's UI is either unnecessary or undesirable. |
41 * Subclasses can override {@link #createUI()} if they need something more exoti
c. | 41 * Subclasses can override {@link #createUI()} if they need something more exoti
c. |
42 */ | 42 */ |
43 @SuppressFBWarnings("URF_UNREAD_FIELD") | 43 @SuppressFBWarnings("URF_UNREAD_FIELD") |
44 public abstract class FullScreenActivity extends ChromeActivity { | 44 public abstract class FullScreenActivity extends ChromeActivity { |
45 protected static final String BUNDLE_TAB_ID = "tabId"; | 45 protected static final String BUNDLE_TAB_ID = "tabId"; |
46 protected static final String BUNDLE_TAB_URL = "tabUrl"; | 46 protected static final String BUNDLE_TAB_URL = "tabUrl"; |
47 private static final String TAG = "FullScreenActivity"; | 47 private static final String TAG = "FullScreenActivity"; |
48 | 48 |
49 private Tab mTab; | |
50 | |
51 private WebContents mWebContents; | 49 private WebContents mWebContents; |
52 @SuppressWarnings("unused") // Reference needed to prevent GC. | 50 @SuppressWarnings("unused") // Reference needed to prevent GC. |
53 private WebContentsObserver mWebContentsObserver; | 51 private WebContentsObserver mWebContentsObserver; |
54 | 52 |
55 @Override | 53 @Override |
56 protected void onNewIntent(Intent intent) { | 54 protected void onNewIntent(Intent intent) { |
57 super.onNewIntent(intent); | 55 super.onNewIntent(intent); |
58 setIntent(intent); | 56 setIntent(intent); |
59 } | 57 } |
60 | 58 |
(...skipping 16 matching lines...) Expand all Loading... |
77 | 75 |
78 /** Creates TabDelegates for opening new Tabs. */ | 76 /** Creates TabDelegates for opening new Tabs. */ |
79 protected TabDelegate createTabDelegate(boolean incognito) { | 77 protected TabDelegate createTabDelegate(boolean incognito) { |
80 return new TabDelegate(incognito); | 78 return new TabDelegate(incognito); |
81 } | 79 } |
82 | 80 |
83 @Override | 81 @Override |
84 public void initializeState() { | 82 public void initializeState() { |
85 super.initializeState(); | 83 super.initializeState(); |
86 | 84 |
87 mTab = createTab(); | 85 Tab tab = createTab(); |
| 86 getTabModelSelector().setTab(tab); |
88 handleTabContentChanged(); | 87 handleTabContentChanged(); |
89 getTabModelSelector().setTab(mTab); | 88 tab.show(TabSelectionType.FROM_NEW); |
90 mTab.show(TabSelectionType.FROM_NEW); | |
91 } | 89 } |
92 | 90 |
93 @Override | 91 @Override |
94 public void finishNativeInitialization() { | 92 public void finishNativeInitialization() { |
95 ControlContainer controlContainer = (ControlContainer) findViewById(R.id
.control_container); | 93 ControlContainer controlContainer = (ControlContainer) findViewById(R.id
.control_container); |
96 initializeCompositorContent(new LayoutManagerDocument(getCompositorViewH
older()), | 94 initializeCompositorContent(new LayoutManagerDocument(getCompositorViewH
older()), |
97 (View) controlContainer, (ViewGroup) findViewById(android.R.id.c
ontent), | 95 (View) controlContainer, (ViewGroup) findViewById(android.R.id.c
ontent), |
98 controlContainer); | 96 controlContainer); |
99 | 97 |
100 if (getFullscreenManager() != null) getFullscreenManager().setTab(getAct
ivityTab()); | 98 if (getFullscreenManager() != null) getFullscreenManager().setTab(getAct
ivityTab()); |
101 super.finishNativeInitialization(); | 99 super.finishNativeInitialization(); |
102 } | 100 } |
103 | 101 |
104 @Override | 102 @Override |
105 protected void initializeToolbar() { } | 103 protected void initializeToolbar() { } |
106 | 104 |
107 @Override | 105 @Override |
108 public SingleTabModelSelector getTabModelSelector() { | 106 public SingleTabModelSelector getTabModelSelector() { |
109 return (SingleTabModelSelector) super.getTabModelSelector(); | 107 return (SingleTabModelSelector) super.getTabModelSelector(); |
110 } | 108 } |
111 | 109 |
112 @Override | |
113 public final Tab getActivityTab() { | |
114 return mTab; | |
115 } | |
116 | |
117 /** | 110 /** |
118 * Creates the {@link Tab} used by the FullScreenActivity. | 111 * Creates the {@link Tab} used by the FullScreenActivity. |
119 * If the {@code savedInstanceState} exists, then the user did not intention
ally close the app | 112 * If the {@code savedInstanceState} exists, then the user did not intention
ally close the app |
120 * by swiping it away in the recent tasks list. In that case, we try to res
tore the tab from | 113 * by swiping it away in the recent tasks list. In that case, we try to res
tore the tab from |
121 * disk. | 114 * disk. |
122 */ | 115 */ |
123 private Tab createTab() { | 116 protected Tab createTab() { |
124 Tab tab = null; | 117 Tab tab = null; |
125 boolean unfreeze = false; | 118 boolean unfreeze = false; |
126 | 119 |
127 int tabId = Tab.INVALID_TAB_ID; | 120 int tabId = Tab.INVALID_TAB_ID; |
128 String tabUrl = null; | 121 String tabUrl = null; |
129 if (getSavedInstanceState() != null) { | 122 if (getSavedInstanceState() != null) { |
130 tabId = getSavedInstanceState().getInt(BUNDLE_TAB_ID, Tab.INVALID_TA
B_ID); | 123 tabId = getSavedInstanceState().getInt(BUNDLE_TAB_ID, Tab.INVALID_TA
B_ID); |
131 tabUrl = getSavedInstanceState().getString(BUNDLE_TAB_URL); | 124 tabUrl = getSavedInstanceState().getString(BUNDLE_TAB_URL); |
132 } | 125 } |
133 | 126 |
134 if (tabId != Tab.INVALID_TAB_ID && tabUrl != null && getActivityDirector
y() != null) { | 127 if (tabId != Tab.INVALID_TAB_ID && tabUrl != null && getActivityDirector
y() != null) { |
135 // Restore the tab. | 128 // Restore the tab. |
136 TabState tabState = TabState.restoreTabState(getActivityDirectory(),
tabId); | 129 TabState tabState = TabState.restoreTabState(getActivityDirectory(),
tabId); |
137 tab = new Tab(tabId, Tab.INVALID_TAB_ID, false, this, getWindowAndro
id(), | 130 tab = new Tab(tabId, Tab.INVALID_TAB_ID, false, this, getWindowAndro
id(), |
138 TabLaunchType.FROM_RESTORE, | 131 TabLaunchType.FROM_RESTORE, |
139 TabCreationState.FROZEN_ON_RESTORE, tabState); | 132 TabCreationState.FROZEN_ON_RESTORE, tabState); |
140 unfreeze = true; | 133 unfreeze = true; |
141 } | 134 } |
142 | 135 |
143 if (tab == null) { | 136 if (tab == null) { |
144 tab = new Tab(Tab.INVALID_TAB_ID, Tab.INVALID_TAB_ID, false, this, g
etWindowAndroid(), | 137 tab = new Tab(Tab.INVALID_TAB_ID, Tab.INVALID_TAB_ID, false, this, g
etWindowAndroid(), |
145 TabLaunchType.FROM_CHROME_UI, null, null); | 138 TabLaunchType.FROM_CHROME_UI, null, null); |
146 } | 139 } |
147 | 140 |
148 tab.initialize(null, getTabContentManager(), createTabDelegateFactory(),
false, unfreeze); | 141 tab.initialize(null, getTabContentManager(), createTabDelegateFactory(),
false, unfreeze); |
149 tab.addObserver(new EmptyTabObserver() { | 142 tab.addObserver(new EmptyTabObserver() { |
150 @Override | 143 @Override |
151 public void onContentChanged(Tab tab) { | 144 public void onContentChanged(Tab tab) { |
152 assert tab == mTab; | 145 assert tab == getActivityTab(); |
153 handleTabContentChanged(); | 146 handleTabContentChanged(); |
154 } | 147 } |
155 }); | 148 }); |
156 return tab; | 149 return tab; |
157 } | 150 } |
158 | 151 |
159 private void handleTabContentChanged() { | 152 private void handleTabContentChanged() { |
160 assert mTab != null; | 153 final Tab tab = getActivityTab(); |
| 154 assert tab != null; |
161 | 155 |
162 WebContents webContents = mTab.getWebContents(); | 156 WebContents webContents = tab.getWebContents(); |
163 if (mWebContents == webContents) return; | 157 if (mWebContents == webContents) return; |
164 | 158 |
165 // Clean up any old references to the previous WebContents. | 159 // Clean up any old references to the previous WebContents. |
166 if (mWebContentsObserver != null) { | 160 if (mWebContentsObserver != null) { |
167 mWebContentsObserver.destroy(); | 161 mWebContentsObserver.destroy(); |
168 mWebContentsObserver = null; | 162 mWebContentsObserver = null; |
169 } | 163 } |
170 | 164 |
171 mWebContents = webContents; | 165 mWebContents = webContents; |
172 if (mWebContents == null) return; | 166 if (mWebContents == null) return; |
173 | 167 |
174 ContentViewCore.fromWebContents(webContents).setFullscreenRequiredForOri
entationLock(false); | 168 ContentViewCore.fromWebContents(webContents).setFullscreenRequiredForOri
entationLock(false); |
175 mWebContentsObserver = new WebContentsObserver(webContents) { | 169 mWebContentsObserver = new WebContentsObserver(webContents) { |
176 @Override | 170 @Override |
177 public void didFinishNavigation(String url, boolean isInMainFrame, b
oolean isErrorPage, | 171 public void didFinishNavigation(String url, boolean isInMainFrame, b
oolean isErrorPage, |
178 boolean hasCommitted, boolean isSameDocument, boolean isFrag
mentNavigation, | 172 boolean hasCommitted, boolean isSameDocument, boolean isFrag
mentNavigation, |
179 Integer pageTransition, int errorCode, String errorDescripti
on, | 173 Integer pageTransition, int errorCode, String errorDescripti
on, |
180 int httpStatusCode) { | 174 int httpStatusCode) { |
181 if (hasCommitted && isInMainFrame) { | 175 if (hasCommitted && isInMainFrame) { |
182 // Notify the renderer to permanently hide the top controls
since they do | 176 // Notify the renderer to permanently hide the top controls
since they do |
183 // not apply to fullscreen content views. | 177 // not apply to fullscreen content views. |
184 mTab.updateBrowserControlsState( | 178 tab.updateBrowserControlsState(tab.getBrowserControlsStateCo
nstraints(), true); |
185 mTab.getBrowserControlsStateConstraints(), true); | |
186 } | 179 } |
187 } | 180 } |
188 }; | 181 }; |
189 } | 182 } |
190 | 183 |
191 /** | 184 /** |
192 * @return {@link TabDelegateFactory} to be used while creating the associat
ed {@link Tab}. | 185 * @return {@link TabDelegateFactory} to be used while creating the associat
ed {@link Tab}. |
193 */ | 186 */ |
194 protected TabDelegateFactory createTabDelegateFactory() { | 187 protected TabDelegateFactory createTabDelegateFactory() { |
195 return new FullScreenDelegateFactory(); | 188 return new FullScreenDelegateFactory(); |
196 } | 189 } |
197 | 190 |
198 /** | 191 /** |
199 * @return {@link File} pointing at a directory specific for this class. | 192 * @return {@link File} pointing at a directory specific for this class. |
200 */ | 193 */ |
201 protected File getActivityDirectory() { | 194 protected File getActivityDirectory() { |
202 return null; | 195 return null; |
203 } | 196 } |
204 | 197 |
205 @Override | 198 @Override |
206 protected boolean handleBackPressed() { | 199 protected boolean handleBackPressed() { |
207 if (mTab == null) return false; | 200 Tab tab = getActivityTab(); |
| 201 if (tab == null) return false; |
208 | 202 |
209 if (exitFullscreenIfShowing()) return true; | 203 if (exitFullscreenIfShowing()) return true; |
210 | 204 |
211 if (mTab.canGoBack()) { | 205 if (tab.canGoBack()) { |
212 mTab.goBack(); | 206 tab.goBack(); |
213 return true; | 207 return true; |
214 } | 208 } |
215 return false; | 209 return false; |
216 } | 210 } |
217 | 211 |
218 @Override | 212 @Override |
219 public void onCheckForUpdate(boolean updateAvailable) { | 213 public void onCheckForUpdate(boolean updateAvailable) { |
220 } | 214 } |
221 } | 215 } |
OLD | NEW |