diff --git a/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java b/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java
index 4d00c94..8139593 100644
--- a/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java
+++ b/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java
@@ -39,6 +39,9 @@ import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentStatePagerAdapter;
+import androidx.viewpager.widget.PagerAdapter;
+import androidx.viewpager.widget.ViewPager;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.kobakei.ratethisapp.RateThisApp;
@@ -62,6 +65,7 @@ import app.fedilab.fedilabtube.client.entities.Token;
import app.fedilab.fedilabtube.client.entities.UserMe;
import app.fedilab.fedilabtube.client.entities.UserSettings;
import app.fedilab.fedilabtube.client.entities.WellKnownNodeinfo;
+import app.fedilab.fedilabtube.databinding.ActivityMainBinding;
import app.fedilab.fedilabtube.fragment.DisplayOverviewFragment;
import app.fedilab.fedilabtube.fragment.DisplayVideosFragment;
import app.fedilab.fedilabtube.helper.Helper;
@@ -87,43 +91,9 @@ public class MainActivity extends AppCompatActivity {
public static UserMe userMe;
public static InstanceData.InstanceConfig instanceConfig;
public static TypeOfConnection typeOfConnection;
- final FragmentManager fm = getSupportFragmentManager();
- Fragment active;
private DisplayVideosFragment recentFragment, locaFragment, trendingFragment, subscriptionFragment, mostLikedFragment;
private DisplayOverviewFragment overviewFragment;
- private final BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
- = item -> {
- DisplayVideosFragment displayVideosFragment = null;
- int itemId = item.getItemId();
- if (itemId == R.id.navigation_subscription) {
- displayVideosFragment = subscriptionFragment;
- setTitleCustom(R.string.subscriptions);
- } else if (itemId == R.id.navigation_trending) {
- setTitleCustom(R.string.title_trending);
- displayVideosFragment = trendingFragment;
- } else if (itemId == R.id.navigation_most_liked) {
- setTitleCustom(R.string.title_most_liked);
- displayVideosFragment = mostLikedFragment;
- } else if (itemId == R.id.navigation_recently_added) {
- setTitleCustom(R.string.title_recently_added);
- displayVideosFragment = recentFragment;
- } else if (itemId == R.id.navigation_local) {
- setTitleCustom(R.string.title_local);
- displayVideosFragment = locaFragment;
- } else if (itemId == R.id.navigation_discover) {
- setTitleCustom(R.string.title_discover);
- fm.beginTransaction().hide(active).show(overviewFragment).commit();
- active = overviewFragment;
- return true;
- }
- if (displayVideosFragment != null) {
- fm.beginTransaction().hide(active).show(displayVideosFragment).commit();
- active = displayVideosFragment;
- return true;
- } else {
- return false;
- }
- };
+ private ActivityMainBinding binding;
@SuppressLint("ApplySharedPref")
public static void showRadioButtonDialogFullInstances(Activity activity, boolean storeInDb) {
@@ -192,10 +162,41 @@ public class MainActivity extends AppCompatActivity {
}
}
+ private final BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
+ = item -> {
+ int itemId = item.getItemId();
+ if (itemId == R.id.navigation_discover) {
+ setTitleCustom(R.string.title_discover);
+ binding.viewpager.setCurrentItem(0);
+ } else if (itemId == R.id.navigation_subscription) {
+ binding.viewpager.setCurrentItem(1);
+ setTitleCustom(R.string.subscriptions);
+ } else if (itemId == R.id.navigation_trending) {
+ setTitleCustom(R.string.title_trending);
+ if (Helper.isLoggedIn(MainActivity.this)) {
+ binding.viewpager.setCurrentItem(2);
+ } else {
+ binding.viewpager.setCurrentItem(1);
+ }
+ } else if (itemId == R.id.navigation_most_liked) {
+ setTitleCustom(R.string.title_most_liked);
+ binding.viewpager.setCurrentItem(2);
+ } else if (itemId == R.id.navigation_recently_added) {
+ setTitleCustom(R.string.title_recently_added);
+ binding.viewpager.setCurrentItem(3);
+ } else if (itemId == R.id.navigation_local) {
+ setTitleCustom(R.string.title_local);
+ binding.viewpager.setCurrentItem(4);
+ }
+ return true;
+ };
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
+ binding = ActivityMainBinding.inflate(getLayoutInflater());
+ View view = binding.getRoot();
+ setContentView(view);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
@@ -211,22 +212,6 @@ public class MainActivity extends AppCompatActivity {
}
checkIfConnectedUsers();
- Fragment fragment = getSupportFragmentManager().findFragmentByTag("5");
- if (fragment != null)
- getSupportFragmentManager().beginTransaction().remove(fragment).commit();
- fragment = getSupportFragmentManager().findFragmentByTag("4");
- if (fragment != null)
- getSupportFragmentManager().beginTransaction().remove(fragment).commit();
- fragment = getSupportFragmentManager().findFragmentByTag("3");
- if (fragment != null)
- getSupportFragmentManager().beginTransaction().remove(fragment).commit();
- fragment = getSupportFragmentManager().findFragmentByTag("2");
- if (fragment != null)
- getSupportFragmentManager().beginTransaction().remove(fragment).commit();
- fragment = getSupportFragmentManager().findFragmentByTag("1");
- if (fragment != null)
- getSupportFragmentManager().beginTransaction().remove(fragment).commit();
-
recentFragment = new DisplayVideosFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(Helper.TIMELINE_TYPE, TimelineVM.TimelineType.RECENT);
@@ -254,23 +239,37 @@ public class MainActivity extends AppCompatActivity {
overviewFragment = new DisplayOverviewFragment();
- if (active == null) {
- active = overviewFragment;
- }
-
-
if (!Helper.isLoggedIn(MainActivity.this)) {
- fm.beginTransaction().add(R.id.nav_host_fragment, locaFragment, "5").hide(locaFragment).commit();
- fm.beginTransaction().add(R.id.nav_host_fragment, recentFragment, "4").hide(recentFragment).commit();
- fm.beginTransaction().add(R.id.nav_host_fragment, mostLikedFragment, "3").hide(mostLikedFragment).commit();
- fm.beginTransaction().add(R.id.nav_host_fragment, trendingFragment, "2").hide(trendingFragment).commit();
- fm.beginTransaction().add(R.id.nav_host_fragment, overviewFragment, "1").commit();
+ PagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
+ binding.viewpager.setAdapter(mPagerAdapter);
}
+ binding.viewpager.setOffscreenPageLimit(5);
+
+
+ binding.viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ MenuItem item = binding.navView.getMenu().getItem(position);
+ binding.navView.setSelectedItemId(item.getItemId());
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+
+ }
+ });
+
+
toolbar.setOnClickListener(v -> {
- if (active instanceof DisplayVideosFragment) {
- ((DisplayVideosFragment) active).scrollToTop();
- } else if (active instanceof DisplayOverviewFragment) {
- ((DisplayOverviewFragment) active).scrollToTop();
+ if (binding.viewpager.getAdapter().instantiateItem(binding.viewpager, binding.viewpager.getCurrentItem()) instanceof DisplayVideosFragment) {
+ ((DisplayVideosFragment) binding.viewpager.getAdapter().instantiateItem(binding.viewpager, binding.viewpager.getCurrentItem())).scrollToTop();
+ } else if (binding.viewpager.getAdapter().instantiateItem(binding.viewpager, binding.viewpager.getCurrentItem()) instanceof DisplayOverviewFragment) {
+ ((DisplayOverviewFragment) binding.viewpager.getAdapter().instantiateItem(binding.viewpager, binding.viewpager.getCurrentItem())).scrollToTop();
}
});
@@ -309,11 +308,10 @@ public class MainActivity extends AppCompatActivity {
runOnUiThread(() -> {
//To avoid a token issue with subscriptions, adding fragment is done when the token is refreshed.
new Handler().post(() -> {
- fm.beginTransaction().add(R.id.nav_host_fragment, locaFragment, "5").hide(locaFragment).commit();
- fm.beginTransaction().add(R.id.nav_host_fragment, recentFragment, "4").hide(recentFragment).commitAllowingStateLoss();
- fm.beginTransaction().add(R.id.nav_host_fragment, trendingFragment, "3").hide(trendingFragment).commitAllowingStateLoss();
- fm.beginTransaction().add(R.id.nav_host_fragment, subscriptionFragment, "2").hide(subscriptionFragment).commitAllowingStateLoss();
- fm.beginTransaction().add(R.id.nav_host_fragment, overviewFragment, "1").commitAllowingStateLoss();
+ if (Helper.isLoggedIn(MainActivity.this)) {
+ PagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
+ binding.viewpager.setAdapter(mPagerAdapter);
+ }
});
});
@@ -369,6 +367,10 @@ public class MainActivity extends AppCompatActivity {
}
}
+ public DisplayVideosFragment getSubscriptionFragment() {
+ return subscriptionFragment;
+ }
+
private void startInForeground() {
Intent notificationIntent = new Intent(this, RetrieveInfoService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
@@ -605,13 +607,6 @@ public class MainActivity extends AppCompatActivity {
return super.onOptionsItemSelected(item);
}
- public void setActive(DisplayVideosFragment displayVideosFragment) {
- this.active = displayVideosFragment;
- }
-
- public void setSubscriptionFragment(DisplayVideosFragment displayVideosFragment) {
- this.subscriptionFragment = displayVideosFragment;
- }
@Override
protected void onNewIntent(Intent intent) {
@@ -671,6 +666,50 @@ public class MainActivity extends AppCompatActivity {
}
}
+ private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
+
+ ScreenSlidePagerAdapter(FragmentManager fm) {
+ super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
+ }
+
+ @NotNull
+ @Override
+ public Fragment getItem(final int position) {
+ if (Helper.isLoggedIn(MainActivity.this)) {
+ switch (position) {
+ case 0:
+ return overviewFragment;
+ case 1:
+ return subscriptionFragment;
+ case 2:
+ return trendingFragment;
+ case 3:
+ return recentFragment;
+ case 4:
+ return locaFragment;
+ }
+ } else {
+ switch (position) {
+ case 0:
+ return overviewFragment;
+ case 1:
+ return trendingFragment;
+ case 2:
+ return mostLikedFragment;
+ case 3:
+ return recentFragment;
+ case 4:
+ return locaFragment;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public int getCount() {
+ return 5;
+ }
+ }
public enum TypeOfConnection {
UNKNOWN,
diff --git a/app/src/main/java/app/fedilab/fedilabtube/fragment/DisplayVideosFragment.java b/app/src/main/java/app/fedilab/fedilabtube/fragment/DisplayVideosFragment.java
index 20c2d81..2af62fd 100644
--- a/app/src/main/java/app/fedilab/fedilabtube/fragment/DisplayVideosFragment.java
+++ b/app/src/main/java/app/fedilab/fedilabtube/fragment/DisplayVideosFragment.java
@@ -29,10 +29,9 @@ import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
-import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -461,21 +460,11 @@ public class DisplayVideosFragment extends Fragment implements AccountsHorizonta
public void pullToRefresh(boolean reload) {
if (type == TimelineVM.TimelineType.SUBSCRIBTIONS && reload) {
- Fragment fragment = ((AppCompatActivity) context).getSupportFragmentManager().findFragmentByTag("2");
- if (fragment != null) {
- if (context instanceof MainActivity) {
- FragmentManager fm = ((MainActivity) context).getSupportFragmentManager();
- fm.beginTransaction().remove(fragment).commit();
- DisplayVideosFragment subscriptionFragment = new DisplayVideosFragment();
- Bundle bundle = new Bundle();
- bundle.putSerializable(Helper.TIMELINE_TYPE, TimelineVM.TimelineType.SUBSCRIBTIONS);
- subscriptionFragment.setArguments(bundle);
- ((MainActivity) context).setActive(subscriptionFragment);
- ((MainActivity) context).setSubscriptionFragment(subscriptionFragment);
- fm.beginTransaction().add(R.id.nav_host_fragment, subscriptionFragment, "2").commit();
- }
+ DisplayVideosFragment subscriptionFragment = ((MainActivity) context).getSubscriptionFragment();
+ if (subscriptionFragment != null) {
+ FragmentTransaction ft = ((MainActivity) context).getSupportFragmentManager().beginTransaction();
+ ft.detach(subscriptionFragment).attach(subscriptionFragment).commit();
}
-
} else {
int size = peertubes.size();
peertubes.clear();
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index ff9395d..5f457bd 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -63,13 +63,12 @@
-
+ android:layout_marginBottom="?attr/actionBarSize" />