Merge branch 'master' of https://github.com/LucasGGamerM/moshidon into feat/favourite-animation
This commit is contained in:
commit
b0d223c47c
5 changed files with 62 additions and 9 deletions
|
@ -39,6 +39,9 @@ public class GlobalUserPreferences{
|
|||
private final static Type recentLanguagesType = new TypeToken<Map<String, List<String>>>() {}.getType();
|
||||
public static Map<String, List<String>> recentLanguages;
|
||||
|
||||
private final static Type recentEmojisType = new TypeToken<Map<String, Integer>>() {}.getType();
|
||||
public static Map<String, Integer> recentEmojis;
|
||||
|
||||
private static SharedPreferences getPrefs(){
|
||||
return MastodonApp.context.getSharedPreferences("global", Context.MODE_PRIVATE);
|
||||
}
|
||||
|
@ -68,6 +71,7 @@ public class GlobalUserPreferences{
|
|||
enableDeleteNotifications=prefs.getBoolean("enableDeleteNotifications", true);
|
||||
theme=ThemePreference.values()[prefs.getInt("theme", 0)];
|
||||
recentLanguages=fromJson(prefs.getString("recentLanguages", "{}"), recentLanguagesType, new HashMap<>());
|
||||
recentEmojis=fromJson(prefs.getString("recentEmojis", "{}"), recentEmojisType, new HashMap<>());
|
||||
publishButtonText=prefs.getString("publishButtonText", "");
|
||||
|
||||
try {
|
||||
|
@ -104,6 +108,7 @@ public class GlobalUserPreferences{
|
|||
.putInt("theme", theme.ordinal())
|
||||
.putString("color", color.name())
|
||||
.putString("recentLanguages", gson.toJson(recentLanguages))
|
||||
.putString("recentEmojis", gson.toJson(recentEmojis))
|
||||
.apply();
|
||||
}
|
||||
|
||||
|
|
|
@ -273,6 +273,10 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
|||
GlobalUserPreferences.recentLanguages.remove(accountID);
|
||||
GlobalUserPreferences.save();
|
||||
})));
|
||||
items.add(new TextItem(R.string.sk_clear_recent_emoji, ()-> {
|
||||
GlobalUserPreferences.recentEmojis.clear();
|
||||
GlobalUserPreferences.save();
|
||||
}));
|
||||
// items.add(new TextItem(R.string.log_out, this::confirmLogOut));
|
||||
|
||||
items.add(new FooterItem(getString(R.string.sk_settings_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE)));
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
package org.joinmastodon.android.ui;
|
||||
|
||||
import static org.joinmastodon.android.GlobalUserPreferences.recentEmojis;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Animatable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
@ -12,8 +13,13 @@ import android.view.ViewGroup;
|
|||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.squareup.otto.Subscribe;
|
||||
|
||||
import org.joinmastodon.android.GlobalUserPreferences;
|
||||
import org.joinmastodon.android.R;
|
||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||
import org.joinmastodon.android.events.EmojiUpdatedEvent;
|
||||
|
@ -21,13 +27,13 @@ import org.joinmastodon.android.model.Emoji;
|
|||
import org.joinmastodon.android.model.EmojiCategory;
|
||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter;
|
||||
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
|
||||
import me.grishka.appkit.imageloader.ListImageLoaderWrapper;
|
||||
|
@ -40,6 +46,9 @@ import me.grishka.appkit.utils.V;
|
|||
import me.grishka.appkit.views.UsableRecyclerView;
|
||||
|
||||
public class CustomEmojiPopupKeyboard extends PopupKeyboard{
|
||||
//determines how many emoji need to be clicked, before it disappears from the recent emojis
|
||||
private static final int NEW_RECENT_VALUE=15;
|
||||
|
||||
private List<EmojiCategory> emojis;
|
||||
private UsableRecyclerView list;
|
||||
private ListImageLoaderWrapper imgLoader;
|
||||
|
@ -82,6 +91,17 @@ public class CustomEmojiPopupKeyboard extends PopupKeyboard{
|
|||
list.setLayoutManager(lm);
|
||||
imgLoader=new ListImageLoaderWrapper(activity, list, new RecyclerViewDelegate(list), null);
|
||||
|
||||
// inject category with last used emojis
|
||||
if (!recentEmojis.isEmpty()) {
|
||||
List<Emoji> allAvailableEmojis = emojis.stream().flatMap(category -> category.emojis.stream()).collect(Collectors.toList());
|
||||
List<Emoji> recentEmojiList = new ArrayList<>();
|
||||
for (String emojiCode : recentEmojis.keySet().stream().sorted(Comparator.comparingInt(GlobalUserPreferences.recentEmojis::get).reversed()).collect(Collectors.toList())) {
|
||||
Optional<Emoji> element = allAvailableEmojis.stream().filter(e -> e.shortcode.equals(emojiCode)).findFirst();
|
||||
element.ifPresent(recentEmojiList::add);
|
||||
}
|
||||
emojis.add(0, new EmojiCategory(activity.getString(R.string.sk_emoji_recent), recentEmojiList));
|
||||
}
|
||||
|
||||
for(EmojiCategory category:emojis)
|
||||
adapter.addAdapter(new SingleCategoryAdapter(category));
|
||||
list.setAdapter(adapter);
|
||||
|
@ -100,6 +120,11 @@ public class CustomEmojiPopupKeyboard extends PopupKeyboard{
|
|||
list.setBackgroundColor(UiUtils.getThemeColor(activity, android.R.attr.colorBackground));
|
||||
list.setSelector(null);
|
||||
|
||||
//remove recently used afterwards, it would get duplicated otherwise
|
||||
if (!recentEmojis.isEmpty()) {
|
||||
emojis.remove(0);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
@ -107,6 +132,19 @@ public class CustomEmojiPopupKeyboard extends PopupKeyboard{
|
|||
this.listener=listener;
|
||||
}
|
||||
|
||||
private void increaseEmojiCount(Emoji emoji) {
|
||||
Integer usageCount = recentEmojis.get(emoji.shortcode);
|
||||
if (usageCount != null) {
|
||||
recentEmojis.put(emoji.shortcode, usageCount + 1);
|
||||
} else {
|
||||
recentEmojis.put(emoji.shortcode, NEW_RECENT_VALUE);
|
||||
}
|
||||
|
||||
recentEmojis.entrySet().removeIf(e -> e.getValue() <= 0);
|
||||
recentEmojis.replaceAll((k, v) -> v - 1);
|
||||
GlobalUserPreferences.save();
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
@Subscribe
|
||||
public void onEmojiUpdated(EmojiUpdatedEvent ev){
|
||||
|
@ -203,6 +241,7 @@ public class CustomEmojiPopupKeyboard extends PopupKeyboard{
|
|||
|
||||
@Override
|
||||
public void onClick(){
|
||||
increaseEmojiCount(item);
|
||||
listener.accept(item);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
<string name="sk_settings_donate">Spenden</string>
|
||||
<string name="sk_delete_notification">Benachrichtigung löschen</string>
|
||||
<string name="sk_delete_notification_confirm_action">Benachrichtigung löschen</string>
|
||||
<string name="sk_delete_notification_confirm">Benachrichtigung wirklich löschen\?</string>
|
||||
<string name="sk_delete_notification_confirm">Benachrichtigung wirklich löschen?</string>
|
||||
<string name="sk_clear_all_notifications">Alle Benachrichtigungen löschen</string>
|
||||
<string name="sk_clear_all_notifications_confirm_action">Alle löschen</string>
|
||||
<string name="sk_clear_all_notifications_confirm">Wirklich alle Benachrichtigungen löschen?</string>
|
||||
|
@ -111,9 +111,9 @@
|
|||
<string name="sk_draft">Entwurf</string>
|
||||
<string name="sk_schedule">Planen</string>
|
||||
<string name="sk_confirm_delete_draft_title">Entwurf löschen</string>
|
||||
<string name="sk_confirm_delete_draft">Möchtest du diesen entworfenen Beitrag wirklich löschen\?</string>
|
||||
<string name="sk_confirm_delete_draft">Möchtest du diesen entworfenen Beitrag wirklich löschen?</string>
|
||||
<string name="sk_confirm_delete_scheduled_post_title">Geplanten Beitrag löschen</string>
|
||||
<string name="sk_confirm_delete_scheduled_post">Möchtest du diesen geplanten Beitrag wirklich löschen\?</string>
|
||||
<string name="sk_confirm_delete_scheduled_post">Möchtest du diesen geplanten Beitrag wirklich löschen?</string>
|
||||
<string name="sk_draft_or_schedule">Entwurf oder Planen</string>
|
||||
<string name="sk_compose_draft">Beitrag wird als Entwurf gespeichert.</string>
|
||||
<string name="sk_compose_scheduled">Geplant für</string>
|
||||
|
@ -129,6 +129,9 @@
|
|||
<string name="sk_compose_no_schedule">Nicht planen</string>
|
||||
<string name="sk_compose_no_draft">Nicht entwerfen</string>
|
||||
<string name="sk_settings_reduce_motion">Bewegungen in Animationen reduzieren</string>
|
||||
<string name="sk_bot_account">Dies ist ein Bot-Konto</string>
|
||||
<string name="sk_no_image_desc_title">Keine Bildbeschreibung</string>
|
||||
<string name="sk_no_image_desc">Die enthaltenen Bilder haben keine Beschreibung. Bitte fügen Sie eine Beschreibung hinzu, damit auch sehbehinderte Personen teilnehmen können.</string>
|
||||
</resources>
|
||||
<string name="sk_no_image_desc">Die enthaltenen Bilder haben keine Beschreibung. Bitte füge eine Beschreibung hinzu, damit auch sehbehinderte Personen teilnehmen können.</string>
|
||||
<string name="sk_emoji_recent">Kürzlich verwendet</string>
|
||||
<string name="sk_clear_recent_emoji">Kürzlich verwendetes Emoji löschen</string>
|
||||
</resources>
|
|
@ -133,4 +133,6 @@
|
|||
<string name="sk_bot_account">This is a bot account</string>
|
||||
<string name="sk_no_image_desc_title">No Image description</string>
|
||||
<string name="sk_no_image_desc">The included images have no description. Please consider adding one, to allow visually impaired people to participate.</string>
|
||||
<string name="sk_emoji_recent">Recently used</string>
|
||||
<string name="sk_clear_recent_emoji">Clear recently used emoji</string>
|
||||
</resources>
|
Loading…
Add table
Reference in a new issue