| 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; | 5 package org.chromium.chrome.browser; |
| 6 | 6 |
| 7 import android.annotation.SuppressLint; | 7 import android.annotation.SuppressLint; |
| 8 import android.app.Activity; | 8 import android.app.Activity; |
| 9 import android.app.SearchManager; | 9 import android.app.SearchManager; |
| 10 import android.app.assist.AssistContent; | 10 //import android.app.assist.AssistContent; |
| 11 import android.content.Context; | 11 import android.content.Context; |
| 12 import android.content.Intent; | 12 import android.content.Intent; |
| 13 import android.content.SharedPreferences; | 13 import android.content.SharedPreferences; |
| 14 import android.content.res.Configuration; | 14 import android.content.res.Configuration; |
| 15 import android.graphics.Bitmap; | 15 import android.graphics.Bitmap; |
| 16 import android.graphics.Color; | 16 import android.graphics.Color; |
| 17 import android.graphics.Rect; | 17 import android.graphics.Rect; |
| 18 import android.net.Uri; | 18 import android.net.Uri; |
| 19 import android.os.AsyncTask; | 19 import android.os.AsyncTask; |
| 20 import android.os.Build; | 20 import android.os.Build; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 43 import org.chromium.base.BaseSwitches; | 43 import org.chromium.base.BaseSwitches; |
| 44 import org.chromium.base.CommandLine; | 44 import org.chromium.base.CommandLine; |
| 45 import org.chromium.base.Log; | 45 import org.chromium.base.Log; |
| 46 import org.chromium.base.SysUtils; | 46 import org.chromium.base.SysUtils; |
| 47 import org.chromium.base.ThreadUtils; | 47 import org.chromium.base.ThreadUtils; |
| 48 import org.chromium.base.TraceEvent; | 48 import org.chromium.base.TraceEvent; |
| 49 import org.chromium.base.VisibleForTesting; | 49 import org.chromium.base.VisibleForTesting; |
| 50 import org.chromium.base.metrics.RecordHistogram; | 50 import org.chromium.base.metrics.RecordHistogram; |
| 51 import org.chromium.base.metrics.RecordUserAction; | 51 import org.chromium.base.metrics.RecordUserAction; |
| 52 import org.chromium.chrome.R; | 52 import org.chromium.chrome.R; |
| 53 import org.chromium.chrome.browser.BookmarksBridge.BookmarkModelObserver; | 53 //import org.chromium.chrome.browser.BookmarksBridge.BookmarkModelObserver; |
| 54 import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate; | 54 import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate; |
| 55 import org.chromium.chrome.browser.IntentHandler.TabOpenType; | 55 import org.chromium.chrome.browser.IntentHandler.TabOpenType; |
| 56 import org.chromium.chrome.browser.appmenu.AppMenu; | 56 //import org.chromium.chrome.browser.appmenu.AppMenu; |
| 57 import org.chromium.chrome.browser.appmenu.AppMenuHandler; | 57 //import org.chromium.chrome.browser.appmenu.AppMenuHandler; |
| 58 import org.chromium.chrome.browser.appmenu.AppMenuObserver; | 58 //import org.chromium.chrome.browser.appmenu.AppMenuObserver; |
| 59 import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegate; | 59 //import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegate; |
| 60 import org.chromium.chrome.browser.appmenu.ChromeAppMenuPropertiesDelegate; | 60 //import org.chromium.chrome.browser.appmenu.ChromeAppMenuPropertiesDelegate; |
| 61 import org.chromium.chrome.browser.bookmark.ManageBookmarkActivity; | 61 //import org.chromium.chrome.browser.bookmark.ManageBookmarkActivity; |
| 62 import org.chromium.chrome.browser.compositor.CompositorViewHolder; | 62 //import org.chromium.chrome.browser.compositor.CompositorViewHolder; |
| 63 import org.chromium.chrome.browser.compositor.layouts.Layout; | 63 //import org.chromium.chrome.browser.compositor.layouts.Layout; |
| 64 import org.chromium.chrome.browser.compositor.layouts.LayoutManager; | 64 //import org.chromium.chrome.browser.compositor.layouts.LayoutManager; |
| 65 import org.chromium.chrome.browser.compositor.layouts.LayoutManagerDocument; | 65 //import org.chromium.chrome.browser.compositor.layouts.LayoutManagerDocument; |
| 66 import org.chromium.chrome.browser.compositor.layouts.SceneChangeObserver; | 66 //import org.chromium.chrome.browser.compositor.layouts.SceneChangeObserver; |
| 67 import org.chromium.chrome.browser.compositor.layouts.content.ContentOffsetProvi
der; | 67 //import org.chromium.chrome.browser.compositor.layouts.content.ContentOffsetPro
vider; |
| 68 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; | 68 //import org.chromium.chrome.browser.compositor.layouts.content.TabContentManage
r; |
| 69 import org.chromium.chrome.browser.contextualsearch.ContextualSearchFieldTrial; | 69 //import org.chromium.chrome.browser.contextualsearch.ContextualSearchFieldTrial
; |
| 70 import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager; | 70 //import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager; |
| 71 import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager.Cont
extualSearchTabPromotionDelegate; | 71 //import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager.Co
ntextualSearchTabPromotionDelegate; |
| 72 import org.chromium.chrome.browser.customtabs.CustomTab; | 72 //import org.chromium.chrome.browser.customtabs.CustomTab; |
| 73 import org.chromium.chrome.browser.customtabs.CustomTabActivity; | 73 //import org.chromium.chrome.browser.customtabs.CustomTabActivity; |
| 74 import org.chromium.chrome.browser.device.DeviceClassManager; | 74 import org.chromium.chrome.browser.device.DeviceClassManager; |
| 75 import org.chromium.chrome.browser.dom_distiller.DistilledPagePrefsView; | 75 //import org.chromium.chrome.browser.dom_distiller.DistilledPagePrefsView; |
| 76 import org.chromium.chrome.browser.dom_distiller.ReaderModeActivityDelegate; | 76 //import org.chromium.chrome.browser.dom_distiller.ReaderModeActivityDelegate; |
| 77 import org.chromium.chrome.browser.dom_distiller.ReaderModeManager; | 77 //import org.chromium.chrome.browser.dom_distiller.ReaderModeManager; |
| 78 import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkUtils; | 78 //import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkUtils; |
| 79 import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarksModel; | 79 //import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarksModel; |
| 80 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; | 80 //import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; |
| 81 import org.chromium.chrome.browser.gsa.ContextReporter; | 81 //import org.chromium.chrome.browser.gsa.ContextReporter; |
| 82 import org.chromium.chrome.browser.gsa.GSAServiceClient; | 82 //import org.chromium.chrome.browser.gsa.GSAServiceClient; |
| 83 import org.chromium.chrome.browser.gsa.GSAState; | 83 //import org.chromium.chrome.browser.gsa.GSAState; |
| 84 import org.chromium.chrome.browser.help.HelpAndFeedback; | 84 //import org.chromium.chrome.browser.help.HelpAndFeedback; |
| 85 import org.chromium.chrome.browser.infobar.InfoBarContainer; | 85 //import org.chromium.chrome.browser.infobar.InfoBarContainer; |
| 86 import org.chromium.chrome.browser.init.AsyncInitializationActivity; | 86 import org.chromium.chrome.browser.init.AsyncInitializationActivity; |
| 87 import org.chromium.chrome.browser.metrics.LaunchMetrics; | 87 //import org.chromium.chrome.browser.metrics.LaunchMetrics; |
| 88 import org.chromium.chrome.browser.metrics.UmaSessionStats; | 88 //import org.chromium.chrome.browser.metrics.UmaSessionStats; |
| 89 import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; | 89 //import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; |
| 90 import org.chromium.chrome.browser.nfc.BeamController; | 90 //import org.chromium.chrome.browser.nfc.BeamController; |
| 91 import org.chromium.chrome.browser.nfc.BeamProvider; | 91 //import org.chromium.chrome.browser.nfc.BeamProvider; |
| 92 import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomiza
tions; | 92 //import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomi
zations; |
| 93 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; | 93 //import org.chromium.chrome.browser.preferences.ChromePreferenceManager; |
| 94 import org.chromium.chrome.browser.preferences.PrefServiceBridge; | 94 //import org.chromium.chrome.browser.preferences.PrefServiceBridge; |
| 95 import org.chromium.chrome.browser.preferences.PreferencesLauncher; | 95 //import org.chromium.chrome.browser.preferences.PreferencesLauncher; |
| 96 import org.chromium.chrome.browser.printing.TabPrinter; | 96 //import org.chromium.chrome.browser.printing.TabPrinter; |
| 97 import org.chromium.chrome.browser.share.ShareHelper; | 97 //import org.chromium.chrome.browser.share.ShareHelper; |
| 98 import org.chromium.chrome.browser.snackbar.LoFiBarPopupController; | 98 //import org.chromium.chrome.browser.snackbar.LoFiBarPopupController; |
| 99 import org.chromium.chrome.browser.snackbar.SnackbarManager; | 99 //import org.chromium.chrome.browser.snackbar.SnackbarManager; |
| 100 import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarManageable; | 100 //import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarManageable
; |
| 101 import org.chromium.chrome.browser.sync.ProfileSyncService; | 101 //import org.chromium.chrome.browser.sync.ProfileSyncService; |
| 102 import org.chromium.chrome.browser.tab.EmptyTabObserver; | 102 //import org.chromium.chrome.browser.tab.EmptyTabObserver; |
| 103 import org.chromium.chrome.browser.tab.Tab; | 103 //import org.chromium.chrome.browser.tab.Tab; |
| 104 import org.chromium.chrome.browser.tab.TabObserver; | 104 //import org.chromium.chrome.browser.tab.TabObserver; |
| 105 import org.chromium.chrome.browser.tabmodel.ChromeTabCreator; | 105 //import org.chromium.chrome.browser.tabmodel.ChromeTabCreator; |
| 106 import org.chromium.chrome.browser.tabmodel.EmptyTabModel; | 106 //import org.chromium.chrome.browser.tabmodel.EmptyTabModel; |
| 107 import org.chromium.chrome.browser.tabmodel.TabCreatorManager; | 107 //import org.chromium.chrome.browser.tabmodel.TabCreatorManager; |
| 108 import org.chromium.chrome.browser.tabmodel.TabModel; | 108 //import org.chromium.chrome.browser.tabmodel.TabModel; |
| 109 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; | 109 //import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; |
| 110 import org.chromium.chrome.browser.tabmodel.TabModelSelector; | 110 //import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
| 111 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver; | 111 //import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver; |
| 112 import org.chromium.chrome.browser.tabmodel.TabModelUtils; | 112 //import org.chromium.chrome.browser.tabmodel.TabModelUtils; |
| 113 import org.chromium.chrome.browser.tabmodel.TabWindowManager; | 113 //import org.chromium.chrome.browser.tabmodel.TabWindowManager; |
| 114 import org.chromium.chrome.browser.toolbar.Toolbar; | 114 //import org.chromium.chrome.browser.toolbar.Toolbar; |
| 115 import org.chromium.chrome.browser.toolbar.ToolbarControlContainer; | 115 //import org.chromium.chrome.browser.toolbar.ToolbarControlContainer; |
| 116 import org.chromium.chrome.browser.toolbar.ToolbarManager; | 116 //import org.chromium.chrome.browser.toolbar.ToolbarManager; |
| 117 import org.chromium.chrome.browser.util.FeatureUtilities; | 117 //import org.chromium.chrome.browser.util.FeatureUtilities; |
| 118 import org.chromium.chrome.browser.webapps.AddToHomescreenDialog; | 118 //import org.chromium.chrome.browser.webapps.AddToHomescreenDialog; |
| 119 import org.chromium.chrome.browser.widget.ControlContainer; | 119 //import org.chromium.chrome.browser.widget.ControlContainer; |
| 120 import org.chromium.content.browser.ContentReadbackHandler; | 120 import org.chromium.content.browser.ContentReadbackHandler; |
| 121 import org.chromium.content.browser.ContentReadbackHandler.GetBitmapCallback; | 121 import org.chromium.content.browser.ContentReadbackHandler.GetBitmapCallback; |
| 122 import org.chromium.content.browser.ContentViewCore; | 122 import org.chromium.content.browser.ContentViewCore; |
| 123 import org.chromium.content.common.ContentSwitches; | 123 import org.chromium.content.common.ContentSwitches; |
| 124 import org.chromium.content_public.browser.LoadUrlParams; | 124 import org.chromium.content_public.browser.LoadUrlParams; |
| 125 import org.chromium.content_public.browser.readback_types.ReadbackResponse; | 125 //import org.chromium.content_public.browser.readback_types.ReadbackResponse; |
| 126 import org.chromium.policy.CombinedPolicyProvider.PolicyChangeListener; | 126 import org.chromium.policy.CombinedPolicyProvider.PolicyChangeListener; |
| 127 import org.chromium.printing.PrintManagerDelegateImpl; | 127 import org.chromium.printing.PrintManagerDelegateImpl; |
| 128 import org.chromium.printing.PrintingController; | 128 import org.chromium.printing.PrintingController; |
| 129 import org.chromium.ui.base.ActivityWindowAndroid; | 129 import org.chromium.ui.base.ActivityWindowAndroid; |
| 130 import org.chromium.ui.base.PageTransition; | 130 //import org.chromium.ui.base.PageTransition; |
| 131 import org.chromium.ui.base.WindowAndroid; | 131 import org.chromium.ui.base.WindowAndroid; |
| 132 | 132 |
| 133 import java.util.Locale; | 133 import java.util.Locale; |
| 134 import java.util.concurrent.TimeUnit; | 134 import java.util.concurrent.TimeUnit; |
| 135 | 135 |
| 136 /** | 136 /** |
| 137 * A {@link AsyncInitializationActivity} that builds and manages a {@link Compos
itorViewHolder} | 137 * A {@link AsyncInitializationActivity} that builds and manages a {@link Compos
itorViewHolder} |
| 138 * and associated classes. | 138 * and associated classes. |
| 139 */ | 139 */ |
| 140 public abstract class ChromeActivity extends AsyncInitializationActivity | 140 public abstract class ChromeActivity extends AsyncInitializationActivity |
| 141 implements TabCreatorManager, AccessibilityStateChangeListener, PolicyCh
angeListener, | 141 implements AccessibilityStateChangeListener, PolicyChangeListener { |
| 142 ContextualSearchTabPromotionDelegate, SnackbarManageable, SceneChangeObs
erver { | 142 // /** |
| 143 /** | 143 // * Factory which creates the AppMenuHandler. |
| 144 * Factory which creates the AppMenuHandler. | 144 // */ |
| 145 */ | 145 // public interface AppMenuHandlerFactory { |
| 146 public interface AppMenuHandlerFactory { | 146 // /** |
| 147 /** | 147 // * @return AppMenuHandler for the given activity and menu resource id. |
| 148 * @return AppMenuHandler for the given activity and menu resource id. | 148 // */ |
| 149 */ | 149 // public AppMenuHandler get(Activity activity, |
| 150 public AppMenuHandler get(Activity activity, | 150 // AppMenuPropertiesDelegate delegate, int menuResourceId); |
| 151 AppMenuPropertiesDelegate delegate, int menuResourceId); | 151 // } |
| 152 } | |
| 153 | 152 |
| 154 /** | 153 /** |
| 155 * No control container to inflate during initialization. | 154 * No control container to inflate during initialization. |
| 156 */ | 155 */ |
| 157 private static final int NO_CONTROL_CONTAINER = -1; | 156 private static final int NO_CONTROL_CONTAINER = -1; |
| 158 | 157 |
| 159 /** Prevents race conditions when deleting snapshot database. */ | 158 /** Prevents race conditions when deleting snapshot database. */ |
| 160 private static final Object SNAPSHOT_DATABASE_LOCK = new Object(); | 159 private static final Object SNAPSHOT_DATABASE_LOCK = new Object(); |
| 161 private static final String SNAPSHOT_DATABASE_REMOVED = "snapshot_database_r
emoved"; | 160 private static final String SNAPSHOT_DATABASE_REMOVED = "snapshot_database_r
emoved"; |
| 162 private static final String SNAPSHOT_DATABASE_NAME = "snapshots.db"; | 161 private static final String SNAPSHOT_DATABASE_NAME = "snapshots.db"; |
| 163 | 162 |
| 164 /** Delay in ms after first page load finishes before we initiate deferred s
tartup actions. */ | 163 /** Delay in ms after first page load finishes before we initiate deferred s
tartup actions. */ |
| 165 private static final int DEFERRED_STARTUP_DELAY_MS = 1000; | 164 private static final int DEFERRED_STARTUP_DELAY_MS = 1000; |
| 166 | 165 |
| 167 /** | 166 /** |
| 168 * Timeout in ms for reading PartnerBrowserCustomizations provider. | 167 * Timeout in ms for reading PartnerBrowserCustomizations provider. |
| 169 */ | 168 */ |
| 170 private static final int PARTNER_BROWSER_CUSTOMIZATIONS_TIMEOUT_MS = 10000; | 169 private static final int PARTNER_BROWSER_CUSTOMIZATIONS_TIMEOUT_MS = 10000; |
| 171 private static final String TAG = "cr.ChromeActivity"; | 170 private static final String TAG = "cr.ChromeActivity"; |
| 172 | 171 |
| 173 private TabModelSelector mTabModelSelector; | 172 // private TabModelSelector mTabModelSelector; |
| 174 private TabModelSelectorTabObserver mTabModelSelectorTabObserver; | 173 // private TabModelSelectorTabObserver mTabModelSelectorTabObserver; |
| 175 private TabCreatorManager.TabCreator mRegularTabCreator; | 174 // private TabCreatorManager.TabCreator mRegularTabCreator; |
| 176 private TabCreatorManager.TabCreator mIncognitoTabCreator; | 175 // private TabCreatorManager.TabCreator mIncognitoTabCreator; |
| 177 private TabContentManager mTabContentManager; | 176 // private TabContentManager mTabContentManager; |
| 178 private UmaSessionStats mUmaSessionStats; | 177 // private UmaSessionStats mUmaSessionStats; |
| 179 private ContextReporter mContextReporter; | 178 // private ContextReporter mContextReporter; |
| 180 protected GSAServiceClient mGSAServiceClient; | 179 // protected GSAServiceClient mGSAServiceClient; |
| 181 | 180 |
| 182 private boolean mPartnerBrowserRefreshNeeded = false; | 181 private boolean mPartnerBrowserRefreshNeeded = false; |
| 183 | 182 |
| 184 protected IntentHandler mIntentHandler; | 183 protected IntentHandler mIntentHandler; |
| 185 | 184 |
| 186 /** Whether onDeferredStartup() has been run. */ | 185 /** Whether onDeferredStartup() has been run. */ |
| 187 private boolean mDeferredStartupNotified; | 186 private boolean mDeferredStartupNotified; |
| 188 | 187 |
| 189 // The class cannot implement TouchExplorationStateChangeListener, | 188 // The class cannot implement TouchExplorationStateChangeListener, |
| 190 // because it is only available for Build.VERSION_CODES.KITKAT and later. | 189 // because it is only available for Build.VERSION_CODES.KITKAT and later. |
| 191 // We have to instantiate the TouchExplorationStateChangeListner object in t
he code. | 190 // We have to instantiate the TouchExplorationStateChangeListner object in t
he code. |
| 192 @SuppressLint("NewApi") | 191 @SuppressLint("NewApi") |
| 193 private TouchExplorationStateChangeListener mTouchExplorationStateChangeList
ener; | 192 private TouchExplorationStateChangeListener mTouchExplorationStateChangeList
ener; |
| 194 | 193 |
| 195 // Observes when sync becomes ready to create the mContextReporter. | 194 // Observes when sync becomes ready to create the mContextReporter. |
| 196 private ProfileSyncService.SyncStateChangedListener mSyncStateChangedListene
r; | 195 // private ProfileSyncService.SyncStateChangedListener mSyncStateChangedListe
ner; |
| 197 | 196 |
| 198 private ActivityWindowAndroid mWindowAndroid; | 197 private ActivityWindowAndroid mWindowAndroid; |
| 199 private ChromeFullscreenManager mFullscreenManager; | 198 // private ChromeFullscreenManager mFullscreenManager; |
| 200 private CompositorViewHolder mCompositorViewHolder; | 199 // private CompositorViewHolder mCompositorViewHolder; |
| 201 private ContextualSearchManager mContextualSearchManager; | 200 // private ContextualSearchManager mContextualSearchManager; |
| 202 private ReaderModeActivityDelegate mReaderModeActivityDelegate; | 201 // private ReaderModeActivityDelegate mReaderModeActivityDelegate; |
| 203 private SnackbarManager mSnackbarManager; | 202 // private SnackbarManager mSnackbarManager; |
| 204 private LoFiBarPopupController mLoFiBarPopupController; | 203 // private LoFiBarPopupController mLoFiBarPopupController; |
| 205 private ChromeAppMenuPropertiesDelegate mAppMenuPropertiesDelegate; | 204 // private ChromeAppMenuPropertiesDelegate mAppMenuPropertiesDelegate; |
| 206 private AppMenuHandler mAppMenuHandler; | 205 // private AppMenuHandler mAppMenuHandler; |
| 207 private ToolbarManager mToolbarManager; | 206 // private ToolbarManager mToolbarManager; |
| 208 private BookmarkModelObserver mBookmarkObserver; | 207 // private BookmarkModelObserver mBookmarkObserver; |
| 209 | 208 |
| 210 // Time in ms that it took took us to inflate the initial layout | 209 // Time in ms that it took took us to inflate the initial layout |
| 211 private long mInflateInitialLayoutDurationMs; | 210 private long mInflateInitialLayoutDurationMs; |
| 212 | 211 |
| 213 private OnPreDrawListener mFirstDrawListener; | 212 private OnPreDrawListener mFirstDrawListener; |
| 214 | 213 |
| 215 private final Locale mCurrentLocale = Locale.getDefault(); | 214 private final Locale mCurrentLocale = Locale.getDefault(); |
| 216 | 215 |
| 217 private AssistStatusHandler mAssistStatusHandler; | 216 // private AssistStatusHandler mAssistStatusHandler; |
| 218 | 217 |
| 219 private static AppMenuHandlerFactory sAppMenuHandlerFactory = new AppMenuHan
dlerFactory() { | 218 // private static AppMenuHandlerFactory sAppMenuHandlerFactory = new AppMenuH
andlerFactory() { |
| 220 @Override | 219 // @Override |
| 221 public AppMenuHandler get( | 220 // public AppMenuHandler get( |
| 222 Activity activity, AppMenuPropertiesDelegate delegate, int menuR
esourceId) { | 221 // Activity activity, AppMenuPropertiesDelegate delegate, int men
uResourceId) { |
| 223 return new AppMenuHandler(activity, delegate, menuResourceId); | 222 // return new AppMenuHandler(activity, delegate, menuResourceId); |
| 224 } | 223 // } |
| 225 }; | 224 // }; |
| 226 | 225 |
| 227 /** | 226 // /** |
| 228 * @param The {@link AppMenuHandlerFactory} for creating {@link mAppMenuHand
ler} | 227 // * @param The {@link AppMenuHandlerFactory} for creating {@link mAppMenuHa
ndler} |
| 229 */ | 228 // */ |
| 230 @VisibleForTesting | 229 // @VisibleForTesting |
| 231 public static void setAppMenuHandlerFactoryForTesting(AppMenuHandlerFactory
factory) { | 230 // public static void setAppMenuHandlerFactoryForTesting(AppMenuHandlerFactor
y factory) { |
| 232 sAppMenuHandlerFactory = factory; | 231 // sAppMenuHandlerFactory = factory; |
| 233 } | 232 // } |
| 234 | 233 |
| 235 @Override | 234 @Override |
| 236 public void preInflationStartup() { | 235 public void preInflationStartup() { |
| 237 super.preInflationStartup(); | 236 super.preInflationStartup(); |
| 238 ApplicationInitialization.enableFullscreenFlags( | 237 ApplicationInitialization.enableFullscreenFlags( |
| 239 getResources(), this, getControlContainerHeightResource()); | 238 getResources(), this, getControlContainerHeightResource()); |
| 240 getWindow().setBackgroundDrawableResource(R.color.light_background_color
); | 239 getWindow().setBackgroundDrawableResource(R.color.light_background_color
); |
| 241 } | 240 } |
| 242 | 241 |
| 243 @SuppressLint("NewApi") | 242 @SuppressLint("NewApi") |
| 244 @Override | 243 @Override |
| 245 public void postInflationStartup() { | 244 public void postInflationStartup() { |
| 246 super.postInflationStartup(); | 245 super.postInflationStartup(); |
| 247 | 246 |
| 248 mWindowAndroid = ((ChromeApplication) getApplicationContext()) | 247 // mWindowAndroid = ((ChromeApplication) getApplicationContext()) |
| 249 .createActivityWindowAndroid(this); | 248 // .createActivityWindowAndroid(this); |
| 250 mWindowAndroid.restoreInstanceState(getSavedInstanceState()); | 249 // mWindowAndroid.restoreInstanceState(getSavedInstanceState()); |
| 251 mSnackbarManager = new SnackbarManager(getWindow()); | 250 // mSnackbarManager = new SnackbarManager(getWindow()); |
| 252 mLoFiBarPopupController = new LoFiBarPopupController(this, getSnackbarMa
nager()); | 251 // mLoFiBarPopupController = new LoFiBarPopupController(this, getSnackbar
Manager()); |
| 253 | 252 |
| 254 mAssistStatusHandler = createAssistStatusHandler(); | 253 // mAssistStatusHandler = createAssistStatusHandler(); |
| 255 if (mAssistStatusHandler != null) { | 254 // if (mAssistStatusHandler != null) { |
| 256 if (mTabModelSelector != null) { | 255 //// if (mTabModelSelector != null) { |
| 257 mAssistStatusHandler.setTabModelSelector(mTabModelSelector); | 256 //// mAssistStatusHandler.setTabModelSelector(mTabModelSelector); |
| 258 } | 257 //// } |
| 259 mAssistStatusHandler.updateAssistState(); | 258 // mAssistStatusHandler.updateAssistState(); |
| 260 } | 259 // } |
| 261 | 260 |
| 262 // If a user had ALLOW_LOW_END_DEVICE_UI explicitly set to false then we
manually override | 261 // If a user had ALLOW_LOW_END_DEVICE_UI explicitly set to false then we
manually override |
| 263 // SysUtils.isLowEndDevice() with a switch so that they continue to see
the normal UI. This | 262 // SysUtils.isLowEndDevice() with a switch so that they continue to see
the normal UI. This |
| 264 // is only the case for grandfathered-in svelte users. We no longer do s
o for newer users. | 263 // is only the case for grandfathered-in svelte users. We no longer do s
o for newer users. |
| 265 if (!ChromePreferenceManager.getInstance(this).getAllowLowEndDeviceUi())
{ | 264 // if (!ChromePreferenceManager.getInstance(this).getAllowLowEndDeviceUi(
)) { |
| 266 CommandLine.getInstance().appendSwitch( | 265 // CommandLine.getInstance().appendSwitch( |
| 267 BaseSwitches.DISABLE_LOW_END_DEVICE_MODE); | 266 // BaseSwitches.DISABLE_LOW_END_DEVICE_MODE); |
| 268 } | 267 // } |
| 269 | 268 |
| 270 AccessibilityManager manager = (AccessibilityManager) | 269 AccessibilityManager manager = (AccessibilityManager) |
| 271 getBaseContext().getSystemService(Context.ACCESSIBILITY_SERVICE)
; | 270 getBaseContext().getSystemService(Context.ACCESSIBILITY_SERVICE)
; |
| 272 manager.addAccessibilityStateChangeListener(this); | 271 manager.addAccessibilityStateChangeListener(this); |
| 273 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { | 272 // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { |
| 274 mTouchExplorationStateChangeListener = new TouchExplorationStateChan
geListener() { | 273 // mTouchExplorationStateChangeListener = new TouchExplorationStateCh
angeListener() { |
| 275 @Override | 274 // @Override |
| 276 public void onTouchExplorationStateChanged(boolean enabled) { | 275 // public void onTouchExplorationStateChanged(boolean enabled) { |
| 277 checkAccessibility(); | 276 // checkAccessibility(); |
| 278 } | 277 // } |
| 279 }; | 278 // }; |
| 280 manager.addTouchExplorationStateChangeListener(mTouchExplorationStat
eChangeListener); | 279 // manager.addTouchExplorationStateChangeListener(mTouchExplorationSt
ateChangeListener); |
| 281 } | 280 // } |
| 282 | 281 |
| 283 // Make the activity listen to policy change events | 282 // Make the activity listen to policy change events |
| 284 getChromeApplication().addPolicyChangeListener(this); | 283 getChromeApplication().addPolicyChangeListener(this); |
| 285 | 284 |
| 286 // Set up the animation placeholder to be the SurfaceView. This disables
the | 285 // Set up the animation placeholder to be the SurfaceView. This disables
the |
| 287 // SurfaceView's 'hole' clipping during animations that are notified to
the window. | 286 // SurfaceView's 'hole' clipping during animations that are notified to
the window. |
| 288 mWindowAndroid.setAnimationPlaceholderView(mCompositorViewHolder.getSurf
aceView()); | 287 // mWindowAndroid.setAnimationPlaceholderView(mCompositorViewHolder.getSu
rfaceView()); |
| 289 | 288 |
| 290 // Inform the WindowAndroid of the keyboard accessory view. | 289 // Inform the WindowAndroid of the keyboard accessory view. |
| 291 mWindowAndroid.setKeyboardAccessoryView((ViewGroup) findViewById(R.id.ke
yboard_accessory)); | 290 mWindowAndroid.setKeyboardAccessoryView((ViewGroup) findViewById(R.id.ke
yboard_accessory)); |
| 292 final View controlContainer = findViewById(R.id.control_container); | 291 final View controlContainer = findViewById(R.id.control_container); |
| 293 if (controlContainer != null) { | 292 if (controlContainer != null) { |
| 294 mFirstDrawListener = new ViewTreeObserver.OnPreDrawListener() { | 293 mFirstDrawListener = new ViewTreeObserver.OnPreDrawListener() { |
| 295 @Override | 294 @Override |
| 296 public boolean onPreDraw() { | 295 public boolean onPreDraw() { |
| 297 controlContainer.getViewTreeObserver() | 296 controlContainer.getViewTreeObserver() |
| 298 .removeOnPreDrawListener(mFirstDrawListener); | 297 .removeOnPreDrawListener(mFirstDrawListener); |
| 299 mFirstDrawListener = null; | 298 mFirstDrawListener = null; |
| 300 onFirstDrawComplete(); | 299 onFirstDrawComplete(); |
| 301 return true; | 300 return true; |
| 302 } | 301 } |
| 303 }; | 302 }; |
| 304 controlContainer.getViewTreeObserver().addOnPreDrawListener(mFirstDr
awListener); | 303 controlContainer.getViewTreeObserver().addOnPreDrawListener(mFirstDr
awListener); |
| 305 } | 304 } |
| 306 initializeToolbar(); | 305 // initializeToolbar(); |
| 307 } | 306 } |
| 308 | 307 |
| 309 /** | 308 /** |
| 310 * This function builds the {@link CompositorViewHolder}. Subclasses *must*
call | 309 * This function builds the {@link CompositorViewHolder}. Subclasses *must*
call |
| 311 * super.setContentView() before using {@link #getTabModelSelector()} or | 310 * super.setContentView() before using {@link #getTabModelSelector()} or |
| 312 * {@link #getCompositorViewHolder()}. | 311 * {@link #getCompositorViewHolder()}. |
| 313 */ | 312 */ |
| 314 @Override | 313 @Override |
| 315 protected final void setContentView() { | 314 protected final void setContentView() { |
| 316 final long begin = SystemClock.elapsedRealtime(); | 315 final long begin = SystemClock.elapsedRealtime(); |
| 317 TraceEvent.begin("onCreate->setContentView()"); | 316 TraceEvent.begin("onCreate->setContentView()"); |
| 318 if (WarmupManager.getInstance().hasBuiltViewHierarchy()) { | 317 // if (WarmupManager.getInstance().hasBuiltViewHierarchy()) { |
| 319 View placeHolderView = new View(this); | 318 // View placeHolderView = new View(this); |
| 320 setContentView(placeHolderView); | 319 // setContentView(placeHolderView); |
| 321 ViewGroup contentParent = (ViewGroup) placeHolderView.getParent(); | 320 // ViewGroup contentParent = (ViewGroup) placeHolderView.getParent(); |
| 322 WarmupManager.getInstance().transferViewHierarchyTo(contentParent); | 321 // WarmupManager.getInstance().transferViewHierarchyTo(contentParent)
; |
| 323 contentParent.removeView(placeHolderView); | 322 // contentParent.removeView(placeHolderView); |
| 324 } else { | 323 // } else { |
| 325 setContentView(R.layout.main); | 324 setContentView(R.layout.main); |
| 326 if (getControlContainerLayoutId() != NO_CONTROL_CONTAINER) { | 325 if (getControlContainerLayoutId() != NO_CONTROL_CONTAINER) { |
| 327 ViewStub toolbarContainerStub = | 326 ViewStub toolbarContainerStub = |
| 328 ((ViewStub) findViewById(R.id.control_container_stub)); | 327 ((ViewStub) findViewById(R.id.control_container_stub)); |
| 329 toolbarContainerStub.setLayoutResource(getControlContainerLayout
Id()); | 328 toolbarContainerStub.setLayoutResource(getControlContainerLayout
Id()); |
| 330 toolbarContainerStub.inflate(); | 329 toolbarContainerStub.inflate(); |
| 331 } | 330 } |
| 332 } | 331 // } |
| 333 TraceEvent.end("onCreate->setContentView()"); | 332 TraceEvent.end("onCreate->setContentView()"); |
| 334 mInflateInitialLayoutDurationMs = SystemClock.elapsedRealtime() - begin; | 333 mInflateInitialLayoutDurationMs = SystemClock.elapsedRealtime() - begin; |
| 335 | 334 |
| 336 // Set the status bar color to black by default. This is an optimization
for | 335 // Set the status bar color to black by default. This is an optimization
for |
| 337 // Chrome not to draw under status and navigation bars when we use the d
efault | 336 // Chrome not to draw under status and navigation bars when we use the d
efault |
| 338 // black status bar | 337 // black status bar |
| 339 ApiCompatibilityUtils.setStatusBarColor(getWindow(), Color.BLACK); | 338 // ApiCompatibilityUtils.setStatusBarColor(getWindow(), Color.BLACK); |
| 340 | 339 |
| 341 mCompositorViewHolder = (CompositorViewHolder) findViewById(R.id.composi
tor_view_holder); | 340 // mCompositorViewHolder = (CompositorViewHolder) findViewById(R.id.compo
sitor_view_holder); |
| 342 mCompositorViewHolder.setRootView(getWindow().getDecorView().getRootView
()); | 341 // mCompositorViewHolder.setRootView(getWindow().getDecorView().getRootVi
ew()); |
| 343 | 342 |
| 344 enableHardwareAcceleration(); | 343 enableHardwareAcceleration(); |
| 345 } | 344 } |
| 346 | 345 |
| 347 /** | 346 // /** |
| 348 * Constructs {@link ToolbarManager} and the handler necessary for controlli
ng the menu on the | 347 // * Constructs {@link ToolbarManager} and the handler necessary for control
ling the menu on the |
| 349 * {@link Toolbar}. Extending classes can override this call to avoid creati
ng the toolbar. | 348 // * {@link Toolbar}. Extending classes can override this call to avoid crea
ting the toolbar. |
| 350 */ | 349 // */ |
| 351 protected void initializeToolbar() { | 350 // protected void initializeToolbar() { |
| 352 final View controlContainer = findViewById(R.id.control_container); | 351 // final View controlContainer = findViewById(R.id.control_container); |
| 353 assert controlContainer != null; | 352 // assert controlContainer != null; |
| 354 ToolbarControlContainer toolbarContainer = (ToolbarControlContainer) con
trolContainer; | 353 // ToolbarControlContainer toolbarContainer = (ToolbarControlContainer) c
ontrolContainer; |
| 355 mAppMenuPropertiesDelegate = createAppMenuPropertiesDelegate(); | 354 // mAppMenuPropertiesDelegate = createAppMenuPropertiesDelegate(); |
| 356 mAppMenuHandler = sAppMenuHandlerFactory.get(this, mAppMenuPropertiesDel
egate, | 355 // mAppMenuHandler = sAppMenuHandlerFactory.get(this, mAppMenuPropertiesD
elegate, |
| 357 getAppMenuLayoutId()); | 356 // getAppMenuLayoutId()); |
| 358 mToolbarManager = new ToolbarManager(this, toolbarContainer, mAppMenuHan
dler, | 357 // mToolbarManager = new ToolbarManager(this, toolbarContainer, mAppMenuH
andler, |
| 359 mAppMenuPropertiesDelegate, getCompositorViewHolder().getInvalid
ator()); | 358 // mAppMenuPropertiesDelegate, getCompositorViewHolder().getInval
idator()); |
| 360 mAppMenuHandler.addObserver(new AppMenuObserver() { | 359 // mAppMenuHandler.addObserver(new AppMenuObserver() { |
| 361 @Override | 360 // @Override |
| 362 public void onMenuVisibilityChanged(boolean isVisible) { | 361 // public void onMenuVisibilityChanged(boolean isVisible) { |
| 363 if (!isVisible) { | 362 // if (!isVisible) { |
| 364 mAppMenuPropertiesDelegate.onMenuDismissed(); | 363 // mAppMenuPropertiesDelegate.onMenuDismissed(); |
| 365 } | 364 // } |
| 366 } | 365 // } |
| 367 }); | 366 // }); |
| 368 } | 367 // } |
| 369 | 368 |
| 370 /** | 369 /** |
| 371 * @return {@link ToolbarManager} that belongs to this activity. | 370 * @return {@link ToolbarManager} that belongs to this activity. |
| 372 */ | 371 */ |
| 373 protected ToolbarManager getToolbarManager() { | 372 // protected ToolbarManager getToolbarManager() { |
| 374 return mToolbarManager; | 373 // return mToolbarManager; |
| 375 } | 374 // } |
| 376 | 375 |
| 377 /** | 376 /** |
| 378 * @return The resource id for the menu to use in {@link AppMenu}. Default i
s R.menu.main_menu. | 377 * @return The resource id for the menu to use in {@link AppMenu}. Default i
s R.menu.main_menu. |
| 379 */ | 378 */ |
| 380 protected int getAppMenuLayoutId() { | 379 protected int getAppMenuLayoutId() { |
| 381 return R.menu.main_menu; | 380 return R.menu.main_menu; |
| 382 } | 381 } |
| 383 | 382 |
| 384 /** | 383 // /** |
| 385 * @return {@link ChromeAppMenuPropertiesDelegate} instance that the {@link
AppMenuHandler} | 384 // * @return {@link ChromeAppMenuPropertiesDelegate} instance that the {@lin
k AppMenuHandler} |
| 386 * should be using in this activity. | 385 // * should be using in this activity. |
| 387 */ | 386 // */ |
| 388 protected ChromeAppMenuPropertiesDelegate createAppMenuPropertiesDelegate()
{ | 387 // protected ChromeAppMenuPropertiesDelegate createAppMenuPropertiesDelegate(
) { |
| 389 return new ChromeAppMenuPropertiesDelegate(this); | 388 // return new ChromeAppMenuPropertiesDelegate(this); |
| 390 } | 389 // } |
| 391 | 390 |
| 392 /** | 391 /** |
| 393 * @return The assist handler for this activity. | 392 * @return The assist handler for this activity. |
| 394 */ | 393 */ |
| 395 protected AssistStatusHandler getAssistStatusHandler() { | 394 // protected AssistStatusHandler getAssistStatusHandler() { |
| 396 return mAssistStatusHandler; | 395 // return mAssistStatusHandler; |
| 397 } | 396 // } |
| 398 | 397 |
| 399 /** | 398 /** |
| 400 * @return A newly constructed assist handler for this given activity type. | 399 * @return A newly constructed assist handler for this given activity type. |
| 401 */ | 400 */ |
| 402 protected AssistStatusHandler createAssistStatusHandler() { | 401 // protected AssistStatusHandler createAssistStatusHandler() { |
| 403 return new AssistStatusHandler(this); | 402 // return new AssistStatusHandler(this); |
| 404 } | 403 // } |
| 405 | 404 |
| 406 /** | 405 /** |
| 407 * @return The resource id for the layout to use for {@link ControlContainer
}. 0 by default. | 406 * @return The resource id for the layout to use for {@link ControlContainer
}. 0 by default. |
| 408 */ | 407 */ |
| 409 protected int getControlContainerLayoutId() { | 408 protected int getControlContainerLayoutId() { |
| 410 return NO_CONTROL_CONTAINER; | 409 return NO_CONTROL_CONTAINER; |
| 411 } | 410 } |
| 412 | 411 |
| 413 /** | 412 /** |
| 414 * @return Whether contextual search is allowed for this activity or not. | 413 * @return Whether contextual search is allowed for this activity or not. |
| 415 */ | 414 */ |
| 416 protected boolean isContextualSearchAllowed() { | 415 protected boolean isContextualSearchAllowed() { |
| 417 return true; | 416 return true; |
| 418 } | 417 } |
| 419 | 418 |
| 420 @Override | 419 @Override |
| 421 public void initializeState() { | 420 public void initializeState() { |
| 422 super.initializeState(); | 421 super.initializeState(); |
| 423 IntentHandler.setTestIntentsEnabled( | 422 IntentHandler.setTestIntentsEnabled( |
| 424 CommandLine.getInstance().hasSwitch(ContentSwitches.ENABLE_TEST_
INTENTS)); | 423 CommandLine.getInstance().hasSwitch(ContentSwitches.ENABLE_TEST_
INTENTS)); |
| 425 mIntentHandler = new IntentHandler(createIntentHandlerDelegate(), getPac
kageName()); | 424 mIntentHandler = new IntentHandler(createIntentHandlerDelegate(), getPac
kageName()); |
| 426 } | 425 } |
| 427 | 426 |
| 428 @Override | 427 // @Override |
| 429 public void initializeCompositor() { | 428 // public void initializeCompositor() { |
| 430 TraceEvent.begin("ChromeActivity:CompositorInitialization"); | 429 // TraceEvent.begin("ChromeActivity:CompositorInitialization"); |
| 431 super.initializeCompositor(); | 430 // super.initializeCompositor(); |
| 432 | 431 // |
| 433 setTabContentManager(new TabContentManager(this, getContentOffsetProvide
r(), | 432 // setTabContentManager(new TabContentManager(this, getContentOffsetProvi
der(), |
| 434 DeviceClassManager.enableSnapshots())); | 433 // DeviceClassManager.enableSnapshots())); |
| 435 mCompositorViewHolder.onNativeLibraryReady(mWindowAndroid, getTabContent
Manager()); | 434 // mCompositorViewHolder.onNativeLibraryReady(mWindowAndroid, getTabConte
ntManager()); |
| 436 | 435 // |
| 437 if (isContextualSearchAllowed() && ContextualSearchFieldTrial.isEnabled(
)) { | 436 // if (isContextualSearchAllowed() && ContextualSearchFieldTrial.isEnable
d()) { |
| 438 mContextualSearchManager = new ContextualSearchManager(this, mWindow
Android, this); | 437 // mContextualSearchManager = new ContextualSearchManager(this, mWind
owAndroid, this); |
| 439 } | 438 // } |
| 440 | 439 // |
| 441 if (ReaderModeManager.isEnabled(this)) { | 440 // if (ReaderModeManager.isEnabled(this)) { |
| 442 mReaderModeActivityDelegate = new ReaderModeActivityDelegate(this); | 441 // mReaderModeActivityDelegate = new ReaderModeActivityDelegate(this)
; |
| 443 } | 442 // } |
| 444 | 443 // |
| 445 TraceEvent.end("ChromeActivity:CompositorInitialization"); | 444 // TraceEvent.end("ChromeActivity:CompositorInitialization"); |
| 446 } | 445 // } |
| 447 | 446 // |
| 448 /** | 447 // /** |
| 449 * Sets the {@link TabModelSelector} owned by this {@link ChromeActivity}. | 448 // * Sets the {@link TabModelSelector} owned by this {@link ChromeActivity}. |
| 450 * @param tabModelSelector A {@link TabModelSelector} instance. | 449 // * @param tabModelSelector A {@link TabModelSelector} instance. |
| 451 */ | 450 // */ |
| 452 protected void setTabModelSelector(TabModelSelector tabModelSelector) { | 451 // protected void setTabModelSelector(TabModelSelector tabModelSelector) { |
| 453 mTabModelSelector = tabModelSelector; | 452 // mTabModelSelector = tabModelSelector; |
| 454 | 453 // |
| 455 if (mTabModelSelectorTabObserver != null) mTabModelSelectorTabObserver.d
estroy(); | 454 // if (mTabModelSelectorTabObserver != null) mTabModelSelectorTabObserver
.destroy(); |
| 456 mTabModelSelectorTabObserver = new TabModelSelectorTabObserver(tabModelS
elector) { | 455 // mTabModelSelectorTabObserver = new TabModelSelectorTabObserver(tabMode
lSelector) { |
| 457 @Override | 456 // @Override |
| 458 public void didFirstVisuallyNonEmptyPaint(Tab tab) { | 457 // public void didFirstVisuallyNonEmptyPaint(Tab tab) { |
| 459 if (!tab.isNativePage() && !tab.isIncognito() | 458 // if (!tab.isNativePage() && !tab.isIncognito() |
| 460 && DataReductionProxySettings.getInstance().wasLoFiModeA
ctiveOnMainFrame() | 459 // && DataReductionProxySettings.getInstance().wasLoFiMod
eActiveOnMainFrame() |
| 461 && DataReductionProxySettings.getInstance().canUseDataRe
ductionProxy( | 460 // && DataReductionProxySettings.getInstance().canUseData
ReductionProxy( |
| 462 tab.getUrl())) { | 461 // tab.getUrl())) { |
| 463 if (tab.isHidden()) { | 462 // if (tab.isHidden()) { |
| 464 TabObserver tabObserver = new EmptyTabObserver() { | 463 // TabObserver tabObserver = new EmptyTabObserver() { |
| 465 @Override | 464 // @Override |
| 466 public void onShown(Tab tab) { | 465 // public void onShown(Tab tab) { |
| 467 mLoFiBarPopupController.showLoFiBar(tab); | 466 // mLoFiBarPopupController.showLoFiBar(tab); |
| 468 tab.removeObserver(this); | 467 // tab.removeObserver(this); |
| 469 } | 468 // } |
| 470 }; | 469 // }; |
| 471 tab.addObserver(tabObserver); | 470 // tab.addObserver(tabObserver); |
| 472 return; | 471 // return; |
| 473 } | 472 // } |
| 474 mLoFiBarPopupController.showLoFiBar(tab); | 473 // mLoFiBarPopupController.showLoFiBar(tab); |
| 475 } | 474 // } |
| 476 } | 475 // } |
| 477 | 476 // |
| 478 @Override | 477 // @Override |
| 479 public void onHidden(Tab tab) { | 478 // public void onHidden(Tab tab) { |
| 480 mLoFiBarPopupController.dismissLoFiBar(); | 479 // mLoFiBarPopupController.dismissLoFiBar(); |
| 481 } | 480 // } |
| 482 | 481 // |
| 483 @Override | 482 // @Override |
| 484 public void onDestroyed(Tab tab) { | 483 // public void onDestroyed(Tab tab) { |
| 485 mLoFiBarPopupController.dismissLoFiBar(); | 484 // mLoFiBarPopupController.dismissLoFiBar(); |
| 486 } | 485 // } |
| 487 | 486 // |
| 488 @Override | 487 // @Override |
| 489 public void onLoadStopped(Tab tab) { | 488 // public void onLoadStopped(Tab tab) { |
| 490 postDeferredStartupIfNeeded(); | 489 // postDeferredStartupIfNeeded(); |
| 491 showUpdateInfoBarIfNecessary(); | 490 // showUpdateInfoBarIfNecessary(); |
| 492 } | 491 // } |
| 493 | 492 // |
| 494 @Override | 493 // @Override |
| 495 public void onPageLoadFinished(Tab tab) { | 494 // public void onPageLoadFinished(Tab tab) { |
| 496 postDeferredStartupIfNeeded(); | 495 // postDeferredStartupIfNeeded(); |
| 497 showUpdateInfoBarIfNecessary(); | 496 // showUpdateInfoBarIfNecessary(); |
| 498 } | 497 // } |
| 499 | 498 // |
| 500 @Override | 499 // @Override |
| 501 public void onCrash(Tab tab, boolean sadTabShown) { | 500 // public void onCrash(Tab tab, boolean sadTabShown) { |
| 502 postDeferredStartupIfNeeded(); | 501 // postDeferredStartupIfNeeded(); |
| 503 } | 502 // } |
| 504 | 503 // |
| 505 @Override | 504 // @Override |
| 506 public void onDidChangeThemeColor(Tab tab, int color) { | 505 // public void onDidChangeThemeColor(Tab tab, int color) { |
| 507 if (getToolbarManager() == null) return; | 506 // if (getToolbarManager() == null) return; |
| 508 if (getActivityTab() != tab) return; | 507 // if (getActivityTab() != tab) return; |
| 509 | 508 // |
| 510 getToolbarManager().updatePrimaryColor(color); | 509 // getToolbarManager().updatePrimaryColor(color); |
| 511 | 510 // |
| 512 ControlContainer controlContainer = | 511 // ControlContainer controlContainer = |
| 513 (ControlContainer) findViewById(R.id.control_container); | 512 // (ControlContainer) findViewById(R.id.control_container
); |
| 514 controlContainer.getToolbarResourceAdapter().invalidate(null); | 513 // controlContainer.getToolbarResourceAdapter().invalidate(null); |
| 515 } | 514 // } |
| 516 }; | 515 // }; |
| 517 | 516 // |
| 518 if (mAssistStatusHandler != null) { | 517 // if (mAssistStatusHandler != null) { |
| 519 mAssistStatusHandler.setTabModelSelector(tabModelSelector); | 518 // mAssistStatusHandler.setTabModelSelector(tabModelSelector); |
| 520 } | 519 // } |
| 521 } | 520 // } |
| 522 | 521 |
| 523 @Override | 522 @Override |
| 524 public void onStartWithNative() { | 523 public void onStartWithNative() { |
| 525 super.onStartWithNative(); | 524 super.onStartWithNative(); |
| 526 getChromeApplication().onStartWithNative(); | 525 getChromeApplication().onStartWithNative(); |
| 527 Tab tab = getActivityTab(); | 526 // Tab tab = getActivityTab(); |
| 528 if (tab != null) tab.onActivityStart(); | 527 // if (tab != null) tab.onActivityStart(); |
| 529 FeatureUtilities.setDocumentModeEnabled(FeatureUtilities.isDocumentMode(
this)); | 528 // FeatureUtilities.setDocumentModeEnabled(FeatureUtilities.isDocumentMod
e(this)); |
| 530 WarmupManager.getInstance().clearWebContentsIfNecessary(); | 529 // WarmupManager.getInstance().clearWebContentsIfNecessary(); |
| 531 | 530 |
| 532 if (GSAState.getInstance(this).isGsaAvailable()) { | 531 // if (GSAState.getInstance(this).isGsaAvailable()) { |
| 533 mGSAServiceClient = new GSAServiceClient(this); | 532 // mGSAServiceClient = new GSAServiceClient(this); |
| 534 mGSAServiceClient.connect(); | 533 // mGSAServiceClient.connect(); |
| 535 createContextReporterIfNeeded(); | 534 // createContextReporterIfNeeded(); |
| 536 } else { | 535 // } else { |
| 537 ContextReporter.reportStatus(ContextReporter.STATUS_GSA_NOT_AVAILABL
E); | 536 // ContextReporter.reportStatus(ContextReporter.STATUS_GSA_NOT_AVAILA
BLE); |
| 538 } | 537 // } |
| 539 mCompositorViewHolder.resetFlags(); | 538 // mCompositorViewHolder.resetFlags(); |
| 540 } | 539 } |
| 541 | 540 |
| 542 private void createContextReporterIfNeeded() { | 541 // private void createContextReporterIfNeeded() { |
| 543 if (mContextReporter != null || getActivityTab() == null) return; | 542 // if (mContextReporter != null || getActivityTab() == null) return; |
| 544 | 543 // |
| 545 final ProfileSyncService syncService = ProfileSyncService.get(this); | 544 // final ProfileSyncService syncService = ProfileSyncService.get(this); |
| 546 | 545 // |
| 547 if (syncService.isSyncingUrlsWithKeystorePassphrase()) { | 546 // if (syncService.isSyncingUrlsWithKeystorePassphrase()) { |
| 548 mContextReporter = ((ChromeApplication) getApplicationContext()).cre
ateGsaHelper() | 547 // mContextReporter = ((ChromeApplication) getApplicationContext()).c
reateGsaHelper() |
| 549 .getContextReporter(this); | 548 // .getContextReporter(this); |
| 550 | 549 // |
| 551 if (mSyncStateChangedListener != null) { | 550 // if (mSyncStateChangedListener != null) { |
| 552 syncService.removeSyncStateChangedListener(mSyncStateChangedList
ener); | 551 // syncService.removeSyncStateChangedListener(mSyncStateChangedLi
stener); |
| 553 mSyncStateChangedListener = null; | 552 // mSyncStateChangedListener = null; |
| 554 } | 553 // } |
| 555 | 554 // |
| 556 return; | 555 // return; |
| 557 } else { | 556 // } else { |
| 558 ContextReporter.reportSyncStatus(syncService); | 557 // ContextReporter.reportSyncStatus(syncService); |
| 559 } | 558 // } |
| 560 | 559 // |
| 561 if (mSyncStateChangedListener == null) { | 560 // if (mSyncStateChangedListener == null) { |
| 562 mSyncStateChangedListener = new ProfileSyncService.SyncStateChangedL
istener() { | 561 // mSyncStateChangedListener = new ProfileSyncService.SyncStateChange
dListener() { |
| 563 @Override | 562 // @Override |
| 564 public void syncStateChanged() { | 563 // public void syncStateChanged() { |
| 565 createContextReporterIfNeeded(); | 564 // createContextReporterIfNeeded(); |
| 566 } | 565 // } |
| 567 }; | 566 // }; |
| 568 syncService.addSyncStateChangedListener(mSyncStateChangedListener); | 567 // syncService.addSyncStateChangedListener(mSyncStateChangedListener)
; |
| 569 } | 568 // } |
| 570 } | 569 // } |
| 571 | 570 |
| 572 @Override | 571 @Override |
| 573 public void onResumeWithNative() { | 572 public void onResumeWithNative() { |
| 574 super.onResumeWithNative(); | 573 super.onResumeWithNative(); |
| 575 markSessionResume(); | 574 // markSessionResume(); |
| 576 | 575 |
| 577 if (getActivityTab() != null) { | 576 // if (getActivityTab() != null) { |
| 578 LaunchMetrics.commitLaunchMetrics(getActivityTab().getWebContents())
; | 577 // LaunchMetrics.commitLaunchMetrics(getActivityTab().getWebContents(
)); |
| 579 } | 578 // } |
| 580 FeatureUtilities.setCustomTabVisible(isCustomTab()); | 579 // FeatureUtilities.setCustomTabVisible(isCustomTab()); |
| 581 } | 580 } |
| 582 | 581 |
| 583 @Override | 582 @Override |
| 584 public void onPauseWithNative() { | 583 public void onPauseWithNative() { |
| 585 markSessionEnd(); | 584 // markSessionEnd(); |
| 586 super.onPauseWithNative(); | 585 super.onPauseWithNative(); |
| 587 } | 586 } |
| 588 | 587 |
| 589 @Override | 588 // @Override |
| 590 public void onStopWithNative() { | 589 // public void onStopWithNative() { |
| 591 if (mAppMenuHandler != null) mAppMenuHandler.hideAppMenu(); | 590 // if (mAppMenuHandler != null) mAppMenuHandler.hideAppMenu(); |
| 592 if (mGSAServiceClient != null) { | 591 // if (mGSAServiceClient != null) { |
| 593 mGSAServiceClient.disconnect(); | 592 // mGSAServiceClient.disconnect(); |
| 594 mGSAServiceClient = null; | 593 // mGSAServiceClient = null; |
| 595 if (mSyncStateChangedListener != null) { | 594 // if (mSyncStateChangedListener != null) { |
| 596 ProfileSyncService syncService = ProfileSyncService.get(this); | 595 // ProfileSyncService syncService = ProfileSyncService.get(this); |
| 597 syncService.removeSyncStateChangedListener(mSyncStateChangedList
ener); | 596 // syncService.removeSyncStateChangedListener(mSyncStateChangedLi
stener); |
| 598 mSyncStateChangedListener = null; | 597 // mSyncStateChangedListener = null; |
| 599 } | 598 // } |
| 600 } | 599 // } |
| 601 super.onStopWithNative(); | 600 // super.onStopWithNative(); |
| 602 } | 601 // } |
| 603 | 602 |
| 604 @Override | 603 @Override |
| 605 public void onNewIntentWithNative(Intent intent) { | 604 public void onNewIntentWithNative(Intent intent) { |
| 606 super.onNewIntentWithNative(intent); | 605 super.onNewIntentWithNative(intent); |
| 607 if (mIntentHandler.shouldIgnoreIntent(this, intent)) return; | 606 if (mIntentHandler.shouldIgnoreIntent(this, intent)) return; |
| 608 | 607 |
| 609 mIntentHandler.onNewIntent(this, intent); | 608 mIntentHandler.onNewIntent(this, intent); |
| 610 } | 609 } |
| 611 | 610 |
| 612 @Override | 611 // @Override |
| 613 public boolean hasDoneFirstDraw() { | 612 // public boolean hasDoneFirstDraw() { |
| 614 return mToolbarManager != null | 613 // return mToolbarManager != null |
| 615 ? mToolbarManager.hasDoneFirstDraw() : super.hasDoneFirstDraw(); | 614 // ? mToolbarManager.hasDoneFirstDraw() : super.hasDoneFirstDraw(
); |
| 616 } | 615 // } |
| 617 | 616 |
| 618 /** | 617 // /** |
| 619 * @return Whether the given activity contains a {@link CustomTab}. | 618 // * @return Whether the given activity contains a {@link CustomTab}. |
| 620 */ | 619 // */ |
| 621 private boolean isCustomTab() { | 620 // private boolean isCustomTab() { |
| 622 return this instanceof CustomTabActivity; | 621 // return this instanceof CustomTabActivity; |
| 623 } | 622 // } |
| 624 | 623 |
| 625 @Override | 624 // @Override |
| 626 protected void onDeferredStartup() { | 625 // protected void onDeferredStartup() { |
| 627 super.onDeferredStartup(); | 626 // super.onDeferredStartup(); |
| 628 boolean crashDumpUploadingDisabled = getIntent() != null | 627 // boolean crashDumpUploadingDisabled = getIntent() != null |
| 629 && getIntent().hasExtra( | 628 // && getIntent().hasExtra( |
| 630 ChromeTabbedActivity.INTENT_EXTRA_DISABLE_CRASH_DUMP_UPL
OADING); | 629 // ChromeTabbedActivity.INTENT_EXTRA_DISABLE_CRASH_DUMP_U
PLOADING); |
| 631 DeferredStartupHandler.getInstance() | 630 // DeferredStartupHandler.getInstance() |
| 632 .onDeferredStartup(getChromeApplication(), crashDumpUploadingDis
abled); | 631 // .onDeferredStartup(getChromeApplication(), crashDumpUploadingD
isabled); |
| 632 // |
| 633 //// BeamController.registerForBeam(this, new BeamProvider() { |
| 634 //// @Override |
| 635 //// public String getTabUrlForBeam() { |
| 636 //// return null; |
| 637 ////// if (isOverlayVisible()) return null; |
| 638 ////// if (getActivityTab() == null) return null; |
| 639 ////// return getActivityTab().getUrl(); |
| 640 //// } |
| 641 //// }); |
| 642 // |
| 643 //// getChromeApplication().getUpdateInfoBarHelper().checkForUpdateOnBack
groundThread(this); |
| 644 // |
| 645 // removeSnapshotDatabase(); |
| 646 //// if (mToolbarManager != null) { |
| 647 //// String simpleName = getClass().getSimpleName(); |
| 648 //// RecordHistogram.recordTimesHistogram("MobileStartup.ToolbarInfla
tionTime." + simpleName, |
| 649 //// mInflateInitialLayoutDurationMs, TimeUnit.MILLISECONDS); |
| 650 //// mToolbarManager.onDeferredStartup(getOnCreateTimestampMs(), simp
leName); |
| 651 //// } |
| 652 // } |
| 633 | 653 |
| 634 BeamController.registerForBeam(this, new BeamProvider() { | 654 // @Override |
| 635 @Override | 655 // public void onStart() { |
| 636 public String getTabUrlForBeam() { | 656 // super.onStart(); |
| 637 if (isOverlayVisible()) return null; | 657 //// if (mContextReporter != null) mContextReporter.enable(); |
| 638 if (getActivityTab() == null) return null; | 658 // |
| 639 return getActivityTab().getUrl(); | 659 // if (mPartnerBrowserRefreshNeeded) { |
| 640 } | 660 // mPartnerBrowserRefreshNeeded = false; |
| 641 }); | 661 // PartnerBrowserCustomizations.initializeAsync(getApplicationContext
(), |
| 642 | 662 // PARTNER_BROWSER_CUSTOMIZATIONS_TIMEOUT_MS); |
| 643 getChromeApplication().getUpdateInfoBarHelper().checkForUpdateOnBackgrou
ndThread(this); | 663 // PartnerBrowserCustomizations.setOnInitializeAsyncFinished(new Runn
able() { |
| 644 | 664 // @Override |
| 645 removeSnapshotDatabase(); | 665 // public void run() { |
| 646 if (mToolbarManager != null) { | 666 // if (PartnerBrowserCustomizations.isIncognitoDisabled()) { |
| 647 String simpleName = getClass().getSimpleName(); | 667 // terminateIncognitoSession(); |
| 648 RecordHistogram.recordTimesHistogram("MobileStartup.ToolbarInflation
Time." + simpleName, | 668 // } |
| 649 mInflateInitialLayoutDurationMs, TimeUnit.MILLISECONDS); | 669 // } |
| 650 mToolbarManager.onDeferredStartup(getOnCreateTimestampMs(), simpleNa
me); | 670 // }); |
| 651 } | 671 // } |
| 652 } | 672 //// if (mCompositorViewHolder != null) mCompositorViewHolder.onStart(); |
| 653 | 673 // } |
| 654 @Override | |
| 655 public void onStart() { | |
| 656 super.onStart(); | |
| 657 if (mContextReporter != null) mContextReporter.enable(); | |
| 658 | |
| 659 if (mPartnerBrowserRefreshNeeded) { | |
| 660 mPartnerBrowserRefreshNeeded = false; | |
| 661 PartnerBrowserCustomizations.initializeAsync(getApplicationContext()
, | |
| 662 PARTNER_BROWSER_CUSTOMIZATIONS_TIMEOUT_MS); | |
| 663 PartnerBrowserCustomizations.setOnInitializeAsyncFinished(new Runnab
le() { | |
| 664 @Override | |
| 665 public void run() { | |
| 666 if (PartnerBrowserCustomizations.isIncognitoDisabled()) { | |
| 667 terminateIncognitoSession(); | |
| 668 } | |
| 669 } | |
| 670 }); | |
| 671 } | |
| 672 if (mCompositorViewHolder != null) mCompositorViewHolder.onStart(); | |
| 673 } | |
| 674 | 674 |
| 675 @Override | 675 @Override |
| 676 public void onStop() { | 676 public void onStop() { |
| 677 super.onStop(); | 677 super.onStop(); |
| 678 if (mContextReporter != null) mContextReporter.disable(); | 678 // if (mContextReporter != null) mContextReporter.disable(); |
| 679 | 679 |
| 680 // We want to refresh partner browser provider every onStart(). | 680 // We want to refresh partner browser provider every onStart(). |
| 681 mPartnerBrowserRefreshNeeded = true; | 681 mPartnerBrowserRefreshNeeded = true; |
| 682 if (mCompositorViewHolder != null) mCompositorViewHolder.onStop(); | 682 // if (mCompositorViewHolder != null) mCompositorViewHolder.onStop(); |
| 683 } | 683 } |
| 684 | 684 |
| 685 @Override | 685 @Override |
| 686 public void onPause() { | 686 public void onPause() { |
| 687 super.onPause(); | 687 super.onPause(); |
| 688 if (mSnackbarManager != null) mSnackbarManager.dismissSnackbar(false); | 688 // if (mSnackbarManager != null) mSnackbarManager.dismissSnackbar(false); |
| 689 } | 689 } |
| 690 | 690 |
| 691 // @TargetApi(Build.VERSION_CODES.M) TODO(sgurun) add method document once A
PI is public | 691 // // @TargetApi(Build.VERSION_CODES.M) TODO(sgurun) add method document once
API is public |
| 692 // crbug/512264 | 692 // // crbug/512264 |
| 693 // @Override | 693 // // @Override |
| 694 public void onProvideAssistContent(AssistContent outContent) { | 694 // public void onProvideAssistContent(AssistContent outContent) { |
| 695 if (getAssistStatusHandler() == null || !getAssistStatusHandler().isAssi
stSupported()) { | 695 // if (getAssistStatusHandler() == null || !getAssistStatusHandler().isAs
sistSupported()) { |
| 696 // No information is provided in incognito mode. | 696 // // No information is provided in incognito mode. |
| 697 return; | 697 // return; |
| 698 } | 698 // } |
| 699 Tab tab = getActivityTab(); | 699 // Tab tab = getActivityTab(); |
| 700 if (tab != null && !isInOverviewMode()) { | 700 // if (tab != null && !isInOverviewMode()) { |
| 701 outContent.setWebUri(Uri.parse(tab.getUrl())); | 701 // outContent.setWebUri(Uri.parse(tab.getUrl())); |
| 702 } | 702 // } |
| 703 } | 703 // } |
| 704 | 704 |
| 705 @Override | 705 @Override |
| 706 public long getOnCreateTimestampMs() { | 706 public long getOnCreateTimestampMs() { |
| 707 return super.getOnCreateTimestampMs(); | 707 return super.getOnCreateTimestampMs(); |
| 708 } | 708 } |
| 709 | 709 |
| 710 /** | 710 /** |
| 711 * This cannot be overridden in order to preserve destruction order. Overri
de | 711 * This cannot be overridden in order to preserve destruction order. Overri
de |
| 712 * {@link #onDestroyInternal()} instead to perform clean up tasks. | 712 * {@link #onDestroyInternal()} instead to perform clean up tasks. |
| 713 */ | 713 */ |
| 714 @SuppressLint("NewApi") | 714 @SuppressLint("NewApi") |
| 715 @Override | 715 @Override |
| 716 protected final void onDestroy() { | 716 protected final void onDestroy() { |
| 717 if (mReaderModeActivityDelegate != null) mReaderModeActivityDelegate.des
troy(); | 717 // if (mReaderModeActivityDelegate != null) mReaderModeActivityDelegate.d
estroy(); |
| 718 if (mContextualSearchManager != null) mContextualSearchManager.destroy()
; | 718 // if (mContextualSearchManager != null) mContextualSearchManager.destroy
(); |
| 719 if (mTabModelSelectorTabObserver != null) mTabModelSelectorTabObserver.d
estroy(); | 719 // if (mTabModelSelectorTabObserver != null) mTabModelSelectorTabObserver
.destroy(); |
| 720 if (mCompositorViewHolder != null) { | 720 // if (mCompositorViewHolder != null) { |
| 721 if (mCompositorViewHolder.getLayoutManager() != null) { | 721 // if (mCompositorViewHolder.getLayoutManager() != null) { |
| 722 mCompositorViewHolder.getLayoutManager().removeSceneChangeObserv
er(this); | 722 // mCompositorViewHolder.getLayoutManager().removeSceneChangeObse
rver(this); |
| 723 } | 723 // } |
| 724 mCompositorViewHolder.shutDown(); | 724 // mCompositorViewHolder.shutDown(); |
| 725 } | 725 // } |
| 726 onDestroyInternal(); | 726 // onDestroyInternal(); |
| 727 | 727 |
| 728 TabModelSelector selector = getTabModelSelector(); | 728 // TabModelSelector selector = getTabModelSelector(); |
| 729 if (selector != null) selector.destroy(); | 729 // if (selector != null) selector.destroy(); |
| 730 | 730 |
| 731 if (mWindowAndroid != null) mWindowAndroid.destroy(); | 731 if (mWindowAndroid != null) mWindowAndroid.destroy(); |
| 732 if (!Locale.getDefault().equals(mCurrentLocale)) { | 732 if (!Locale.getDefault().equals(mCurrentLocale)) { |
| 733 // This is a hack to relaunch renderer processes. Killing the main p
rocess also kills | 733 // This is a hack to relaunch renderer processes. Killing the main p
rocess also kills |
| 734 // its dependent (renderer) processes, and Android's activity manage
r service seems to | 734 // its dependent (renderer) processes, and Android's activity manage
r service seems to |
| 735 // still relaunch the activity even when process dies in onDestroy()
. | 735 // still relaunch the activity even when process dies in onDestroy()
. |
| 736 // This shouldn't be moved to ChromeActivity since it may cause a cr
ash if | 736 // This shouldn't be moved to ChromeActivity since it may cause a cr
ash if |
| 737 // you kill the process from EmbedContentViewActivity since Preferen
ces looks up | 737 // you kill the process from EmbedContentViewActivity since Preferen
ces looks up |
| 738 // ChildAccountManager#hasChildAccount() when it is not set. | 738 // ChildAccountManager#hasChildAccount() when it is not set. |
| 739 // TODO(changwan): Implement a more generic and safe relaunch mechan
ism such as | 739 // TODO(changwan): Implement a more generic and safe relaunch mechan
ism such as |
| 740 // killing dependent processes on onDestroy and launching them at on
Create(). | 740 // killing dependent processes on onDestroy and launching them at on
Create(). |
| 741 Log.w(TAG, "Forcefully killing process..."); | 741 Log.w(TAG, "Forcefully killing process..."); |
| 742 Process.killProcess(Process.myPid()); | 742 Process.killProcess(Process.myPid()); |
| 743 } | 743 } |
| 744 getChromeApplication().removePolicyChangeListener(this); | 744 getChromeApplication().removePolicyChangeListener(this); |
| 745 if (mTabContentManager != null) mTabContentManager.destroy(); | 745 // if (mTabContentManager != null) mTabContentManager.destroy(); |
| 746 if (mTabModelSelectorTabObserver != null) mTabModelSelectorTabObserver.d
estroy(); | 746 // if (mTabModelSelectorTabObserver != null) mTabModelSelectorTabObserver
.destroy(); |
| 747 | 747 |
| 748 AccessibilityManager manager = (AccessibilityManager) | 748 AccessibilityManager manager = (AccessibilityManager) |
| 749 getBaseContext().getSystemService(Context.ACCESSIBILITY_SERVICE)
; | 749 getBaseContext().getSystemService(Context.ACCESSIBILITY_SERVICE)
; |
| 750 manager.removeAccessibilityStateChangeListener(this); | 750 manager.removeAccessibilityStateChangeListener(this); |
| 751 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { | 751 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { |
| 752 manager.removeTouchExplorationStateChangeListener(mTouchExplorationS
tateChangeListener); | 752 manager.removeTouchExplorationStateChangeListener(mTouchExplorationS
tateChangeListener); |
| 753 } | 753 } |
| 754 super.onDestroy(); | 754 super.onDestroy(); |
| 755 } | 755 } |
| 756 | 756 |
| 757 /** | 757 /** |
| 758 * Override this to perform destruction tasks. Note that by the time this i
s called, the | 758 * Override this to perform destruction tasks. Note that by the time this i
s called, the |
| 759 * {@link CompositorViewHolder} will be destroyed, but the {@link WindowAndr
oid} and | 759 * {@link CompositorViewHolder} will be destroyed, but the {@link WindowAndr
oid} and |
| 760 * {@link TabModelSelector} will not. | 760 * {@link TabModelSelector} will not. |
| 761 * <p> | 761 * <p> |
| 762 * After returning from this, the {@link TabModelSelector} will be destroyed
followed | 762 * After returning from this, the {@link TabModelSelector} will be destroyed
followed |
| 763 * by the {@link WindowAndroid}. | 763 * by the {@link WindowAndroid}. |
| 764 */ | 764 */ |
| 765 protected void onDestroyInternal() { | 765 // protected void onDestroyInternal() { |
| 766 if (mToolbarManager != null) mToolbarManager.destroy(); | 766 // if (mToolbarManager != null) mToolbarManager.destroy(); |
| 767 } | 767 // } |
| 768 | 768 |
| 769 /** | 769 /** |
| 770 * This will handle passing {@link Intent} results back to the {@link Window
Android}. It will | 770 * This will handle passing {@link Intent} results back to the {@link Window
Android}. It will |
| 771 * return whether or not the {@link WindowAndroid} has consumed the event or
not. | 771 * return whether or not the {@link WindowAndroid} has consumed the event or
not. |
| 772 */ | 772 */ |
| 773 @Override | 773 @Override |
| 774 public boolean onActivityResultWithNative(int requestCode, int resultCode, I
ntent intent) { | 774 public boolean onActivityResultWithNative(int requestCode, int resultCode, I
ntent intent) { |
| 775 if (super.onActivityResultWithNative(requestCode, resultCode, intent)) r
eturn true; | 775 if (super.onActivityResultWithNative(requestCode, resultCode, intent)) r
eturn true; |
| 776 return mWindowAndroid.onActivityResult(requestCode, resultCode, intent); | 776 return mWindowAndroid.onActivityResult(requestCode, resultCode, intent); |
| 777 } | 777 } |
| 778 | 778 |
| 779 // @Override[ANDROID-M] | 779 // @Override[ANDROID-M] |
| 780 public void onRequestPermissionsResult(int requestCode, String[] permissions
, | 780 public void onRequestPermissionsResult(int requestCode, String[] permissions
, |
| 781 int[] grantResults) { | 781 int[] grantResults) { |
| 782 if (mWindowAndroid != null) { | 782 if (mWindowAndroid != null) { |
| 783 mWindowAndroid.onRequestPermissionsResult(requestCode, permissions,
grantResults); | 783 mWindowAndroid.onRequestPermissionsResult(requestCode, permissions,
grantResults); |
| 784 } | 784 } |
| 785 //super.onRequestPermissionsResult(requestCode, permissions, grantResult
s); | 785 //super.onRequestPermissionsResult(requestCode, permissions, grantResult
s); |
| 786 } | 786 } |
| 787 | 787 |
| 788 @Override | 788 @Override |
| 789 protected void onSaveInstanceState(Bundle outState) { | 789 protected void onSaveInstanceState(Bundle outState) { |
| 790 super.onSaveInstanceState(outState); | 790 super.onSaveInstanceState(outState); |
| 791 mWindowAndroid.saveInstanceState(outState); | 791 mWindowAndroid.saveInstanceState(outState); |
| 792 } | 792 } |
| 793 | 793 |
| 794 /** | 794 // /** |
| 795 * @return The unified manager for all snackbar related operations. | 795 // * @return The unified manager for all snackbar related operations. |
| 796 */ | 796 // */ |
| 797 @Override | 797 // @Override |
| 798 public SnackbarManager getSnackbarManager() { | 798 // public SnackbarManager getSnackbarManager() { |
| 799 return mSnackbarManager; | 799 // return mSnackbarManager; |
| 800 } | 800 // } |
| 801 | 801 |
| 802 /** | 802 /** |
| 803 * Called when the accessibility status of this device changes. This might
be triggered by | 803 * Called when the accessibility status of this device changes. This might
be triggered by |
| 804 * touch exploration or general accessibility status updates. It is an aggr
egate of two other | 804 * touch exploration or general accessibility status updates. It is an aggr
egate of two other |
| 805 * accessibility update methods. | 805 * accessibility update methods. |
| 806 * @see #onAccessibilityModeChanged(boolean) | 806 * @see #onAccessibilityModeChanged(boolean) |
| 807 * @see #onTouchExplorationStateChanged(boolean) | 807 * @see #onTouchExplorationStateChanged(boolean) |
| 808 * @param enabled Whether or not accessibility and touch exploration are cur
rently enabled. | 808 * @param enabled Whether or not accessibility and touch exploration are cur
rently enabled. |
| 809 */ | 809 */ |
| 810 protected void onAccessibilityModeChanged(boolean enabled) { | 810 // protected void onAccessibilityModeChanged(boolean enabled) { |
| 811 InfoBarContainer.setIsAllowedToAutoHide(!enabled); | 811 // InfoBarContainer.setIsAllowedToAutoHide(!enabled); |
| 812 if (mToolbarManager != null) mToolbarManager.onAccessibilityStatusChange
d(enabled); | 812 // if (mToolbarManager != null) mToolbarManager.onAccessibilityStatusChan
ged(enabled); |
| 813 } | 813 // } |
| 814 | 814 |
| 815 @Override | 815 // @Override |
| 816 public boolean onOptionsItemSelected(MenuItem item) { | 816 // public boolean onOptionsItemSelected(MenuItem item) { |
| 817 if (item != null && onMenuOrKeyboardAction(item.getItemId(), true)) { | 817 // if (item != null && onMenuOrKeyboardAction(item.getItemId(), true)) { |
| 818 return true; | 818 // return true; |
| 819 } | 819 // } |
| 820 return super.onOptionsItemSelected(item); | 820 // return super.onOptionsItemSelected(item); |
| 821 } | 821 // } |
| 822 | 822 |
| 823 /** | 823 // /** |
| 824 * Triggered when the share menu item is selected. | 824 // * Triggered when the share menu item is selected. |
| 825 * This creates and shows a share intent picker dialog or starts a share int
ent directly. | 825 // * This creates and shows a share intent picker dialog or starts a share i
ntent directly. |
| 826 * | 826 // * |
| 827 * @param currentTab The {@link Tab} a user is watching. | 827 // * @param currentTab The {@link Tab} a user is watching. |
| 828 * @param windowAndroid The {@link WindowAndroid} currentTab is linked to. | 828 // * @param windowAndroid The {@link WindowAndroid} currentTab is linked to. |
| 829 * @param shareDirectly Whether it should share directly with the activity t
hat was most | 829 // * @param shareDirectly Whether it should share directly with the activity
that was most |
| 830 * recently used to share. | 830 // * recently used to share. |
| 831 * @param isIncognito Whether currentTab is incognito. | 831 // * @param isIncognito Whether currentTab is incognito. |
| 832 */ | 832 // */ |
| 833 public void onShareMenuItemSelected(final Tab currentTab, | 833 // public void onShareMenuItemSelected(final Tab currentTab, |
| 834 final WindowAndroid windowAndroid, final boolean shareDirectly, bool
ean isIncognito) { | 834 // final WindowAndroid windowAndroid, final boolean shareDirectly, bo
olean isIncognito) { |
| 835 if (currentTab == null) return; | 835 // if (currentTab == null) return; |
| 836 | 836 // |
| 837 final Activity mainActivity = this; | 837 // final Activity mainActivity = this; |
| 838 ContentReadbackHandler.GetBitmapCallback bitmapCallback = | 838 // ContentReadbackHandler.GetBitmapCallback bitmapCallback = |
| 839 new ContentReadbackHandler.GetBitmapCallback() { | 839 // new ContentReadbackHandler.GetBitmapCallback() { |
| 840 @Override | 840 // @Override |
| 841 public void onFinishGetBitmap(Bitmap bitmap, int reponse) { | 841 // public void onFinishGetBitmap(Bitmap bitmap, int reponse)
{ |
| 842 ShareHelper.share(shareDirectly, mainActivity, currentTa
b.getTitle(), | 842 // ShareHelper.share(shareDirectly, mainActivity, current
Tab.getTitle(), |
| 843 currentTab.getUrl(), bitmap); | 843 // currentTab.getUrl(), bitmap); |
| 844 if (shareDirectly) { | 844 // if (shareDirectly) { |
| 845 RecordUserAction.record("MobileMenuDirectShare"); | 845 // RecordUserAction.record("MobileMenuDirectShare"); |
| 846 } else { | 846 // } else { |
| 847 RecordUserAction.record("MobileMenuShare"); | 847 // RecordUserAction.record("MobileMenuShare"); |
| 848 } | 848 // } |
| 849 } | 849 // } |
| 850 }; | 850 // }; |
| 851 ContentReadbackHandler readbackHandler = getContentReadbackHandler(); | 851 // ContentReadbackHandler readbackHandler = getContentReadbackHandler(); |
| 852 if (isIncognito || readbackHandler == null || windowAndroid == null | 852 // if (isIncognito || readbackHandler == null || windowAndroid == null |
| 853 || currentTab.getContentViewCore() == null) { | 853 // || currentTab.getContentViewCore() == null) { |
| 854 bitmapCallback.onFinishGetBitmap(null, ReadbackResponse.SURFACE_UNAV
AILABLE); | 854 // bitmapCallback.onFinishGetBitmap(null, ReadbackResponse.SURFACE_UN
AVAILABLE); |
| 855 } else { | 855 // } else { |
| 856 readbackHandler.getContentBitmapAsync(1, new Rect(), currentTab.getC
ontentViewCore(), | 856 // readbackHandler.getContentBitmapAsync(1, new Rect(), currentTab.ge
tContentViewCore(), |
| 857 Bitmap.Config.ARGB_8888, bitmapCallback); | 857 // Bitmap.Config.ARGB_8888, bitmapCallback); |
| 858 } | 858 // } |
| 859 } | 859 // } |
| 860 | 860 |
| 861 /** | 861 /** |
| 862 * @return Whether the activity is in overview mode. | 862 * @return Whether the activity is in overview mode. |
| 863 */ | 863 */ |
| 864 public boolean isInOverviewMode() { | 864 public boolean isInOverviewMode() { |
| 865 return false; | 865 return false; |
| 866 } | 866 } |
| 867 | 867 |
| 868 /** | 868 /** |
| 869 * @return Whether the app menu should be shown. | 869 * @return Whether the app menu should be shown. |
| 870 */ | 870 */ |
| 871 public boolean shouldShowAppMenu() { | 871 public boolean shouldShowAppMenu() { |
| 872 // Do not show the menu if Contextual Search Panel is opened. | 872 // // Do not show the menu if Contextual Search Panel is opened. |
| 873 if (mContextualSearchManager != null && mContextualSearchManager.isSearc
hPanelOpened()) { | 873 // if (mContextualSearchManager != null && mContextualSearchManager.isSea
rchPanelOpened()) { |
| 874 return false; | 874 // return false; |
| 875 } | 875 // } |
| 876 | 876 |
| 877 return true; | 877 return true; |
| 878 } | 878 } |
| 879 | 879 |
| 880 /** | 880 /** |
| 881 * Allows Activities that extend ChromeActivity to do additional hiding/show
ing of menu items. | 881 * Allows Activities that extend ChromeActivity to do additional hiding/show
ing of menu items. |
| 882 * @param menu Menu that is going to be shown when the menu button is presse
d. | 882 * @param menu Menu that is going to be shown when the menu button is presse
d. |
| 883 */ | 883 */ |
| 884 public void prepareMenu(Menu menu) { | 884 public void prepareMenu(Menu menu) { |
| 885 } | 885 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 901 }; | 901 }; |
| 902 } | 902 } |
| 903 | 903 |
| 904 /** | 904 /** |
| 905 * @return The resource id that contains how large the top controls are. | 905 * @return The resource id that contains how large the top controls are. |
| 906 */ | 906 */ |
| 907 public int getControlContainerHeightResource() { | 907 public int getControlContainerHeightResource() { |
| 908 return R.dimen.control_container_height; | 908 return R.dimen.control_container_height; |
| 909 } | 909 } |
| 910 | 910 |
| 911 @Override | 911 // @Override |
| 912 public final void onAccessibilityStateChanged(boolean enabled) { | 912 // public final void onAccessibilityStateChanged(boolean enabled) { |
| 913 checkAccessibility(); | 913 // checkAccessibility(); |
| 914 } | 914 // } |
| 915 | 915 |
| 916 private void checkAccessibility() { | 916 // private void checkAccessibility() { |
| 917 onAccessibilityModeChanged(DeviceClassManager.isAccessibilityModeEnabled
(this)); | 917 // onAccessibilityModeChanged(DeviceClassManager.isAccessibilityModeEnabl
ed(this)); |
| 918 } | 918 // } |
| 919 | 919 |
| 920 /** | 920 /** |
| 921 * @return A casted version of {@link #getApplication()}. | 921 * @return A casted version of {@link #getApplication()}. |
| 922 */ | 922 */ |
| 923 public ChromeApplication getChromeApplication() { | 923 public ChromeApplication getChromeApplication() { |
| 924 return (ChromeApplication) getApplication(); | 924 return (ChromeApplication) getApplication(); |
| 925 } | 925 } |
| 926 | 926 |
| 927 /** | 927 /** |
| 928 * @return Whether the update infobar may be shown. | 928 * @return Whether the update infobar may be shown. |
| 929 */ | 929 */ |
| 930 public boolean mayShowUpdateInfoBar() { | 930 public boolean mayShowUpdateInfoBar() { |
| 931 return true; | 931 return true; |
| 932 } | 932 } |
| 933 | 933 |
| 934 /** | 934 /** |
| 935 * Add the specified tab to bookmarks or allows to edit the bookmark if the
specified tab is | 935 * Add the specified tab to bookmarks or allows to edit the bookmark if the
specified tab is |
| 936 * already bookmarked. If a new bookmark is added, a snackbar will be shown. | 936 * already bookmarked. If a new bookmark is added, a snackbar will be shown. |
| 937 * @param tabToBookmark The tab that needs to be bookmarked. | 937 * @param tabToBookmark The tab that needs to be bookmarked. |
| 938 */ | 938 */ |
| 939 public void addOrEditBookmark(final Tab tabToBookmark) { | 939 // public void addOrEditBookmark(final Tab tabToBookmark) { |
| 940 if (tabToBookmark == null || tabToBookmark.isFrozen()) { | 940 // if (tabToBookmark == null || tabToBookmark.isFrozen()) { |
| 941 return; | 941 // return; |
| 942 } | 942 // } |
| 943 | 943 // |
| 944 assert mToolbarManager.getBookmarksBridge().isEditBookmarksEnabled(); | 944 // assert mToolbarManager.getBookmarksBridge().isEditBookmarksEnabled(); |
| 945 | 945 // |
| 946 // Note the use of getUserBookmarkId() over getBookmarkId() here: Manage
d bookmarks can't be | 946 // // Note the use of getUserBookmarkId() over getBookmarkId() here: Mana
ged bookmarks can't be |
| 947 // edited. If the current URL is only bookmarked by managed bookmarks, t
his will return | 947 // // edited. If the current URL is only bookmarked by managed bookmarks,
this will return |
| 948 // INVALID_BOOKMARK_ID, so the code below will fall back on adding a new
bookmark instead. | 948 // // INVALID_BOOKMARK_ID, so the code below will fall back on adding a n
ew bookmark instead. |
| 949 // TODO(bauerb): This does not take partner bookmarks into account. | 949 // // TODO(bauerb): This does not take partner bookmarks into account. |
| 950 final long bookmarkId = tabToBookmark.getUserBookmarkId(); | 950 // final long bookmarkId = tabToBookmark.getUserBookmarkId(); |
| 951 | 951 // |
| 952 if (EnhancedBookmarkUtils.isEnhancedBookmarkEnabled(tabToBookmark.getPro
file())) { | 952 // if (EnhancedBookmarkUtils.isEnhancedBookmarkEnabled(tabToBookmark.getP
rofile())) { |
| 953 final EnhancedBookmarksModel bookmarkModel = new EnhancedBookmarksMo
del(); | 953 // final EnhancedBookmarksModel bookmarkModel = new EnhancedBookmarks
Model(); |
| 954 if (bookmarkModel.isBookmarkModelLoaded()) { | 954 // if (bookmarkModel.isBookmarkModelLoaded()) { |
| 955 EnhancedBookmarkUtils.addOrEditBookmark(bookmarkId, bookmarkMode
l, | 955 // EnhancedBookmarkUtils.addOrEditBookmark(bookmarkId, bookmarkMo
del, |
| 956 tabToBookmark, getSnackbarManager(), ChromeActivity.this
); | 956 // tabToBookmark, getSnackbarManager(), ChromeActivity.th
is); |
| 957 } else if (mBookmarkObserver == null) { | 957 // } else if (mBookmarkObserver == null) { |
| 958 mBookmarkObserver = new BookmarkModelObserver() { | 958 // mBookmarkObserver = new BookmarkModelObserver() { |
| 959 @Override | 959 // @Override |
| 960 public void bookmarkModelChanged() {} | 960 // public void bookmarkModelChanged() {} |
| 961 | 961 // |
| 962 @Override | 962 // @Override |
| 963 public void bookmarkModelLoaded() { | 963 // public void bookmarkModelLoaded() { |
| 964 EnhancedBookmarkUtils.addOrEditBookmark(bookmarkId, book
markModel, | 964 // EnhancedBookmarkUtils.addOrEditBookmark(bookmarkId, bo
okmarkModel, |
| 965 tabToBookmark, getSnackbarManager(), ChromeActiv
ity.this); | 965 // tabToBookmark, getSnackbarManager(), ChromeAct
ivity.this); |
| 966 bookmarkModel.removeObserver(this); | 966 // bookmarkModel.removeObserver(this); |
| 967 } | 967 // } |
| 968 }; | 968 // }; |
| 969 bookmarkModel.addObserver(mBookmarkObserver); | 969 // bookmarkModel.addObserver(mBookmarkObserver); |
| 970 } | 970 // } |
| 971 } else { | 971 // } else { |
| 972 Intent intent = new Intent(this, ManageBookmarkActivity.class); | 972 // Intent intent = new Intent(this, ManageBookmarkActivity.class); |
| 973 if (bookmarkId == ChromeBrowserProviderClient.INVALID_BOOKMARK_ID) { | 973 // if (bookmarkId == ChromeBrowserProviderClient.INVALID_BOOKMARK_ID)
{ |
| 974 intent.putExtra(ManageBookmarkActivity.BOOKMARK_INTENT_IS_FOLDER
, false); | 974 // intent.putExtra(ManageBookmarkActivity.BOOKMARK_INTENT_IS_FOLD
ER, false); |
| 975 intent.putExtra(ManageBookmarkActivity.BOOKMARK_INTENT_TITLE, | 975 // intent.putExtra(ManageBookmarkActivity.BOOKMARK_INTENT_TITLE, |
| 976 tabToBookmark.getTitle()); | 976 // tabToBookmark.getTitle()); |
| 977 intent.putExtra(ManageBookmarkActivity.BOOKMARK_INTENT_URL, tabT
oBookmark.getUrl()); | 977 // intent.putExtra(ManageBookmarkActivity.BOOKMARK_INTENT_URL, ta
bToBookmark.getUrl()); |
| 978 } else { | 978 // } else { |
| 979 intent.putExtra(ManageBookmarkActivity.BOOKMARK_INTENT_IS_FOLDER
, false); | 979 // intent.putExtra(ManageBookmarkActivity.BOOKMARK_INTENT_IS_FOLD
ER, false); |
| 980 intent.putExtra(ManageBookmarkActivity.BOOKMARK_INTENT_ID, bookm
arkId); | 980 // intent.putExtra(ManageBookmarkActivity.BOOKMARK_INTENT_ID, boo
kmarkId); |
| 981 } | 981 // } |
| 982 startActivity(intent); | 982 // startActivity(intent); |
| 983 } | 983 // } |
| 984 } | 984 // } |
| 985 | 985 |
| 986 /** | 986 /** |
| 987 * {@link TabModelSelector} no longer implements TabModel. Use getTabModelS
elector() or | 987 * {@link TabModelSelector} no longer implements TabModel. Use getTabModelS
elector() or |
| 988 * getCurrentTabModel() depending on your needs. | 988 * getCurrentTabModel() depending on your needs. |
| 989 * @return The {@link TabModelSelector}, possibly null. | 989 * @return The {@link TabModelSelector}, possibly null. |
| 990 */ | 990 */ |
| 991 public TabModelSelector getTabModelSelector() { | 991 // public TabModelSelector getTabModelSelector() { |
| 992 return mTabModelSelector; | 992 // return mTabModelSelector; |
| 993 } | 993 // } |
| 994 | 994 // |
| 995 @Override | 995 // @Override |
| 996 public TabCreatorManager.TabCreator getTabCreator(boolean incognito) { | 996 // public TabCreatorManager.TabCreator getTabCreator(boolean incognito) { |
| 997 return incognito ? mIncognitoTabCreator : mRegularTabCreator; | 997 // return incognito ? mIncognitoTabCreator : mRegularTabCreator; |
| 998 } | 998 // } |
| 999 | 999 // |
| 1000 /** | 1000 // /** |
| 1001 * Sets the {@link ChromeTabCreator}s owned by this {@link ChromeActivity}. | 1001 // * Sets the {@link ChromeTabCreator}s owned by this {@link ChromeActivity}
. |
| 1002 * @param regularTabCreator A {@link ChromeTabCreator} instance. | 1002 // * @param regularTabCreator A {@link ChromeTabCreator} instance. |
| 1003 */ | 1003 // */ |
| 1004 public void setTabCreators(TabCreatorManager.TabCreator regularTabCreator, | 1004 // public void setTabCreators(TabCreatorManager.TabCreator regularTabCreator, |
| 1005 TabCreatorManager.TabCreator incognitoTabCreator) { | 1005 // TabCreatorManager.TabCreator incognitoTabCreator) { |
| 1006 mRegularTabCreator = regularTabCreator; | 1006 // mRegularTabCreator = regularTabCreator; |
| 1007 mIncognitoTabCreator = incognitoTabCreator; | 1007 // mIncognitoTabCreator = incognitoTabCreator; |
| 1008 } | 1008 // } |
| 1009 | 1009 // |
| 1010 /** | 1010 // /** |
| 1011 * Convenience method that returns a tab creator for the currently selected
{@link TabModel}. | 1011 // * Convenience method that returns a tab creator for the currently selecte
d {@link TabModel}. |
| 1012 * @return A tab creator for the currently selected {@link TabModel}. | 1012 // * @return A tab creator for the currently selected {@link TabModel}. |
| 1013 */ | 1013 // */ |
| 1014 public TabCreatorManager.TabCreator getCurrentTabCreator() { | 1014 // public TabCreatorManager.TabCreator getCurrentTabCreator() { |
| 1015 return getTabCreator(getTabModelSelector().isIncognitoSelected()); | 1015 // return getTabCreator(getTabModelSelector().isIncognitoSelected()); |
| 1016 } | 1016 // } |
| 1017 | 1017 // |
| 1018 /** | 1018 // /** |
| 1019 * Gets the {@link TabContentManager} instance which holds snapshots of the
tabs in this model. | 1019 // * Gets the {@link TabContentManager} instance which holds snapshots of th
e tabs in this model. |
| 1020 * @return The thumbnail cache, possibly null. | 1020 // * @return The thumbnail cache, possibly null. |
| 1021 */ | 1021 // */ |
| 1022 public TabContentManager getTabContentManager() { | 1022 // public TabContentManager getTabContentManager() { |
| 1023 return mTabContentManager; | 1023 // return mTabContentManager; |
| 1024 } | 1024 // } |
| 1025 | 1025 // |
| 1026 /** | 1026 // /** |
| 1027 * Sets the {@link TabContentManager} owned by this {@link ChromeActivity}. | 1027 // * Sets the {@link TabContentManager} owned by this {@link ChromeActivity}
. |
| 1028 * @param tabContentManager A {@link TabContentManager} instance. | 1028 // * @param tabContentManager A {@link TabContentManager} instance. |
| 1029 */ | 1029 // */ |
| 1030 protected void setTabContentManager(TabContentManager tabContentManager) { | 1030 // protected void setTabContentManager(TabContentManager tabContentManager) { |
| 1031 mTabContentManager = tabContentManager; | 1031 // mTabContentManager = tabContentManager; |
| 1032 } | 1032 // } |
| 1033 | 1033 // |
| 1034 /** | 1034 // /** |
| 1035 * Gets the current (inner) TabModel. This is a convenience function for | 1035 // * Gets the current (inner) TabModel. This is a convenience function for |
| 1036 * getModelSelector().getCurrentModel(). It is *not* equivalent to the form
er getModel() | 1036 // * getModelSelector().getCurrentModel(). It is *not* equivalent to the fo
rmer getModel() |
| 1037 * @return Never null, if modelSelector or its field is uninstantiated retur
ns a | 1037 // * @return Never null, if modelSelector or its field is uninstantiated ret
urns a |
| 1038 * {@link EmptyTabModel} singleton | 1038 // * {@link EmptyTabModel} singleton |
| 1039 */ | 1039 // */ |
| 1040 public TabModel getCurrentTabModel() { | 1040 // public TabModel getCurrentTabModel() { |
| 1041 TabModelSelector modelSelector = getTabModelSelector(); | 1041 // TabModelSelector modelSelector = getTabModelSelector(); |
| 1042 if (modelSelector == null) return EmptyTabModel.getInstance(); | 1042 // if (modelSelector == null) return EmptyTabModel.getInstance(); |
| 1043 return modelSelector.getCurrentModel(); | 1043 // return modelSelector.getCurrentModel(); |
| 1044 } | 1044 // } |
| 1045 | 1045 // |
| 1046 /** | 1046 // /** |
| 1047 * Returns the tab being displayed by this ChromeActivity instance. This all
ows differentiation | 1047 // * Returns the tab being displayed by this ChromeActivity instance. This a
llows differentiation |
| 1048 * between ChromeActivity subclasses that swap between multiple tabs (e.g. C
hromeTabbedActivity) | 1048 // * between ChromeActivity subclasses that swap between multiple tabs (e.g.
ChromeTabbedActivity) |
| 1049 * and subclasses that only display one Tab (e.g. FullScreenActivity and Doc
umentActivity). | 1049 // * and subclasses that only display one Tab (e.g. FullScreenActivity and D
ocumentActivity). |
| 1050 * | 1050 // * |
| 1051 * The default implementation grabs the tab currently selected by the TabMod
el, which may be | 1051 // * The default implementation grabs the tab currently selected by the TabM
odel, which may be |
| 1052 * null if the Tab does not exist or the system is not initialized. | 1052 // * null if the Tab does not exist or the system is not initialized. |
| 1053 */ | 1053 // */ |
| 1054 public Tab getActivityTab() { | 1054 // public Tab getActivityTab() { |
| 1055 return TabModelUtils.getCurrentTab(getCurrentTabModel()); | 1055 // return TabModelUtils.getCurrentTab(getCurrentTabModel()); |
| 1056 } | 1056 // } |
| 1057 | 1057 // |
| 1058 /** | 1058 // /** |
| 1059 * @return The current ContentViewCore, or null if the tab does not exist or
is not showing a | 1059 // * @return The current ContentViewCore, or null if the tab does not exist
or is not showing a |
| 1060 * ContentViewCore. | 1060 // * ContentViewCore. |
| 1061 */ | 1061 // */ |
| 1062 public ContentViewCore getCurrentContentViewCore() { | 1062 // public ContentViewCore getCurrentContentViewCore() { |
| 1063 return TabModelUtils.getCurrentContentViewCore(getCurrentTabModel()); | 1063 // return TabModelUtils.getCurrentContentViewCore(getCurrentTabModel()); |
| 1064 } | 1064 // } |
| 1065 | 1065 |
| 1066 /** | 1066 /** |
| 1067 * @return A {@link WindowAndroid} instance. | 1067 * @return A {@link WindowAndroid} instance. |
| 1068 */ | 1068 */ |
| 1069 public WindowAndroid getWindowAndroid() { | 1069 public WindowAndroid getWindowAndroid() { |
| 1070 return mWindowAndroid; | 1070 return mWindowAndroid; |
| 1071 } | 1071 } |
| 1072 | 1072 |
| 1073 /** | 1073 /** |
| 1074 * @return A {@link CompositorViewHolder} instance. | 1074 * @return A {@link CompositorViewHolder} instance. |
| 1075 */ | 1075 */ |
| 1076 public CompositorViewHolder getCompositorViewHolder() { | 1076 // public CompositorViewHolder getCompositorViewHolder() { |
| 1077 return mCompositorViewHolder; | 1077 // return mCompositorViewHolder; |
| 1078 } | 1078 // } |
| 1079 // |
| 1080 // /** |
| 1081 // * Gets the full screen manager. |
| 1082 // * @return The fullscreen manager, possibly null |
| 1083 // */ |
| 1084 // public ChromeFullscreenManager getFullscreenManager() { |
| 1085 // return mFullscreenManager; |
| 1086 // } |
| 1087 // |
| 1088 // /** |
| 1089 // * @return The content offset provider, may be null. |
| 1090 // */ |
| 1091 // public ContentOffsetProvider getContentOffsetProvider() { |
| 1092 // return mCompositorViewHolder.getContentOffsetProvider(); |
| 1093 // } |
| 1094 // |
| 1095 // /** |
| 1096 // * @return The content readback handler, may be null. |
| 1097 // */ |
| 1098 // public ContentReadbackHandler getContentReadbackHandler() { |
| 1099 // return mCompositorViewHolder.getContentReadbackHandler(); |
| 1100 // } |
| 1079 | 1101 |
| 1080 /** | 1102 // /** |
| 1081 * Gets the full screen manager. | 1103 // * Starts asynchronously taking the compositor activity screenshot. |
| 1082 * @return The fullscreen manager, possibly null | 1104 // * @param getBitmapCallback The callback to call once the screenshot is ta
ken, or when failed. |
| 1083 */ | 1105 // */ |
| 1084 public ChromeFullscreenManager getFullscreenManager() { | 1106 // public void startTakingCompositorActivityScreenshot(final GetBitmapCallbac
k getBitmapCallback) { |
| 1085 return mFullscreenManager; | 1107 // ContentReadbackHandler readbackHandler = getContentReadbackHandler(); |
| 1086 } | 1108 // if (readbackHandler == null || getWindowAndroid() == null) { |
| 1087 | 1109 // ThreadUtils.postOnUiThread(new Runnable() { |
| 1088 /** | 1110 // @Override |
| 1089 * @return The content offset provider, may be null. | 1111 // public void run() { |
| 1090 */ | 1112 // getBitmapCallback.onFinishGetBitmap(null, ReadbackResponse
.SURFACE_UNAVAILABLE); |
| 1091 public ContentOffsetProvider getContentOffsetProvider() { | 1113 // } |
| 1092 return mCompositorViewHolder.getContentOffsetProvider(); | 1114 // }); |
| 1093 } | 1115 // } else { |
| 1094 | 1116 // readbackHandler.getCompositorBitmapAsync(getWindowAndroid(), getBi
tmapCallback); |
| 1095 /** | 1117 // } |
| 1096 * @return The content readback handler, may be null. | 1118 // } |
| 1097 */ | 1119 // |
| 1098 public ContentReadbackHandler getContentReadbackHandler() { | 1120 // /** |
| 1099 return mCompositorViewHolder.getContentReadbackHandler(); | 1121 // * @return The {@code ContextualSearchManager} or {@code null} if none; |
| 1100 } | 1122 // */ |
| 1101 | 1123 // public ContextualSearchManager getContextualSearchManager() { |
| 1102 /** | 1124 // return mContextualSearchManager; |
| 1103 * Starts asynchronously taking the compositor activity screenshot. | 1125 // } |
| 1104 * @param getBitmapCallback The callback to call once the screenshot is take
n, or when failed. | 1126 // |
| 1105 */ | 1127 // /** |
| 1106 public void startTakingCompositorActivityScreenshot(final GetBitmapCallback
getBitmapCallback) { | 1128 // * @return A {@link ReaderModeActivityDelegate} instance or {@code null} i
f reader mode is |
| 1107 ContentReadbackHandler readbackHandler = getContentReadbackHandler(); | 1129 // * not enabled. |
| 1108 if (readbackHandler == null || getWindowAndroid() == null) { | 1130 // */ |
| 1109 ThreadUtils.postOnUiThread(new Runnable() { | 1131 // public ReaderModeActivityDelegate getReaderModeActivityDelegate() { |
| 1110 @Override | 1132 // return mReaderModeActivityDelegate; |
| 1111 public void run() { | 1133 // } |
| 1112 getBitmapCallback.onFinishGetBitmap(null, ReadbackResponse.S
URFACE_UNAVAILABLE); | 1134 // |
| 1113 } | 1135 // /** |
| 1114 }); | 1136 // * Create a full-screen manager to be used by this activity. |
| 1115 } else { | 1137 // * @param controlContainer The control container that will be controlled b
y the full-screen |
| 1116 readbackHandler.getCompositorBitmapAsync(getWindowAndroid(), getBitm
apCallback); | 1138 // * manager. |
| 1117 } | 1139 // * @return A {@link ChromeFullscreenManager} instance that's been created. |
| 1118 } | 1140 // */ |
| 1119 | 1141 // protected ChromeFullscreenManager createFullscreenManager(View controlCont
ainer) { |
| 1120 /** | 1142 // return new ChromeFullscreenManager(this, controlContainer, getTabModel
Selector(), |
| 1121 * @return The {@code ContextualSearchManager} or {@code null} if none; | 1143 // getControlContainerHeightResource(), true); |
| 1122 */ | 1144 // } |
| 1123 public ContextualSearchManager getContextualSearchManager() { | 1145 // |
| 1124 return mContextualSearchManager; | 1146 // /** |
| 1125 } | 1147 // * Initializes the {@link CompositorViewHolder} with the relevant content
it needs to properly |
| 1126 | 1148 // * show content on the screen. |
| 1127 /** | 1149 // * @param layoutManager A {@link LayoutManagerDocument} instan
ce. This class is |
| 1128 * @return A {@link ReaderModeActivityDelegate} instance or {@code null} if
reader mode is | 1150 // * responsible for driving all high level
screen content and |
| 1129 * not enabled. | 1151 // * determines which {@link Layout} is sho
wn when. |
| 1130 */ | 1152 // * @param urlBar The {@link View} representing the URL
bar (must be |
| 1131 public ReaderModeActivityDelegate getReaderModeActivityDelegate() { | 1153 // * focusable) or {@code null} if none exi
sts. |
| 1132 return mReaderModeActivityDelegate; | 1154 // * @param contentContainer A {@link ViewGroup} that can have cont
ent attached by |
| 1133 } | 1155 // * {@link Layout}s. |
| 1134 | 1156 // * @param controlContainer A {@link ControlContainer} instance to
draw. |
| 1135 /** | 1157 // */ |
| 1136 * Create a full-screen manager to be used by this activity. | 1158 // protected void initializeCompositorContent( |
| 1137 * @param controlContainer The control container that will be controlled by
the full-screen | 1159 // LayoutManagerDocument layoutManager, View urlBar, ViewGroup conten
tContainer, |
| 1138 * manager. | 1160 // ControlContainer controlContainer) { |
| 1139 * @return A {@link ChromeFullscreenManager} instance that's been created. | 1161 // CommandLine commandLine = CommandLine.getInstance(); |
| 1140 */ | 1162 // boolean enableFullscreen = !commandLine.hasSwitch(ChromeSwitches.DISAB
LE_FULLSCREEN); |
| 1141 protected ChromeFullscreenManager createFullscreenManager(View controlContai
ner) { | 1163 // |
| 1142 return new ChromeFullscreenManager(this, controlContainer, getTabModelSe
lector(), | 1164 // if (enableFullscreen && controlContainer != null) { |
| 1143 getControlContainerHeightResource(), true); | 1165 // mFullscreenManager = createFullscreenManager((View) controlContain
er); |
| 1144 } | 1166 // } |
| 1145 | 1167 // |
| 1146 /** | 1168 // if (mContextualSearchManager != null) { |
| 1147 * Initializes the {@link CompositorViewHolder} with the relevant content it
needs to properly | 1169 // mContextualSearchManager.initialize(contentContainer); |
| 1148 * show content on the screen. | 1170 // mContextualSearchManager.setSearchContentViewDelegate(layoutManage
r); |
| 1149 * @param layoutManager A {@link LayoutManagerDocument} instance
. This class is | 1171 // } |
| 1150 * responsible for driving all high level s
creen content and | 1172 // |
| 1151 * determines which {@link Layout} is shown
when. | 1173 // if (mReaderModeActivityDelegate != null) { |
| 1152 * @param urlBar The {@link View} representing the URL ba
r (must be | 1174 // mReaderModeActivityDelegate.initialize(contentContainer); |
| 1153 * focusable) or {@code null} if none exist
s. | 1175 // mReaderModeActivityDelegate.setDynamicResourceLoader( |
| 1154 * @param contentContainer A {@link ViewGroup} that can have conten
t attached by | 1176 // mCompositorViewHolder.getDynamicResourceLoader()); |
| 1155 * {@link Layout}s. | 1177 // } |
| 1156 * @param controlContainer A {@link ControlContainer} instance to d
raw. | 1178 // |
| 1157 */ | 1179 // layoutManager.addSceneChangeObserver(this); |
| 1158 protected void initializeCompositorContent( | 1180 // mCompositorViewHolder.setLayoutManager(layoutManager); |
| 1159 LayoutManagerDocument layoutManager, View urlBar, ViewGroup contentC
ontainer, | 1181 // mCompositorViewHolder.setFocusable(false); |
| 1160 ControlContainer controlContainer) { | 1182 // mCompositorViewHolder.setControlContainer(controlContainer); |
| 1161 CommandLine commandLine = CommandLine.getInstance(); | 1183 // mCompositorViewHolder.setFullscreenHandler(mFullscreenManager); |
| 1162 boolean enableFullscreen = !commandLine.hasSwitch(ChromeSwitches.DISABLE
_FULLSCREEN); | 1184 // mCompositorViewHolder.setUrlBar(urlBar); |
| 1163 | 1185 // mCompositorViewHolder.onFinishNativeInitialization(getTabModelSelector
(), this, |
| 1164 if (enableFullscreen && controlContainer != null) { | 1186 // getTabContentManager(), contentContainer, mContextualSearchMan
ager); |
| 1165 mFullscreenManager = createFullscreenManager((View) controlContainer
); | 1187 // |
| 1166 } | 1188 // if (controlContainer != null |
| 1167 | 1189 // && DeviceClassManager.enableToolbarSwipe(FeatureUtilities.isDo
cumentMode(this))) { |
| 1168 if (mContextualSearchManager != null) { | 1190 // controlContainer.setSwipeHandler( |
| 1169 mContextualSearchManager.initialize(contentContainer); | 1191 // getCompositorViewHolder().getLayoutManager().getTopSwipeHa
ndler()); |
| 1170 mContextualSearchManager.setSearchContentViewDelegate(layoutManager)
; | 1192 // } |
| 1171 } | 1193 // } |
| 1172 | |
| 1173 if (mReaderModeActivityDelegate != null) { | |
| 1174 mReaderModeActivityDelegate.initialize(contentContainer); | |
| 1175 mReaderModeActivityDelegate.setDynamicResourceLoader( | |
| 1176 mCompositorViewHolder.getDynamicResourceLoader()); | |
| 1177 } | |
| 1178 | |
| 1179 layoutManager.addSceneChangeObserver(this); | |
| 1180 mCompositorViewHolder.setLayoutManager(layoutManager); | |
| 1181 mCompositorViewHolder.setFocusable(false); | |
| 1182 mCompositorViewHolder.setControlContainer(controlContainer); | |
| 1183 mCompositorViewHolder.setFullscreenHandler(mFullscreenManager); | |
| 1184 mCompositorViewHolder.setUrlBar(urlBar); | |
| 1185 mCompositorViewHolder.onFinishNativeInitialization(getTabModelSelector()
, this, | |
| 1186 getTabContentManager(), contentContainer, mContextualSearchManag
er); | |
| 1187 | |
| 1188 if (controlContainer != null | |
| 1189 && DeviceClassManager.enableToolbarSwipe(FeatureUtilities.isDocu
mentMode(this))) { | |
| 1190 controlContainer.setSwipeHandler( | |
| 1191 getCompositorViewHolder().getLayoutManager().getTopSwipeHand
ler()); | |
| 1192 } | |
| 1193 } | |
| 1194 | 1194 |
| 1195 /** | 1195 /** |
| 1196 * Called when the back button is pressed. | 1196 * Called when the back button is pressed. |
| 1197 * @return Whether or not the back button was handled. | 1197 * @return Whether or not the back button was handled. |
| 1198 */ | 1198 */ |
| 1199 protected abstract boolean handleBackPressed(); | 1199 protected abstract boolean handleBackPressed(); |
| 1200 | 1200 |
| 1201 @Override | 1201 // @Override |
| 1202 public void onOrientationChange(int orientation) { | 1202 // public void onOrientationChange(int orientation) { |
| 1203 if (mContextualSearchManager != null) mContextualSearchManager.onOrienta
tionChange(); | 1203 //// if (mContextualSearchManager != null) mContextualSearchManager.onOri
entationChange(); |
| 1204 if (mToolbarManager != null) mToolbarManager.onOrientationChange(); | 1204 // if (mToolbarManager != null) mToolbarManager.onOrientationChange(); |
| 1205 } | 1205 // } |
| 1206 | 1206 |
| 1207 @Override | 1207 // @Override |
| 1208 public void onConfigurationChanged(Configuration newConfig) { | 1208 // public void onConfigurationChanged(Configuration newConfig) { |
| 1209 if (mAppMenuHandler != null) mAppMenuHandler.hideAppMenu(); | 1209 //// if (mAppMenuHandler != null) mAppMenuHandler.hideAppMenu(); |
| 1210 super.onConfigurationChanged(newConfig); | 1210 // super.onConfigurationChanged(newConfig); |
| 1211 } | 1211 // } |
| 1212 | 1212 |
| 1213 @Override | 1213 // @Override |
| 1214 public final void onBackPressed() { | 1214 // public final void onBackPressed() { |
| 1215 if (mCompositorViewHolder != null) { | 1215 // if (mCompositorViewHolder != null) { |
| 1216 LayoutManager layoutManager = mCompositorViewHolder.getLayoutManager
(); | 1216 // LayoutManager layoutManager = mCompositorViewHolder.getLayoutManag
er(); |
| 1217 boolean layoutConsumed = layoutManager != null && layoutManager.onBa
ckPressed(); | 1217 // boolean layoutConsumed = layoutManager != null && layoutManager.on
BackPressed(); |
| 1218 if (layoutConsumed || mContextualSearchManager != null | 1218 // if (layoutConsumed || mContextualSearchManager != null |
| 1219 && mContextualSearchManager.onBackPressed()) { | 1219 // && mContextualSearchManager.onBackPressed()) { |
| 1220 RecordUserAction.record("SystemBack"); | 1220 // RecordUserAction.record("SystemBack"); |
| 1221 return; | 1221 // return; |
| 1222 } | 1222 // } |
| 1223 } | 1223 // } |
| 1224 if (!isSelectActionBarShowing() && handleBackPressed()) { | 1224 // if (!isSelectActionBarShowing() && handleBackPressed()) { |
| 1225 return; | 1225 // return; |
| 1226 } | 1226 // } |
| 1227 // This will close the select action bar if it is showing, otherwise clo
se the activity. | 1227 // // This will close the select action bar if it is showing, otherwise c
lose the activity. |
| 1228 super.onBackPressed(); | 1228 // super.onBackPressed(); |
| 1229 } | 1229 // } |
| 1230 | 1230 // |
| 1231 private boolean isSelectActionBarShowing() { | 1231 // private boolean isSelectActionBarShowing() { |
| 1232 Tab tab = getActivityTab(); | 1232 // Tab tab = getActivityTab(); |
| 1233 if (tab == null) return false; | 1233 // if (tab == null) return false; |
| 1234 ContentViewCore contentViewCore = tab.getContentViewCore(); | 1234 // ContentViewCore contentViewCore = tab.getContentViewCore(); |
| 1235 if (contentViewCore == null) return false; | 1235 // if (contentViewCore == null) return false; |
| 1236 return contentViewCore.isSelectActionBarShowing(); | 1236 // return contentViewCore.isSelectActionBarShowing(); |
| 1237 } | 1237 // } |
| 1238 | 1238 /* |
| 1239 // removed because we dont need to implement ContextualSearchTabPromotionDelega
te |
| 1239 @Override | 1240 @Override |
| 1240 public boolean createContextualSearchTab(ContentViewCore searchContentViewCo
re) { | 1241 public boolean createContextualSearchTab(ContentViewCore searchContentViewCo
re) { |
| 1241 Tab currentTab = getActivityTab(); | 1242 Tab currentTab = getActivityTab(); |
| 1242 if (currentTab == null) return false; | 1243 if (currentTab == null) return false; |
| 1243 | 1244 |
| 1244 TabCreator tabCreator = getTabCreator(currentTab.isIncognito()); | 1245 TabCreator tabCreator = getTabCreator(currentTab.isIncognito()); |
| 1245 if (tabCreator == null) return false; | 1246 if (tabCreator == null) return false; |
| 1246 | 1247 |
| 1247 tabCreator.createTabWithWebContents(searchContentViewCore.getWebContents
(), | 1248 tabCreator.createTabWithWebContents(searchContentViewCore.getWebContents
(), |
| 1248 currentTab.getId(), TabLaunchType.FROM_LONGPRESS_FOREGROUND); | 1249 currentTab.getId(), TabLaunchType.FROM_LONGPRESS_FOREGROUND); |
| 1249 return true; | 1250 return true; |
| 1250 } | 1251 } |
| 1252 */ |
| 1251 | 1253 |
| 1252 /** | 1254 // /** |
| 1253 * @return The {@link AppMenuHandler} associated with this activity. | 1255 // * @return The {@link AppMenuHandler} associated with this activity. |
| 1254 */ | 1256 // */ |
| 1255 @VisibleForTesting | 1257 // @VisibleForTesting |
| 1256 public AppMenuHandler getAppMenuHandler() { | 1258 // public AppMenuHandler getAppMenuHandler() { |
| 1257 return mAppMenuHandler; | 1259 // return mAppMenuHandler; |
| 1258 } | 1260 // } |
| 1259 | 1261 // |
| 1260 /** | 1262 // /** |
| 1261 * @return The {@link AppMenuPropertiesDelegate} associated with this activi
ty. | 1263 // * @return The {@link AppMenuPropertiesDelegate} associated with this acti
vity. |
| 1262 */ | 1264 // */ |
| 1263 @VisibleForTesting | 1265 // @VisibleForTesting |
| 1264 public ChromeAppMenuPropertiesDelegate getAppMenuPropertiesDelegate() { | 1266 // public ChromeAppMenuPropertiesDelegate getAppMenuPropertiesDelegate() { |
| 1265 return mAppMenuPropertiesDelegate; | 1267 // return mAppMenuPropertiesDelegate; |
| 1266 } | 1268 // } |
| 1267 | 1269 |
| 1268 /** | 1270 /** |
| 1269 * Handles menu item selection and keyboard shortcuts. | 1271 * Handles menu item selection and keyboard shortcuts. |
| 1270 * | 1272 * |
| 1271 * @param id The ID of the selected menu item (defined in main_menu.xml) or | 1273 * @param id The ID of the selected menu item (defined in main_menu.xml) or |
| 1272 * keyboard shortcut (defined in values.xml). | 1274 * keyboard shortcut (defined in values.xml). |
| 1273 * @param fromMenu Whether this was triggered from the menu. | 1275 * @param fromMenu Whether this was triggered from the menu. |
| 1274 * @return Whether the action was handled. | 1276 * @return Whether the action was handled. |
| 1275 */ | 1277 */ |
| 1276 public boolean onMenuOrKeyboardAction(int id, boolean fromMenu) { | 1278 // public boolean onMenuOrKeyboardAction(int id, boolean fromMenu) { |
| 1277 if (id == R.id.preferences_id) { | 1279 // if (id == R.id.preferences_id) { |
| 1278 PreferencesLauncher.launchSettingsPage(this, null); | 1280 // PreferencesLauncher.launchSettingsPage(this, null); |
| 1279 RecordUserAction.record("MobileMenuSettings"); | 1281 // RecordUserAction.record("MobileMenuSettings"); |
| 1280 } | 1282 // } |
| 1283 // |
| 1284 // // All the code below assumes currentTab is not null, so return early
if it is null. |
| 1285 // final Tab currentTab = getActivityTab(); |
| 1286 // if (currentTab == null) { |
| 1287 // return false; |
| 1288 // } else if (id == R.id.forward_menu_id) { |
| 1289 // if (currentTab.canGoForward()) { |
| 1290 // currentTab.goForward(); |
| 1291 // RecordUserAction.record("MobileMenuForward"); |
| 1292 // RecordUserAction.record("MobileTabClobbered"); |
| 1293 // } |
| 1294 // } else if (id == R.id.bookmark_this_page_id) { |
| 1295 // addOrEditBookmark(currentTab); |
| 1296 // RecordUserAction.record("MobileMenuAddToBookmarks"); |
| 1297 // } else if (id == R.id.reload_menu_id) { |
| 1298 // if (currentTab.isLoading()) { |
| 1299 // currentTab.stopLoading(); |
| 1300 // } else { |
| 1301 // currentTab.reload(); |
| 1302 // RecordUserAction.record("MobileToolbarReload"); |
| 1303 // } |
| 1304 // } else if (id == R.id.info_menu_id) { |
| 1305 // WebsiteSettingsPopup.show(this, currentTab.getProfile(), currentTa
b.getWebContents()); |
| 1306 // } else if (id == R.id.open_history_menu_id) { |
| 1307 // currentTab.loadUrl( |
| 1308 // new LoadUrlParams(UrlConstants.HISTORY_URL, PageTransition
.AUTO_TOPLEVEL)); |
| 1309 // RecordUserAction.record("MobileMenuHistory"); |
| 1310 // } else if (id == R.id.share_menu_id || id == R.id.direct_share_menu_id
) { |
| 1311 // onShareMenuItemSelected(currentTab, getWindowAndroid(), |
| 1312 // id == R.id.direct_share_menu_id, getCurrentTabModel().isIn
cognito()); |
| 1313 // } else if (id == R.id.print_id) { |
| 1314 // PrintingController printingController = getChromeApplication().get
PrintingController(); |
| 1315 // if (printingController != null && !printingController.isBusy() |
| 1316 // && PrefServiceBridge.getInstance().isPrintingEnabled()) { |
| 1317 // printingController.startPrint(new TabPrinter(currentTab), |
| 1318 // new PrintManagerDelegateImpl(this)); |
| 1319 // RecordUserAction.record("MobileMenuPrint"); |
| 1320 // } |
| 1321 // } else if (id == R.id.add_to_homescreen_id) { |
| 1322 // AddToHomescreenDialog.show(this, currentTab); |
| 1323 // RecordUserAction.record("MobileMenuAddToHomescreen"); |
| 1324 // } else if (id == R.id.request_desktop_site_id) { |
| 1325 // final boolean reloadOnChange = !currentTab.isNativePage(); |
| 1326 // final boolean usingDesktopUserAgent = currentTab.getUseDesktopUser
Agent(); |
| 1327 // currentTab.setUseDesktopUserAgent(!usingDesktopUserAgent, reloadOn
Change); |
| 1328 // RecordUserAction.record("MobileMenuRequestDesktopSite"); |
| 1329 // } else if (id == R.id.reader_mode_prefs_id) { |
| 1330 // if (currentTab.getWebContents() != null) { |
| 1331 // RecordUserAction.record("DomDistiller_DistilledPagePrefsOpened
"); |
| 1332 // AlertDialog.Builder builder = |
| 1333 // new AlertDialog.Builder(this, R.style.AlertDialogTheme
); |
| 1334 // builder.setView(DistilledPagePrefsView.create(this)); |
| 1335 // builder.show(); |
| 1336 // } |
| 1337 // } else if (id == R.id.help_id) { |
| 1338 // // Since reading back the compositor is asynchronous, we need to d
o the readback |
| 1339 // // before starting the GoogleHelp. |
| 1340 // String helpContextId = HelpAndFeedback.getHelpContextIdFromUrl( |
| 1341 // this, currentTab.getUrl(), getCurrentTabModel().isIncognit
o()); |
| 1342 // HelpAndFeedback.getInstance(this) |
| 1343 // .show(this, helpContextId, currentTab.getProfile(), curren
tTab.getUrl()); |
| 1344 // RecordUserAction.record("MobileMenuFeedback"); |
| 1345 // } else { |
| 1346 // return false; |
| 1347 // } |
| 1348 // return true; |
| 1349 // } |
| 1281 | 1350 |
| 1282 // All the code below assumes currentTab is not null, so return early if
it is null. | 1351 // private void markSessionResume() { |
| 1283 final Tab currentTab = getActivityTab(); | 1352 // // Start new session for UMA. |
| 1284 if (currentTab == null) { | 1353 // if (mUmaSessionStats == null) { |
| 1285 return false; | 1354 // mUmaSessionStats = new UmaSessionStats(this); |
| 1286 } else if (id == R.id.forward_menu_id) { | 1355 // } |
| 1287 if (currentTab.canGoForward()) { | 1356 // |
| 1288 currentTab.goForward(); | 1357 // mUmaSessionStats.updateMetricsServiceState(); |
| 1289 RecordUserAction.record("MobileMenuForward"); | 1358 // // In DocumentMode we need the application-level TabModelSelector inst
ead of per |
| 1290 RecordUserAction.record("MobileTabClobbered"); | 1359 // // activity which only manages a single tab. |
| 1291 } | 1360 // if (FeatureUtilities.isDocumentMode(this)) { |
| 1292 } else if (id == R.id.bookmark_this_page_id) { | 1361 // mUmaSessionStats.startNewSession( |
| 1293 addOrEditBookmark(currentTab); | 1362 // ChromeApplication.getDocumentTabModelSelector()); |
| 1294 RecordUserAction.record("MobileMenuAddToBookmarks"); | 1363 // } else { |
| 1295 } else if (id == R.id.reload_menu_id) { | 1364 // mUmaSessionStats.startNewSession(getTabModelSelector()); |
| 1296 if (currentTab.isLoading()) { | 1365 // } |
| 1297 currentTab.stopLoading(); | 1366 // } |
| 1298 } else { | 1367 // |
| 1299 currentTab.reload(); | 1368 // /** |
| 1300 RecordUserAction.record("MobileToolbarReload"); | 1369 // * Mark that the UMA session has ended. |
| 1301 } | 1370 // */ |
| 1302 } else if (id == R.id.info_menu_id) { | 1371 // private void markSessionEnd() { |
| 1303 WebsiteSettingsPopup.show(this, currentTab.getProfile(), currentTab.
getWebContents()); | 1372 // if (mUmaSessionStats == null) { |
| 1304 } else if (id == R.id.open_history_menu_id) { | 1373 // // If you hit this assert, please update crbug.com/172653 on how y
ou got there. |
| 1305 currentTab.loadUrl( | 1374 // assert false; |
| 1306 new LoadUrlParams(UrlConstants.HISTORY_URL, PageTransition.A
UTO_TOPLEVEL)); | 1375 // return; |
| 1307 RecordUserAction.record("MobileMenuHistory"); | 1376 // } |
| 1308 } else if (id == R.id.share_menu_id || id == R.id.direct_share_menu_id)
{ | 1377 // // Record session metrics. |
| 1309 onShareMenuItemSelected(currentTab, getWindowAndroid(), | 1378 // mUmaSessionStats.logMultiWindowStats(windowArea(), displayArea(), |
| 1310 id == R.id.direct_share_menu_id, getCurrentTabModel().isInco
gnito()); | 1379 // TabWindowManager.getInstance().getNumberOfAssignedTabModelSele
ctors()); |
| 1311 } else if (id == R.id.print_id) { | 1380 // mUmaSessionStats.logAndEndSession(); |
| 1312 PrintingController printingController = getChromeApplication().getPr
intingController(); | 1381 // } |
| 1313 if (printingController != null && !printingController.isBusy() | |
| 1314 && PrefServiceBridge.getInstance().isPrintingEnabled()) { | |
| 1315 printingController.startPrint(new TabPrinter(currentTab), | |
| 1316 new PrintManagerDelegateImpl(this)); | |
| 1317 RecordUserAction.record("MobileMenuPrint"); | |
| 1318 } | |
| 1319 } else if (id == R.id.add_to_homescreen_id) { | |
| 1320 AddToHomescreenDialog.show(this, currentTab); | |
| 1321 RecordUserAction.record("MobileMenuAddToHomescreen"); | |
| 1322 } else if (id == R.id.request_desktop_site_id) { | |
| 1323 final boolean reloadOnChange = !currentTab.isNativePage(); | |
| 1324 final boolean usingDesktopUserAgent = currentTab.getUseDesktopUserAg
ent(); | |
| 1325 currentTab.setUseDesktopUserAgent(!usingDesktopUserAgent, reloadOnCh
ange); | |
| 1326 RecordUserAction.record("MobileMenuRequestDesktopSite"); | |
| 1327 } else if (id == R.id.reader_mode_prefs_id) { | |
| 1328 if (currentTab.getWebContents() != null) { | |
| 1329 RecordUserAction.record("DomDistiller_DistilledPagePrefsOpened")
; | |
| 1330 AlertDialog.Builder builder = | |
| 1331 new AlertDialog.Builder(this, R.style.AlertDialogTheme); | |
| 1332 builder.setView(DistilledPagePrefsView.create(this)); | |
| 1333 builder.show(); | |
| 1334 } | |
| 1335 } else if (id == R.id.help_id) { | |
| 1336 // Since reading back the compositor is asynchronous, we need to do
the readback | |
| 1337 // before starting the GoogleHelp. | |
| 1338 String helpContextId = HelpAndFeedback.getHelpContextIdFromUrl( | |
| 1339 this, currentTab.getUrl(), getCurrentTabModel().isIncognito(
)); | |
| 1340 HelpAndFeedback.getInstance(this) | |
| 1341 .show(this, helpContextId, currentTab.getProfile(), currentT
ab.getUrl()); | |
| 1342 RecordUserAction.record("MobileMenuFeedback"); | |
| 1343 } else { | |
| 1344 return false; | |
| 1345 } | |
| 1346 return true; | |
| 1347 } | |
| 1348 | |
| 1349 private void markSessionResume() { | |
| 1350 // Start new session for UMA. | |
| 1351 if (mUmaSessionStats == null) { | |
| 1352 mUmaSessionStats = new UmaSessionStats(this); | |
| 1353 } | |
| 1354 | |
| 1355 mUmaSessionStats.updateMetricsServiceState(); | |
| 1356 // In DocumentMode we need the application-level TabModelSelector instea
d of per | |
| 1357 // activity which only manages a single tab. | |
| 1358 if (FeatureUtilities.isDocumentMode(this)) { | |
| 1359 mUmaSessionStats.startNewSession( | |
| 1360 ChromeApplication.getDocumentTabModelSelector()); | |
| 1361 } else { | |
| 1362 mUmaSessionStats.startNewSession(getTabModelSelector()); | |
| 1363 } | |
| 1364 } | |
| 1365 | |
| 1366 /** | |
| 1367 * Mark that the UMA session has ended. | |
| 1368 */ | |
| 1369 private void markSessionEnd() { | |
| 1370 if (mUmaSessionStats == null) { | |
| 1371 // If you hit this assert, please update crbug.com/172653 on how you
got there. | |
| 1372 assert false; | |
| 1373 return; | |
| 1374 } | |
| 1375 // Record session metrics. | |
| 1376 mUmaSessionStats.logMultiWindowStats(windowArea(), displayArea(), | |
| 1377 TabWindowManager.getInstance().getNumberOfAssignedTabModelSelect
ors()); | |
| 1378 mUmaSessionStats.logAndEndSession(); | |
| 1379 } | |
| 1380 | 1382 |
| 1381 private int windowArea() { | 1383 private int windowArea() { |
| 1382 Window window = getWindow(); | 1384 Window window = getWindow(); |
| 1383 if (window != null) { | 1385 if (window != null) { |
| 1384 View view = window.getDecorView(); | 1386 View view = window.getDecorView(); |
| 1385 return view.getWidth() * view.getHeight(); | 1387 return view.getWidth() * view.getHeight(); |
| 1386 } | 1388 } |
| 1387 return -1; | 1389 return -1; |
| 1388 } | 1390 } |
| 1389 | 1391 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1410 onDeferredStartup(); | 1412 onDeferredStartup(); |
| 1411 return false; // Remove this idle handler. | 1413 return false; // Remove this idle handler. |
| 1412 } | 1414 } |
| 1413 }); | 1415 }); |
| 1414 } | 1416 } |
| 1415 } | 1417 } |
| 1416 }, DEFERRED_STARTUP_DELAY_MS); | 1418 }, DEFERRED_STARTUP_DELAY_MS); |
| 1417 } | 1419 } |
| 1418 } | 1420 } |
| 1419 | 1421 |
| 1420 private void showUpdateInfoBarIfNecessary() { | 1422 // private void showUpdateInfoBarIfNecessary() { |
| 1421 getChromeApplication().getUpdateInfoBarHelper().showUpdateInfobarIfNeces
sary(this); | 1423 // getChromeApplication().getUpdateInfoBarHelper().showUpdateInfobarIfNec
essary(this); |
| 1422 } | 1424 // } |
| 1423 | 1425 |
| 1424 /** | 1426 /** |
| 1425 * Determines whether the ContentView is currently visible and not hidden by
an overlay | 1427 * Determines whether the ContentView is currently visible and not hidden by
an overlay |
| 1426 * @return true if the ContentView is fully hidden by another view (i.e. the
tab stack) | 1428 * @return true if the ContentView is fully hidden by another view (i.e. the
tab stack) |
| 1427 */ | 1429 */ |
| 1428 public boolean isOverlayVisible() { | 1430 public boolean isOverlayVisible() { |
| 1429 return false; | 1431 return false; |
| 1430 } | 1432 } |
| 1431 | 1433 |
| 1432 /** | 1434 /** |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1447 } | 1449 } |
| 1448 } | 1450 } |
| 1449 return null; | 1451 return null; |
| 1450 } | 1452 } |
| 1451 }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); | 1453 }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); |
| 1452 } | 1454 } |
| 1453 | 1455 |
| 1454 @Override | 1456 @Override |
| 1455 public void terminateIncognitoSession() {} | 1457 public void terminateIncognitoSession() {} |
| 1456 | 1458 |
| 1457 @Override | 1459 // @Override |
| 1458 public void onTabSelectionHinted(int tabId) { } | 1460 //// public void onTabSelectionHinted(int tabId) { } |
| 1459 | 1461 // |
| 1460 @Override | 1462 // @Override |
| 1461 public void onSceneChange(Layout layout) { } | 1463 // public void onSceneChange(Layout layout) { } |
| 1462 | 1464 |
| 1463 private void enableHardwareAcceleration() { | 1465 private void enableHardwareAcceleration() { |
| 1464 // HW acceleration is disabled in the manifest. Enable it only on high-e
nd devices. | 1466 // HW acceleration is disabled in the manifest. Enable it only on high-e
nd devices. |
| 1465 if (!SysUtils.isLowEndDevice()) { | 1467 if (!SysUtils.isLowEndDevice()) { |
| 1466 getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELE
RATED); | 1468 getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELE
RATED); |
| 1467 } | 1469 } |
| 1468 } | 1470 } |
| 1469 } | 1471 } |
| OLD | NEW |