From 94eb898e778020e847dc0125311d8ec4efc77685 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 15:22:42 +0000 Subject: [PATCH] Invalidate avatar cache correctly on profile updates Co-authored-by: dlukt <201112286+dlukt@users.noreply.github.com> --- .../events/AccountInfoUpdatedEvent.java | 13 +++++++++ .../techidon/fragments/ComposeFragment.java | 12 +++++++++ .../techidon/fragments/ProfileFragment.java | 27 +++++++++++++++++++ .../techidon/fragments/ThreadFragment.java | 12 +++++++++ 4 files changed, 64 insertions(+) create mode 100644 mastodon/src/main/java/de/icod/techidon/events/AccountInfoUpdatedEvent.java diff --git a/mastodon/src/main/java/de/icod/techidon/events/AccountInfoUpdatedEvent.java b/mastodon/src/main/java/de/icod/techidon/events/AccountInfoUpdatedEvent.java new file mode 100644 index 000000000..eb016243a --- /dev/null +++ b/mastodon/src/main/java/de/icod/techidon/events/AccountInfoUpdatedEvent.java @@ -0,0 +1,13 @@ +package de.icod.techidon.events; + +import de.icod.techidon.model.Account; + +public class AccountInfoUpdatedEvent{ + public final String accountID; + public final Account account; + + public AccountInfoUpdatedEvent(String accountID, Account account){ + this.accountID=accountID; + this.account=account; + } +} diff --git a/mastodon/src/main/java/de/icod/techidon/fragments/ComposeFragment.java b/mastodon/src/main/java/de/icod/techidon/fragments/ComposeFragment.java index b6cf66c25..554c079b8 100644 --- a/mastodon/src/main/java/de/icod/techidon/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/de/icod/techidon/fragments/ComposeFragment.java @@ -80,6 +80,7 @@ import de.icod.techidon.events.ScheduledStatusCreatedEvent; import de.icod.techidon.events.ScheduledStatusDeletedEvent; import de.icod.techidon.events.StatusCountersUpdatedEvent; +import de.icod.techidon.events.AccountInfoUpdatedEvent; import de.icod.techidon.events.StatusCreatedEvent; import de.icod.techidon.events.StatusUpdatedEvent; import de.icod.techidon.fragments.account_list.AccountSearchFragment; @@ -1624,6 +1625,17 @@ public void onActivityResult(int requestCode, int resultCode, Intent data){ } } + @Subscribe + public void onAccountInfoUpdated(AccountInfoUpdatedEvent ev){ + if(!ev.accountID.equals(accountID)) + return; + if(ev.account.avatar!=null) { + UrlImageLoaderRequest req = new UrlImageLoaderRequest(ev.account.avatar); + me.grishka.appkit.imageloader.ImageCache.getInstance(getActivity()).remove(req); + ViewImageLoader.load(selfAvatar, null, req); + } + } + @Subscribe public void onTakePictureRequest(TakePictureRequestEvent ev) { if(isVisible()) { diff --git a/mastodon/src/main/java/de/icod/techidon/fragments/ProfileFragment.java b/mastodon/src/main/java/de/icod/techidon/fragments/ProfileFragment.java index f0fe4e724..55f4ce9f8 100644 --- a/mastodon/src/main/java/de/icod/techidon/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/de/icod/techidon/fragments/ProfileFragment.java @@ -101,7 +101,9 @@ import de.icod.techidon.ui.views.NestedRecyclerScrollView; import de.icod.techidon.ui.views.ProgressBarButton; import de.icod.techidon.utils.ElevationOnScrollListener; +import de.icod.techidon.events.AccountInfoUpdatedEvent; import de.icod.techidon.utils.ProvidesAssistContent; +import com.squareup.otto.Subscribe; import org.parceler.Parcels; import java.time.LocalDateTime; @@ -266,6 +268,31 @@ public void onAttach(Context activity){ setHasOptionsMenuCompat(true); } + @Override + public void onResume(){ + super.onResume(); + de.icod.techidon.E.register(this); + } + + @Override + public void onPause(){ + de.icod.techidon.E.unregister(this); + super.onPause(); + } + + @Subscribe + public void onAccountInfoUpdated(AccountInfoUpdatedEvent ev){ + if(!ev.accountID.equals(account.id)) + return; + if(!TextUtils.isEmpty(ev.account.avatar)) { + UrlImageLoaderRequest req = new UrlImageLoaderRequest( + GlobalUserPreferences.playGifs ? ev.account.avatar : ev.account.avatarStatic, + V.dp(100), V.dp(100)); + me.grishka.appkit.imageloader.ImageCache.getInstance(getActivity()).remove(req); + ViewImageLoader.load(avatar, null, req); + } + } + @Override public View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View content=inflater.inflate(R.layout.fragment_profile, container, false); diff --git a/mastodon/src/main/java/de/icod/techidon/fragments/ThreadFragment.java b/mastodon/src/main/java/de/icod/techidon/fragments/ThreadFragment.java index 0b025f9b9..5da15b62e 100644 --- a/mastodon/src/main/java/de/icod/techidon/fragments/ThreadFragment.java +++ b/mastodon/src/main/java/de/icod/techidon/fragments/ThreadFragment.java @@ -25,6 +25,7 @@ import de.icod.techidon.api.requests.statuses.GetStatusContext; import de.icod.techidon.api.session.AccountSessionManager; import de.icod.techidon.events.StatusCountersUpdatedEvent; +import de.icod.techidon.events.AccountInfoUpdatedEvent; import de.icod.techidon.events.StatusMuteChangedEvent; import de.icod.techidon.events.StatusUpdatedEvent; import de.icod.techidon.model.Account; @@ -135,6 +136,17 @@ public void onDestroy(){ E.unregister(this); } + @Subscribe + public void onAccountInfoUpdated(AccountInfoUpdatedEvent ev){ + if(!ev.accountID.equals(accountID)) + return; + if(!TextUtils.isEmpty(ev.account.avatar) && replyButtonAva != null) { + UrlImageLoaderRequest req = new UrlImageLoaderRequest(ev.account.avatar, V.dp(24), V.dp(24)); + me.grishka.appkit.imageloader.ImageCache.getInstance(getActivity()).remove(req); + ViewImageLoader.loadWithoutAnimation(replyButtonAva, getResources().getDrawable(R.drawable.image_placeholder), req); + } + } + @Subscribe public void onStatusMuteChanged(StatusMuteChangedEvent ev){ for(Status s:data){