From 87d5b92a99a06fb15c95a65f8b87c36a2af5a9c4 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 13 Jan 2023 14:24:23 -0300 Subject: [PATCH] change crash workaround --- .../android/fragments/HomeFragment.java | 76 +++++++++++++++---- 1 file changed, 61 insertions(+), 15 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java index 8425ad236..db248d277 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java @@ -5,7 +5,6 @@ import android.app.NotificationManager; import android.graphics.Outline; import android.os.Build; import android.os.Bundle; -import android.service.notification.StatusBarNotification; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -42,7 +41,11 @@ import me.grishka.appkit.views.FragmentRootLinearLayout; public class HomeFragment extends AppKitFragment implements OnBackPressedListener{ private FragmentRootLinearLayout content; - private HomeTimelineFragment homeTimelineFragment; + + private HomeTabFragment homeTabFragment; + +// private HomeTimelineFragment homeTimelineFragment; + private NotificationsFragment notificationsFragment; private DiscoverFragment searchFragment; private ProfileFragment profileFragment; @@ -66,8 +69,13 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene if(savedInstanceState==null){ Bundle args=new Bundle(); args.putString("account", accountID); - homeTimelineFragment=new HomeTimelineFragment(); - homeTimelineFragment.setArguments(args); + + homeTabFragment=new HomeTabFragment(); + homeTabFragment.setArguments(args); + +// homeTimelineFragment=new HomeTimelineFragment(); +// homeTimelineFragment.setArguments(args); + args=new Bundle(args); args.putBoolean("noAutoLoad", true); searchFragment=new DiscoverFragment(); @@ -111,12 +119,19 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene if(savedInstanceState==null){ getChildFragmentManager().beginTransaction() - .add(R.id.fragment_wrap, homeTimelineFragment) + .add(R.id.fragment_wrap, homeTabFragment) .add(R.id.fragment_wrap, searchFragment).hide(searchFragment) .add(R.id.fragment_wrap, notificationsFragment).hide(notificationsFragment) .add(R.id.fragment_wrap, profileFragment).hide(profileFragment) .commit(); +// getChildFragmentManager().beginTransaction() +// .add(R.id.fragment_wrap, homeTimelineFragment) +// .add(R.id.fragment_wrap, searchFragment).hide(searchFragment) +// .add(R.id.fragment_wrap, notificationsFragment).hide(notificationsFragment) +// .add(R.id.fragment_wrap, profileFragment).hide(profileFragment) +// .commit(); + String defaultTab=getArguments().getString("tab"); if("notifications".equals(defaultTab)){ tabBar.selectTab(R.id.tab_notifications); @@ -137,21 +152,37 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene @Override public void onViewStateRestored(Bundle savedInstanceState){ super.onViewStateRestored(savedInstanceState); - if(savedInstanceState==null || homeTimelineFragment!=null) + + if(savedInstanceState==null || homeTabFragment !=null) return; - homeTimelineFragment=(HomeTimelineFragment) getChildFragmentManager().getFragment(savedInstanceState, "homeTimelineFragment"); + +// if(savedInstanceState==null || homeTimelineFragment!=null) +// return; + + homeTabFragment=(HomeTabFragment) getChildFragmentManager().getFragment(savedInstanceState, "homeTabFragment"); + +// homeTimelineFragment=(HomeTimelineFragment) getChildFragmentManager().getFragment(savedInstanceState, "homeTimelineFragment"); searchFragment=(DiscoverFragment) getChildFragmentManager().getFragment(savedInstanceState, "searchFragment"); notificationsFragment=(NotificationsFragment) getChildFragmentManager().getFragment(savedInstanceState, "notificationsFragment"); profileFragment=(ProfileFragment) getChildFragmentManager().getFragment(savedInstanceState, "profileFragment"); currentTab=savedInstanceState.getInt("selectedTab"); Fragment current=fragmentForTab(currentTab); + getChildFragmentManager().beginTransaction() - .hide(homeTimelineFragment) + .hide(homeTabFragment) .hide(searchFragment) .hide(notificationsFragment) .hide(profileFragment) .show(current) .commit(); + + // getChildFragmentManager().beginTransaction() +// .hide(homeTimelineFragment) +// .hide(searchFragment) +// .hide(notificationsFragment) +// .hide(profileFragment) +// .show(current) +// .commit(); maybeTriggerLoading(current); } @@ -181,7 +212,11 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene super.onApplyWindowInsets(insets.replaceSystemWindowInsets(insets.getSystemWindowInsetLeft(), 0, insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom())); } WindowInsets topOnlyInsets=insets.replaceSystemWindowInsets(0, insets.getSystemWindowInsetTop(), 0, 0); - homeTimelineFragment.onApplyWindowInsets(topOnlyInsets); + + homeTabFragment.onApplyWindowInsets(topOnlyInsets); + +// homeTimelineFragment.onApplyWindowInsets(topOnlyInsets); + searchFragment.onApplyWindowInsets(topOnlyInsets); notificationsFragment.onApplyWindowInsets(topOnlyInsets); profileFragment.onApplyWindowInsets(topOnlyInsets); @@ -189,7 +224,10 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene private Fragment fragmentForTab(@IdRes int tab){ if(tab==R.id.tab_home){ - return homeTimelineFragment; + return homeTabFragment; + + // if(tab==R.id.tab_home){ +// return homeTimelineFragment; }else if(tab==R.id.tab_search){ return searchFragment; }else if(tab==R.id.tab_notifications){ @@ -234,6 +272,7 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene ((NotificationsFragment) newFragment).loadData(); // TODO make an interface? NotificationManager nm=getActivity().getSystemService(NotificationManager.class); +// nm.cancel(accountID, PushNotificationReceiver.NOTIFICATION_ID); for (StatusBarNotification notification : nm.getActiveNotifications()) { if (accountID.equals(notification.getTag())) { nm.cancel(accountID, notification.getId()); @@ -270,17 +309,24 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene tabBar.selectTab(R.id.tab_home); onTabSelected(R.id.tab_home); return true; + } else { + return homeTabFragment.onBackPressed(); } - return false; } @Override public void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState); outState.putInt("selectedTab", currentTab); - getChildFragmentManager().putFragment(outState, "homeTimelineFragment", homeTimelineFragment); - getChildFragmentManager().putFragment(outState, "searchFragment", searchFragment); - getChildFragmentManager().putFragment(outState, "notificationsFragment", notificationsFragment); - getChildFragmentManager().putFragment(outState, "profileFragment", profileFragment); + + if (homeTabFragment.isAdded()) getChildFragmentManager().putFragment(outState, "homeTabFragment", homeTabFragment); + if (searchFragment.isAdded()) getChildFragmentManager().putFragment(outState, "searchFragment", searchFragment); + if (notificationsFragment.isAdded()) getChildFragmentManager().putFragment(outState, "notificationsFragment", notificationsFragment); + if (profileFragment.isAdded()) getChildFragmentManager().putFragment(outState, "profileFragment", profileFragment); + +// getChildFragmentManager().putFragment(outState, "homeTimelineFragment", homeTimelineFragment); +// getChildFragmentManager().putFragment(outState, "searchFragment", searchFragment); +// getChildFragmentManager().putFragment(outState, "notificationsFragment", notificationsFragment); +// getChildFragmentManager().putFragment(outState, "profileFragment", profileFragment); } }