stage 1: added emoji adapter and dialog selector
This commit is contained in:
parent
3536c80293
commit
84bedab82c
|
@ -12,8 +12,8 @@ android {
|
||||||
applicationId 'org.nuclearfog.twidda'
|
applicationId 'org.nuclearfog.twidda'
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 33
|
targetSdkVersion 33
|
||||||
versionCode 81
|
versionCode 82
|
||||||
versionName '3.1.1'
|
versionName '3.1.2'
|
||||||
resConfigs 'en', 'de-rDE', 'zh-rCN'
|
resConfigs 'en', 'de-rDE', 'zh-rCN'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -768,6 +768,7 @@ public class Mastodon implements Connection {
|
||||||
Emoji item = new MastodonEmoji(json.getJSONObject(i));
|
Emoji item = new MastodonEmoji(json.getJSONObject(i));
|
||||||
result.add(item);
|
result.add(item);
|
||||||
}
|
}
|
||||||
|
Collections.sort(result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
throw new MastodonException(response);
|
throw new MastodonException(response);
|
||||||
|
|
|
@ -23,7 +23,7 @@ import java.util.TreeMap;
|
||||||
*
|
*
|
||||||
* @author nuclearfog
|
* @author nuclearfog
|
||||||
*/
|
*/
|
||||||
public class EmojiLoader extends AsyncExecutor<EmojiLoader.EmojiParam, EmojiLoader.EmojiResult> {
|
public class TextEmojiLoader extends AsyncExecutor<TextEmojiLoader.EmojiParam, TextEmojiLoader.EmojiResult> {
|
||||||
|
|
||||||
private Connection connection;
|
private Connection connection;
|
||||||
private ImageCache cache;
|
private ImageCache cache;
|
||||||
|
@ -31,7 +31,7 @@ public class EmojiLoader extends AsyncExecutor<EmojiLoader.EmojiParam, EmojiLoad
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public EmojiLoader(Context context) {
|
public TextEmojiLoader(Context context) {
|
||||||
connection = ConnectionManager.getDefaultConnection(context);
|
connection = ConnectionManager.getDefaultConnection(context);
|
||||||
cache = ImageCache.getInstance(context);
|
cache = ImageCache.getInstance(context);
|
||||||
}
|
}
|
|
@ -55,9 +55,9 @@ import org.nuclearfog.textviewtool.LinkAndScrollMovement;
|
||||||
import org.nuclearfog.twidda.R;
|
import org.nuclearfog.twidda.R;
|
||||||
import org.nuclearfog.twidda.backend.api.ConnectionException;
|
import org.nuclearfog.twidda.backend.api.ConnectionException;
|
||||||
import org.nuclearfog.twidda.backend.async.AsyncExecutor.AsyncCallback;
|
import org.nuclearfog.twidda.backend.async.AsyncExecutor.AsyncCallback;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader.EmojiParam;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader.EmojiParam;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader.EmojiResult;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader.EmojiResult;
|
||||||
import org.nuclearfog.twidda.backend.async.RelationLoader;
|
import org.nuclearfog.twidda.backend.async.RelationLoader;
|
||||||
import org.nuclearfog.twidda.backend.async.RelationLoader.RelationParam;
|
import org.nuclearfog.twidda.backend.async.RelationLoader.RelationParam;
|
||||||
import org.nuclearfog.twidda.backend.async.RelationLoader.RelationResult;
|
import org.nuclearfog.twidda.backend.async.RelationLoader.RelationResult;
|
||||||
|
@ -152,7 +152,7 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult
|
||||||
|
|
||||||
private RelationLoader relationLoader;
|
private RelationLoader relationLoader;
|
||||||
private UserLoader userLoader;
|
private UserLoader userLoader;
|
||||||
private EmojiLoader emojiLoader;
|
private TextEmojiLoader emojiLoader;
|
||||||
|
|
||||||
private NestedScrollView root;
|
private NestedScrollView root;
|
||||||
private ConstraintLayout header;
|
private ConstraintLayout header;
|
||||||
|
@ -201,7 +201,7 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult
|
||||||
|
|
||||||
relationLoader = new RelationLoader(this);
|
relationLoader = new RelationLoader(this);
|
||||||
userLoader = new UserLoader(this);
|
userLoader = new UserLoader(this);
|
||||||
emojiLoader = new EmojiLoader(this);
|
emojiLoader = new TextEmojiLoader(this);
|
||||||
picasso = PicassoBuilder.get(this);
|
picasso = PicassoBuilder.get(this);
|
||||||
settings = GlobalSettings.getInstance(this);
|
settings = GlobalSettings.getInstance(this);
|
||||||
if (!settings.toolbarOverlapEnabled()) {
|
if (!settings.toolbarOverlapEnabled()) {
|
||||||
|
|
|
@ -52,9 +52,9 @@ import org.nuclearfog.textviewtool.LinkAndScrollMovement;
|
||||||
import org.nuclearfog.twidda.R;
|
import org.nuclearfog.twidda.R;
|
||||||
import org.nuclearfog.twidda.backend.api.ConnectionException;
|
import org.nuclearfog.twidda.backend.api.ConnectionException;
|
||||||
import org.nuclearfog.twidda.backend.async.AsyncExecutor.AsyncCallback;
|
import org.nuclearfog.twidda.backend.async.AsyncExecutor.AsyncCallback;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader.EmojiParam;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader.EmojiParam;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader.EmojiResult;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader.EmojiResult;
|
||||||
import org.nuclearfog.twidda.backend.async.NotificationAction;
|
import org.nuclearfog.twidda.backend.async.NotificationAction;
|
||||||
import org.nuclearfog.twidda.backend.async.NotificationAction.NotificationActionParam;
|
import org.nuclearfog.twidda.backend.async.NotificationAction.NotificationActionParam;
|
||||||
import org.nuclearfog.twidda.backend.async.NotificationAction.NotificationActionResult;
|
import org.nuclearfog.twidda.backend.async.NotificationAction.NotificationActionResult;
|
||||||
|
@ -205,7 +205,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
|
||||||
private NotificationAction notificationLoader;
|
private NotificationAction notificationLoader;
|
||||||
private TranslationLoader translationLoader;
|
private TranslationLoader translationLoader;
|
||||||
private PollAction pollLoader;
|
private PollAction pollLoader;
|
||||||
private EmojiLoader emojiLoader;
|
private TextEmojiLoader emojiLoader;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private ClipboardManager clip;
|
private ClipboardManager clip;
|
||||||
|
@ -268,7 +268,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
|
||||||
pollLoader = new PollAction(this);
|
pollLoader = new PollAction(this);
|
||||||
notificationLoader = new NotificationAction(this);
|
notificationLoader = new NotificationAction(this);
|
||||||
translationLoader = new TranslationLoader(this);
|
translationLoader = new TranslationLoader(this);
|
||||||
emojiLoader = new EmojiLoader(this);
|
emojiLoader = new TextEmojiLoader(this);
|
||||||
|
|
||||||
picasso = PicassoBuilder.get(this);
|
picasso = PicassoBuilder.get(this);
|
||||||
settings = GlobalSettings.getInstance(this);
|
settings = GlobalSettings.getInstance(this);
|
||||||
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
package org.nuclearfog.twidda.ui.adapter;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView.Adapter;
|
||||||
|
|
||||||
|
import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
|
import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
||||||
|
import org.nuclearfog.twidda.config.GlobalSettings;
|
||||||
|
import org.nuclearfog.twidda.model.Emoji;
|
||||||
|
import org.nuclearfog.twidda.ui.adapter.holder.EmojiHolder;
|
||||||
|
import org.nuclearfog.twidda.ui.adapter.holder.EmojiHolder.OnEmojiClickListener;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class EmojiAdapter extends Adapter<EmojiHolder> implements OnEmojiClickListener {
|
||||||
|
|
||||||
|
private GlobalSettings settings;
|
||||||
|
private Picasso picasso;
|
||||||
|
|
||||||
|
private LinkedList<Object> items = new LinkedList<>();
|
||||||
|
|
||||||
|
|
||||||
|
public EmojiAdapter(Context context) {
|
||||||
|
settings = GlobalSettings.getInstance(context);
|
||||||
|
picasso = PicassoBuilder.get(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public EmojiHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
return new EmojiHolder(parent, settings, picasso, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull EmojiHolder holder, int position) {
|
||||||
|
Object item = items.get(position);
|
||||||
|
if (item instanceof Emoji[]) {
|
||||||
|
holder.setData((Emoji[]) item);
|
||||||
|
} else if (item instanceof String) {
|
||||||
|
holder.setLabel((String) item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return items.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEmojiClick(int position, int index) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void replaceItems(List<Emoji> emojis) {
|
||||||
|
items.clear();
|
||||||
|
String groupname = "";
|
||||||
|
for (Emoji emoji : emojis) {
|
||||||
|
Emoji[] row;
|
||||||
|
Object item = items.peekLast();
|
||||||
|
if (!emoji.getCategory().equals(groupname)) {
|
||||||
|
row = new Emoji[EmojiHolder.ROW_COUNT];
|
||||||
|
row[0] = emoji;
|
||||||
|
items.add(groupname);
|
||||||
|
items.add(row);
|
||||||
|
} else if (item instanceof Emoji[]) {
|
||||||
|
row = (Emoji[]) item;
|
||||||
|
if (row[EmojiHolder.ROW_COUNT - 1] == null) {
|
||||||
|
for (int j = 0; j < row.length; j++) {
|
||||||
|
if (row[j] == null) {
|
||||||
|
row[j] = emoji;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
row = new Emoji[EmojiHolder.ROW_COUNT];
|
||||||
|
row[0] = emoji;
|
||||||
|
items.add(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,7 +10,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder;
|
||||||
import com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
import org.nuclearfog.tag.Tagger.OnTagClickListener;
|
import org.nuclearfog.tag.Tagger.OnTagClickListener;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader;
|
||||||
import org.nuclearfog.twidda.backend.helper.Messages;
|
import org.nuclearfog.twidda.backend.helper.Messages;
|
||||||
import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
||||||
import org.nuclearfog.twidda.config.GlobalSettings;
|
import org.nuclearfog.twidda.config.GlobalSettings;
|
||||||
|
@ -45,7 +45,7 @@ public class MessageAdapter extends Adapter<ViewHolder> implements OnItemClickLi
|
||||||
private OnMessageClickListener itemClickListener;
|
private OnMessageClickListener itemClickListener;
|
||||||
private GlobalSettings settings;
|
private GlobalSettings settings;
|
||||||
private Picasso picasso;
|
private Picasso picasso;
|
||||||
private EmojiLoader emojiLoader;
|
private TextEmojiLoader emojiLoader;
|
||||||
|
|
||||||
private Messages messages;
|
private Messages messages;
|
||||||
private int loadingIndex;
|
private int loadingIndex;
|
||||||
|
@ -58,7 +58,7 @@ public class MessageAdapter extends Adapter<ViewHolder> implements OnItemClickLi
|
||||||
loadingIndex = NO_LOADING;
|
loadingIndex = NO_LOADING;
|
||||||
settings = GlobalSettings.getInstance(context);
|
settings = GlobalSettings.getInstance(context);
|
||||||
picasso = PicassoBuilder.get(context);
|
picasso = PicassoBuilder.get(context);
|
||||||
emojiLoader = new EmojiLoader(context);
|
emojiLoader = new TextEmojiLoader(context);
|
||||||
this.itemClickListener = itemClickListener;
|
this.itemClickListener = itemClickListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder;
|
||||||
|
|
||||||
import com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader;
|
||||||
import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
||||||
import org.nuclearfog.twidda.config.GlobalSettings;
|
import org.nuclearfog.twidda.config.GlobalSettings;
|
||||||
import org.nuclearfog.twidda.model.Notification;
|
import org.nuclearfog.twidda.model.Notification;
|
||||||
|
@ -55,7 +55,7 @@ public class NotificationAdapter extends Adapter<ViewHolder> implements OnHolder
|
||||||
private Picasso picasso;
|
private Picasso picasso;
|
||||||
private GlobalSettings settings;
|
private GlobalSettings settings;
|
||||||
private OnNotificationClickListener listener;
|
private OnNotificationClickListener listener;
|
||||||
private EmojiLoader emojiLoader;
|
private TextEmojiLoader emojiLoader;
|
||||||
|
|
||||||
private List<Notification> notifications;
|
private List<Notification> notifications;
|
||||||
private int loadingIndex;
|
private int loadingIndex;
|
||||||
|
@ -64,7 +64,7 @@ public class NotificationAdapter extends Adapter<ViewHolder> implements OnHolder
|
||||||
public NotificationAdapter(Context context, OnNotificationClickListener listener) {
|
public NotificationAdapter(Context context, OnNotificationClickListener listener) {
|
||||||
settings = GlobalSettings.getInstance(context);
|
settings = GlobalSettings.getInstance(context);
|
||||||
picasso = PicassoBuilder.get(context);
|
picasso = PicassoBuilder.get(context);
|
||||||
emojiLoader = new EmojiLoader(context);
|
emojiLoader = new TextEmojiLoader(context);
|
||||||
notifications = new LinkedList<>();
|
notifications = new LinkedList<>();
|
||||||
loadingIndex = NO_LOADING;
|
loadingIndex = NO_LOADING;
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
|
|
|
@ -9,7 +9,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder;
|
||||||
|
|
||||||
import com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader;
|
||||||
import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
||||||
import org.nuclearfog.twidda.config.GlobalSettings;
|
import org.nuclearfog.twidda.config.GlobalSettings;
|
||||||
import org.nuclearfog.twidda.model.Status;
|
import org.nuclearfog.twidda.model.Status;
|
||||||
|
@ -50,7 +50,7 @@ public class StatusAdapter extends Adapter<ViewHolder> implements OnHolderClickL
|
||||||
*/
|
*/
|
||||||
private static final int MIN_COUNT = 2;
|
private static final int MIN_COUNT = 2;
|
||||||
|
|
||||||
private EmojiLoader emojiLoader;
|
private TextEmojiLoader emojiLoader;
|
||||||
private StatusSelectListener listener;
|
private StatusSelectListener listener;
|
||||||
private GlobalSettings settings;
|
private GlobalSettings settings;
|
||||||
private Picasso picasso;
|
private Picasso picasso;
|
||||||
|
@ -64,7 +64,7 @@ public class StatusAdapter extends Adapter<ViewHolder> implements OnHolderClickL
|
||||||
public StatusAdapter(Context context, StatusSelectListener itemClickListener) {
|
public StatusAdapter(Context context, StatusSelectListener itemClickListener) {
|
||||||
settings = GlobalSettings.getInstance(context);
|
settings = GlobalSettings.getInstance(context);
|
||||||
picasso = PicassoBuilder.get(context);
|
picasso = PicassoBuilder.get(context);
|
||||||
emojiLoader = new EmojiLoader(context);
|
emojiLoader = new TextEmojiLoader(context);
|
||||||
loadingIndex = NO_LOADING;
|
loadingIndex = NO_LOADING;
|
||||||
items = new LinkedList<>();
|
items = new LinkedList<>();
|
||||||
this.listener = itemClickListener;
|
this.listener = itemClickListener;
|
||||||
|
|
|
@ -9,7 +9,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder;
|
||||||
|
|
||||||
import com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader;
|
||||||
import org.nuclearfog.twidda.backend.helper.Users;
|
import org.nuclearfog.twidda.backend.helper.Users;
|
||||||
import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
||||||
import org.nuclearfog.twidda.config.GlobalSettings;
|
import org.nuclearfog.twidda.config.GlobalSettings;
|
||||||
|
@ -43,7 +43,7 @@ public class UserAdapter extends Adapter<ViewHolder> implements OnHolderClickLis
|
||||||
|
|
||||||
private GlobalSettings settings;
|
private GlobalSettings settings;
|
||||||
private Picasso picasso;
|
private Picasso picasso;
|
||||||
private EmojiLoader emojiLoader;
|
private TextEmojiLoader emojiLoader;
|
||||||
|
|
||||||
private UserClickListener listener;
|
private UserClickListener listener;
|
||||||
private boolean enableDelete;
|
private boolean enableDelete;
|
||||||
|
@ -58,7 +58,7 @@ public class UserAdapter extends Adapter<ViewHolder> implements OnHolderClickLis
|
||||||
public UserAdapter(Context context, UserClickListener listener, boolean enableDelete) {
|
public UserAdapter(Context context, UserClickListener listener, boolean enableDelete) {
|
||||||
settings = GlobalSettings.getInstance(context);
|
settings = GlobalSettings.getInstance(context);
|
||||||
picasso = PicassoBuilder.get(context);
|
picasso = PicassoBuilder.get(context);
|
||||||
emojiLoader = new EmojiLoader(context);
|
emojiLoader = new TextEmojiLoader(context);
|
||||||
users = new Users(0L, 0L);
|
users = new Users(0L, 0L);
|
||||||
loadingIndex = NO_LOADING;
|
loadingIndex = NO_LOADING;
|
||||||
this.enableDelete = enableDelete;
|
this.enableDelete = enableDelete;
|
||||||
|
|
|
@ -9,7 +9,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder;
|
||||||
|
|
||||||
import com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader;
|
||||||
import org.nuclearfog.twidda.backend.helper.UserLists;
|
import org.nuclearfog.twidda.backend.helper.UserLists;
|
||||||
import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
||||||
import org.nuclearfog.twidda.config.GlobalSettings;
|
import org.nuclearfog.twidda.config.GlobalSettings;
|
||||||
|
@ -49,7 +49,7 @@ public class UserlistAdapter extends Adapter<ViewHolder> implements OnHolderClic
|
||||||
private ListClickListener listener;
|
private ListClickListener listener;
|
||||||
private GlobalSettings settings;
|
private GlobalSettings settings;
|
||||||
private Picasso picasso;
|
private Picasso picasso;
|
||||||
private EmojiLoader emojiLoader;
|
private TextEmojiLoader emojiLoader;
|
||||||
|
|
||||||
private UserLists userlists;
|
private UserLists userlists;
|
||||||
private int loadingIndex;
|
private int loadingIndex;
|
||||||
|
@ -61,7 +61,7 @@ public class UserlistAdapter extends Adapter<ViewHolder> implements OnHolderClic
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
settings = GlobalSettings.getInstance(context);
|
settings = GlobalSettings.getInstance(context);
|
||||||
picasso = PicassoBuilder.get(context);
|
picasso = PicassoBuilder.get(context);
|
||||||
emojiLoader = new EmojiLoader(context);
|
emojiLoader = new TextEmojiLoader(context);
|
||||||
userlists = new UserLists(0L, 0L);
|
userlists = new UserLists(0L, 0L);
|
||||||
loadingIndex = NO_LOADING;
|
loadingIndex = NO_LOADING;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
package org.nuclearfog.twidda.ui.adapter.holder;
|
||||||
|
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
|
||||||
|
|
||||||
|
import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
|
import org.nuclearfog.twidda.R;
|
||||||
|
import org.nuclearfog.twidda.config.GlobalSettings;
|
||||||
|
import org.nuclearfog.twidda.model.Emoji;
|
||||||
|
|
||||||
|
|
||||||
|
public class EmojiHolder extends ViewHolder implements OnClickListener {
|
||||||
|
|
||||||
|
public static final int ROW_COUNT = 6;
|
||||||
|
|
||||||
|
private ImageView[] emojiViews = new ImageView[ROW_COUNT];
|
||||||
|
private TextView groupLabel;
|
||||||
|
|
||||||
|
private OnEmojiClickListener listener;
|
||||||
|
private Picasso picasso;
|
||||||
|
|
||||||
|
|
||||||
|
public EmojiHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, OnEmojiClickListener listener) {
|
||||||
|
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_emoji, parent, false));
|
||||||
|
|
||||||
|
groupLabel = itemView.findViewById(R.id.item_emoji_group);
|
||||||
|
emojiViews[0] = itemView.findViewById(R.id.item_emoji_1);
|
||||||
|
emojiViews[1] = itemView.findViewById(R.id.item_emoji_2);
|
||||||
|
emojiViews[2] = itemView.findViewById(R.id.item_emoji_3);
|
||||||
|
emojiViews[3] = itemView.findViewById(R.id.item_emoji_4);
|
||||||
|
emojiViews[4] = itemView.findViewById(R.id.item_emoji_5);
|
||||||
|
emojiViews[5] = itemView.findViewById(R.id.item_emoji_6);
|
||||||
|
|
||||||
|
groupLabel.setTextColor(settings.getTextColor());
|
||||||
|
groupLabel.setTypeface(settings.getTypeFace());
|
||||||
|
|
||||||
|
this.listener = listener;
|
||||||
|
this.picasso = picasso;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
int pos = getLayoutPosition();
|
||||||
|
if (pos != RecyclerView.NO_POSITION) {
|
||||||
|
for (int i = 0; i < emojiViews.length; i++) {
|
||||||
|
if (v == emojiViews[i]) {
|
||||||
|
listener.onEmojiClick(pos, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setData(Emoji[] emojis) {
|
||||||
|
for (int i = 0 ; i < emojis.length && i < emojiViews.length ; i++) {
|
||||||
|
Emoji emoji = emojis[i];
|
||||||
|
ImageView emojiView = emojiViews[i];
|
||||||
|
if (!emoji.getUrl().trim().isEmpty()) {
|
||||||
|
picasso.load(emoji.getUrl()).into(emojiViews[i]);
|
||||||
|
emojiView.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
emojiView.setOnClickListener(this);
|
||||||
|
}
|
||||||
|
groupLabel.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setLabel(String label) {
|
||||||
|
for (ImageView emojiView : emojiViews) {
|
||||||
|
emojiView.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
groupLabel.setText(label);
|
||||||
|
groupLabel.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public interface OnEmojiClickListener {
|
||||||
|
|
||||||
|
void onEmojiClick(int position, int index);
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,9 +29,9 @@ import org.nuclearfog.tag.Tagger;
|
||||||
import org.nuclearfog.tag.Tagger.OnTagClickListener;
|
import org.nuclearfog.tag.Tagger.OnTagClickListener;
|
||||||
import org.nuclearfog.twidda.R;
|
import org.nuclearfog.twidda.R;
|
||||||
import org.nuclearfog.twidda.backend.async.AsyncExecutor.AsyncCallback;
|
import org.nuclearfog.twidda.backend.async.AsyncExecutor.AsyncCallback;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader.EmojiParam;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader.EmojiParam;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader.EmojiResult;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader.EmojiResult;
|
||||||
import org.nuclearfog.twidda.backend.utils.AppStyles;
|
import org.nuclearfog.twidda.backend.utils.AppStyles;
|
||||||
import org.nuclearfog.twidda.backend.utils.EmojiUtils;
|
import org.nuclearfog.twidda.backend.utils.EmojiUtils;
|
||||||
import org.nuclearfog.twidda.backend.utils.StringUtils;
|
import org.nuclearfog.twidda.backend.utils.StringUtils;
|
||||||
|
@ -60,12 +60,12 @@ public class MessageHolder extends ViewHolder implements OnClickListener, OnTagC
|
||||||
private GlobalSettings settings;
|
private GlobalSettings settings;
|
||||||
private Picasso picasso;
|
private Picasso picasso;
|
||||||
private IconAdapter adapter;
|
private IconAdapter adapter;
|
||||||
private EmojiLoader emojiLoader;
|
private TextEmojiLoader emojiLoader;
|
||||||
|
|
||||||
private long tagId;
|
private long tagId;
|
||||||
|
|
||||||
|
|
||||||
public MessageHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, EmojiLoader emojiLoader, OnItemClickListener listener) {
|
public MessageHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, TextEmojiLoader emojiLoader, OnItemClickListener listener) {
|
||||||
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message, parent, false));
|
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message, parent, false));
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.picasso = picasso;
|
this.picasso = picasso;
|
||||||
|
|
|
@ -27,9 +27,9 @@ import com.squareup.picasso.Transformation;
|
||||||
import org.nuclearfog.tag.Tagger;
|
import org.nuclearfog.tag.Tagger;
|
||||||
import org.nuclearfog.twidda.R;
|
import org.nuclearfog.twidda.R;
|
||||||
import org.nuclearfog.twidda.backend.async.AsyncExecutor.AsyncCallback;
|
import org.nuclearfog.twidda.backend.async.AsyncExecutor.AsyncCallback;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader.EmojiParam;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader.EmojiParam;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader.EmojiResult;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader.EmojiResult;
|
||||||
import org.nuclearfog.twidda.backend.utils.AppStyles;
|
import org.nuclearfog.twidda.backend.utils.AppStyles;
|
||||||
import org.nuclearfog.twidda.backend.utils.StringUtils;
|
import org.nuclearfog.twidda.backend.utils.StringUtils;
|
||||||
import org.nuclearfog.twidda.backend.utils.EmojiUtils;
|
import org.nuclearfog.twidda.backend.utils.EmojiUtils;
|
||||||
|
@ -57,7 +57,7 @@ public class StatusHolder extends ViewHolder implements OnClickListener {
|
||||||
|
|
||||||
private GlobalSettings settings;
|
private GlobalSettings settings;
|
||||||
private Picasso picasso;
|
private Picasso picasso;
|
||||||
private EmojiLoader emojiLoader;
|
private TextEmojiLoader emojiLoader;
|
||||||
private IconAdapter adapter;
|
private IconAdapter adapter;
|
||||||
private OnHolderClickListener listener;
|
private OnHolderClickListener listener;
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ public class StatusHolder extends ViewHolder implements OnClickListener {
|
||||||
private long tagId = 0L;
|
private long tagId = 0L;
|
||||||
|
|
||||||
|
|
||||||
public StatusHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, EmojiLoader emojiLoader, OnHolderClickListener listener) {
|
public StatusHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, TextEmojiLoader emojiLoader, OnHolderClickListener listener) {
|
||||||
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_status, parent, false));
|
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_status, parent, false));
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.picasso = picasso;
|
this.picasso = picasso;
|
||||||
|
|
|
@ -25,9 +25,9 @@ import com.squareup.picasso.Transformation;
|
||||||
|
|
||||||
import org.nuclearfog.twidda.R;
|
import org.nuclearfog.twidda.R;
|
||||||
import org.nuclearfog.twidda.backend.async.AsyncExecutor.AsyncCallback;
|
import org.nuclearfog.twidda.backend.async.AsyncExecutor.AsyncCallback;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader.EmojiParam;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader.EmojiParam;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader.EmojiResult;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader.EmojiResult;
|
||||||
import org.nuclearfog.twidda.backend.utils.AppStyles;
|
import org.nuclearfog.twidda.backend.utils.AppStyles;
|
||||||
import org.nuclearfog.twidda.backend.utils.StringUtils;
|
import org.nuclearfog.twidda.backend.utils.StringUtils;
|
||||||
import org.nuclearfog.twidda.backend.utils.EmojiUtils;
|
import org.nuclearfog.twidda.backend.utils.EmojiUtils;
|
||||||
|
@ -51,7 +51,7 @@ public class UserHolder extends ViewHolder implements OnClickListener, AsyncCall
|
||||||
private View notificationDismiss;
|
private View notificationDismiss;
|
||||||
|
|
||||||
private GlobalSettings settings;
|
private GlobalSettings settings;
|
||||||
private EmojiLoader emojiLoader;
|
private TextEmojiLoader emojiLoader;
|
||||||
private Picasso picasso;
|
private Picasso picasso;
|
||||||
|
|
||||||
private OnHolderClickListener listener;
|
private OnHolderClickListener listener;
|
||||||
|
@ -59,7 +59,7 @@ public class UserHolder extends ViewHolder implements OnClickListener, AsyncCall
|
||||||
private long tagId = 0L;
|
private long tagId = 0L;
|
||||||
|
|
||||||
|
|
||||||
public UserHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, EmojiLoader emojiLoader, OnHolderClickListener listener, boolean enableDelete) {
|
public UserHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, TextEmojiLoader emojiLoader, OnHolderClickListener listener, boolean enableDelete) {
|
||||||
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user, parent, false));
|
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user, parent, false));
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.picasso = picasso;
|
this.picasso = picasso;
|
||||||
|
|
|
@ -21,9 +21,9 @@ import com.squareup.picasso.Transformation;
|
||||||
|
|
||||||
import org.nuclearfog.twidda.R;
|
import org.nuclearfog.twidda.R;
|
||||||
import org.nuclearfog.twidda.backend.async.AsyncExecutor;
|
import org.nuclearfog.twidda.backend.async.AsyncExecutor;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader.EmojiParam;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader.EmojiParam;
|
||||||
import org.nuclearfog.twidda.backend.async.EmojiLoader.EmojiResult;
|
import org.nuclearfog.twidda.backend.async.TextEmojiLoader.EmojiResult;
|
||||||
import org.nuclearfog.twidda.backend.utils.AppStyles;
|
import org.nuclearfog.twidda.backend.utils.AppStyles;
|
||||||
import org.nuclearfog.twidda.backend.utils.EmojiUtils;
|
import org.nuclearfog.twidda.backend.utils.EmojiUtils;
|
||||||
import org.nuclearfog.twidda.backend.utils.StringUtils;
|
import org.nuclearfog.twidda.backend.utils.StringUtils;
|
||||||
|
@ -49,7 +49,7 @@ public class UserlistHolder extends ViewHolder implements OnClickListener {
|
||||||
private Picasso picasso;
|
private Picasso picasso;
|
||||||
private GlobalSettings settings;
|
private GlobalSettings settings;
|
||||||
private OnHolderClickListener listener;
|
private OnHolderClickListener listener;
|
||||||
private EmojiLoader emojiLoader;
|
private TextEmojiLoader emojiLoader;
|
||||||
|
|
||||||
private boolean enableExtras, enableImages;
|
private boolean enableExtras, enableImages;
|
||||||
private long tagId;
|
private long tagId;
|
||||||
|
@ -57,7 +57,7 @@ public class UserlistHolder extends ViewHolder implements OnClickListener {
|
||||||
/**
|
/**
|
||||||
* @param parent Parent view from adapter
|
* @param parent Parent view from adapter
|
||||||
*/
|
*/
|
||||||
public UserlistHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, EmojiLoader emojiLoader, OnHolderClickListener listener) {
|
public UserlistHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, TextEmojiLoader emojiLoader, OnHolderClickListener listener) {
|
||||||
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false));
|
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false));
|
||||||
CardView background = (CardView) itemView;
|
CardView background = (CardView) itemView;
|
||||||
ViewGroup container = itemView.findViewById(R.id.item_list_container);
|
ViewGroup container = itemView.findViewById(R.id.item_list_container);
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package org.nuclearfog.twidda.ui.dialogs;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
||||||
|
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||||
|
|
||||||
|
import org.nuclearfog.twidda.config.GlobalSettings;
|
||||||
|
import org.nuclearfog.twidda.ui.adapter.EmojiAdapter;
|
||||||
|
|
||||||
|
public class EmojiPicker extends BottomSheetDialog {
|
||||||
|
|
||||||
|
private EmojiAdapter adapter;
|
||||||
|
|
||||||
|
public EmojiPicker(@NonNull Context context) {
|
||||||
|
super(context);
|
||||||
|
RecyclerView listView = new RecyclerView(context);
|
||||||
|
GlobalSettings settings = GlobalSettings.getInstance(context);
|
||||||
|
setContentView(listView);
|
||||||
|
|
||||||
|
BottomSheetBehavior<View> mBehavior = BottomSheetBehavior.from((View)listView.getParent());
|
||||||
|
mBehavior.setPeekHeight(500);
|
||||||
|
listView.setBackgroundColor(settings.getBackgroundColor());
|
||||||
|
|
||||||
|
adapter = new EmojiAdapter(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/item_emoji_group"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/item_emoji_1"
|
||||||
|
android:layout_width="@dimen/item_emoji_emoji_size"
|
||||||
|
android:layout_height="@dimen/item_emoji_emoji_size"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/item_emoji_2"
|
||||||
|
android:layout_width="@dimen/item_emoji_emoji_size"
|
||||||
|
android:layout_height="@dimen/item_emoji_emoji_size"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/item_emoji_3"
|
||||||
|
android:layout_width="@dimen/item_emoji_emoji_size"
|
||||||
|
android:layout_height="@dimen/item_emoji_emoji_size"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/item_emoji_4"
|
||||||
|
android:layout_width="@dimen/item_emoji_emoji_size"
|
||||||
|
android:layout_height="@dimen/item_emoji_emoji_size"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/item_emoji_5"
|
||||||
|
android:layout_width="@dimen/item_emoji_emoji_size"
|
||||||
|
android:layout_height="@dimen/item_emoji_emoji_size"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/item_emoji_6"
|
||||||
|
android:layout_width="@dimen/item_emoji_emoji_size"
|
||||||
|
android:layout_height="@dimen/item_emoji_emoji_size"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -11,11 +11,11 @@
|
||||||
|
|
||||||
<!--dimens of page_settings.xml-->
|
<!--dimens of page_settings.xml-->
|
||||||
<dimen name="settings_toolbar_height">@dimen/toolbar_height</dimen>
|
<dimen name="settings_toolbar_height">@dimen/toolbar_height</dimen>
|
||||||
<dimen name="settings_color_button_height">42sp</dimen>
|
<dimen name="settings_color_button_height">38sp</dimen>
|
||||||
<dimen name="settings_color_button_margin">2dp</dimen>
|
<dimen name="settings_color_button_margin">2dp</dimen>
|
||||||
<dimen name="settings_color_button_stroke_width">2dp</dimen>
|
<dimen name="settings_color_button_stroke_width">2dp</dimen>
|
||||||
<dimen name="settings_color_button_corner_radius">4dp</dimen>
|
<dimen name="settings_color_button_corner_radius">4dp</dimen>
|
||||||
<dimen name="settings_cardview_padding">10dp</dimen>
|
<dimen name="settings_cardview_padding">6dp</dimen>
|
||||||
<dimen name="settings_textsize">20sp</dimen>
|
<dimen name="settings_textsize">20sp</dimen>
|
||||||
<dimen name="settings_icon_size">20sp</dimen>
|
<dimen name="settings_icon_size">20sp</dimen>
|
||||||
<dimen name="settings_textsize_small">12sp</dimen>
|
<dimen name="settings_textsize_small">12sp</dimen>
|
||||||
|
@ -295,4 +295,7 @@
|
||||||
<dimen name="dialog_status_layout_margins">5dp</dimen>
|
<dimen name="dialog_status_layout_margins">5dp</dimen>
|
||||||
<dimen name="dialog_status_dropdown_height">22sp</dimen>
|
<dimen name="dialog_status_dropdown_height">22sp</dimen>
|
||||||
|
|
||||||
|
<!--dimens of item_emoji.xml-->
|
||||||
|
<dimen name="item_emoji_emoji_size">48dp</dimen>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue