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