diff --git a/android/app/src/main/java/app/organicmaps/widget/placepage/PlaceDescriptionFragment.java b/android/app/src/main/java/app/organicmaps/widget/placepage/PlaceDescriptionFragment.java index 2b2ee32b97..b38306acf1 100644 --- a/android/app/src/main/java/app/organicmaps/widget/placepage/PlaceDescriptionFragment.java +++ b/android/app/src/main/java/app/organicmaps/widget/placepage/PlaceDescriptionFragment.java @@ -1,13 +1,16 @@ package app.organicmaps.widget.placepage; +import android.content.res.Configuration; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; +import android.webkit.WebViewClient; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.core.view.ViewCompat; import app.organicmaps.R; import app.organicmaps.base.BaseMwmFragment; @@ -16,33 +19,161 @@ import app.organicmaps.util.WindowInsetUtils; import java.util.Objects; -public class PlaceDescriptionFragment extends BaseMwmFragment -{ - public static final String EXTRA_DESCRIPTION = "description"; - private static final String SOURCE_SUFFIX = "

wikipedia.org

"; +public class PlaceDescriptionFragment extends BaseMwmFragment { + public static final String EXTRA_DESCRIPTION = "description"; + private String getSourceSuffix() { + return "

" + getString(R.string.article_from_wikipedia) + "

"; + } + + @SuppressWarnings("NullableProblems") + @NonNull + private String mDescription; + private WebView webView; - @SuppressWarnings("NullableProblems") - @NonNull - private String mDescription; + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mDescription = Objects.requireNonNull(requireArguments() + .getString(EXTRA_DESCRIPTION)); + } - @Override - public void onCreate(@Nullable Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - mDescription = Objects.requireNonNull(requireArguments() - .getString(EXTRA_DESCRIPTION)); - } + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.fragment_place_description, container, false); + webView = root.findViewById(R.id.webview); + + setupWebView(); + loadDescriptionWithAdaptiveStyling(); + + ViewCompat.setOnApplyWindowInsetsListener(root, WindowInsetUtils.PaddingInsetsListener.excludeTop()); + + return root; + } - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) - { - View root = inflater.inflate(R.layout.fragment_place_description, container, false); - WebView webView = root.findViewById(R.id.webview); - webView.loadData(mDescription + SOURCE_SUFFIX, Utils.TEXT_HTML, Utils.UTF_8); - webView.setVerticalScrollBarEnabled(true); - ViewCompat.setOnApplyWindowInsetsListener(root, WindowInsetUtils.PaddingInsetsListener.excludeTop()); - return root; - } -} + private void setupWebView() { + webView.setVerticalScrollBarEnabled(true); + webView.setWebViewClient(new WebViewClient()); + webView.getSettings().setDefaultTextEncodingName("utf-8"); + webView.setBackgroundColor(getResources().getColor(android.R.color.transparent)); + } + + private void loadDescriptionWithAdaptiveStyling() { + + // Determine current theme (light/dark) + int nightModeFlags = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; + boolean isDarkMode = nightModeFlags == Configuration.UI_MODE_NIGHT_YES; + + // Adaptive color scheme + String textColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(requireContext(), + isDarkMode ? R.color.text_light : R.color.text_dark))); + + String backgroundColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(requireContext(), + isDarkMode ? R.color.bg_window_night : R.color.bg_window))); + + String headingColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(requireContext(), + isDarkMode ? R.color.text_light : R.color.text_dark))); + + String linkColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(requireContext(), + isDarkMode ? R.color.base_accent_night : R.color.base_accent))); + + // Comprehensive HTML and CSS + String htmlContent = "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + mDescription + + getSourceSuffix() + + "" + + ""; + + webView.loadDataWithBaseURL(null, htmlContent, "text/html", "UTF-8", null); + } + + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + loadDescriptionWithAdaptiveStyling(); + } +} \ No newline at end of file diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 60ce53bd90..018dfbcf88 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -428,6 +428,8 @@ Clear Search History Wikipedia + + Article from wikipedia.org Wikimedia Commons Your Location @@ -2289,4 +2291,5 @@ Dojo Sports hall +