]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/adapters/WebViewPagerAdapter.java
Fix the ViewPager not always moving to new tabs. https://redmine.stoutner.com/issues/798
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / adapters / WebViewPagerAdapter.java
index 8c15bc51753ced8a94ee2ec4c1a8a8ff2483bccc..52e7234536a22a244cc232b9788112d79c9f7d29 100644 (file)
@@ -1,25 +1,26 @@
 /*
- * Copyright © 2019-2021 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2019-2022 Soren Stoutner <soren@stoutner.com>.
  *
- * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+ * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
- * Privacy Browser is free software: you can redistribute it and/or modify
+ * Privacy Browser Android is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
  *
- * Privacy Browser is distributed in the hope that it will be useful,
+ * Privacy Browser Android is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>.
+ * along with Privacy Browser Android.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package com.stoutner.privacybrowser.adapters;
 
 import android.os.Bundle;
+import android.os.Handler;
 import android.widget.FrameLayout;
 
 import androidx.annotation.NonNull;
@@ -115,7 +116,7 @@ public class WebViewPagerAdapter extends FragmentPagerAdapter {
 
         // Move to the new page if indicated.
         if (moveToNewPage) {
-            webViewPager.setCurrentItem(pageNumber);
+            moveToNewPage(pageNumber, webViewPager);
         }
     }
 
@@ -164,4 +165,24 @@ public class WebViewPagerAdapter extends FragmentPagerAdapter {
         // Return the page fragment.
         return webViewFragmentsList.get(pageNumber);
     }
+
+    private void moveToNewPage(int pageNumber, ViewPager webViewPager) {
+        // Check to see if the new page has been populated.
+        if (webViewPager.getChildCount() >= pageNumber) {  // The new page is ready.
+            // Move to the new page.
+            webViewPager.setCurrentItem(pageNumber);
+        } else {  // The new page is not yet ready.
+            // Create a handler.
+            Handler moveToNewPageHandler = new Handler();
+
+            // Create a runnable.
+            Runnable moveToNewPageRunnable = () -> {
+                // Move to the new page.
+                webViewPager.setCurrentItem(pageNumber);
+            };
+
+            // Try again to move to the new page after 50 milliseconds.
+            moveToNewPageHandler.postDelayed(moveToNewPageRunnable, 50);
+        }
+    }
 }
\ No newline at end of file