]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/adapters/WebViewPagerAdapter.java
Bump the minimum API to 23. https://redmine.stoutner.com/issues/793
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / adapters / WebViewPagerAdapter.java
index da8e6729a74700eacad960ed98df0720afb4565e..8c15bc51753ced8a94ee2ec4c1a8a8ff2483bccc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2019 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2019-2021 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
  *
 
 package com.stoutner.privacybrowser.adapters;
 
+import android.os.Bundle;
+import android.widget.FrameLayout;
+
 import androidx.annotation.NonNull;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentPagerAdapter;
 import androidx.viewpager.widget.ViewPager;
 
+import com.stoutner.privacybrowser.R;
 import com.stoutner.privacybrowser.fragments.WebViewTabFragment;
+import com.stoutner.privacybrowser.views.NestedScrollWebView;
 
 import java.util.LinkedList;
 
 public class WebViewPagerAdapter extends FragmentPagerAdapter {
     // The WebView fragments list contains all the WebViews.
-    private LinkedList<WebViewTabFragment> webViewFragmentsList = new LinkedList<>();
+    private final LinkedList<WebViewTabFragment> webViewFragmentsList = new LinkedList<>();
 
     // Define the constructor.
-    public WebViewPagerAdapter(FragmentManager fragmentManager){
+    public WebViewPagerAdapter(FragmentManager fragmentManager) {
         // Run the default commands.
-        super(fragmentManager);
+        super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
     }
 
     @Override
@@ -59,6 +64,7 @@ public class WebViewPagerAdapter extends FragmentPagerAdapter {
     }
 
     @Override
+    @NonNull
     public Fragment getItem(int pageNumber) {
         // Get the fragment for a particular page.  Page numbers are 0 indexed.
         return webViewFragmentsList.get(pageNumber);
@@ -100,31 +106,62 @@ public class WebViewPagerAdapter extends FragmentPagerAdapter {
         return position;
     }
 
-    public void addPage(int pageNumber, ViewPager webViewPager, String url) {
+    public void addPage(int pageNumber, ViewPager webViewPager, String url, boolean moveToNewPage) {
         // Add a new page.
         webViewFragmentsList.add(WebViewTabFragment.createPage(pageNumber, url));
 
         // Update the view pager.
         notifyDataSetChanged();
 
-        // Move to the new page if it isn't the first one.
-        if (pageNumber > 0) {
+        // Move to the new page if indicated.
+        if (moveToNewPage) {
             webViewPager.setCurrentItem(pageNumber);
         }
     }
 
+    public void restorePage(Bundle savedState, Bundle savedNestedScrollWebViewState) {
+        // Restore the page.
+        webViewFragmentsList.add(WebViewTabFragment.restorePage(savedState, savedNestedScrollWebViewState));
+
+        // Update the view pager.
+        notifyDataSetChanged();
+    }
+
     public boolean deletePage(int pageNumber, ViewPager webViewPager) {
+        // Get the WebView tab fragment.
+        WebViewTabFragment webViewTabFragment = webViewFragmentsList.get(pageNumber);
+
+        // Get the WebView frame layout.
+        FrameLayout webViewFrameLayout = (FrameLayout) webViewTabFragment.getView();
+
+        // Remove the warning below that the WebView frame layout might be null.
+        assert webViewFrameLayout != null;
+
+        // Get a handle for the nested scroll WebView.
+        NestedScrollWebView nestedScrollWebView = webViewFrameLayout.findViewById(R.id.nestedscroll_webview);
+
+        // Pause the current WebView.
+        nestedScrollWebView.onPause();
+
+        // Remove all the views from the frame layout.
+        webViewFrameLayout.removeAllViews();
+
+        // Destroy the current WebView.
+        nestedScrollWebView.destroy();
+
         // Delete the page.
         webViewFragmentsList.remove(pageNumber);
 
         // Update the view pager.
         notifyDataSetChanged();
 
-        // Return true if the selected page number did not change after the delete.  This will cause the calling method to reset the current WebView to the new contents of this page number.
+        // Return true if the selected page number did not change after the delete (because the newly selected tab has has same number as the previously deleted tab).
+        // This will cause the calling method to reset the current WebView to the new contents of this page number.
         return (webViewPager.getCurrentItem() == pageNumber);
     }
 
     public WebViewTabFragment getPageFragment(int pageNumber) {
+        // Return the page fragment.
         return webViewFragmentsList.get(pageNumber);
     }
 }
\ No newline at end of file