From 167c3e6251793d681841ecc546a6863437eb36df Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 13 Dec 2022 12:04:35 +0100 Subject: [PATCH] Fix some crashes --- .../app/fedilab/android/BaseMainActivity.java | 2 +- .../android/activities/ComposeActivity.java | 8 +++++-- .../android/activities/LoginActivity.java | 23 +++++++++++-------- .../android/activities/ProfileActivity.java | 22 ++++++++++-------- .../android/ui/drawer/ComposeAdapter.java | 4 +++- .../ui/drawer/ConversationAdapter.java | 13 +++++++++-- .../android/ui/drawer/StatusAdapter.java | 4 ++-- 7 files changed, 50 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/BaseMainActivity.java index 1f28b8be..9570e82b 100644 --- a/app/src/main/java/app/fedilab/android/BaseMainActivity.java +++ b/app/src/main/java/app/fedilab/android/BaseMainActivity.java @@ -697,7 +697,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt new ViewModelProvider(BaseMainActivity.this).get(AccountsVM.class).getConnectedAccount(currentInstance, currentToken) .observe(BaseMainActivity.this, mastodonAccount -> { //Initialize static var - if (mastodonAccount != null) { + if (mastodonAccount != null && currentAccount != null) { currentAccount.mastodon_account = mastodonAccount; displayReleaseNotesIfNeeded(BaseMainActivity.this, false); new Thread(() -> { diff --git a/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java b/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java index f5244ea6..1688d292 100644 --- a/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java @@ -870,10 +870,14 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana private boolean canBeSent(StatusDraft statusDraft) { - if (statusDraft == null || statusDraft.statusDraftList == null || statusDraft.statusDraftList.isEmpty()) { + if (statusDraft == null) { + return false; + } + List statuses = statusDraft.statusDraftList; + if (statuses == null || statuses.size() == 0) { return false; } - Status statusCheck = statusDraft.statusDraftList.get(0); + Status statusCheck = statuses.get(0); if (statusCheck == null) { return false; } diff --git a/app/src/main/java/app/fedilab/android/activities/LoginActivity.java b/app/src/main/java/app/fedilab/android/activities/LoginActivity.java index d86c795d..4b91601b 100644 --- a/app/src/main/java/app/fedilab/android/activities/LoginActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/LoginActivity.java @@ -111,18 +111,23 @@ public class LoginActivity extends BaseActivity { //API call to retrieve account information for the new token AccountsVM accountsVM = new ViewModelProvider(LoginActivity.this).get(AccountsVM.class); accountsVM.getConnectedAccount(currentInstanceLogin, account.token).observe(LoginActivity.this, mastodonAccount -> { - account.mastodon_account = mastodonAccount; - account.user_id = mastodonAccount.id; - //We check if user have really moderator rights - if (requestedAdmin) { - AdminVM adminVM = new ViewModelProvider(LoginActivity.this).get(AdminVM.class); - adminVM.getAccount(account.instance, account.token, account.user_id).observe(LoginActivity.this, adminAccount -> { - account.admin = adminAccount != null; + if (mastodonAccount != null) { + account.mastodon_account = mastodonAccount; + account.user_id = mastodonAccount.id; + //We check if user have really moderator rights + if (requestedAdmin) { + AdminVM adminVM = new ViewModelProvider(LoginActivity.this).get(AdminVM.class); + adminVM.getAccount(account.instance, account.token, account.user_id).observe(LoginActivity.this, adminAccount -> { + account.admin = adminAccount != null; + proceedLogin(LoginActivity.this, account); + }); + } else { proceedLogin(LoginActivity.this, account); - }); + } } else { - proceedLogin(LoginActivity.this, account); + Toasty.error(LoginActivity.this, getString(R.string.toast_token), Toast.LENGTH_LONG).show(); } + }); } else { Toasty.error(LoginActivity.this, getString(R.string.toast_token), Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java b/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java index 97eb3c47..79ac5c58 100644 --- a/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java @@ -903,16 +903,20 @@ public class ProfileActivity extends BaseActivity { if (relationship == null || !relationship.following) { accountsVM.follow(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id, true, false) .observe(ProfileActivity.this, newRelationShip -> { - relationship = newRelationShip; - updateAccount(); - if (isChecked) { - timelinesVM.addAccountsList(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, listsId[which], userIds).observe(ProfileActivity.this, success -> { - if (success == null || !success) { - Toasty.error(ProfileActivity.this, getString(R.string.toast_error_add_to_list), Toast.LENGTH_LONG).show(); - } - }); + if (newRelationShip != null) { + relationship = newRelationShip; + updateAccount(); + if (isChecked) { + timelinesVM.addAccountsList(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, listsId[which], userIds).observe(ProfileActivity.this, success -> { + if (success == null || !success) { + Toasty.error(ProfileActivity.this, getString(R.string.toast_error_add_to_list), Toast.LENGTH_LONG).show(); + } + }); + } else { + timelinesVM.deleteAccountsList(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, listsId[which], userIds); + } } else { - timelinesVM.deleteAccountsList(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, listsId[which], userIds); + Toasty.error(ProfileActivity.this, getString(R.string.toast_error_add_to_list), Toast.LENGTH_LONG).show(); } }); } else { diff --git a/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java index aff2ad16..a4dd8a07 100644 --- a/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java +++ b/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java @@ -854,7 +854,9 @@ public class ComposeAdapter extends RecyclerView.Adapter diff --git a/app/src/main/java/app/fedilab/android/ui/drawer/ConversationAdapter.java b/app/src/main/java/app/fedilab/android/ui/drawer/ConversationAdapter.java index c98b9062..5651ca47 100644 --- a/app/src/main/java/app/fedilab/android/ui/drawer/ConversationAdapter.java +++ b/app/src/main/java/app/fedilab/android/ui/drawer/ConversationAdapter.java @@ -60,6 +60,7 @@ public class ConversationAdapter extends RecyclerView.Adapter conversations) { if (conversations == null) { @@ -194,7 +195,7 @@ public class ConversationAdapter extends RecyclerView.Adapter(holder.binding.spoiler), () -> notifyItemChanged(holder.getBindingAdapterPosition())), + new WeakReference<>(holder.binding.spoiler), () -> mRecyclerView.post(() -> notifyItemChanged(holder.getBindingAdapterPosition()))), TextView.BufferType.SPANNABLE); } else { holder.binding.spoiler.setVisibility(View.GONE); @@ -204,7 +205,7 @@ public class ConversationAdapter extends RecyclerView.Adapter(holder.binding.statusContent), () -> notifyItemChanged(holder.getBindingAdapterPosition())), + new WeakReference<>(holder.binding.statusContent), () -> mRecyclerView.post(() -> notifyItemChanged(holder.getBindingAdapterPosition()))), TextView.BufferType.SPANNABLE); //--- DATE --- holder.binding.lastMessageDate.setText(Helper.dateDiff(context, conversation.last_status.created_at)); @@ -224,6 +225,7 @@ public class ConversationAdapter extends RecyclerView.Adapter StatusViewHolder holder = (StatusViewHolder) viewHolder; SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); if (sharedpreferences.getBoolean(context.getString(R.string.SET_CARDVIEW), false)) { - holder.binding.cardviewContainer.setCardElevation(Helper.convertDpToPixel(5, context)); - holder.binding.dividerCard.setVisibility(View.GONE); + holder.bindingFilteredHide.cardviewContainer.setCardElevation(Helper.convertDpToPixel(5, context)); + holder.bindingFilteredHide.dividerCard.setVisibility(View.GONE); } if (status.isFetchMore && fetchMoreCallBack != null) { holder.bindingFilteredHide.layoutFetchMore.fetchMoreContainer.setVisibility(View.VISIBLE);