Commit c720e39a authored by Peter Kotwicz's avatar Peter Kotwicz Committed by Commit Bot

[Android] Use black status bar on Android L if toolbar colour not launch intent 1/6

This CL sets the status bar color to black on Android L if
android.support.customtabs.extra.TOOLBAR_COLOR is not specified in the CCT
launch intent.

BUG=1015835
TEST=CustomTabStatusBarColorProviderTest.*

Change-Id: I566080e469cecc50cc9adce2121e6571ada63015
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1942875Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Reviewed-by: default avatarPeter Conn <peconn@chromium.org>
Reviewed-by: default avatarGlenn Hartmann <hartmanng@chromium.org>
Commit-Queue: Peter Kotwicz <pkotwicz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#720696}
parent 5456d533
...@@ -871,15 +871,10 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -871,15 +871,10 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
} }
@Override @Override
public int getBaseStatusBarColor() { public int getBaseStatusBarColor(boolean activityHasTab) {
return StatusBarColorController.UNDEFINED_STATUS_BAR_COLOR; return StatusBarColorController.UNDEFINED_STATUS_BAR_COLOR;
} }
@Override
public boolean isStatusBarDefaultThemeColor() {
return false;
}
private void createContextReporterIfNeeded() { private void createContextReporterIfNeeded() {
if (!mStarted) return; // Sync state reporting should work only in started state. if (!mStarted) return; // Sync state reporting should work only in started state.
if (mContextReporter != null || getActivityTab() == null) return; if (mContextReporter != null || getActivityTab() == null) return;
......
...@@ -139,6 +139,13 @@ public class BrowserServicesIntentDataProvider { ...@@ -139,6 +139,13 @@ public class BrowserServicesIntentDataProvider {
return Color.WHITE; return Color.WHITE;
} }
/**
* @return Whether the intent specifies a custom toolbar color.
*/
public boolean hasCustomToolbarColor() {
return false;
}
/** /**
* @return The navigation bar color specified in the intent, or null if not specified. * @return The navigation bar color specified in the intent, or null if not specified.
*/ */
......
...@@ -19,7 +19,6 @@ import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarC ...@@ -19,7 +19,6 @@ import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarC
import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent; import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent;
import org.chromium.chrome.browser.tab.TabState; import org.chromium.chrome.browser.tab.TabState;
import org.chromium.chrome.browser.ui.RootUiCoordinator; import org.chromium.chrome.browser.ui.RootUiCoordinator;
import org.chromium.chrome.browser.webapps.WebappExtras;
/** /**
* Contains functionality which is shared between {@link WebappActivity} and * Contains functionality which is shared between {@link WebappActivity} and
...@@ -94,27 +93,17 @@ public abstract class BaseCustomTabActivity<C extends ChromeActivityComponent> ...@@ -94,27 +93,17 @@ public abstract class BaseCustomTabActivity<C extends ChromeActivityComponent>
@Override @Override
public int getActivityThemeColor() { public int getActivityThemeColor() {
if (getIntentDataProvider().isOpenedByChrome()) { BrowserServicesIntentDataProvider intentDataProvider = getIntentDataProvider();
return TabState.UNSPECIFIED_THEME_COLOR; if (!intentDataProvider.isOpenedByChrome() && intentDataProvider.hasCustomToolbarColor()) {
return intentDataProvider.getToolbarColor();
} }
return TabState.UNSPECIFIED_THEME_COLOR;
WebappExtras webappExtras = getIntentDataProvider().getWebappExtras();
if (webappExtras != null && !webappExtras.hasCustomToolbarColor) {
return TabState.UNSPECIFIED_THEME_COLOR;
}
return getIntentDataProvider().getToolbarColor();
}
@Override
public int getBaseStatusBarColor() {
return mStatusBarColorProvider.getBaseStatusBarColor(super.getBaseStatusBarColor());
} }
@Override @Override
public boolean isStatusBarDefaultThemeColor() { public int getBaseStatusBarColor(boolean activityHasTab) {
return mStatusBarColorProvider.isStatusBarDefaultThemeColor( return mStatusBarColorProvider.getBaseStatusBarColor(
super.isStatusBarDefaultThemeColor()); activityHasTab, super.getBaseStatusBarColor(activityHasTab));
} }
@Override @Override
......
...@@ -226,6 +226,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid ...@@ -226,6 +226,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
@Nullable @Nullable
private String mUrlToLoad; private String mUrlToLoad;
private boolean mHasCustomToolbarColor;
private int mToolbarColor; private int mToolbarColor;
private int mBottomBarColor; private int mBottomBarColor;
private boolean mEnableUrlBarHiding; private boolean mEnableUrlBarHiding;
...@@ -527,7 +528,8 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid ...@@ -527,7 +528,8 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
mToolbarColor = defaultColor; mToolbarColor = defaultColor;
return; // Don't allow toolbar color customization for incognito tabs. return; // Don't allow toolbar color customization for incognito tabs.
} }
int color = schemeParams.toolbarColor != null ? schemeParams.toolbarColor : defaultColor; mHasCustomToolbarColor = (schemeParams.toolbarColor != null);
int color = mHasCustomToolbarColor ? schemeParams.toolbarColor : defaultColor;
mToolbarColor = ColorUtils.getOpaqueColor(color); mToolbarColor = ColorUtils.getOpaqueColor(color);
} }
...@@ -644,6 +646,11 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid ...@@ -644,6 +646,11 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
return mToolbarColor; return mToolbarColor;
} }
@Override
public boolean hasCustomToolbarColor() {
return mHasCustomToolbarColor;
}
@Override @Override
@Nullable @Nullable
public Integer getNavigationBarColor() { public Integer getNavigationBarColor() {
......
...@@ -4,13 +4,11 @@ ...@@ -4,13 +4,11 @@
package org.chromium.chrome.browser.customtabs; package org.chromium.chrome.browser.customtabs;
import static org.chromium.chrome.browser.ui.system.StatusBarColorController.DEFAULT_STATUS_BAR_COLOR;
import static org.chromium.chrome.browser.ui.system.StatusBarColorController.UNDEFINED_STATUS_BAR_COLOR; import static org.chromium.chrome.browser.ui.system.StatusBarColorController.UNDEFINED_STATUS_BAR_COLOR;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider; import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.dependency_injection.ActivityScope; import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabThemeColorHelper;
import org.chromium.chrome.browser.ui.system.StatusBarColorController; import org.chromium.chrome.browser.ui.system.StatusBarColorController;
import org.chromium.chrome.browser.webapps.WebDisplayMode; import org.chromium.chrome.browser.webapps.WebDisplayMode;
import org.chromium.chrome.browser.webapps.WebappExtras; import org.chromium.chrome.browser.webapps.WebappExtras;
...@@ -23,17 +21,14 @@ import javax.inject.Inject; ...@@ -23,17 +21,14 @@ import javax.inject.Inject;
@ActivityScope @ActivityScope
public class CustomTabStatusBarColorProvider { public class CustomTabStatusBarColorProvider {
private final BrowserServicesIntentDataProvider mIntentDataProvider; private final BrowserServicesIntentDataProvider mIntentDataProvider;
private final ActivityTabProvider mActivityTabProvider;
private final StatusBarColorController mStatusBarColorController; private final StatusBarColorController mStatusBarColorController;
private boolean mUseTabThemeColor; private boolean mUseTabThemeColor;
@Inject @Inject
public CustomTabStatusBarColorProvider(BrowserServicesIntentDataProvider intentDataProvider, public CustomTabStatusBarColorProvider(BrowserServicesIntentDataProvider intentDataProvider,
ActivityTabProvider activityTabProvider,
StatusBarColorController statusBarColorController) { StatusBarColorController statusBarColorController) {
mIntentDataProvider = intentDataProvider; mIntentDataProvider = intentDataProvider;
mActivityTabProvider = activityTabProvider;
mStatusBarColorController = statusBarColorController; mStatusBarColorController = statusBarColorController;
} }
...@@ -48,28 +43,17 @@ public class CustomTabStatusBarColorProvider { ...@@ -48,28 +43,17 @@ public class CustomTabStatusBarColorProvider {
mStatusBarColorController.updateStatusBarColor(); mStatusBarColorController.updateStatusBarColor();
} }
int getBaseStatusBarColor(int fallbackStatusBarColor) { int getBaseStatusBarColor(boolean activityHasTab, int fallbackStatusBarColor) {
if (mIntentDataProvider.isOpenedByChrome()) return fallbackStatusBarColor; if (mIntentDataProvider.isOpenedByChrome()) return fallbackStatusBarColor;
Tab tab = mActivityTabProvider.get();
if (tab == null) {
return mIntentDataProvider.getToolbarColor();
}
if (shouldUseDefaultThemeColorForFullscreen()) { if (shouldUseDefaultThemeColorForFullscreen()) {
return TabThemeColorHelper.getDefaultColor(tab); return DEFAULT_STATUS_BAR_COLOR;
} }
return mUseTabThemeColor ? UNDEFINED_STATUS_BAR_COLOR if (activityHasTab && mUseTabThemeColor) return UNDEFINED_STATUS_BAR_COLOR;
: mIntentDataProvider.getToolbarColor();
}
boolean isStatusBarDefaultThemeColor(boolean isFallbackColorDefault) {
if (mIntentDataProvider.isOpenedByChrome()) {
return isFallbackColorDefault;
}
return shouldUseDefaultThemeColorForFullscreen(); return mIntentDataProvider.hasCustomToolbarColor() ? mIntentDataProvider.getToolbarColor()
: DEFAULT_STATUS_BAR_COLOR;
} }
private boolean shouldUseDefaultThemeColorForFullscreen() { private boolean shouldUseDefaultThemeColorForFullscreen() {
......
...@@ -94,7 +94,7 @@ public class CustomTabTaskDescriptionHelper implements NativeInitObserver, Destr ...@@ -94,7 +94,7 @@ public class CustomTabTaskDescriptionHelper implements NativeInitObserver, Destr
mDefaultThemeColor = ApiCompatibilityUtils.getColor( mDefaultThemeColor = ApiCompatibilityUtils.getColor(
mActivity.getResources(), R.color.default_primary_color); mActivity.getResources(), R.color.default_primary_color);
if (webappExtras != null) { if (webappExtras != null) {
if (webappExtras.hasCustomToolbarColor) { if (mIntentDataProvider.hasCustomToolbarColor()) {
mDefaultThemeColor = mIntentDataProvider.getToolbarColor(); mDefaultThemeColor = mIntentDataProvider.getToolbarColor();
} }
mForceIcon = webappExtras.icon.bitmap(); mForceIcon = webappExtras.icon.bitmap();
......
...@@ -43,6 +43,7 @@ import org.chromium.ui.UiUtils; ...@@ -43,6 +43,7 @@ import org.chromium.ui.UiUtils;
public class StatusBarColorController public class StatusBarColorController
implements Destroyable, TopToolbarCoordinator.UrlExpansionObserver { implements Destroyable, TopToolbarCoordinator.UrlExpansionObserver {
public static @ColorInt int UNDEFINED_STATUS_BAR_COLOR = Color.TRANSPARENT; public static @ColorInt int UNDEFINED_STATUS_BAR_COLOR = Color.TRANSPARENT;
public static @ColorInt int DEFAULT_STATUS_BAR_COLOR = Color.argb(0x01, 0, 0, 0);
/** /**
* Provides the base status bar color. * Provides the base status bar color.
...@@ -50,22 +51,17 @@ public class StatusBarColorController ...@@ -50,22 +51,17 @@ public class StatusBarColorController
public interface StatusBarColorProvider { public interface StatusBarColorProvider {
/** /**
* @return The base status bar color to override default colors used in the * @return The base status bar color to override default colors used in the
* {@link StatusBarColorController}. If this returns a color other than * {@link StatusBarColorController}. If this returns
* {@link #UNDEFINED_STATUS_BAR_COLOR}, the {@link StatusBarColorController} will * {@link #DEFAULT_STATUS_BAR_COLOR}, {@link StatusBarColorController} will use the
* always use the color provided by this method to adjust the status bar color. This * default status bar color.
* color may be used as-is or adjusted due to a scrim overlay or Android version. * If this returns a color other than {@link #UNDEFINED_STATUS_BAR_COLOR} and
* {@link #DEFAULT_STATUS_BAR_COLOR}, the {@link StatusBarColorController} will
* always use the color provided by this method to adjust the status bar color.
* This color may be used as-is or adjusted due to a scrim overlay or Android
* version.
*/ */
@ColorInt @ColorInt
int getBaseStatusBarColor(); int getBaseStatusBarColor(boolean activityHasTab);
/**
* @return Whether the color provided at {@link #getBaseStatusBarColor()} is considered a
* default theme color. If false, we use a darkened status bar color based on the
* base status bar color on pre-M instead of the default status bar color. This
* value will be ignored if {@link #getBaseStatusBarColor()} returns
* {@link #UNDEFINED_STATUS_BAR_COLOR}.
*/
boolean isStatusBarDefaultThemeColor();
} }
private final Window mWindow; private final Window mWindow;
...@@ -166,7 +162,7 @@ public class StatusBarColorController ...@@ -166,7 +162,7 @@ public class StatusBarColorController
// status bar color is updated. However, this update is triggered after the // status bar color is updated. However, this update is triggered after the
// animation, so we update here for the duration of the new Tab animation. // animation, so we update here for the duration of the new Tab animation.
// See https://crbug.com/917689. // See https://crbug.com/917689.
updateStatusBarColor(false); updateStatusBarColor();
} }
}; };
...@@ -175,7 +171,7 @@ public class StatusBarColorController ...@@ -175,7 +171,7 @@ public class StatusBarColorController
@Override @Override
public void onOverviewModeStartedShowing(boolean showToolbar) { public void onOverviewModeStartedShowing(boolean showToolbar) {
mIsInOverviewMode = true; mIsInOverviewMode = true;
updateStatusBarColor(false); updateStatusBarColor();
} }
@Override @Override
...@@ -227,25 +223,24 @@ public class StatusBarColorController ...@@ -227,25 +223,24 @@ public class StatusBarColorController
return mStatusBarScrimDelegate; return mStatusBarScrimDelegate;
} }
/**
* @param isDefaultThemeColor Whether default theme color is used for the status bar color.
*/
private void updateStatusBarColor(boolean isDefaultThemeColor) {
setStatusBarColor(calculateBaseStatusBarColor(), isDefaultThemeColor);
}
/**
* @param tab The tab that is currently showing, used to determine whether {@code color} is the
* default theme color.
*/
public void updateStatusBarColor() { public void updateStatusBarColor() {
setStatusBarColor(calculateBaseStatusBarColor(), isDefaultThemeColor()); @ColorInt
int statusBarColor = calculateBaseStatusBarColor();
boolean isDefaultThemeColor = (statusBarColor == DEFAULT_STATUS_BAR_COLOR);
if (isDefaultThemeColor) {
statusBarColor =
mIsIncognito ? mIncognitoDefaultThemeColor : mStandardDefaultThemeColor;
}
setStatusBarColor(statusBarColor, isDefaultThemeColor);
} }
private @ColorInt int calculateBaseStatusBarColor() { private @ColorInt int calculateBaseStatusBarColor() {
// Return overridden status bar color from StatusBarColorProvider if specified. // Return overridden status bar color from StatusBarColorProvider if specified.
final int baseStatusBarColor = mStatusBarColorProvider.getBaseStatusBarColor(); final int baseStatusBarColor = mStatusBarColorProvider.getBaseStatusBarColor(
if (baseStatusBarColor != UNDEFINED_STATUS_BAR_COLOR) return baseStatusBarColor; mCurrentTab != null /* activityHasTab */);
if (baseStatusBarColor != UNDEFINED_STATUS_BAR_COLOR) {
return baseStatusBarColor;
}
// We don't adjust status bar color for tablet when status bar color is not overridden by // We don't adjust status bar color for tablet when status bar color is not overridden by
// StatusBarColorProvider. // StatusBarColorProvider.
...@@ -276,18 +271,11 @@ public class StatusBarColorController ...@@ -276,18 +271,11 @@ public class StatusBarColorController
} }
// Return status bar color to match the toolbar. // Return status bar color to match the toolbar.
if (mCurrentTab != null) return TabThemeColorHelper.getColor(mCurrentTab); if (mCurrentTab != null && !TabThemeColorHelper.isDefaultColorUsed(mCurrentTab)) {
return TabThemeColorHelper.getColor(mCurrentTab);
// This could happen when tab is not initialized (e.g. on startup).
return mIsIncognito ? mIncognitoDefaultThemeColor : mStandardDefaultThemeColor;
}
private boolean isDefaultThemeColor() {
if (mStatusBarColorProvider.getBaseStatusBarColor() != UNDEFINED_STATUS_BAR_COLOR) {
return mStatusBarColorProvider.isStatusBarDefaultThemeColor();
} }
return mCurrentTab == null || TabThemeColorHelper.isDefaultColorUsed(mCurrentTab); return DEFAULT_STATUS_BAR_COLOR;
} }
/** /**
......
...@@ -344,17 +344,18 @@ public class WebApkIntentDataProviderFactory { ...@@ -344,17 +344,18 @@ public class WebApkIntentDataProviderFactory {
WebappExtras webappExtras = new WebappExtras( WebappExtras webappExtras = new WebappExtras(
WebappRegistry.webApkIdForPackage(webApkPackageName), url, scope, primaryIcon, name, WebappRegistry.webApkIdForPackage(webApkPackageName), url, scope, primaryIcon, name,
shortName, displayMode, orientation, source, shortName, displayMode, orientation, source,
WebappIntentUtils.isLongColorValid(themeColor),
WebappIntentUtils.colorFromLongColor(backgroundColor), defaultBackgroundColor, WebappIntentUtils.colorFromLongColor(backgroundColor), defaultBackgroundColor,
false /* isIconGenerated */, isPrimaryIconMaskable, forceNavigation); false /* isIconGenerated */, isPrimaryIconMaskable, forceNavigation);
WebApkExtras webApkExtras = new WebApkExtras(webApkPackageName, badgeIcon, splashIcon, WebApkExtras webApkExtras = new WebApkExtras(webApkPackageName, badgeIcon, splashIcon,
isSplashIconMaskable, shellApkVersion, manifestUrl, manifestStartUrl, distributor, isSplashIconMaskable, shellApkVersion, manifestUrl, manifestStartUrl, distributor,
iconUrlToMurmur2HashMap, shareTarget, isSplashProvidedByWebApk, shareData, iconUrlToMurmur2HashMap, shareTarget, isSplashProvidedByWebApk, shareData,
webApkVersionCode); webApkVersionCode);
int toolbarColor = webappExtras.hasCustomToolbarColor boolean hasCustomToolbarColor = WebappIntentUtils.isLongColorValid(themeColor);
int toolbarColor = hasCustomToolbarColor
? (int) themeColor ? (int) themeColor
: WebappIntentDataProvider.getDefaultToolbarColor(); : WebappIntentDataProvider.getDefaultToolbarColor();
return new WebappIntentDataProvider(toolbarColor, webappExtras, webApkExtras); return new WebappIntentDataProvider(
toolbarColor, hasCustomToolbarColor, webappExtras, webApkExtras);
} }
private static int computeSource(Intent intent, ShareData shareData) { private static int computeSource(Intent intent, ShareData shareData) {
......
...@@ -650,15 +650,20 @@ public class WebappActivity extends BaseCustomTabActivity<WebappActivityComponen ...@@ -650,15 +650,20 @@ public class WebappActivity extends BaseCustomTabActivity<WebappActivityComponen
} }
private void updateToolbarColor() { private void updateToolbarColor() {
if (getToolbarManager() != null && !isStatusBarDefaultThemeColor()) { if (getToolbarManager() == null) return;
int toolbarColor = getBaseStatusBarColor();
if (toolbarColor == StatusBarColorController.UNDEFINED_STATUS_BAR_COLOR) { Tab tab = getActivityTab();
toolbarColor = (getActivityTab() == null) int toolbarColor = getBaseStatusBarColor((tab != null) /* activityHasTab */);
? mIntentDataProvider.getToolbarColor()
: TabThemeColorHelper.getColor(getActivityTab()); if (toolbarColor == StatusBarColorController.DEFAULT_STATUS_BAR_COLOR) return;
}
getToolbarManager().onThemeColorChanged(toolbarColor, false); // If the color is undefined, we use the color from the tab (if available).
if (toolbarColor == StatusBarColorController.UNDEFINED_STATUS_BAR_COLOR) {
toolbarColor = (tab != null) ? TabThemeColorHelper.getColor(tab)
: mIntentDataProvider.getToolbarColor();
} }
getToolbarManager().onThemeColorChanged(toolbarColor, false);
} }
@Override @Override
......
...@@ -54,11 +54,6 @@ public class WebappExtras { ...@@ -54,11 +54,6 @@ public class WebappExtras {
*/ */
public final @ShortcutSource int source; public final @ShortcutSource int source;
/**
* Whether the webapp provides a custom toolbar color.
*/
public final boolean hasCustomToolbarColor;
/** /**
* Background color for webapp's splash screen. * Background color for webapp's splash screen.
*/ */
...@@ -87,16 +82,15 @@ public class WebappExtras { ...@@ -87,16 +82,15 @@ public class WebappExtras {
public static WebappExtras createEmpty() { public static WebappExtras createEmpty() {
return new WebappExtras(null /* id */, null /* url */, null /* scopeUrl */, return new WebappExtras(null /* id */, null /* url */, null /* scopeUrl */,
new WebappIcon(), null /* name */, null /* shortName */, WebDisplayMode.UNDEFINED, new WebappIcon(), null /* name */, null /* shortName */, WebDisplayMode.UNDEFINED,
ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN, null /* backgroundColor */,
false /* hasCustomToolbarColor */, null /* backgroundColor */,
Color.WHITE /* defaultBackgroundColor */, false /* isIconGenerated */, Color.WHITE /* defaultBackgroundColor */, false /* isIconGenerated */,
false /* isIconAdaptive */, false /* shouldForceNavigation */); false /* isIconAdaptive */, false /* shouldForceNavigation */);
} }
public WebappExtras(String id, String url, String scopeUrl, WebappIcon icon, String name, public WebappExtras(String id, String url, String scopeUrl, WebappIcon icon, String name,
String shortName, @WebDisplayMode int displayMode, int orientation, int source, String shortName, @WebDisplayMode int displayMode, int orientation, int source,
boolean hasCustomToolbarColor, Integer backgroundColor, int defaultBackgroundColor, Integer backgroundColor, int defaultBackgroundColor, boolean isIconGenerated,
boolean isIconGenerated, boolean isIconAdaptive, boolean shouldForceNavigation) { boolean isIconAdaptive, boolean shouldForceNavigation) {
this.id = id; this.id = id;
this.url = url; this.url = url;
this.scopeUrl = scopeUrl; this.scopeUrl = scopeUrl;
...@@ -106,7 +100,6 @@ public class WebappExtras { ...@@ -106,7 +100,6 @@ public class WebappExtras {
this.displayMode = displayMode; this.displayMode = displayMode;
this.orientation = orientation; this.orientation = orientation;
this.source = source; this.source = source;
this.hasCustomToolbarColor = hasCustomToolbarColor;
this.backgroundColor = backgroundColor; this.backgroundColor = backgroundColor;
this.defaultBackgroundColor = defaultBackgroundColor; this.defaultBackgroundColor = defaultBackgroundColor;
this.isIconGenerated = isIconGenerated; this.isIconGenerated = isIconGenerated;
......
...@@ -20,7 +20,8 @@ public class WebappInfo { ...@@ -20,7 +20,8 @@ public class WebappInfo {
protected static BrowserServicesIntentDataProvider createEmptyIntentDataProvider() { protected static BrowserServicesIntentDataProvider createEmptyIntentDataProvider() {
return new WebappIntentDataProvider(WebappIntentDataProvider.getDefaultToolbarColor(), return new WebappIntentDataProvider(WebappIntentDataProvider.getDefaultToolbarColor(),
WebappExtras.createEmpty(), WebApkExtras.createEmpty()); false /* hasCustomToolbarColor */, WebappExtras.createEmpty(),
WebApkExtras.createEmpty());
} }
public static WebappInfo createEmpty() { public static WebappInfo createEmpty() {
...@@ -106,7 +107,7 @@ public class WebappInfo { ...@@ -106,7 +107,7 @@ public class WebappInfo {
* Returns whether the toolbar color specified in the Intent is valid. * Returns whether the toolbar color specified in the Intent is valid.
*/ */
public boolean hasValidToolbarColor() { public boolean hasValidToolbarColor() {
return getWebappExtras().hasCustomToolbarColor; return mProvider.hasCustomToolbarColor();
} }
/** /**
......
...@@ -16,6 +16,7 @@ import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProv ...@@ -16,6 +16,7 @@ import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProv
*/ */
public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider { public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider {
private int mToolbarColor; private int mToolbarColor;
private boolean mHasCustomToolbarColor;
private WebappExtras mWebappExtras; private WebappExtras mWebappExtras;
private WebApkExtras mWebApkExtras; private WebApkExtras mWebApkExtras;
...@@ -26,9 +27,10 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider ...@@ -26,9 +27,10 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider
return Color.WHITE; return Color.WHITE;
} }
WebappIntentDataProvider( WebappIntentDataProvider(int toolbarColor, boolean hasCustomToolbarColor,
int toolbarColor, WebappExtras webappExtras, WebApkExtras webApkExtras) { WebappExtras webappExtras, WebApkExtras webApkExtras) {
mToolbarColor = toolbarColor; mToolbarColor = toolbarColor;
mHasCustomToolbarColor = hasCustomToolbarColor;
mWebappExtras = webappExtras; mWebappExtras = webappExtras;
mWebApkExtras = webApkExtras; mWebApkExtras = webApkExtras;
} }
...@@ -38,6 +40,11 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider ...@@ -38,6 +40,11 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider
return mToolbarColor; return mToolbarColor;
} }
@Override
public boolean hasCustomToolbarColor() {
return mHasCustomToolbarColor;
}
@Override @Override
public int getTitleVisibilityState() { public int getTitleVisibilityState() {
return CustomTabsIntent.SHOW_PAGE_TITLE; return CustomTabsIntent.SHOW_PAGE_TITLE;
......
...@@ -97,8 +97,9 @@ public class WebappIntentDataProviderFactory { ...@@ -97,8 +97,9 @@ public class WebappIntentDataProviderFactory {
SplashLayout.getDefaultBackgroundColor(ContextUtils.getApplicationContext()); SplashLayout.getDefaultBackgroundColor(ContextUtils.getApplicationContext());
WebappExtras webappExtras = new WebappExtras(id, url, scope, new WebappIcon(icon), name, WebappExtras webappExtras = new WebappExtras(id, url, scope, new WebappIcon(icon), name,
shortName, displayMode, orientation, source, hasValidToolbarColor, backgroundColor, shortName, displayMode, orientation, source, backgroundColor,
defaultBackgroundColor, isIconGenerated, isIconAdaptive, forceNavigation); defaultBackgroundColor, isIconGenerated, isIconAdaptive, forceNavigation);
return new WebappIntentDataProvider(toolbarColor, webappExtras, null /* webApkExtras */); return new WebappIntentDataProvider(
toolbarColor, hasValidToolbarColor, webappExtras, null /* webApkExtras */);
} }
} }
...@@ -8,6 +8,7 @@ import static org.mockito.Mockito.times; ...@@ -8,6 +8,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.chromium.chrome.browser.ui.system.StatusBarColorController.DEFAULT_STATUS_BAR_COLOR;
import static org.chromium.chrome.browser.ui.system.StatusBarColorController.UNDEFINED_STATUS_BAR_COLOR; import static org.chromium.chrome.browser.ui.system.StatusBarColorController.UNDEFINED_STATUS_BAR_COLOR;
import org.junit.Assert; import org.junit.Assert;
...@@ -19,8 +20,6 @@ import org.mockito.MockitoAnnotations; ...@@ -19,8 +20,6 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.ui.system.StatusBarColorController; import org.chromium.chrome.browser.ui.system.StatusBarColorController;
/** /**
...@@ -34,10 +33,7 @@ public class CustomTabStatusBarColorProviderTest { ...@@ -34,10 +33,7 @@ public class CustomTabStatusBarColorProviderTest {
private static final int USER_PROVIDED_COLOR = 0x99aabbcc; private static final int USER_PROVIDED_COLOR = 0x99aabbcc;
@Mock public CustomTabIntentDataProvider mCustomTabIntentDataProvider; @Mock public CustomTabIntentDataProvider mCustomTabIntentDataProvider;
@Mock
public ActivityTabProvider mActivityTabProvider;
@Mock public StatusBarColorController mStatusBarColorController; @Mock public StatusBarColorController mStatusBarColorController;
@Mock public Tab mTab;
private CustomTabStatusBarColorProvider mColorProvider; private CustomTabStatusBarColorProvider mColorProvider;
@Before @Before
...@@ -45,57 +41,67 @@ public class CustomTabStatusBarColorProviderTest { ...@@ -45,57 +41,67 @@ public class CustomTabStatusBarColorProviderTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mColorProvider = new CustomTabStatusBarColorProvider( mColorProvider = new CustomTabStatusBarColorProvider(
mCustomTabIntentDataProvider, mActivityTabProvider, mStatusBarColorController); mCustomTabIntentDataProvider, mStatusBarColorController);
when(mCustomTabIntentDataProvider.getToolbarColor()).thenReturn(USER_PROVIDED_COLOR); when(mCustomTabIntentDataProvider.getToolbarColor()).thenReturn(USER_PROVIDED_COLOR);
when(mCustomTabIntentDataProvider.hasCustomToolbarColor()).thenReturn(true);
when(mActivityTabProvider.get()).thenReturn(mTab);
} }
@Test @Test
public void fallsBackWhenOpenedByChrome() { public void fallsBackWhenOpenedByChrome() {
when(mCustomTabIntentDataProvider.isOpenedByChrome()).thenReturn(true); when(mCustomTabIntentDataProvider.isOpenedByChrome()).thenReturn(true);
Assert.assertEquals(FALLBACK_COLOR, getStatusBarColor()); Assert.assertEquals(FALLBACK_COLOR, getStatusBarColor(true /* activityHasTab */));
Assert.assertTrue(mColorProvider.isStatusBarDefaultThemeColor(true));
Assert.assertFalse(mColorProvider.isStatusBarDefaultThemeColor(false));
} }
@Test @Test
public void userProvidedColor() { public void useTabThemeColor_enable() {
Assert.assertEquals(USER_PROVIDED_COLOR, getStatusBarColor()); mColorProvider.setUseTabThemeColor(true);
Assert.assertFalse(mColorProvider.isStatusBarDefaultThemeColor(true)); Assert.assertEquals(
UNDEFINED_STATUS_BAR_COLOR, getStatusBarColor(true /* activityHasTab */));
verify(mStatusBarColorController).updateStatusBarColor();
} }
@Test @Test
public void useTabThemeColor_enable() { public void useTabThemeColor_enable_nullTab() {
mColorProvider.setUseTabThemeColor(true); mColorProvider.setUseTabThemeColor(true);
Assert.assertEquals(UNDEFINED_STATUS_BAR_COLOR, getStatusBarColor()); Assert.assertEquals(USER_PROVIDED_COLOR, getStatusBarColor(false /* activityHasTab */));
verify(mStatusBarColorController).updateStatusBarColor();
when(mCustomTabIntentDataProvider.hasCustomToolbarColor()).thenReturn(false);
Assert.assertEquals(
DEFAULT_STATUS_BAR_COLOR, getStatusBarColor(false /* activityHasTab */));
} }
@Test @Test
public void useTabThemeColor_disable() { public void useTabThemeColor_disable() {
mColorProvider.setUseTabThemeColor(true); mColorProvider.setUseTabThemeColor(true);
Assert.assertEquals(UNDEFINED_STATUS_BAR_COLOR, getStatusBarColor()); Assert.assertEquals(
UNDEFINED_STATUS_BAR_COLOR, getStatusBarColor(true /* activityHasTab */));
verify(mStatusBarColorController).updateStatusBarColor(); verify(mStatusBarColorController).updateStatusBarColor();
mColorProvider.setUseTabThemeColor(false); mColorProvider.setUseTabThemeColor(false);
Assert.assertEquals(USER_PROVIDED_COLOR, getStatusBarColor()); Assert.assertEquals(USER_PROVIDED_COLOR, getStatusBarColor(true /* activityHasTab */));
verify(mStatusBarColorController, times(2)).updateStatusBarColor(); verify(mStatusBarColorController, times(2)).updateStatusBarColor();
} }
@Test
public void useTabThemeColor_disable_noCustomColor() {
when(mCustomTabIntentDataProvider.hasCustomToolbarColor()).thenReturn(false);
mColorProvider.setUseTabThemeColor(false);
Assert.assertEquals(DEFAULT_STATUS_BAR_COLOR, getStatusBarColor(true /* activityHasTab */));
}
@Test @Test
public void useTabThemeColor_idempotent() { public void useTabThemeColor_idempotent() {
mColorProvider.setUseTabThemeColor(true); mColorProvider.setUseTabThemeColor(true);
mColorProvider.setUseTabThemeColor(true); mColorProvider.setUseTabThemeColor(true);
Assert.assertEquals(UNDEFINED_STATUS_BAR_COLOR, getStatusBarColor()); Assert.assertEquals(
UNDEFINED_STATUS_BAR_COLOR, getStatusBarColor(true /* activityHasTab */));
verify(mStatusBarColorController).updateStatusBarColor(); verify(mStatusBarColorController).updateStatusBarColor();
} }
private int getStatusBarColor() { private int getStatusBarColor(boolean activityHasTab) {
return mColorProvider.getBaseStatusBarColor(FALLBACK_COLOR); return mColorProvider.getBaseStatusBarColor(activityHasTab, FALLBACK_COLOR);
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment