Commit 65274319 authored by Anna Malova's avatar Anna Malova Committed by Commit Bot

[WV Support Library]: Add boundary interface and support lib glue

for force dark behaviour (force dark vs media query).

Rename corresponding methods.

Bug: 1001516
Change-Id: I7af3bb835ddd2f9761ffe350e626ef10d7321087
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1796673
Commit-Queue: Anna Malova <amalova@chromium.org>
Reviewed-by: default avatarTobias Sargeant <tobiasjs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#697640}
parent 0219c732
......@@ -515,14 +515,14 @@ void AwSettings::PopulateWebPreferencesLocked(JNIEnv* env,
is_dark_mode ? blink::PreferredColorScheme::kDark
: blink::PreferredColorScheme::kNoPreference;
if (is_dark_mode) {
switch (Java_AwSettings_getDarkModePreferencesLocked(env, obj)) {
case DarkModePreferences::FORCE_DARK_ONLY: {
switch (Java_AwSettings_getForceDarkBehaviorLocked(env, obj)) {
case ForceDarkBehavior::FORCE_DARK_ONLY: {
web_prefs->preferred_color_scheme =
blink::PreferredColorScheme::kNoPreference;
web_prefs->force_dark_mode_enabled = true;
break;
}
case DarkModePreferences::MEDIA_QUERY_ONLY: {
case ForceDarkBehavior::MEDIA_QUERY_ONLY: {
web_prefs->preferred_color_scheme = blink::PreferredColorScheme::kDark;
web_prefs->force_dark_mode_enabled = false;
break;
......@@ -533,7 +533,7 @@ void AwSettings::PopulateWebPreferencesLocked(JNIEnv* env,
// when enabling force dark, we also set the preferred color scheme to
// dark so that dark themed content will be preferred over force
// darkening.
case DarkModePreferences::PREFER_MEDIA_QUERY_OVER_FORCE_DARK: {
case ForceDarkBehavior::PREFER_MEDIA_QUERY_OVER_FORCE_DARK: {
web_prefs->preferred_color_scheme = blink::PreferredColorScheme::kDark;
web_prefs->force_dark_mode_enabled = true;
break;
......
......@@ -29,7 +29,7 @@ class AwSettings : public content::WebContentsObserver {
};
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.android_webview.settings
enum DarkModePreferences {
enum ForceDarkBehavior {
FORCE_DARK_ONLY = 0,
MEDIA_QUERY_ONLY = 1,
PREFER_MEDIA_QUERY_OVER_FORCE_DARK = 2,
......
......@@ -17,7 +17,7 @@ import android.webkit.WebSettings;
import androidx.annotation.IntDef;
import org.chromium.android_webview.settings.DarkModePreferences;
import org.chromium.android_webview.settings.ForceDarkBehavior;
import org.chromium.android_webview.settings.ForceDarkMode;
import org.chromium.base.ContextUtils;
import org.chromium.base.ThreadUtils;
......@@ -64,14 +64,14 @@ public class AwSettings {
@ForceDarkMode
private int mForceDarkMode = ForceDarkMode.FORCE_DARK_AUTO;
public static final int FORCE_DARK_ONLY = DarkModePreferences.FORCE_DARK_ONLY;
public static final int MEDIA_QUERY_ONLY = DarkModePreferences.MEDIA_QUERY_ONLY;
public static final int FORCE_DARK_ONLY = ForceDarkBehavior.FORCE_DARK_ONLY;
public static final int MEDIA_QUERY_ONLY = ForceDarkBehavior.MEDIA_QUERY_ONLY;
// This option requires RuntimeEnabledFeatures::MetaColorSchemeEnabled()
public static final int PREFER_MEDIA_QUERY_OVER_FORCE_DARK =
DarkModePreferences.PREFER_MEDIA_QUERY_OVER_FORCE_DARK;
ForceDarkBehavior.PREFER_MEDIA_QUERY_OVER_FORCE_DARK;
@DarkModePreferences
private int mDarkModePreferences = DarkModePreferences.PREFER_MEDIA_QUERY_OVER_FORCE_DARK;
@ForceDarkBehavior
private int mForceDarkBehavior = ForceDarkBehavior.PREFER_MEDIA_QUERY_OVER_FORCE_DARK;
// This class must be created on the UI thread. Afterwards, it can be
// used from any thread. Internally, the class uses a message queue
......@@ -1723,24 +1723,24 @@ public class AwSettings {
}
}
@DarkModePreferences
public int getDarkModePreferences() {
@ForceDarkBehavior
public int getForceDarkBehavior() {
synchronized (mAwSettingsLock) {
return getDarkModePreferencesLocked();
return getForceDarkBehaviorLocked();
}
}
@CalledByNative
@DarkModePreferences
public int getDarkModePreferencesLocked() {
@ForceDarkBehavior
public int getForceDarkBehaviorLocked() {
assert Thread.holdsLock(mAwSettingsLock);
return mDarkModePreferences;
return mForceDarkBehavior;
}
public void setDarkModePreferences(@DarkModePreferences int darkModePreferences) {
public void setForceDarkBehavior(@ForceDarkBehavior int forceDarkBehavior) {
synchronized (mAwSettingsLock) {
if (mDarkModePreferences != darkModePreferences) {
mDarkModePreferences = darkModePreferences;
if (mForceDarkBehavior != forceDarkBehavior) {
mForceDarkBehavior = forceDarkBehavior;
mEventHandler.updateWebkitPreferencesLocked();
}
}
......
......@@ -8,6 +8,10 @@ package org.chromium.support_lib_boundary;
// android.webkit parameter or android.webkit return value. But for forwards compatibility all
// app-facing classes should have a boundary-interface that the WebView glue layer can build
// against.
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Boundary interface for WebSettingsCompat.
*/
......@@ -26,4 +30,15 @@ public interface WebSettingsBoundaryInterface {
void setForceDark(int forceDarkMode);
int getForceDark();
@Retention(RetentionPolicy.SOURCE)
@interface ForceDarkBehavior {
int FORCE_DARK_ONLY = 0;
int MEDIA_QUERY_ONLY = 1;
int PREFER_MEDIA_QUERY_OVER_FORCE_DARK = 2;
}
void setForceDarkBehavior(@ForceDarkBehavior int forceDarkBehavior);
@ForceDarkBehavior
int getForceDarkBehavior();
}
......@@ -163,4 +163,10 @@ public class Features {
// WebSettingsCompat.setForceDark
// WebSettingsCompat.getForceDark
public static final String FORCE_DARK = "FORCE_DARK";
// Preferences between force dark and media query for dark theme support:
//
// WebSettingsCompat.setForceDarkBehavior
// WebSettingsCompat.getForceDarkBehavior
public static final String FORCE_DARK_BEHAVIOR = "FORCE_DARK_BEHAVIOR";
}
......@@ -66,4 +66,32 @@ class SupportLibWebSettingsAdapter implements WebSettingsBoundaryInterface {
public int getForceDark() {
return mAwSettings.getForceDarkMode();
}
@Override
public void setForceDarkBehavior(int forceDarkBehavior) {
switch (forceDarkBehavior) {
case ForceDarkBehavior.FORCE_DARK_ONLY:
mAwSettings.setForceDarkBehavior(AwSettings.FORCE_DARK_ONLY);
break;
case ForceDarkBehavior.MEDIA_QUERY_ONLY:
mAwSettings.setForceDarkBehavior(AwSettings.MEDIA_QUERY_ONLY);
break;
case ForceDarkBehavior.PREFER_MEDIA_QUERY_OVER_FORCE_DARK:
mAwSettings.setForceDarkBehavior(AwSettings.PREFER_MEDIA_QUERY_OVER_FORCE_DARK);
break;
}
}
@Override
public int getForceDarkBehavior() {
switch (mAwSettings.getForceDarkBehavior()) {
case AwSettings.FORCE_DARK_ONLY:
return ForceDarkBehavior.FORCE_DARK_ONLY;
case AwSettings.MEDIA_QUERY_ONLY:
return ForceDarkBehavior.MEDIA_QUERY_ONLY;
case AwSettings.PREFER_MEDIA_QUERY_OVER_FORCE_DARK:
return ForceDarkBehavior.PREFER_MEDIA_QUERY_OVER_FORCE_DARK;
}
return ForceDarkBehavior.PREFER_MEDIA_QUERY_OVER_FORCE_DARK;
}
}
......@@ -72,6 +72,7 @@ class SupportLibWebViewChromiumFactory implements WebViewProviderFactoryBoundary
Features.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE,
Features.MULTI_PROCESS_QUERY,
Features.FORCE_DARK,
Features.FORCE_DARK_BEHAVIOR + Features.DEV_SUFFIX,
};
// clang-format on
......
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