diff --git a/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java b/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java index 0fcc8a93c..ae0f71cd3 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java +++ b/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java @@ -43,50 +43,7 @@ public class MainActivity extends FragmentStackActivity implements ProvidesAssis super.onCreate(savedInstanceState); if(savedInstanceState==null){ - if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){ - showFragmentClearingBackStack(new CustomWelcomeFragment()); - }else{ - AccountSession session; - Bundle args=new Bundle(); - Intent intent=getIntent(); - if(intent.hasExtra("fromExternalShare")) { - AccountSessionManager.getInstance() - .setLastActiveAccountID(intent.getStringExtra("account")); - AccountSessionManager.getInstance().maybeUpdateLocalInfo( - AccountSessionManager.getInstance().getLastActiveAccount()); - showFragmentForExternalShare(intent.getExtras()); - return; - } - - boolean fromNotification = intent.getBooleanExtra("fromNotification", false); - boolean hasNotification = intent.hasExtra("notification"); - if(fromNotification){ - String accountID=intent.getStringExtra("accountID"); - try{ - session=AccountSessionManager.getInstance().getAccount(accountID); - if(!hasNotification) args.putString("tab", "notifications"); - }catch(IllegalStateException x){ - session=AccountSessionManager.getInstance().getLastActiveAccount(); - } - }else{ - session=AccountSessionManager.getInstance().getLastActiveAccount(); - } - AccountSessionManager.getInstance().maybeUpdateLocalInfo(session); - args.putString("account", session.getID()); - Fragment fragment=session.activated ? new HomeFragment() : new AccountActivationFragment(); - fragment.setArguments(args); - if(fromNotification && hasNotification){ - 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 { - showFragmentClearingBackStack(fragment); - maybeRequestNotificationsPermission(); - } - } + restartHomeFragment(); } if(GithubSelfUpdater.needSelfUpdating()){ @@ -259,4 +216,51 @@ public class MainActivity extends FragmentStackActivity implements ProvidesAssis Fragment fragment = getCurrentFragment(); if (fragment != null) callFragmentToProvideAssistContent(fragment, assistContent); } + + public void restartHomeFragment(){ + if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){ + showFragmentClearingBackStack(new CustomWelcomeFragment()); + }else{ + AccountSession session; + Bundle args=new Bundle(); + Intent intent=getIntent(); + if(intent.hasExtra("fromExternalShare")) { + AccountSessionManager.getInstance() + .setLastActiveAccountID(intent.getStringExtra("account")); + AccountSessionManager.getInstance().maybeUpdateLocalInfo( + AccountSessionManager.getInstance().getLastActiveAccount()); + showFragmentForExternalShare(intent.getExtras()); + return; + } + + boolean fromNotification = intent.getBooleanExtra("fromNotification", false); + boolean hasNotification = intent.hasExtra("notification"); + if(fromNotification){ + String accountID=intent.getStringExtra("accountID"); + try{ + session=AccountSessionManager.getInstance().getAccount(accountID); + if(!hasNotification) args.putString("tab", "notifications"); + }catch(IllegalStateException x){ + session=AccountSessionManager.getInstance().getLastActiveAccount(); + } + }else{ + session=AccountSessionManager.getInstance().getLastActiveAccount(); + } + AccountSessionManager.getInstance().maybeUpdateLocalInfo(session); + args.putString("account", session.getID()); + Fragment fragment=session.activated ? new HomeFragment() : new AccountActivationFragment(); + fragment.setArguments(args); + if(fromNotification && hasNotification){ + 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 { + showFragmentClearingBackStack(fragment); + 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 6395cc415..75325ad4a 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 6adcaf4df..72359efd7 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 @@ -163,9 +163,7 @@ public class SettingsMainFragment extends BaseSettingsFragment{ .setMessage(getString(R.string.confirm_log_out, session.getFullUsername())) .setPositiveButton(R.string.log_out, (dialog, which)->account.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 d5d0c6b8a..106d64d46 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; @@ -39,6 +40,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; @@ -144,21 +146,10 @@ public class AccountSwitcherSheet extends BottomSheet{ } private void logOut(String accountID){ - AccountSession session=AccountSessionManager.getInstance().getAccount(accountID); - new RevokeOauthToken(session.app.clientId, session.app.clientSecret, session.token.accessToken) - .setCallback(new Callback<>(){ - @Override - public void onSuccess(Object result){ - onLoggedOut(accountID); - } - - @Override - public void onError(ErrorResponse error){ - onLoggedOut(accountID); - } - }) - .wrapProgress(activity, R.string.loading, false) - .exec(accountID); + AccountSessionManager.get(accountID).logOut(activity, ()->{ + dismiss(); + ((MainActivity)activity).restartHomeFragment(); + }); } private void logOutAll(){ @@ -326,15 +317,15 @@ public class AccountSwitcherSheet extends BottomSheet{ @Override public void onClick(){ setOnDismissListener(null); + dismiss(); if (onClick != null) { - dismiss(); onClick.accept(item.getID(), false); 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