Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3398)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java

Issue 2484053002: [Download Home] Custom tab backgrounds (Closed)
Patch Set: Rebasing Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
index 43a9e885b0a836965d6e7174688ad10c3c1a0a4f..d1973082ced7139defc1b71e88881aa9417f11d1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
@@ -8,8 +8,12 @@ import android.app.PendingIntent;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Handler;
import android.os.IBinder;
import android.os.StrictMode;
import android.support.customtabs.CustomTabsCallback;
@@ -50,6 +54,7 @@ import org.chromium.chrome.browser.metrics.PageLoadMetrics;
import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
import org.chromium.chrome.browser.pageinfo.WebsiteSettingsPopup;
import org.chromium.chrome.browser.rappor.RapporServiceBridge;
+import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabDelegateFactory;
import org.chromium.chrome.browser.tab.TabIdManager;
@@ -235,6 +240,16 @@ public class CustomTabActivity extends ChromeActivity {
}
@Override
+ protected Drawable getBackgroundDrawable() {
+ int initialBackgroundColor = mIntentDataProvider.getInitialBackgroundColor();
+ if (mIntentDataProvider.isTrustedIntent() && initialBackgroundColor != Color.TRANSPARENT) {
+ return new ColorDrawable(initialBackgroundColor);
+ } else {
+ return super.getBackgroundDrawable();
+ }
+ }
+
+ @Override
public boolean isCustomTab() {
return true;
}
@@ -257,8 +272,11 @@ public class CustomTabActivity extends ChromeActivity {
@Override
public void preInflationStartup() {
- super.preInflationStartup();
+ // Parse the data from the Intent before calling super to allow the Intent to customize
+ // the Activity parameters, including the background of the page.
mIntentDataProvider = new CustomTabIntentDataProvider(getIntent(), this);
+
+ super.preInflationStartup();
mSession = mIntentDataProvider.getSession();
supportRequestWindowFeature(Window.FEATURE_ACTION_MODE_OVERLAY);
mHasPrerender = !TextUtils.isEmpty(
@@ -502,6 +520,8 @@ public class CustomTabActivity extends ChromeActivity {
mMetricsObserver = new PageLoadMetricsObserver(
CustomTabsConnection.getInstance(getApplication()), mSession, tab);
tab.addObserver(mTabObserver);
+
+ prepareTabBackground(tab);
}
@Override
@@ -896,4 +916,41 @@ public class CustomTabActivity extends ChromeActivity {
(ToolbarControlContainer) findViewById(R.id.control_container),
getTabModelSelector(), getControlContainerHeightResource(), true);
}
+
+ /** Sets the initial background color for the Tab, shown before the page content is ready. */
+ private void prepareTabBackground(final Tab tab) {
+ if (!IntentHandler.isIntentChromeOrFirstParty(getIntent(), this)) return;
+
+ int backgroundColor = mIntentDataProvider.getInitialBackgroundColor();
+ if (backgroundColor == Color.TRANSPARENT) return;
+
+ // Set the background color.
+ tab.getView().setBackgroundColor(backgroundColor);
+
+ // Unset the background when the page has rendered.
+ EmptyTabObserver mediaObserver = new EmptyTabObserver() {
+ @Override
+ public void didFirstVisuallyNonEmptyPaint(final Tab tab) {
+ tab.removeObserver(this);
+
+ // Blink has rendered the page by this point, but Android asynchronously shows it.
+ // Introduce a small delay, then actually show the page.
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ if (!tab.isInitialized() || isActivityDestroyed()) return;
+ tab.getView().setBackgroundResource(0);
+ }
+ }, 50);
+ }
+ };
+
+ tab.addObserver(mediaObserver);
+ }
+
+ @Override
+ protected void initializeToolbar() {
+ super.initializeToolbar();
+ if (mIntentDataProvider.isMediaViewer()) getToolbarManager().disableShadow();
+ }
}

Powered by Google App Engine
This is Rietveld 408576698