From b7265d6de3a91be9fd2c7edc06d2dc07fbb22b7e Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 2 Jul 2022 17:25:06 +0200 Subject: [PATCH] Some fixes --- .../app/fedilab/android/BaseMainActivity.java | 5 +- .../ui/fragment/login/FragmentLoginMain.java | 1 - .../login/FragmentLoginRegisterMastodon.java | 4 +- .../FragmentNotificationContainer.java | 88 ++++++------------- .../FedilabNotificationPageAdapter.java | 35 +++++--- app/src/main/res/layout/activity_main.xml | 17 ++-- .../fragment_notification_container.xml | 4 +- 7 files changed, 64 insertions(+), 90 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/BaseMainActivity.java index c69760d7..160507fe 100644 --- a/app/src/main/java/app/fedilab/android/BaseMainActivity.java +++ b/app/src/main/java/app/fedilab/android/BaseMainActivity.java @@ -121,7 +121,6 @@ import app.fedilab.android.helper.PinnedTimelineHelper; import app.fedilab.android.helper.PushHelper; import app.fedilab.android.helper.ThemeHelper; import app.fedilab.android.ui.fragment.timeline.FragmentMastodonConversation; -import app.fedilab.android.ui.fragment.timeline.FragmentMastodonNotification; import app.fedilab.android.ui.fragment.timeline.FragmentMastodonTimeline; import app.fedilab.android.ui.fragment.timeline.FragmentNotificationContainer; import app.fedilab.android.viewmodel.mastodon.AccountsVM; @@ -883,13 +882,11 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt * Allow to scroll to top for bottom navigation items */ private void scrollToTop() { + Fragment fragment = getSupportFragmentManager().findFragmentByTag("f" + binding.viewPager.getCurrentItem()); if (fragment instanceof FragmentMastodonTimeline) { FragmentMastodonTimeline fragmentMastodonTimeline = ((FragmentMastodonTimeline) fragment); fragmentMastodonTimeline.scrollToTop(); - } else if (fragment instanceof FragmentMastodonNotification) { - FragmentMastodonNotification fragmentMastodonNotification = ((FragmentMastodonNotification) fragment); - fragmentMastodonNotification.scrollToTop(); } else if (fragment instanceof FragmentMastodonConversation) { FragmentMastodonConversation fragmentMastodonConversation = ((FragmentMastodonConversation) fragment); fragmentMastodonConversation.scrollToTop(); diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/login/FragmentLoginMain.java b/app/src/main/java/app/fedilab/android/ui/fragment/login/FragmentLoginMain.java index ec770860..0dc503d1 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/login/FragmentLoginMain.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/login/FragmentLoginMain.java @@ -252,7 +252,6 @@ public class FragmentLoginMain extends Fragment { } String scopes = ((LoginActivity) requireActivity()).requestedAdmin() ? Helper.OAUTH_SCOPES_ADMIN : Helper.OAUTH_SCOPES; AppsVM appsVM = new ViewModelProvider(requireActivity()).get(AppsVM.class); - String finalInstance = instance; appsVM.createApp(currentInstanceLogin, getString(R.string.app_name), Helper.REDIRECT_CONTENT_WEB, scopes, diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/login/FragmentLoginRegisterMastodon.java b/app/src/main/java/app/fedilab/android/ui/fragment/login/FragmentLoginRegisterMastodon.java index 8a649fbc..d220bb83 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/login/FragmentLoginRegisterMastodon.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/login/FragmentLoginRegisterMastodon.java @@ -70,8 +70,8 @@ public class FragmentLoginRegisterMastodon extends Fragment { } else { binding.loginInstance.setOnFocusChangeListener((v, hasFocus) -> { if (!hasFocus) { - nodeInfoVM.getNodeInfo(binding.loginInstance.getText().toString()).observe(requireActivity(), nodeInfo -> { - if (nodeInfo != null && (nodeInfo.software.name.trim().toLowerCase().compareTo("mastodon") == 0 || nodeInfo.software.name.trim().toLowerCase().compareTo("pleroma") == 0)) { + nodeInfoVM.getNodeInfo(binding.loginInstance.getText().toString().trim()).observe(requireActivity(), nodeInfo -> { + if (nodeInfo != null) { String tos = getString(R.string.tos); String serverrules = getString(R.string.server_rules); String content_agreement = getString(R.string.agreement_check, diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentNotificationContainer.java b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentNotificationContainer.java index f7570113..5cc13408 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentNotificationContainer.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentNotificationContainer.java @@ -33,7 +33,6 @@ import androidx.preference.PreferenceManager; import com.google.android.material.button.MaterialButton; import com.google.android.material.tabs.TabLayout; -import com.google.android.material.tabs.TabLayoutMediator; import java.util.ArrayList; import java.util.List; @@ -61,20 +60,20 @@ public class FragmentNotificationContainer extends Fragment { SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()); boolean display_all_notification = sharedpreferences.getBoolean(getString(R.string.SET_DISPLAY_ALL_NOTIFICATIONS_TYPE) + BaseMainActivity.currentUserID + BaseMainActivity.currentInstance, false); if (!display_all_notification) { - binding.tabLayout.addTab(binding.tabLayout.newTab()); - binding.tabLayout.addTab(binding.tabLayout.newTab()); + binding.tabLayout.addTab(binding.tabLayout.newTab().setText(getString(R.string.all))); + binding.tabLayout.addTab(binding.tabLayout.newTab().setText(getString(R.string.mention))); binding.tabLayout.setTabMode(TabLayout.MODE_FIXED); - binding.viewpager.setAdapter(new FedilabNotificationPageAdapter(requireActivity(), false)); + binding.viewpagerNotificationContainer.setAdapter(new FedilabNotificationPageAdapter(getChildFragmentManager(), false)); } else { binding.tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE); - binding.tabLayout.addTab(binding.tabLayout.newTab()); - binding.tabLayout.addTab(binding.tabLayout.newTab()); - binding.tabLayout.addTab(binding.tabLayout.newTab()); - binding.tabLayout.addTab(binding.tabLayout.newTab()); - binding.tabLayout.addTab(binding.tabLayout.newTab()); - binding.tabLayout.addTab(binding.tabLayout.newTab()); - binding.tabLayout.addTab(binding.tabLayout.newTab()); - binding.viewpager.setAdapter(new FedilabNotificationPageAdapter(requireActivity(), true)); + binding.tabLayout.addTab(binding.tabLayout.newTab().setText(getString(R.string.all))); + binding.tabLayout.addTab(binding.tabLayout.newTab().setIcon(R.drawable.ic_baseline_reply_24)); + binding.tabLayout.addTab(binding.tabLayout.newTab().setIcon(R.drawable.ic_baseline_star_24)); + binding.tabLayout.addTab(binding.tabLayout.newTab().setIcon(R.drawable.ic_repeat)); + binding.tabLayout.addTab(binding.tabLayout.newTab().setIcon(R.drawable.ic_baseline_poll_24)); + binding.tabLayout.addTab(binding.tabLayout.newTab().setIcon(R.drawable.ic_baseline_home_24)); + binding.tabLayout.addTab(binding.tabLayout.newTab().setIcon(R.drawable.ic_baseline_person_add_alt_1_24)); + binding.viewpagerNotificationContainer.setAdapter(new FedilabNotificationPageAdapter(getChildFragmentManager(), true)); } AtomicBoolean changes = new AtomicBoolean(false); binding.settings.setOnClickListener(v -> { @@ -213,76 +212,41 @@ public class FragmentNotificationContainer extends Fragment { binding.tabLayout.setTabTextColors(ThemeHelper.getAttColor(requireActivity(), R.attr.mTextColor), ContextCompat.getColor(requireActivity(), R.color.cyanea_accent_dark_reference)); binding.tabLayout.setTabIconTint(ThemeHelper.getColorStateList(requireActivity())); + binding.viewpagerNotificationContainer.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(binding.tabLayout)); binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { - binding.viewpager.setCurrentItem(tab.getPosition()); + binding.viewpagerNotificationContainer.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { - } @Override public void onTabReselected(TabLayout.Tab tab) { - Fragment fragment = getParentFragmentManager().findFragmentByTag("f" + binding.viewpager.getCurrentItem()); - if (fragment instanceof FragmentMastodonNotification) { - FragmentMastodonNotification fragmentMastodonNotification = ((FragmentMastodonNotification) fragment); - fragmentMastodonNotification.scrollToTop(); + Fragment fragment; + if (binding.viewpagerNotificationContainer.getAdapter() != null) { + fragment = (Fragment) binding.viewpagerNotificationContainer.getAdapter().instantiateItem(binding.viewpagerNotificationContainer, tab.getPosition()); + if (fragment instanceof FragmentMastodonNotification) { + FragmentMastodonNotification fragmentMastodonNotification = ((FragmentMastodonNotification) fragment); + fragmentMastodonNotification.scrollToTop(); + } } } }); - new TabLayoutMediator(binding.tabLayout, binding.viewpager, - (tab, position) -> { - binding.viewpager.setCurrentItem(tab.getPosition(), true); - if (!display_all_notification) { - switch (position) { - case 0: - tab.setText(getString(R.string.all)); - break; - case 1: - tab.setText(getString(R.string.mention)); - break; - } - } else { - switch (position) { - case 0: - tab.setText(getString(R.string.all)); - break; - case 1: - tab.setIcon(R.drawable.ic_baseline_reply_24); - break; - case 2: - tab.setIcon(R.drawable.ic_baseline_star_24); - break; - case 3: - tab.setIcon(R.drawable.ic_repeat); - break; - case 4: - tab.setIcon(R.drawable.ic_baseline_poll_24); - break; - case 5: - tab.setIcon(R.drawable.ic_baseline_home_24); - break; - case 6: - tab.setIcon(R.drawable.ic_baseline_person_add_alt_1_24); - break; - } - } - - } - ).attach(); - return binding.getRoot(); } public void scrollToTop() { if (binding != null) { - Fragment fragment = getParentFragmentManager().findFragmentByTag("f" + binding.viewpager.getCurrentItem()); - if (fragment instanceof FragmentMastodonNotification) { - ((FragmentMastodonNotification) fragment).scrollToTop(); + FedilabNotificationPageAdapter fedilabNotificationPageAdapter = ((FedilabNotificationPageAdapter) binding.viewpagerNotificationContainer.getAdapter()); + if (fedilabNotificationPageAdapter != null) { + FragmentMastodonNotification fragmentMastodonNotification = (FragmentMastodonNotification) fedilabNotificationPageAdapter.getCurrentFragment(); + if (fragmentMastodonNotification != null) { + fragmentMastodonNotification.scrollToTop(); + } } } } diff --git a/app/src/main/java/app/fedilab/android/ui/pageadapter/FedilabNotificationPageAdapter.java b/app/src/main/java/app/fedilab/android/ui/pageadapter/FedilabNotificationPageAdapter.java index 93cee149..eaff1b3b 100644 --- a/app/src/main/java/app/fedilab/android/ui/pageadapter/FedilabNotificationPageAdapter.java +++ b/app/src/main/java/app/fedilab/android/ui/pageadapter/FedilabNotificationPageAdapter.java @@ -14,35 +14,41 @@ package app.fedilab.android.ui.pageadapter; * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see . */ - import android.os.Bundle; +import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; import app.fedilab.android.helper.Helper; import app.fedilab.android.ui.fragment.timeline.FragmentMastodonNotification; -public class FedilabNotificationPageAdapter extends FragmentStateAdapter { - +public class FedilabNotificationPageAdapter extends FragmentStatePagerAdapter { private final boolean extended; + private Fragment mCurrentFragment; - - public FedilabNotificationPageAdapter(FragmentActivity fa, boolean extended) { - super(fa); + public FedilabNotificationPageAdapter(FragmentManager fm, boolean extended) { + super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); this.extended = extended; } + public Fragment getCurrentFragment() { + return mCurrentFragment; + } + @Override - public int getItemCount() { - return extended ? 7 : 2; + public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) { + if (getCurrentFragment() != object) { + mCurrentFragment = ((Fragment) object); + } + super.setPrimaryItem(container, position, object); } @NonNull @Override - public Fragment createFragment(int position) { + public Fragment getItem(int position) { Bundle bundle = new Bundle(); FragmentMastodonNotification fragmentMastodonNotification = new FragmentMastodonNotification(); if (!extended) { @@ -83,5 +89,8 @@ public class FedilabNotificationPageAdapter extends FragmentStateAdapter { return fragmentMastodonNotification; } - -} + @Override + public int getCount() { + return extended ? 7 : 2; + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ca2d038b..ae6da0b8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -75,14 +75,19 @@ - + app:layout_behavior="@string/appbar_scrolling_view_behavior"> + + + - \ No newline at end of file