]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/fragments/GuideTabFragment.java
Fix incorrect pinned mismatch errors. https://redmine.stoutner.com/issues/591
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / fragments / GuideTabFragment.java
index 4a417b644be9dcff0244831b4168b8c632172dae..6f3aa0d3c26b30bac6c3b3746124842038af0b8f 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>.
  *
@@ -19,7 +19,7 @@
 
 package com.stoutner.privacybrowser.fragments;
 
-import android.annotation.SuppressLint;
+import android.content.res.Configuration;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -30,22 +30,24 @@ import androidx.annotation.NonNull;
 import androidx.fragment.app.Fragment;
 
 import com.stoutner.privacybrowser.R;
-import com.stoutner.privacybrowser.activities.MainWebViewActivity;
 
 public class GuideTabFragment extends Fragment {
-    // `tabNumber` is used in `onCreate()` and `onCreateView()`.
+    // Define the class variables.
     private int tabNumber;
+    private View tabLayout;
 
     // Store the tab number in the arguments bundle.
-    public static GuideTabFragment createTab (int tab) {
+    public static GuideTabFragment createTab (int tabNumber) {
         // Create a bundle.
         Bundle bundle = new Bundle();
 
         // Store the tab number in the bundle.
-        bundle.putInt("Tab", tab);
+        bundle.putInt("tab_number", tabNumber);
 
-        // Add the bundle to the fragment.
+        // Create a new guide tab fragment.
         GuideTabFragment guideTabFragment = new GuideTabFragment();
+
+        // Add the bundle to the fragment.
         guideTabFragment.setArguments(bundle);
 
         // Return the new fragment.
@@ -57,26 +59,29 @@ public class GuideTabFragment extends Fragment {
         // Run the default commands.
         super.onCreate(savedInstanceState);
 
-        // Remove the lint warning that `getArguments()` might be null.
-        assert getArguments() != null;
+        // Get a handle for the arguments.
+        Bundle arguments = getArguments();
+
+        // Remove the lint warning below that arguments might be null.
+        assert arguments != null;
 
         // Store the tab number in a class variable.
-        tabNumber = getArguments().getInt("Tab");
+        tabNumber = arguments.getInt("tab_number");
     }
 
-    @SuppressLint("SetJavaScriptEnabled")
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-        // Setting false at the end of inflater.inflate does not attach the inflated layout as a child of container.  The fragment will take care of attaching the root automatically.
-        View tabLayout = inflater.inflate(R.layout.bare_webview, container, false);
+        // Inflate the layout.  The fragment will take care of attaching the root automatically.
+        tabLayout = inflater.inflate(R.layout.bare_webview, container, false);
 
-        // Get a handle for `tabWebView`.
+        // Get a handle for the tab WebView.
         WebView tabWebView = (WebView) tabLayout;
 
+        // Get the current theme status.
+        int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
+
         // Load the tabs according to the theme.
-        if (MainWebViewActivity.darkTheme) {  // The dark theme is applied.
-            // Set the background color.  The deprecated `.getColor()` must be used until API >= 23.
-            //noinspection deprecation
+        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {  // The dark theme is applied.
             tabWebView.setBackgroundColor(getResources().getColor(R.color.gray_850));
 
             // Tab numbers start at 0.
@@ -110,16 +115,12 @@ public class GuideTabFragment extends Fragment {
                     break;
 
                 case 7:
-                    tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_tor_dark.html");
+                    tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_proxies_dark.html");
                     break;
 
                 case 8:
                     tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_tracking_ids_dark.html");
                     break;
-
-                case 9:
-                    tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_bookmarks_dark.html");
-                    break;
             }
         } else {  // The light theme is applied.
             // Tab numbers start at 0.
@@ -153,19 +154,35 @@ public class GuideTabFragment extends Fragment {
                     break;
 
                 case 7:
-                    tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_tor_light.html");
+                    tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_proxies_light.html");
                     break;
 
                 case 8:
                     tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_tracking_ids_light.html");
                     break;
-
-                case 9:
-                    tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_bookmarks_light.html");
             }
         }
 
+        // Scroll the WebView if the saved instance state is not null.
+        if (savedInstanceState != null) {
+            tabWebView.post(() -> tabWebView.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);
+
+        // Get a handle for the tab WebView.  A class variable cannot be used because it gets out of sync when restarting.
+        WebView tabWebView = (WebView) tabLayout;
+
+        // Save the scroll Y position if the tab WebView is not null, which can happen if a tab is not currently selected.
+        if (tabWebView != null) {
+            savedInstanceState.putInt("scroll_y", tabWebView.getScrollY());
+        }
+    }
 }
\ No newline at end of file