From cdfdcbe3f603c57c176bb41b9c7d2b7c6384e4b8 Mon Sep 17 00:00:00 2001 From: Gaurav Khuperkar Date: Mon, 31 Oct 2022 16:23:05 +0530 Subject: [PATCH] Issue 49: Add Dark mode support for OSS Licenses Webview. --- app/build.gradle | 1 + .../czlucius/scan/ui/PreferencesFragment.java | 30 +++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9a79183..56d9a05 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -82,6 +82,7 @@ dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.annotation:annotation:1.5.0" implementation 'androidx.preference:preference:1.2.0' + implementation 'androidx.webkit:webkit:1.5.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' diff --git a/app/src/main/java/com/czlucius/scan/ui/PreferencesFragment.java b/app/src/main/java/com/czlucius/scan/ui/PreferencesFragment.java index 0081ab5..aa5f6f3 100644 --- a/app/src/main/java/com/czlucius/scan/ui/PreferencesFragment.java +++ b/app/src/main/java/com/czlucius/scan/ui/PreferencesFragment.java @@ -18,11 +18,15 @@ package com.czlucius.scan.ui; +import static androidx.webkit.WebViewFeature.ALGORITHMIC_DARKENING; +import static androidx.webkit.WebViewFeature.isFeatureSupported; + import android.content.Intent; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; +import android.content.res.Configuration; import android.net.Uri; +import android.os.Build; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -36,13 +40,16 @@ import androidx.appcompat.app.AlertDialog; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import androidx.webkit.WebSettingsCompat; import com.czlucius.scan.R; import com.czlucius.scan.Utils; -import com.czlucius.scan.callbacks.ManualResetPreferenceClickListener; import com.google.android.material.dialog.MaterialAlertDialogBuilder; public class PreferencesFragment extends PreferenceFragmentCompat { + private static final String TAG = PreferencesFragment.class.getSimpleName(); + + boolean nightModeActive = false; @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { @@ -55,6 +62,16 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable @org.jetbra // Instantiate ads if on play flavour. View v = super.onCreateView(inflater, container, savedInstanceState); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + Configuration configuration = v.getResources().getConfiguration(); + if (configuration != null) { + nightModeActive = v.getResources().getConfiguration().isNightModeActive(); + Log.d(TAG, "Is night mode active: " + nightModeActive); + } else { + Log.e(TAG, "Configuration is null"); + } + } + Preference oss_link = findPreference("open_source"); if (oss_link != null) { oss_link.setOnPreferenceClickListener(preference -> { @@ -147,6 +164,13 @@ private boolean shouldOverrideUrlLoading(Uri url) { }); webView.zoomBy(0.5F); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && isFeatureSupported(ALGORITHMIC_DARKENING)) { + WebSettingsCompat.setAlgorithmicDarkeningAllowed(webView.getSettings(), nightModeActive); + } else if (nightModeActive) { + //TODO: Remove this else block once app sets minSdkVersion to 29 + WebSettingsCompat.setForceDark(webView.getSettings(), WebSettingsCompat.FORCE_DARK_ON); + } + MaterialAlertDialogBuilder ossDialog = new MaterialAlertDialogBuilder(requireContext()); ossDialog.setView(webView); AlertDialog finalDialog = ossDialog.create();