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..cfc1cd7a30 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,10 +1,12 @@ 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; @@ -16,33 +18,152 @@ 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 static final String SOURCE_SUFFIX = "wikipedia.org
"; - @SuppressWarnings("NullableProblems") - @NonNull - private String mDescription; + @SuppressWarnings("NullableProblems") + @NonNull + private String mDescription; + private WebView webView; - @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(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; - } -} + @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; + } + + private void setupWebView() { + webView.setVerticalScrollBarEnabled(true); + webView.setWebViewClient(new WebViewClient()); + webView.getSettings().setJavaScriptEnabled(true); + 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 = isDarkMode ? "#E0E0E0" : "#333333"; + String backgroundColor = isDarkMode ? "#32363A" : "#FFFFFF"; + String headingColor = isDarkMode ? "#E0E0E0" : "#333333"; + String linkColor = isDarkMode ? "#81D4FA" : "#1E88E5"; + + // Comprehensive HTML and CSS + String htmlContent = "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + mDescription + + SOURCE_SUFFIX + + "" + + ""; + + 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