From d14fc624f9618cd639341fad4250718b6c3ee355 Mon Sep 17 00:00:00 2001 From: Grishka Date: Fri, 8 Apr 2022 00:24:11 +0300 Subject: [PATCH] Probably fix empty emoji picker --- .../android/api/session/AccountSessionManager.java | 5 ++++- .../android/events/EmojiUpdatedEvent.java | 9 +++++++++ .../android/fragments/ComposeFragment.java | 7 ++++++- .../android/ui/CustomEmojiPopupKeyboard.java | 14 ++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/events/EmojiUpdatedEvent.java 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 779ea61c..b0bc9cc7 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 @@ -10,6 +10,7 @@ import android.util.Log; import com.google.gson.JsonParseException; +import org.joinmastodon.android.E; import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.R; import org.joinmastodon.android.api.MastodonAPIController; @@ -18,6 +19,7 @@ import org.joinmastodon.android.api.requests.instance.GetCustomEmojis; import org.joinmastodon.android.api.requests.accounts.GetOwnAccount; import org.joinmastodon.android.api.requests.instance.GetInstance; import org.joinmastodon.android.api.requests.oauth.CreateOAuthApp; +import org.joinmastodon.android.events.EmojiUpdatedEvent; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Application; import org.joinmastodon.android.model.Emoji; @@ -260,7 +262,7 @@ public class AccountSessionManager{ .exec(session.getID()); } - private void updateInstanceInfo(String domain){ + public void updateInstanceInfo(String domain){ new GetInstance() .setCallback(new Callback<>(){ @Override @@ -277,6 +279,7 @@ public class AccountSessionManager{ customEmojis.put(domain, groupCustomEmojis(emojis)); instancesLastUpdated.put(domain, emojis.lastUpdated); MastodonAPIController.runInBackground(()->writeInstanceInfoFile(emojis, domain)); + E.post(new EmojiUpdatedEvent(domain)); } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/events/EmojiUpdatedEvent.java b/mastodon/src/main/java/org/joinmastodon/android/events/EmojiUpdatedEvent.java new file mode 100644 index 00000000..d00e5dee --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/events/EmojiUpdatedEvent.java @@ -0,0 +1,9 @@ +package org.joinmastodon.android.events; + +public class EmojiUpdatedEvent{ + public String instanceDomain; + + public EmojiUpdatedEvent(String instanceDomain){ + this.instanceDomain=instanceDomain; + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java index 5e154cfd..63ff867a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -196,6 +196,9 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis Nav.finish(this); return; } + if(customEmojis.isEmpty()){ + AccountSessionManager.getInstance().updateInstanceInfo(instanceDomain); + } if(instance.maxTootChars>0) charLimit=instance.maxTootChars; @@ -546,7 +549,9 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis } private void onCustomEmojiClick(Emoji emoji){ - mainEditText.getText().replace(mainEditText.getSelectionStart(), mainEditText.getSelectionEnd(), ':'+emoji.shortcode+':'); + int start=mainEditText.getSelectionStart(); + String prefix=start>0 && !Character.isWhitespace(mainEditText.getText().charAt(start-1)) ? " :" : ":"; + mainEditText.getText().replace(start, mainEditText.getSelectionEnd(), prefix+emoji.shortcode+':'); } private void updateToolbar(){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/CustomEmojiPopupKeyboard.java b/mastodon/src/main/java/org/joinmastodon/android/ui/CustomEmojiPopupKeyboard.java index feca36d5..995a1c92 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/CustomEmojiPopupKeyboard.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/CustomEmojiPopupKeyboard.java @@ -1,5 +1,6 @@ package org.joinmastodon.android.ui; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.res.TypedArray; import android.graphics.Rect; @@ -11,7 +12,11 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import com.squareup.otto.Subscribe; + import org.joinmastodon.android.R; +import org.joinmastodon.android.api.session.AccountSessionManager; +import org.joinmastodon.android.events.EmojiUpdatedEvent; import org.joinmastodon.android.model.Emoji; import org.joinmastodon.android.model.EmojiCategory; import org.joinmastodon.android.ui.utils.UiUtils; @@ -102,6 +107,15 @@ public class CustomEmojiPopupKeyboard extends PopupKeyboard{ this.listener=listener; } + @SuppressLint("NotifyDataSetChanged") + @Subscribe + public void onEmojiUpdated(EmojiUpdatedEvent ev){ + if(ev.instanceDomain.equals(domain)){ + emojis=AccountSessionManager.getInstance().getCustomEmojis(domain); + adapter.notifyDataSetChanged(); + } + } + private class SingleCategoryAdapter extends UsableRecyclerView.Adapter implements ImageLoaderRecyclerAdapter{ private final EmojiCategory category; private final List requests;