Commit 4b44832d authored by Tobias Sargeant's avatar Tobias Sargeant Committed by Commit Bot

[webview] Add dark mode support to webview shell

This adds force dark setting menu items, and modifies the shell theme
sufficiently to allow FORCE_DARK_AUTO to work. Apps must opt in to force
darkening, and must have a theme that is not already "dark", so the
AppCompat.DayNight theme must be configured as such.

Bug: 947324
Change-Id: Ib40af5e3817d91fd497925e58689d9c0fc4f55a6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1899613
Commit-Queue: Tobias Sargeant <tobiasjs@chromium.org>
Reviewed-by: default avatarTim Volodine <timvolodine@chromium.org>
Cr-Commit-Position: refs/heads/master@{#715731}
parent 11936b31
......@@ -34,7 +34,7 @@ android_apk("system_webview_shell_apk") {
"apk/src/org/chromium/webview_shell/WebViewTracingActivity.java",
]
android_manifest = "apk/AndroidManifest.xml"
target_sdk_version = 28
target_sdk_version = 29
deps = [
":system_webview_shell_apk_resources",
"//base:base_java",
......
......@@ -11,6 +11,14 @@
<item android:id="@+id/menu_enable_tracing"
android:checkable="true"
android:title="@string/menu_enable_tracing"/>
<group android:checkableBehavior="single">
<item android:id="@+id/menu_force_dark_off"
android:title="@string/menu_force_dark_off"/>
<item android:id="@+id/menu_force_dark_auto"
android:title="@string/menu_force_dark_auto"/>
<item android:id="@+id/menu_force_dark_on"
android:title="@string/menu_force_dark_on"/>
</group>
<item android:id="@+id/menu_print"
android:title="@string/menu_print"/>
<item android:id="@+id/start_animation_activity"
......
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2019 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. -->
<resources>
<style name="ShellTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:forceDarkAllowed">true</item>
<item name="android:isLightTheme">true</item>
</style>
</resources>
......@@ -17,6 +17,9 @@
<string name="menu_reset_webview">Destroy and create new WebView</string>
<string name="menu_clear_cache">Clear cache</string>
<string name="menu_enable_tracing">Enable tracing</string>
<string name="menu_force_dark_off">Force Dark Off</string>
<string name="menu_force_dark_auto">Force Dark Auto</string>
<string name="menu_force_dark_on">Force Dark On</string>
<string name="menu_start_animation_activity">Animation test</string>
<string name="menu_print">Print</string>
<string name="menu_about">About WebView</string>
......
......@@ -514,6 +514,11 @@ public class WebViewBrowserActivity extends AppCompatActivity {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
menu.findItem(R.id.menu_enable_tracing).setEnabled(false);
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
menu.findItem(R.id.menu_force_dark_off).setEnabled(false);
menu.findItem(R.id.menu_force_dark_auto).setEnabled(false);
menu.findItem(R.id.menu_force_dark_on).setEnabled(false);
}
return true;
}
......@@ -522,6 +527,20 @@ public class WebViewBrowserActivity extends AppCompatActivity {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
menu.findItem(R.id.menu_enable_tracing).setChecked(mEnableTracing);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
int fdState = mWebView.getSettings().getForceDark();
switch (fdState) {
case WebSettings.FORCE_DARK_OFF:
menu.findItem(R.id.menu_force_dark_off).setChecked(true);
break;
case WebSettings.FORCE_DARK_AUTO:
menu.findItem(R.id.menu_force_dark_auto).setChecked(true);
break;
case WebSettings.FORCE_DARK_ON:
menu.findItem(R.id.menu_force_dark_on).setChecked(true);
break;
}
}
return true;
}
......@@ -567,6 +586,18 @@ public class WebViewBrowserActivity extends AppCompatActivity {
}
}
return true;
case R.id.menu_force_dark_off:
mWebView.getSettings().setForceDark(WebSettings.FORCE_DARK_OFF);
item.setChecked(true);
return true;
case R.id.menu_force_dark_auto:
mWebView.getSettings().setForceDark(WebSettings.FORCE_DARK_AUTO);
item.setChecked(true);
return true;
case R.id.menu_force_dark_on:
mWebView.getSettings().setForceDark(WebSettings.FORCE_DARK_ON);
item.setChecked(true);
return true;
case R.id.start_animation_activity:
startActivity(new Intent(this, WebViewAnimationTestActivity.class));
return true;
......
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