mirror of https://github.com/ThmmyNoLife/mTHMMY
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
8.4 KiB
190 lines
8.4 KiB
package gr.thmmy.mthmmy.utils;
|
|
|
|
import android.content.Context;
|
|
import android.os.Handler;
|
|
import android.support.v7.widget.AppCompatImageButton;
|
|
import android.text.TextUtils;
|
|
import android.util.AttributeSet;
|
|
import android.util.SparseArray;
|
|
import android.view.LayoutInflater;
|
|
import android.view.MotionEvent;
|
|
import android.view.inputmethod.InputConnection;
|
|
import android.widget.GridView;
|
|
import android.widget.LinearLayout;
|
|
|
|
import gr.thmmy.mthmmy.R;
|
|
|
|
public class EmojiKeyboard extends LinearLayout {
|
|
|
|
private SparseArray<String> emojis = new SparseArray<>();
|
|
|
|
InputConnection inputConnection;
|
|
|
|
public EmojiKeyboard(Context context) {
|
|
this(context, null, 0);
|
|
}
|
|
|
|
public EmojiKeyboard(Context context, AttributeSet attrs) {
|
|
this(context, attrs, 0);
|
|
}
|
|
|
|
public EmojiKeyboard(Context context, AttributeSet attrs, int defStyleAttrs) {
|
|
super(context, attrs, defStyleAttrs);
|
|
init(context, attrs);
|
|
}
|
|
|
|
public void init(Context context, AttributeSet attrs) {
|
|
LayoutInflater.from(context).inflate(R.layout.emoji_keyboard, this, true);
|
|
|
|
// add space before emoji
|
|
emojis.append(R.drawable.heart, "<3");
|
|
// this was twice in the original page for some reason, with another alias "locked"
|
|
emojis.append(R.drawable.locked, "^lock^");
|
|
emojis.append(R.drawable.roll_over, "^rollover^");
|
|
emojis.append(R.drawable.redface, "^redface^");
|
|
emojis.append(R.drawable.confused, "^confused^");
|
|
emojis.append(R.drawable.innocent, "^innocent^");
|
|
emojis.append(R.drawable.sleep, "^sleep^");
|
|
emojis.append(R.drawable.lips_sealed, "^sealed^");
|
|
emojis.append(R.drawable.cool, "^cool^");
|
|
emojis.append(R.drawable.crazy, "^crazy^");
|
|
emojis.append(R.drawable.mad, "^mad^");
|
|
emojis.append(R.drawable.wav, "^wav^");
|
|
emojis.append(R.drawable.binkybaby, "^binkybaby^");
|
|
emojis.append(R.drawable.police, "^police^");
|
|
emojis.append(R.drawable.dontknow, "^dontknow^");
|
|
// the next two are the same thing?
|
|
emojis.append(R.drawable.angry4, ":angry4:");
|
|
emojis.append(R.drawable.angry_hot, "^angryhot^");
|
|
emojis.append(R.drawable.angry, "^angry^");
|
|
emojis.append(R.drawable.foyska, "^fouska^");
|
|
emojis.append(R.drawable.e10_7_3e, "^sfinaki^");
|
|
emojis.append(R.drawable.bang_head, "^banghead^");
|
|
emojis.append(R.drawable.crybaby, "^crybaby^");
|
|
emojis.append(R.drawable.hello, "^hello^");
|
|
emojis.append(R.drawable.jerk, "^jerk^");
|
|
emojis.append(R.drawable.nono, "^nono^");
|
|
emojis.append(R.drawable.notworthy, "^notworthy^");
|
|
emojis.append(R.drawable.off_topic, "^off-topic^");
|
|
emojis.append(R.drawable.puke, "^puke^");
|
|
emojis.append(R.drawable.shout, "^shout^");
|
|
emojis.append(R.drawable.slurp, "^slurp^");
|
|
emojis.append(R.drawable.superconfused, "^superconfused^");
|
|
emojis.append(R.drawable.superinnocent, "^superinnocent^");
|
|
emojis.append(R.drawable.cell_phone, "^cellPhone^");
|
|
emojis.append(R.drawable.idiot, "^idiot^");
|
|
emojis.append(R.drawable.knuppel, "^knuppel^");
|
|
emojis.append(R.drawable.tickedoff, "^tickedOff^");
|
|
emojis.append(R.drawable.peace, "^peace^");
|
|
emojis.append(R.drawable.suspicious, "^suspicious^");
|
|
emojis.append(R.drawable.caffine, "^caffine^");
|
|
emojis.append(R.drawable.argue, "^argue^");
|
|
emojis.append(R.drawable.banned2, "^banned2^");
|
|
emojis.append(R.drawable.banned, "^banned^");
|
|
emojis.append(R.drawable.bath, "^bath^");
|
|
emojis.append(R.drawable.beg, "^beg^");
|
|
emojis.append(R.drawable.bluescreen, "^bluescreen^");
|
|
emojis.append(R.drawable.boil, "^boil^");
|
|
emojis.append(R.drawable.bye, "^bye^");
|
|
emojis.append(R.drawable.callmerip, "^callmerip^");
|
|
emojis.append(R.drawable.carnaval, "^carnaval^");
|
|
emojis.append(R.drawable.clap, "^clap^");
|
|
emojis.append(R.drawable.coffeepot, "^coffepot^");
|
|
emojis.append(R.drawable.crap, "^crap^");
|
|
emojis.append(R.drawable.curses, "^curses^");
|
|
emojis.append(R.drawable.funny, "^funny^");
|
|
emojis.append(R.drawable.guitar1, "^guitar^");
|
|
emojis.append(R.drawable.icon_kissy, "^kissy^");
|
|
emojis.append(R.drawable.band, "^band^");
|
|
emojis.append(R.drawable.ivres, "^ivres^");
|
|
emojis.append(R.drawable.kaloe, "^kaloe^");
|
|
emojis.append(R.drawable.kremala, "^kremala^");
|
|
emojis.append(R.drawable.moon, "^moon^");
|
|
emojis.append(R.drawable.mopping, "^mopping^");
|
|
emojis.append(R.drawable.mountza, "^mountza^");
|
|
emojis.append(R.drawable.pcsleep, "^pcsleep^");
|
|
emojis.append(R.drawable.pinokio, "^pinokio^");
|
|
emojis.append(R.drawable.poke, "^poke^");
|
|
emojis.append(R.drawable.seestars, "^seestars^");
|
|
emojis.append(R.drawable.sfyri, "^sfyri^");
|
|
emojis.append(R.drawable.spam2, "^spam^");
|
|
emojis.append(R.drawable.esuper, "^super^");
|
|
emojis.append(R.drawable.tafos, "^tafos^");
|
|
emojis.append(R.drawable.tomatomourh, "^tomato^");
|
|
emojis.append(R.drawable.ytold, "^ytold^");
|
|
emojis.append(R.drawable.beer2, "^beer^");
|
|
emojis.append(R.drawable.yu, "^yue^");
|
|
emojis.append(R.drawable.a_eatpaper, "^eatpaper^");
|
|
emojis.append(R.drawable.fritz, "^fritz^");
|
|
emojis.append(R.drawable.wade, "^wade^");
|
|
emojis.append(R.drawable.lypi, "^lypi^");
|
|
emojis.append(R.drawable.megashok1wq, "^aytoxeir^");
|
|
emojis.append(R.drawable.victory, "^victory^");
|
|
emojis.append(R.drawable.filarakia, "^filarakia^");
|
|
emojis.append(R.drawable.bonjour_97213, "^hat^");
|
|
emojis.append(R.drawable.curtseyqi9, "^miss^");
|
|
emojis.append(R.drawable.rofl, "^rolfmao^");
|
|
emojis.append(R.drawable.question, "^que^");
|
|
emojis.append(R.drawable.shifty, "^shifty^");
|
|
emojis.append(R.drawable.shy, "^shy^");
|
|
emojis.append(R.drawable.music, "^music_listen^");
|
|
emojis.append(R.drawable.shamed_bag, "^bagface^");
|
|
emojis.append(R.drawable.rotfl, "^rotate^");
|
|
emojis.append(R.drawable.love, "^love^");
|
|
emojis.append(R.drawable.speech, "^speech^");
|
|
emojis.append(R.drawable.facepalm, "^facepalm^");
|
|
emojis.append(R.drawable.shocked, "^shocked^");
|
|
emojis.append(R.drawable.extremely_shocked, "^ex_shocked^");
|
|
emojis.append(R.drawable.smurf, "^smurf^");
|
|
|
|
GridView emojiGridView = (GridView) findViewById(R.id.emoji_gridview);
|
|
emojiGridView.setAdapter(new ImageKeyboardAdapter(context, getEmojiArray()));
|
|
emojiGridView.setOnItemClickListener((parent, view, position, id) -> {
|
|
if (inputConnection == null) return;
|
|
String value = emojis.valueAt(position);
|
|
inputConnection.commitText(value, 1);
|
|
});
|
|
AppCompatImageButton backspaceButton = (AppCompatImageButton) findViewById(R.id.backspace_button);
|
|
// backspace behavior
|
|
final Handler handler = new Handler();
|
|
Runnable longPressed = new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
inputConnection.deleteSurroundingText(1, 0);
|
|
handler.postDelayed(this, 50);
|
|
}
|
|
};
|
|
backspaceButton.setOnTouchListener((v, event) -> {
|
|
switch (event.getAction()) {
|
|
case MotionEvent.ACTION_DOWN:
|
|
CharSequence selectedText = inputConnection.getSelectedText(0);
|
|
if (TextUtils.isEmpty(selectedText))
|
|
inputConnection.deleteSurroundingText(1, 0);
|
|
else
|
|
inputConnection.commitText("", 1);
|
|
handler.postDelayed(longPressed, 400);
|
|
break;
|
|
case MotionEvent.ACTION_UP:
|
|
handler.removeCallbacks(longPressed);
|
|
break;
|
|
}
|
|
return true;
|
|
});
|
|
}
|
|
|
|
public void setInputConnection(InputConnection inputConnection) {
|
|
this.inputConnection = inputConnection;
|
|
}
|
|
|
|
public int[] getEmojiArray() {
|
|
int[] emojiArray = new int[emojis.size()];
|
|
for (int i = 0; i < emojiArray.length; i++) {
|
|
emojiArray[i] = emojis.keyAt(i);
|
|
}
|
|
return emojiArray;
|
|
}
|
|
|
|
public interface EmojiKeyboardOwner {
|
|
void setEmojiKeyboardVisible(boolean visible);
|
|
}
|
|
}
|
|
|