/*
- * Copyright © 2019 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2019-2020 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 androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
private 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
}
@Override
+ @NonNull
public Fragment getItem(int pageNumber) {
// Get the fragment for a particular page. Page numbers are 0 indexed.
return webViewFragmentsList.get(pageNumber);
i++;
}
+ // Set the position to be the last tab if it is not found.
+ // Sometimes there is a race condition in populating the webView fragments list when resuming Privacy Browser and displaying an SSL certificate error while loading a new intent.
+ // In that case, the last tab should be the one it is looking for.
+ if (position == -1) {
+ position = webViewFragmentsList.size() - 1;
+ }
+
// Return the position.
return position;
}
- public void addPage(int pageNumber, ViewPager webViewPager) {
+ public void addPage(int pageNumber, ViewPager webViewPager, String url, boolean moveToNewPage) {
// Add a new page.
- webViewFragmentsList.add(WebViewTabFragment.createPage(pageNumber));
+ 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) {
// Delete the page.
webViewFragmentsList.remove(pageNumber);
}
public WebViewTabFragment getPageFragment(int pageNumber) {
+ // Return the page fragment.
return webViewFragmentsList.get(pageNumber);
}
}
\ No newline at end of file