]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/fragments/AboutTabFragment.java
Clear the logcat on exit. https://redmine.stoutner.com/issues/382
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / fragments / AboutTabFragment.java
index 8496d00fdf1b94f995878a65ea35d1b1f7fc1ec5..c35b90b64b6231543d6aabc52afc116e6830054a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2016-2020 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
  *
@@ -21,13 +21,12 @@ package com.stoutner.privacybrowser.fragments;
 
 import android.annotation.SuppressLint;
 import android.content.Context;
-import android.content.SharedPreferences;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.Signature;
+import android.content.res.Configuration;
 import android.os.Build;
 import android.os.Bundle;
-import android.preference.PreferenceManager;
 import android.text.SpannableStringBuilder;
 import android.text.Spanned;
 import android.text.style.ForegroundColorSpan;
@@ -39,6 +38,7 @@ import android.widget.TextView;
 
 import androidx.annotation.NonNull;
 import androidx.fragment.app.Fragment;
+import androidx.webkit.WebViewCompat;
 
 import com.stoutner.privacybrowser.BuildConfig;
 import com.stoutner.privacybrowser.R;
@@ -54,9 +54,10 @@ import java.text.DateFormat;
 import java.util.Date;
 
 public class AboutTabFragment extends Fragment {
-    // Declare the class variables.
+    // Define the class variables.
     private int tabNumber;
     private String[] blocklistVersions;
+    private View tabLayout;
 
     public static AboutTabFragment createTab(int tabNumber, String[] blocklistVersions) {
         // Create a bundle.
@@ -94,18 +95,12 @@ public class AboutTabFragment extends Fragment {
 
     @Override
     public View onCreateView(@NonNull LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) {
-        // Create a tab layout view.
-        View tabLayout;
-
         // Get a handle for the context and assert that it isn't null.
         Context context = getContext();
         assert context != null;
 
-        // Get a handle for the shared preferences.
-        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
-
-        // Get the theme preference.
-        boolean darkTheme = sharedPreferences.getBoolean("dark_theme", false);
+        // Get the current theme status.
+        int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
 
         // Load the tabs.  Tab numbers start at 0.
         if (tabNumber == 0) {  // Load the about tab.
@@ -126,6 +121,7 @@ public class AboutTabFragment extends Fragment {
             TextView webViewProviderTextView = tabLayout.findViewById(R.id.webview_provider);
             TextView webViewVersionTextView = tabLayout.findViewById(R.id.webview_version);
             TextView orbotTextView = tabLayout.findViewById(R.id.orbot);
+            TextView i2pTextView = tabLayout.findViewById(R.id.i2p);
             TextView openKeychainTextView = tabLayout.findViewById(R.id.open_keychain);
             TextView easyListTextView = tabLayout.findViewById(R.id.easylist);
             TextView easyPrivacyTextView = tabLayout.findViewById(R.id.easyprivacy);
@@ -192,6 +188,15 @@ public class AboutTabFragment extends Fragment {
                 orbot = "";
             }
 
+            // Get the I2P version name if I2P is installed.
+            String i2p;
+            try {
+                // Store the version name.
+                i2p = context.getPackageManager().getPackageInfo("net.i2p.android.router", 0).versionName;
+            } catch (PackageManager.NameNotFoundException exception) {  // I2P is not installed.
+                i2p = "";
+            }
+
             // Get the OpenKeychain version name if it is installed.
             String openKeychain;
             try {
@@ -217,12 +222,12 @@ public class AboutTabFragment extends Fragment {
             SpannableStringBuilder ultraListStringBuilder = new SpannableStringBuilder(ultraListLabel + blocklistVersions[4]);
             SpannableStringBuilder ultraPrivacyStringBuilder = new SpannableStringBuilder(ultraPrivacyLabel + blocklistVersions[5]);
 
-            // Create the `blueColorSpan` variable.
+            // Define the blue color span variable.
             ForegroundColorSpan blueColorSpan;
 
-            // Set `blueColorSpan` according to the theme.  We have to use the deprecated `getColor()` until API >= 23.
-            if (darkTheme) {
-                blueColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.blue_400));
+            // Set the blue color span according to the theme.  The deprecated `getResources()` must be used until the minimum API >= 23.
+            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+                blueColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.violet_500));
             } else {
                 blueColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.blue_700));
             }
@@ -282,13 +287,13 @@ public class AboutTabFragment extends Fragment {
                 securityPatchTextView.setVisibility(View.GONE);
             }
 
-            // Only populate the WebView provider if the SDK >= 26.
-            if (Build.VERSION.SDK_INT >= 26) {
+            // Only populate the WebView provider if the SDK >= 21.
+            if (Build.VERSION.SDK_INT >= 21) {
                 // Create the WebView provider label.
                 String webViewProviderLabel = getString(R.string.webview_provider) + "  ";
 
                 // Get the current WebView package info.
-                PackageInfo webViewPackageInfo = WebView.getCurrentWebViewPackage();
+                PackageInfo webViewPackageInfo = WebViewCompat.getCurrentWebViewPackage(context);
 
                 // Remove the warning below that the package info might be null.
                 assert webViewPackageInfo != null;
@@ -304,7 +309,7 @@ public class AboutTabFragment extends Fragment {
 
                 // Display the WebView provider.
                 webViewProviderTextView.setText(webViewProviderStringBuilder);
-            } else {  // The API < 26.
+            } else {  // The API < 21.
                 // Hide the WebView provider text view.
                 webViewProviderTextView.setVisibility(View.GONE);
             }
@@ -319,6 +324,16 @@ public class AboutTabFragment extends Fragment {
                 orbotTextView.setVisibility(View.GONE);
             }
 
+            // Only populate the I2P text view if it is installed.
+            if (!i2p.isEmpty()) {
+                String i2pLabel = getString(R.string.i2p)  + "  ";
+                SpannableStringBuilder i2pStringBuilder = new SpannableStringBuilder(i2pLabel + i2p);
+                i2pStringBuilder.setSpan(blueColorSpan, i2pLabel.length(), i2pStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
+                i2pTextView.setText(i2pStringBuilder);
+            } else {  // I2P is not installed.
+                i2pTextView.setVisibility(View.GONE);
+            }
+
             // Only populate the OpenKeychain text view if it is installed.
             if (!openKeychain.isEmpty()) {
                 String openKeychainLabel = getString(R.string.openkeychain) + "  ";
@@ -395,7 +410,7 @@ public class AboutTabFragment extends Fragment {
             WebView tabWebView = (WebView) tabLayout;
 
             // Load the tabs according to the theme.
-            if (darkTheme) {  // The dark theme is applied.
+            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {  // The dark theme is applied.
                 // Set the background color.  The deprecated `.getColor()` must be used until the minimum API >= 23.
                 tabWebView.setBackgroundColor(getResources().getColor(R.color.gray_850));
 
@@ -453,7 +468,27 @@ public class AboutTabFragment extends Fragment {
             }
         }
 
+        // Scroll the tab if the saved instance state is not null.
+        if (savedInstanceState != null) {
+            tabLayout.post(() -> {
+                tabLayout.setScrollX(savedInstanceState.getInt("scroll_x"));
+                tabLayout.setScrollY(savedInstanceState.getInt("scroll_y"));
+            });
+        }
+
         // Return the formatted `tabLayout`.
         return tabLayout;
     }
+
+    @Override
+    public void onSaveInstanceState(@NonNull Bundle savedInstanceState) {
+        // Run the default commands.
+        super.onSaveInstanceState(savedInstanceState);
+
+        // Save the scroll positions if the tab layout is not null, which can happen if a tab is not currently selected.
+        if (tabLayout != null) {
+            savedInstanceState.putInt("scroll_x", tabLayout.getScrollX());
+            savedInstanceState.putInt("scroll_y", tabLayout.getScrollY());
+        }
+    }
 }
\ No newline at end of file