Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
index e448686d8b37e06203aa67f015aa7e1c959613a1..c7da06127ab0a08e91d0f7285f4bd31cc05f3e61 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
@@ -99,6 +99,7 @@ import org.chromium.chrome.browser.snackbar.LoFiBarPopupController; |
import org.chromium.chrome.browser.snackbar.SnackbarManager; |
import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarManageable; |
import org.chromium.chrome.browser.sync.ProfileSyncService; |
+import org.chromium.chrome.browser.tab.ChromeTab; |
import org.chromium.chrome.browser.tab.EmptyTabObserver; |
import org.chromium.chrome.browser.tab.Tab; |
import org.chromium.chrome.browser.tab.TabObserver; |
@@ -213,6 +214,8 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
private OnPreDrawListener mFirstDrawListener; |
+ protected int mThemeColor; |
+ |
private final Locale mCurrentLocale = Locale.getDefault(); |
private AssistStatusHandler mAssistStatusHandler; |
@@ -510,6 +513,27 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
public void onCrash(Tab tab, boolean sadTabShown) { |
postDeferredStartupIfNeeded(); |
} |
+ |
+ @Override |
+ public void onDidChangeThemeColor(int color) { |
+ checkThemeColorUpdate(); |
+ } |
+ |
+ @Override |
+ public void onWebContentsSwapped(Tab tab, boolean didStartLoad, boolean didFinishLoad) { |
+ if (!didStartLoad) return; |
+ checkThemeColorUpdate(); |
+ } |
+ |
+ @Override |
+ public void onSSLStateUpdated(Tab tab) { |
+ checkThemeColorUpdate(); |
+ } |
+ |
+ @Override |
+ public void onDidAttachInterstitialPage(Tab tab) { |
+ checkThemeColorUpdate(); |
+ } |
}; |
if (mAssistStatusHandler != null) { |
@@ -517,6 +541,14 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
} |
} |
+ private void checkThemeColorUpdate() { |
+ if (getActivityTab() == null) return; |
+ int themeColor = ChromeTab.fromTab(getActivityTab()).getThemeColor(); |
+ if (mThemeColor == themeColor) return; |
+ mThemeColor = themeColor; |
+ onThemeColorUpdate(); |
+ } |
+ |
@Override |
public void onStartWithNative() { |
super.onStartWithNative(); |
@@ -1462,4 +1494,15 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
@Override |
public void onSceneChange(Layout layout) { } |
+ |
+ /** |
+ * Gets called when the theme color corresponding to current tab changes. |
+ */ |
+ protected void onThemeColorUpdate() { |
+ if (mToolbarManager == null) return; |
+ mToolbarManager.updatePrimaryColor(mThemeColor); |
+ ControlContainer controlContainer = |
+ (ControlContainer) findViewById(R.id.control_container); |
+ controlContainer.getToolbarResourceAdapter().invalidate(null); |
+ } |
} |