From c80afaf9c0ee0f14ae51e46b1b43cf305215fd6f Mon Sep 17 00:00:00 2001 From: sk Date: Mon, 29 May 2023 02:40:02 +0200 Subject: [PATCH] avoid sessions without instance info --- .../main/java/org/joinmastodon/android/MainActivity.java | 6 ++++++ .../android/api/session/AccountSessionManager.java | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java b/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java index ddfb01371..535584a9c 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java +++ b/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java @@ -52,6 +52,12 @@ public class MainActivity extends FragmentStackActivity{ }else{ session=AccountSessionManager.getInstance().getLastActiveAccount(); } + if (session.getInstance() == null) { + // i don't know how, but i ended up having a session, but no instance info. + // removing account to avoid glitched behavior and crashes + AccountSessionManager.getInstance().removeAccount(session.getID()); + session=AccountSessionManager.getInstance().getLastActiveAccount(); + } args.putString("account", session.getID()); Fragment fragment=session.activated ? new HomeFragment() : new AccountActivationFragment(); fragment.setArguments(args); diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSessionManager.java b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSessionManager.java index 2afb79835..2589f7fa9 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSessionManager.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSessionManager.java @@ -110,6 +110,12 @@ public class AccountSessionManager{ sessions.put(session.getID(), session); lastActiveAccountID=session.getID(); writeAccountsFile(); + + // write initial instance info to file immediately to avoid sessions without instance info + InstanceInfoStorageWrapper wrapper = new InstanceInfoStorageWrapper(); + wrapper.instance = instance; + MastodonAPIController.runInBackground(()->writeInstanceInfoFile(wrapper, instance.uri)); + updateMoreInstanceInfo(instance, instance.uri); if(PushSubscriptionManager.arePushNotificationsAvailable()){ session.getPushSubscriptionManager().registerAccountForPush(null);