diff --git a/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java b/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java index 7d25fa05..56cb30b9 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java +++ b/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java @@ -42,40 +42,7 @@ public class MainActivity extends FragmentStackActivity{ super.onCreate(savedInstanceState); if(savedInstanceState==null){ - if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){ - showFragmentClearingBackStack(new SplashFragment()); - }else{ - AccountSessionManager.getInstance().maybeUpdateLocalInfo(); - AccountSession session; - Bundle args=new Bundle(); - Intent intent=getIntent(); - if(intent.getBooleanExtra("fromNotification", false)){ - String accountID=intent.getStringExtra("accountID"); - try{ - session=AccountSessionManager.getInstance().getAccount(accountID); - if(!intent.hasExtra("notification")) - args.putString("tab", "notifications"); - }catch(IllegalStateException x){ - session=AccountSessionManager.getInstance().getLastActiveAccount(); - } - }else{ - session=AccountSessionManager.getInstance().getLastActiveAccount(); - } - args.putString("account", session.getID()); - Fragment fragment=session.activated ? new HomeFragment() : new AccountActivationFragment(); - fragment.setArguments(args); - showFragmentClearingBackStack(fragment); - if(intent.getBooleanExtra("fromNotification", false) && intent.hasExtra("notification")){ - Notification notification=Parcels.unwrap(intent.getParcelableExtra("notification")); - showFragmentForNotification(notification, session.getID()); - }else if(intent.getBooleanExtra("compose", false)){ - showCompose(); - }else if(Intent.ACTION_VIEW.equals(intent.getAction())){ - handleURL(intent.getData(), null); - }else{ - maybeRequestNotificationsPermission(); - } - } + restartHomeFragment(); } if(BuildConfig.BUILD_TYPE.startsWith("appcenter")){ @@ -200,4 +167,41 @@ public class MainActivity extends FragmentStackActivity{ requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, 100); } } + + public void restartHomeFragment(){ + if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){ + showFragmentClearingBackStack(new SplashFragment()); + }else{ + AccountSessionManager.getInstance().maybeUpdateLocalInfo(); + AccountSession session; + Bundle args=new Bundle(); + Intent intent=getIntent(); + if(intent.getBooleanExtra("fromNotification", false)){ + String accountID=intent.getStringExtra("accountID"); + try{ + session=AccountSessionManager.getInstance().getAccount(accountID); + if(!intent.hasExtra("notification")) + args.putString("tab", "notifications"); + }catch(IllegalStateException x){ + session=AccountSessionManager.getInstance().getLastActiveAccount(); + } + }else{ + session=AccountSessionManager.getInstance().getLastActiveAccount(); + } + args.putString("account", session.getID()); + Fragment fragment=session.activated ? new HomeFragment() : new AccountActivationFragment(); + fragment.setArguments(args); + showFragmentClearingBackStack(fragment); + if(intent.getBooleanExtra("fromNotification", false) && intent.hasExtra("notification")){ + Notification notification=Parcels.unwrap(intent.getParcelableExtra("notification")); + showFragmentForNotification(notification, session.getID()); + }else if(intent.getBooleanExtra("compose", false)){ + showCompose(); + }else if(Intent.ACTION_VIEW.equals(intent.getAction())){ + handleURL(intent.getData(), null); + }else{ + maybeRequestNotificationsPermission(); + } + } + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/AccountActivationFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/AccountActivationFragment.java index 6395cc41..75325ad4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/AccountActivationFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/AccountActivationFragment.java @@ -165,9 +165,7 @@ public class AccountActivationFragment extends ToolbarFragment{ private void tryGetAccount(){ if(AccountSessionManager.getInstance().tryGetAccount(accountID)==null){ uiHandler.removeCallbacks(pollRunnable); - getActivity().finish(); - Intent intent=new Intent(getActivity(), MainActivity.class); - startActivity(intent); + ((MainActivity)getActivity()).restartHomeFragment(); return; } currentRequest=new GetOwnAccount() diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsMainFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsMainFragment.java index 93ae3b82..e7ea455f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsMainFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsMainFragment.java @@ -156,9 +156,7 @@ public class SettingsMainFragment extends BaseSettingsFragment{ .setMessage(getString(R.string.confirm_log_out, session.getFullUsername())) .setPositiveButton(R.string.log_out, (dialog, which)->AccountSessionManager.get(accountID).logOut(getActivity(), ()->{ loggedOut=true; - getActivity().finish(); - Intent intent=new Intent(getActivity(), MainActivity.class); - startActivity(intent); + ((MainActivity)getActivity()).restartHomeFragment(); })) .setNegativeButton(R.string.cancel, null) .show(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java b/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java index 23e93823..540c1c90 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java @@ -8,6 +8,7 @@ import android.graphics.drawable.Animatable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; +import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.view.WindowInsets; @@ -36,6 +37,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.recyclerview.widget.LinearLayoutManager; +import me.grishka.appkit.FragmentStackActivity; import me.grishka.appkit.Nav; import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.ErrorResponse; @@ -113,9 +115,7 @@ public class AccountSwitcherSheet extends BottomSheet{ private void logOut(String accountID){ AccountSessionManager.get(accountID).logOut(activity, ()->{ dismiss(); - activity.finish(); - Intent intent=new Intent(activity, MainActivity.class); - activity.startActivity(intent); + ((MainActivity)activity).restartHomeFragment(); }); } @@ -248,17 +248,17 @@ public class AccountSwitcherSheet extends BottomSheet{ @Override public void onClick(){ + dismiss(); if(AccountSessionManager.getInstance().getLastActiveAccountID().equals(item.getID())){ - dismiss(); if(fragment!=null){ fragment.setCurrentTab(R.id.tab_profile); } return; } - if(AccountSessionManager.getInstance().tryGetAccount(item.getID())!=null) + if(AccountSessionManager.getInstance().tryGetAccount(item.getID())!=null){ AccountSessionManager.getInstance().setLastActiveAccountID(item.getID()); - activity.finish(); - activity.startActivity(new Intent(activity, MainActivity.class)); + ((MainActivity)activity).restartHomeFragment(); + } } @Override