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") { ...@@ -34,7 +34,7 @@ android_apk("system_webview_shell_apk") {
"apk/src/org/chromium/webview_shell/WebViewTracingActivity.java", "apk/src/org/chromium/webview_shell/WebViewTracingActivity.java",
] ]
android_manifest = "apk/AndroidManifest.xml" android_manifest = "apk/AndroidManifest.xml"
target_sdk_version = 28 target_sdk_version = 29
deps = [ deps = [
":system_webview_shell_apk_resources", ":system_webview_shell_apk_resources",
"//base:base_java", "//base:base_java",
......
...@@ -11,6 +11,14 @@ ...@@ -11,6 +11,14 @@
<item android:id="@+id/menu_enable_tracing" <item android:id="@+id/menu_enable_tracing"
android:checkable="true" android:checkable="true"
android:title="@string/menu_enable_tracing"/> 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" <item android:id="@+id/menu_print"
android:title="@string/menu_print"/> android:title="@string/menu_print"/>
<item android:id="@+id/start_animation_activity" <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 @@ ...@@ -17,6 +17,9 @@
<string name="menu_reset_webview">Destroy and create new WebView</string> <string name="menu_reset_webview">Destroy and create new WebView</string>
<string name="menu_clear_cache">Clear cache</string> <string name="menu_clear_cache">Clear cache</string>
<string name="menu_enable_tracing">Enable tracing</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_start_animation_activity">Animation test</string>
<string name="menu_print">Print</string> <string name="menu_print">Print</string>
<string name="menu_about">About WebView</string> <string name="menu_about">About WebView</string>
......
...@@ -514,6 +514,11 @@ public class WebViewBrowserActivity extends AppCompatActivity { ...@@ -514,6 +514,11 @@ public class WebViewBrowserActivity extends AppCompatActivity {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
menu.findItem(R.id.menu_enable_tracing).setEnabled(false); 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; return true;
} }
...@@ -522,6 +527,20 @@ public class WebViewBrowserActivity extends AppCompatActivity { ...@@ -522,6 +527,20 @@ public class WebViewBrowserActivity extends AppCompatActivity {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
menu.findItem(R.id.menu_enable_tracing).setChecked(mEnableTracing); 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; return true;
} }
...@@ -567,6 +586,18 @@ public class WebViewBrowserActivity extends AppCompatActivity { ...@@ -567,6 +586,18 @@ public class WebViewBrowserActivity extends AppCompatActivity {
} }
} }
return true; 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: case R.id.start_animation_activity:
startActivity(new Intent(this, WebViewAnimationTestActivity.class)); startActivity(new Intent(this, WebViewAnimationTestActivity.class));
return true; 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