Index: chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java |
deleted file mode 100644 |
index 529bf77796427573994a808c4bfbe2dda875ae69..0000000000000000000000000000000000000000 |
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java |
+++ /dev/null |
@@ -1,371 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-package org.chromium.chrome.browser.customtabs; |
- |
-import android.content.Intent; |
-import android.content.res.Configuration; |
-import android.net.Uri; |
-import android.text.TextUtils; |
-import android.view.MenuItem; |
-import android.view.View; |
-import android.view.View.OnClickListener; |
-import android.view.ViewGroup; |
- |
-import org.chromium.base.ApiCompatibilityUtils; |
-import org.chromium.base.VisibleForTesting; |
-import org.chromium.base.metrics.RecordHistogram; |
-import org.chromium.base.metrics.RecordUserAction; |
-import org.chromium.chrome.R; |
-import org.chromium.chrome.browser.ChromeActivity; |
-import org.chromium.chrome.browser.IntentHandler; |
-import org.chromium.chrome.browser.IntentHandler.ExternalAppId; |
-import org.chromium.chrome.browser.Tab; |
-import org.chromium.chrome.browser.appmenu.AppMenuHandler; |
-import org.chromium.chrome.browser.appmenu.AppMenuObserver; |
-import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegate; |
-import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.ContextualSearchPanel.StateChangeReason; |
-import org.chromium.chrome.browser.compositor.layouts.LayoutManagerDocument; |
-import org.chromium.chrome.browser.document.BrandColorUtils; |
-import org.chromium.chrome.browser.tabmodel.SingleTabModelSelector; |
-import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; |
-import org.chromium.chrome.browser.toolbar.ToolbarControlContainer; |
-import org.chromium.chrome.browser.toolbar.ToolbarManager; |
-import org.chromium.chrome.browser.widget.findinpage.FindToolbarManager; |
-import org.chromium.content_public.browser.LoadUrlParams; |
- |
-/** |
- * The activity for custom tabs. It will be launched on top of a client's task. |
- */ |
-public class CustomTabActivity extends ChromeActivity { |
- private static CustomTabContentHandler sActiveContentHandler; |
- |
- private CustomTab mTab; |
- private ToolbarManager mToolbarManager; |
- private CustomTabAppMenuPropertiesDelegate mAppMenuPropertiesDelegate; |
- private AppMenuHandler mAppMenuHandler; |
- private FindToolbarManager mFindToolbarManager; |
- private CustomTabIntentDataProvider mIntentDataProvider; |
- private long mSessionId; |
- private CustomTabContentHandler mCustomTabContentHandler; |
- |
- // This is to give the right package name while using the client's resources during an |
- // overridePendingTransition call. |
- // TODO(ianwen, yusufo): Figure out a solution to extract external resources without having to |
- // change the package name. |
- private boolean mShouldOverridePackage; |
- |
- private boolean mRecordedStartupUma; |
- |
- /** |
- * Sets the currently active {@link CustomTabContentHandler} in focus. |
- * @param contentHandler {@link CustomTabContentHandler} to set. |
- */ |
- public static void setActiveContentHandler(CustomTabContentHandler contentHandler) { |
- sActiveContentHandler = contentHandler; |
- } |
- |
- /** |
- * Used to check whether an incoming intent can be handled by the |
- * current {@link CustomTabContentHandler}. |
- * @return Whether the active {@link CustomTabContentHandler} has handled the intent. |
- */ |
- public static boolean handleInActiveContentIfNeeded(Intent intent) { |
- if (sActiveContentHandler == null) return false; |
- |
- long intentSessionId = intent.getLongExtra( |
- CustomTabIntentDataProvider.EXTRA_CUSTOM_TABS_SESSION_ID, |
- CustomTabIntentDataProvider.INVALID_SESSION_ID); |
- if (intentSessionId == CustomTabIntentDataProvider.INVALID_SESSION_ID) return false; |
- |
- if (sActiveContentHandler.getSessionId() != intentSessionId) return false; |
- String url = IntentHandler.getUrlFromIntent(intent); |
- if (TextUtils.isEmpty(url)) return false; |
- sActiveContentHandler.loadUrlAndTrackFromTimestamp(new LoadUrlParams(url), |
- IntentHandler.getTimestampFromIntent(intent)); |
- return true; |
- } |
- |
- @Override |
- public void onStart() { |
- super.onStart(); |
- CustomTabsConnection.getInstance(getApplication()) |
- .keepAliveForSessionId(mIntentDataProvider.getSessionId(), |
- mIntentDataProvider.getKeepAliveServiceIntent()); |
- } |
- |
- @Override |
- public void onStop() { |
- super.onStop(); |
- CustomTabsConnection.getInstance(getApplication()) |
- .dontKeepAliveForSessionId(mIntentDataProvider.getSessionId()); |
- } |
- |
- @Override |
- public void preInflationStartup() { |
- super.preInflationStartup(); |
- setTabModelSelector(new SingleTabModelSelector(this, false, true) { |
- @Override |
- public Tab openNewTab(LoadUrlParams loadUrlParams, TabLaunchType type, Tab parent, |
- boolean incognito) { |
- // A custom tab either loads a url or starts an external activity to handle the url. |
- // It never opens a new tab/chrome activity. |
- mTab.loadUrl(loadUrlParams); |
- return mTab; |
- } |
- }); |
- mIntentDataProvider = new CustomTabIntentDataProvider(getIntent(), this); |
- } |
- |
- @Override |
- public void postInflationStartup() { |
- super.postInflationStartup(); |
- ToolbarControlContainer controlContainer = |
- ((ToolbarControlContainer) findViewById(R.id.control_container)); |
- mAppMenuPropertiesDelegate = new CustomTabAppMenuPropertiesDelegate(this, |
- mIntentDataProvider.getMenuTitles()); |
- mAppMenuHandler = |
- new AppMenuHandler(this, mAppMenuPropertiesDelegate, R.menu.custom_tabs_menu); |
- mToolbarManager = new ToolbarManager(this, controlContainer, |
- mAppMenuHandler, mAppMenuPropertiesDelegate, |
- getCompositorViewHolder().getInvalidator()); |
- mToolbarManager.updatePrimaryColor(mIntentDataProvider.getToolbarColor()); |
- setStatusBarColor(mIntentDataProvider.getToolbarColor()); |
- if (mIntentDataProvider.shouldShowActionButton()) { |
- mToolbarManager.addCustomActionButton(mIntentDataProvider.getActionButtonIcon(), |
- new OnClickListener() { |
- @Override |
- public void onClick(View v) { |
- mIntentDataProvider.sendButtonPendingIntentWithUrl( |
- getApplicationContext(), mTab.getUrl()); |
- RecordUserAction.record("CustomTabsCustomActionButtonClick"); |
- } |
- }); |
- } |
- mAppMenuHandler.addObserver(new AppMenuObserver() { |
- @Override |
- public void onMenuVisibilityChanged(boolean isVisible) { |
- if (!isVisible) { |
- mAppMenuPropertiesDelegate.onMenuDismissed(); |
- } |
- } |
- }); |
- } |
- |
- @Override |
- public void finishNativeInitialization() { |
- String url = IntentHandler.getUrlFromIntent(getIntent()); |
- String referrer = IntentHandler.getReferrerUrl(getIntent(), this); |
- mSessionId = mIntentDataProvider.getSessionId(); |
- mTab = new CustomTab(this, getWindowAndroid(), mSessionId, url, referrer, |
- Tab.INVALID_TAB_ID); |
- getTabModelSelector().setTab(mTab); |
- |
- ToolbarControlContainer controlContainer = (ToolbarControlContainer) findViewById( |
- R.id.control_container); |
- LayoutManagerDocument layoutDriver = new LayoutManagerDocument(getCompositorViewHolder()); |
- initializeCompositorContent(layoutDriver, findViewById(R.id.url_bar), |
- (ViewGroup) findViewById(android.R.id.content), controlContainer); |
- mFindToolbarManager = new FindToolbarManager(this, getTabModelSelector(), |
- mToolbarManager.getContextualMenuBar().getCustomSelectionActionModeCallback()); |
- mToolbarManager.initializeWithNative(getTabModelSelector(), getFullscreenManager(), |
- mFindToolbarManager, null, layoutDriver, null, null, null, |
- new OnClickListener() { |
- @Override |
- public void onClick(View v) { |
- CustomTabActivity.this.finish(); |
- } |
- }); |
- |
- mTab.setFullscreenManager(getFullscreenManager()); |
- loadUrlInCurrentTab(new LoadUrlParams(url), |
- IntentHandler.getTimestampFromIntent(getIntent())); |
- mCustomTabContentHandler = new CustomTabContentHandler() { |
- @Override |
- public void loadUrlAndTrackFromTimestamp(LoadUrlParams params, long timestamp) { |
- loadUrlInCurrentTab(params, timestamp); |
- } |
- |
- @Override |
- public long getSessionId() { |
- return mSessionId; |
- } |
- }; |
- super.finishNativeInitialization(); |
- } |
- |
- @Override |
- public void onStartWithNative() { |
- super.onStartWithNative(); |
- setActiveContentHandler(mCustomTabContentHandler); |
- |
- if (!mRecordedStartupUma) { |
- mRecordedStartupUma = true; |
- ExternalAppId externalId = |
- IntentHandler.determineExternalIntentSource(getPackageName(), getIntent()); |
- RecordHistogram.recordEnumeratedHistogram("CustomTabs.ClientAppId", |
- externalId.ordinal(), ExternalAppId.INDEX_BOUNDARY.ordinal()); |
- } |
- } |
- |
- @Override |
- public void onStopWithNative() { |
- if (mAppMenuHandler != null) mAppMenuHandler.hideAppMenu(); |
- super.onStopWithNative(); |
- setActiveContentHandler(null); |
- } |
- |
- @Override |
- protected void onDeferredStartup() { |
- super.onDeferredStartup(); |
- mToolbarManager.onDeferredStartup(getOnCreateTimestampMs(), getClass().getSimpleName()); |
- } |
- |
- @Override |
- public boolean hasDoneFirstDraw() { |
- return mToolbarManager.hasDoneFirstDraw(); |
- } |
- |
- @Override |
- public void onConfigurationChanged(Configuration newConfig) { |
- if (mAppMenuHandler != null) mAppMenuHandler.hideAppMenu(); |
- super.onConfigurationChanged(newConfig); |
- } |
- |
- /** |
- * Loads the current tab with the given load params. Unlike |
- * {@link CustomTab#loadUrlAndTrackFromTimestamp(LoadUrlParams, long)}, this method takes client |
- * referrer and extra headers into account. |
- */ |
- private void loadUrlInCurrentTab(LoadUrlParams params, long timeStamp) { |
- Intent intent = getIntent(); |
- IntentHandler.addReferrerAndHeaders(params, intent, this); |
- mTab.loadUrlAndTrackFromTimestamp(params, timeStamp); |
- } |
- |
- /** |
- * Calculate the proper color for status bar and update it. Only works on L and future versions. |
- */ |
- private void setStatusBarColor(int color) { |
- // If the client did not specify the toolbar color, we do not change the status bar color. |
- if (color == getResources().getColor(R.color.default_primary_color)) return; |
- |
- ApiCompatibilityUtils.setStatusBarColor(getWindow(), |
- BrandColorUtils.computeStatusBarColor(color)); |
- } |
- |
- @Override |
- public SingleTabModelSelector getTabModelSelector() { |
- return (SingleTabModelSelector) super.getTabModelSelector(); |
- } |
- |
- @Override |
- protected int getControlContainerLayoutId() { |
- return R.layout.custom_tabs_control_container; |
- } |
- |
- @Override |
- protected int getControlContainerHeightResource() { |
- return R.dimen.custom_tabs_control_container_height; |
- } |
- |
- @Override |
- public String getPackageName() { |
- if (mShouldOverridePackage) return mIntentDataProvider.getClientPackageName(); |
- return super.getPackageName(); |
- } |
- |
- @Override |
- public void finish() { |
- super.finish(); |
- if (mIntentDataProvider.shouldAnimateOnFinish()) { |
- mShouldOverridePackage = true; |
- overridePendingTransition(mIntentDataProvider.getAnimationEnterRes(), |
- mIntentDataProvider.getAnimationExitRes()); |
- mShouldOverridePackage = false; |
- } |
- } |
- |
- @Override |
- protected boolean handleBackPressed() { |
- if (mTab == null) return false; |
- if (mTab.canGoBack()) { |
- mTab.goBack(); |
- } else { |
- finish(); |
- } |
- return true; |
- } |
- |
- @Override |
- public boolean shouldShowAppMenu() { |
- return mTab != null && mToolbarManager.isInitialized(); |
- } |
- |
- @Override |
- public boolean onOptionsItemSelected(MenuItem item) { |
- int menuIndex = mAppMenuPropertiesDelegate.getIndexOfMenuItem(item); |
- if (menuIndex >= 0) { |
- mIntentDataProvider.clickMenuItemWithUrl(getApplicationContext(), menuIndex, |
- getTabModelSelector().getCurrentTab().getUrl()); |
- RecordUserAction.record("CustomTabsMenuCustomMenuItem"); |
- return true; |
- } |
- return super.onOptionsItemSelected(item); |
- } |
- |
- @Override |
- public boolean onMenuOrKeyboardAction(int id, boolean fromMenu) { |
- if (id == R.id.show_menu) { |
- if (shouldShowAppMenu()) { |
- mAppMenuHandler.showAppMenu(mToolbarManager.getMenuAnchor(), true, false); |
- return true; |
- } |
- } else if (id == R.id.open_in_chrome_id) { |
- String url = getTabModelSelector().getCurrentTab().getUrl(); |
- Intent chromeIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); |
- chromeIntent.setPackage(getApplicationContext().getPackageName()); |
- chromeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
- startActivity(chromeIntent); |
- RecordUserAction.record("CustomTabsMenuOpenInChrome"); |
- return true; |
- } else if (id == R.id.find_in_page_id) { |
- mFindToolbarManager.showToolbar(); |
- if (getContextualSearchManager() != null) { |
- getContextualSearchManager().hideContextualSearch(StateChangeReason.UNKNOWN); |
- } |
- if (fromMenu) { |
- RecordUserAction.record("MobileMenuFindInPage"); |
- } else { |
- RecordUserAction.record("MobileShortcutFindInPage"); |
- } |
- return true; |
- } |
- return super.onMenuOrKeyboardAction(id, fromMenu); |
- } |
- |
- /** |
- * @return The {@link AppMenuPropertiesDelegate} associated with this activity. For test |
- * purposes only. |
- */ |
- @VisibleForTesting |
- CustomTabAppMenuPropertiesDelegate getAppMenuPropertiesDelegate() { |
- return mAppMenuPropertiesDelegate; |
- } |
- |
- @Override |
- @VisibleForTesting |
- public AppMenuHandler getAppMenuHandler() { |
- return mAppMenuHandler; |
- } |
- |
- /** |
- * @return The {@link CustomTabIntentDataProvider} for this {@link CustomTabActivity}. For test |
- * purposes only. |
- */ |
- @VisibleForTesting |
- CustomTabIntentDataProvider getIntentDataProvider() { |
- return mIntentDataProvider; |
- } |
-} |