diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 66e2f6f..e65c162 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -9,7 +9,8 @@
-
+
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index edc3671..65e08ab 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -4,6 +4,8 @@
+
+
diff --git a/README.md b/README.md
index dd7bc20..92579a4 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,232 @@
# AwesomeKeyboard
-emoticons, sticker, photo and color keyboard
+
+emojicons, emojicons gif ( like Skype), sticker, photo and color keyboard
+
+### I. Demo
+
+
+`apk demo`
+
+ https://github.com/hoanganhtuan95ptit/AwesomeKeyboard/blob/master/output/app-debug.apk
+
+ ` video demo`
+
+ https://youtu.be/uiC-cQCVTdo
+
+ ` gif demo `
+
+ ![alt text](https://firebasestorage.googleapis.com/v0/b/hoanganhtuan-1070.appspot.com/o/ezgif.com-video-to-gif.gif?alt=media&token=a8fcfe81-219f-4542-80d8-85f59df35424)
+
+
+| Emojicons | Sticker | Photo | Color | Nomal | emojicons gif |
+| -------- | -------- | -------- | -------- | -------- | -------- |
+| ![alt text](output/Screenshot_2017-07-21-16-18-50.png) | ![alt text](output/Screenshot_2017-07-21-16-19-01.png) | ![alt text](output/Screenshot_2017-07-21-16-19-18.png) | ![alt text](output/Screenshot_2017-07-21-16-19-28.png) | ![alt text](output/Screenshot_2017-07-21-16-19-41.png) | ![alt text](output/Screenshot_2017-07-21-15-48-25.png) |
+
+
+### II. Setting
+
+ You need to import module #Core and module #Layout
+
+```java
+ repositories {
+ ...
+ maven { url 'https://jitpack.io' }
+ }
+
+ dependencies {
+ compile 'com.github.hoanganhtuan95ptit.AwesomeKeyboard:layout:1.0.1'
+ }
+
+```
+### III. Doc
+
+#### 1.Add
+
+* Application:
+
+```java
+ public class App extends Application {
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ AwesomeKeyboardSdk.initialize(this, Utils.emoticons);
+ }
+ }
+```
+
+* Use:
+
+```java
+ private void initKeyboard() {
+ keyboard = KeyboardBuilder.with(this)
+ .setRoot(reRoot)
+ .setKeyboardLayout(keyboardLayout)
+ .setOnKeyDownListener(this)
+ .addEditText(editMessage)
+ .builder();
+ }
+```
+* EmojiconTextView:
+
+```java
+
+```
+`set text`
+```java
+ EmojiconTextView.setEmojicon("infor");
+```
+* EmojiconEditText:
+
+```java
+
+```
+`set text`
+```java
+ @Override
+ public void onItemEmoticonClicked(String key) {
+ int start = editMessage.getSelectionStart();
+ int end = editMessage.getSelectionEnd();
+ editMessage.getEditableText().replace(start, end, key);
+ }
+```
+
+
+
+* Show keyboard
+
+`1. show sticker `
+
+```java
+ keyboard.showKeyboard(AwesomeKeyboardType.STICKER.getValue());
+```
+`2. show photo `
+
+```java
+ keyboard.showKeyboard(AwesomeKeyboardType.PHOTO.getValue());
+```
+`3. show color `
+
+```java
+ keyboard.showKeyboard(AwesomeKeyboardType.COLOR.getValue());
+```
+`4. show nomal `
+
+```java
+ keyboard.showKeyboard(AwesomeKeyboardType.NOMAL.getValue());
+```
+* Hide keyboard
+
+```java
+ keyboard.hideAllKeyboard();
+```
+* update Data Emoticon
+
+```java
+ keyboardLayout.updateDataEmoticon(emoticonCategories.get(i));
+```
+* update Data Sticker
+
+```java
+ keyboardLayout.updateDataSticker(stickerCategories.get(i));
+```
+* update Data Color
+
+```java
+ keyboardLayout.updateDataColor("#1ecef3");
+```
+
+### IV. Custom UI
+
+#### 1. Intall
+
+ You just need to import module #Core
+
+```java
+ repositories {
+ ...
+ maven { url 'https://jitpack.io' }
+ }
+ dependencies {
+ compile 'com.github.hoanganhtuan95ptit.AwesomeKeyboard:core:1.0.1'
+ }
+```
+
+#### 2. Extends `KeyboardLayout` [Tutorial](https://github.com/hoanganhtuan95ptit/AwesomeKeyboard/blob/master/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/AwesomeKeyboardLayout.java)
+
+```java
+ public abstract class KeyboardLayout extends RelativeLayout {
+
+ private static final String TAG = "KeyboardLayout";
+
+ public KeyboardLayout(Context context) {
+ super(context);
+ }
+
+ public KeyboardLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public KeyboardLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public void showKeyboard(int type){
+ // TODO: 7/21/2017 do something
+ }
+ }
+```
+#### 3. Init data for `EmojiconConstant.emoticons` [Tutorial](https://github.com/hoanganhtuan95ptit/AwesomeKeyboard/blob/master/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/AwesomeKeyboardSdk.java)
+
+```java
+ //tutorial
+ public class AwesomeKeyboardSdk {
+
+ private AwesomeKeyboardSdk(Context context, HashMap emoticons) {
+ EmojiconConstant.emoticons = emoticons;
+ Fresco.initialize(context);
+ }
+
+ private static AwesomeKeyboardSdk awesomeKeyboard;
+
+ public static void initialize(Context context, HashMap emoticons) {
+ if (awesomeKeyboard == null) awesomeKeyboard = new AwesomeKeyboardSdk(context, emoticons);
+ }
+ }
+```
+
+### V. Thank
+
+| Developer | Project |
+| -------- | -------- |
+| [Waynejo](https://github.com/waynejo) | [Android-ndk-gif](https://github.com/waynejo/android-ndk-gif) |
+| [Ogaclejapan](https://github.com/ogaclejapan) | [SmartTabLayout](https://github.com/ogaclejapan/SmartTabLayout) |
+| [Wasabeef](https://github.com/wasabeef) | [Blurry](https://github.com/wasabeef/Blurry) |
+
+## License
+
+ Apache Version 2.0
+ Copyright 2017 HoangAnhTuan95ptit (hoanganhtuan95ptit@gmail.com)
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/app/app-release.apk b/app/app-release.apk
new file mode 100644
index 0000000..ec15d5e
Binary files /dev/null and b/app/app-release.apk differ
diff --git a/app/build.gradle b/app/build.gradle
index 2f3669b..979d256 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -34,5 +34,7 @@ dependencies {
compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
- compile project(path: ':library')
+ compile 'com.google.code.gson:gson:2.8.0'
+
+ compile project(path: ':layout')
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d849e97..379156d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,6 +7,7 @@
emoticonCategories = Utils.initDataEmoticonCategory();
+ ArrayList stickerCategories = Utils.initDataStickerCategory();
+
+ for (int i = 0; i < emoticonCategories.size(); i++) {
+ keyboardLayout.updateDataEmoticon(emoticonCategories.get(i));
+ }
+
+ for (int i = 0; i < stickerCategories.size(); i++) {
+ keyboardLayout.updateDataSticker(stickerCategories.get(i));
+ }
+
+ keyboardLayout.updateDataColor("#1ecef3");
+ keyboardLayout.updateDataColor("#12cf13");
+ keyboardLayout.updateDataColor("#43bec5");
+ keyboardLayout.updateDataColor("#67b967");
+ keyboardLayout.updateDataColor("#0084fd");
+ keyboardLayout.updateDataColor("#6599cb");
+ keyboardLayout.updateDataColor("#7547ff");
+ keyboardLayout.updateDataColor("#a695c9");
+ keyboardLayout.updateDataColor("#d4a88b");
+ keyboardLayout.updateDataColor("#d496bb");
+ keyboardLayout.updateDataColor("#e58684");
+ keyboardLayout.updateDataColor("#f83c4b");
+ keyboardLayout.updateDataColor("#fd5ca2");
+ keyboardLayout.updateDataColor("#fdc300");
+ keyboardLayout.updateDataColor("#ff7f28");
+ }
+
+ private void initKeyboard() {
+ keyboard = KeyboardBuilder.with(this)
+ .setRoot(reRoot)
+ .setKeyboardLayout(keyboardLayout)
+ .setOnKeyDownListener(this)
+ .addEditText(editMessage)
+ .builder();
+ }
+
+
+ @OnClick({R.id.img_photo, R.id.img_sticker, R.id.img_color, R.id.img_emojicon, R.id.img_send})
public void onViewClicked(View view) {
switch (view.getId()) {
- case R.id.img_send:
- if (!listenerEditText.getText().toString().isEmpty()) {
- chatAdapter.add(KeyboardBuilder.convertFromTextToEmoji(this, listenerEditText.getText().toString()));
- listenerEditText.setText("");
- }
- break;
- case R.id.img_emoji:
- keyboard.showKeyboard(KeyboardType.STICKER);
- break;
case R.id.img_photo:
- addPermisstions(android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ addPermisstions(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ break;
+ case R.id.img_sticker:
+ keyboard.showKeyboard(AwesomeKeyboardType.STICKER.getValue());
break;
case R.id.img_color:
- keyboard.showKeyboard(KeyboardType.COLOR);
+ keyboard.showKeyboard(AwesomeKeyboardType.COLOR.getValue());
+ break;
+ case R.id.img_emojicon:
+ keyboard.showKeyboard(AwesomeKeyboardType.EMOJICON.getValue());
+ break;
+ case R.id.img_send:
+ if (editMessage.getText().length() > 0) {
+ chatAdapter.add(editMessage.getText().toString());
+ editMessage.setText("");
+ }
break;
}
}
@@ -126,7 +167,7 @@ public void acceptPermisstion(String[] hasPermissions, String[] noPermissions) {
super.acceptPermisstion(hasPermissions, noPermissions);
if (new Gson().toJson(hasPermissions).contains(Manifest.permission.READ_EXTERNAL_STORAGE) &&
new Gson().toJson(hasPermissions).contains(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
- keyboard.showKeyboard(KeyboardType.PHOTO);
+ keyboard.showKeyboard(AwesomeKeyboardType.PHOTO.getValue());
} else if (new Gson().toJson(noPermissions).contains(Manifest.permission.READ_EXTERNAL_STORAGE) &&
new Gson().toJson(noPermissions).contains(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
showMessage(R.string.not_READ_EXTERNAL_STORAGE);
@@ -135,26 +176,35 @@ public void acceptPermisstion(String[] hasPermissions, String[] noPermissions) {
@Override
public void onKeyDownCLicked() {
- Toast.makeText(this, "onKeyDownCLicked ", Toast.LENGTH_LONG).show();
+ Toast.makeText(this, "onKeyDownCLicked", Toast.LENGTH_LONG).show();
}
@Override
- public void onShopClicked() {
- Toast.makeText(this, "onShopClicked ", Toast.LENGTH_LONG).show();
+ public void onItemColorClicked(String color) {
+ Toast.makeText(this, "onItemColorClicked", Toast.LENGTH_LONG).show();
}
@Override
- public void onItemColorClicked(String color) {
- Toast.makeText(this, "onItemColorClicked ", Toast.LENGTH_LONG).show();
+ public void onItemPhotoClicked(String url) {
+ Toast.makeText(this, "onItemPhotoClicked", Toast.LENGTH_LONG).show();
}
@Override
- public void onItemPhotoClicked(String url) {
- Toast.makeText(this, "onItemPhotoClicked ", Toast.LENGTH_LONG).show();
+ public void onItemEmoticonClicked(String key) {
+ int start = editMessage.getSelectionStart();
+ int end = editMessage.getSelectionEnd();
+ editMessage.getEditableText().replace(start, end, key);
}
@Override
public void onItemStickerClicked(String url) {
- Toast.makeText(this, "onItemStickerClicked ", Toast.LENGTH_LONG).show();
+ Toast.makeText(this, "onItemStickerClicked", Toast.LENGTH_LONG).show();
}
+
+ @Override
+ public void onDeleteClicked() {
+ KeyEvent event = new KeyEvent(0, 0, 0, KeyEvent.KEYCODE_DEL, 0, 0, 0, 0, KeyEvent.KEYCODE_ENDCALL);
+ editMessage.dispatchKeyEvent(event);
+ }
+
}
diff --git a/app/src/main/java/com/hoanganhtuan95ptit/demo/activity/SplashScreenActivity.java b/app/src/main/java/com/hoanganhtuan95ptit/demo/activity/SplashScreenActivity.java
index 7e3a1d3..96b3776 100644
--- a/app/src/main/java/com/hoanganhtuan95ptit/demo/activity/SplashScreenActivity.java
+++ b/app/src/main/java/com/hoanganhtuan95ptit/demo/activity/SplashScreenActivity.java
@@ -5,13 +5,7 @@
import android.os.Handler;
import android.support.annotation.Nullable;
-import com.hoanganhtuan95ptit.awesomekeyboard.KeyboardBuilder;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.model.Sticker;
import com.hoanganhtuan95ptit.demo.R;
-import com.hoanganhtuan95ptit.demo.constant.Constant;
-
-import java.util.ArrayList;
-import java.util.Collections;
/**
* Created by HOANG ANH TUAN on 7/8/2017.
@@ -22,7 +16,6 @@ public class SplashScreenActivity extends Activity {
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
- setDataSticker();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
@@ -32,51 +25,4 @@ public void run() {
}, 2000);
}
- private void setDataSticker() {
- if (KeyboardBuilder.getSticker(this).isEmpty()) {
- KeyboardBuilder.clearSticker(this);
-
- ArrayList images = new ArrayList<>();
- Collections.addAll(images, Constant.heromals);
- Sticker sticker = new Sticker(Constant.heromals[0], "", images);
- KeyboardBuilder.addSticker(this, sticker);
-
- images = new ArrayList<>();
- Collections.addAll(images, Constant.mango);
- sticker = new Sticker(Constant.mango[0], "", images);
- KeyboardBuilder.addSticker(this, sticker);
-
- images = new ArrayList<>();
- Collections.addAll(images, Constant.meep);
- sticker = new Sticker(Constant.meep[0], "", images);
- KeyboardBuilder.addSticker(this, sticker);
-
- images = new ArrayList<>();
- Collections.addAll(images, Constant.mim);
- sticker = new Sticker(Constant.mim[0], "", images);
- KeyboardBuilder.addSticker(this, sticker);
-
- images = new ArrayList<>();
- Collections.addAll(images, Constant.minion);
- sticker = new Sticker(Constant.minion[0], "", images);
- KeyboardBuilder.addSticker(this, sticker);
-
- images = new ArrayList<>();
- Collections.addAll(images, Constant.mood);
- sticker = new Sticker(Constant.mood[0], "", images);
- KeyboardBuilder.addSticker(this, sticker);
-
- images = new ArrayList<>();
- Collections.addAll(images, Constant.stickerBun);
- sticker = new Sticker(Constant.stickerBun[0], "", images);
- KeyboardBuilder.addSticker(this, sticker);
-
- images = new ArrayList<>();
- Collections.addAll(images, Constant.stickerFinch);
- sticker = new Sticker(Constant.stickerFinch[0], "", images);
- KeyboardBuilder.addSticker(this, sticker);
-
-
- }
- }
}
diff --git a/app/src/main/java/com/hoanganhtuan95ptit/demo/adapter/ChatAdapter.java b/app/src/main/java/com/hoanganhtuan95ptit/demo/adapter/ChatAdapter.java
index 8e9b2aa..7bd84ce 100644
--- a/app/src/main/java/com/hoanganhtuan95ptit/demo/adapter/ChatAdapter.java
+++ b/app/src/main/java/com/hoanganhtuan95ptit/demo/adapter/ChatAdapter.java
@@ -2,21 +2,21 @@
import android.app.Activity;
import android.support.v7.widget.RecyclerView;
-import android.text.SpannableStringBuilder;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.TextView;
+import com.hoanganhtuan95ptit.awesomekeyboard.core.view.EmojiconTextView;
import com.hoanganhtuan95ptit.demo.R;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
- * Created by HOANG ANH TUAN on 7/8/2017.
+ * Created by HOANG ANH TUAN on 7/17/2017.
*/
-public class ChatAdapter extends BaseAdapter {
+public class ChatAdapter extends BaseAdapter {
+
public ChatAdapter(Activity activity) {
super(activity);
}
@@ -29,13 +29,12 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
- ViewHolder viewHolder = (ViewHolder) holder;
- viewHolder.tvInfor.setText(getDatas().get(position));
+ ((ViewHolder) holder).tvInfor.setEmojicon(getDatas().get(position));
}
static class ViewHolder extends RecyclerView.ViewHolder {
- @BindView(R.id.tv_infor)
- TextView tvInfor;
+ @BindView(R.id.tv)
+ EmojiconTextView tvInfor;
ViewHolder(View view) {
super(view);
diff --git a/app/src/main/java/com/hoanganhtuan95ptit/demo/constant/Constant.java b/app/src/main/java/com/hoanganhtuan95ptit/demo/constant/Constant.java
deleted file mode 100644
index 3f30f4a..0000000
--- a/app/src/main/java/com/hoanganhtuan95ptit/demo/constant/Constant.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package com.hoanganhtuan95ptit.demo.constant;
-
-/**
- * Created by Hoang Anh Tuan on 3/10/2017.
- */
-
-public final class Constant {
-
- public static String stickerBun[] = {
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F1.png?alt=media&token=8846aa96-1acb-4778-b0fb-833ba47ff746",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F10.png?alt=media&token=4793603a-ffc3-40ca-8dd7-3a8f3b6adb8a",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F11.png?alt=media&token=3d7d2573-302c-4401-8a86-85a96b25c3f4",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F12.png?alt=media&token=7dd2c6ab-a32e-427e-b3f6-2c926ed031ef",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F13.png?alt=media&token=a233fea3-d8ce-48f9-8df3-911e4831496e",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F14.png?alt=media&token=b70d17d1-c164-42ce-9b37-3452c55e6d15",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F15.png?alt=media&token=05918af9-d07b-41f3-8279-c3a1c1774084",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F16.png?alt=media&token=6cfaa4ab-09ae-417d-97e5-8dd13ce16859",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F17.png?alt=media&token=a215c04f-98f6-4b28-80a1-6e010f72a4af",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F18.png?alt=media&token=8d400f38-a6a3-4e99-ad48-31b26d71c001",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F19.png?alt=media&token=f0ab3dbd-f1cc-4a45-92f5-33f8a1097084",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F2.png?alt=media&token=80842850-5ace-4ff0-9521-37f63e9eeea3",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F20.png?alt=media&token=0abd0b14-6cf7-4ffa-adb5-cb5a120e798c",
- };//20
- public static String stickerFinch[] = {
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F1.png?alt=media&token=2156b270-d90f-407b-9575-4e9214b2fdf9",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F10.png?alt=media&token=9b279f1b-cc1a-4ff8-bad2-4d3a5a157259",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F11.png?alt=media&token=4f1e8355-84db-48de-9283-38d65cb28c1e",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F12.png?alt=media&token=319b4849-0629-45d1-a257-7b68f198c2a4",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F13.png?alt=media&token=4c14d60e-ac19-403f-b192-1444ff711c90",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F14.png?alt=media&token=44411f89-557d-45ae-8abc-9410beb6ead1",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F15.png?alt=media&token=d5d91351-78a9-4f49-bdee-767a50486c4d",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F16.png?alt=media&token=114808e7-d7dd-41d1-980d-ab70b2c9e418",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F2.png?alt=media&token=cf6cf8fc-e801-4255-b050-2fb8ab9db2b4",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F3.png?alt=media&token=f5320545-7da7-413b-acc4-09eb394cf562",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F4.png?alt=media&token=b7cf02b2-bff7-4f9c-8d76-7c9010b1f96a",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F5.png?alt=media&token=312051fb-639b-4acc-a424-a46d3b16037e",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F6.png?alt=media&token=a0ee1234-0ff9-412d-8c7e-aeaaddd39178",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F7.png?alt=media&token=75f1c063-669e-4be7-b046-c28fa0276352",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F8.png?alt=media&token=8f1ebc66-dd7f-4dae-9bf3-51ee7d7b8cd0",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F9.png?alt=media&token=9abe5a59-641a-470d-870a-becb23603825"
- };
- public static String heromals[] = {
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F1.png?alt=media&token=d430eee5-c676-4417-bc33-a44afb81478d",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F10.png?alt=media&token=d89e3625-3410-4208-8cda-43cb6811b2f3",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F11.png?alt=media&token=841f0ade-e9b9-49ae-baa8-538466116fd0",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F12.png?alt=media&token=929f0e75-3623-40fb-a359-5be6e2462a3f",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F13.png?alt=media&token=ae3e3514-8683-4bee-b2ff-c53cae9486c6",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F14.png?alt=media&token=b57d6c30-f863-4b62-85c0-3426b8a7b026",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F15.png?alt=media&token=45324f28-41f5-41b7-a275-e657929ef25b",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F16.png?alt=media&token=beba0652-dade-4cbe-a41c-924d88da3584",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F17.png?alt=media&token=6008d8fb-c47f-4a57-a086-9443924d03f1",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F18.png?alt=media&token=7cd6e218-60f3-46ce-8966-7712209d4054",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F19.png?alt=media&token=650eee29-6b09-4712-b49b-0bcd9776f7b7",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F2.png?alt=media&token=1b0e4b49-8695-4d7f-9ef6-ebd3ee5c445f",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F20.png?alt=media&token=2f6e68cd-f9b3-4109-adc8-157609bd4247"
- };
- public static String mango[] = {
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F1.png?alt=media&token=df787696-5c9a-4acb-9df7-89f0218a8f22",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F10.png?alt=media&token=612f39a8-b1a5-4274-8774-eb5dc1fb657b",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F11.png?alt=media&token=022f42fc-7792-4242-962a-0e57b917233d",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F13.png?alt=media&token=5835d339-f08e-49fe-978e-6760e58a79ff",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F14.png?alt=media&token=93268424-d000-4fe0-abb6-85367350b35b",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F15.png?alt=media&token=218db1fb-dec5-406e-97b0-961ceda9012b",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F16.png?alt=media&token=33c19bd3-fe8f-4e7d-99be-5fd4f8b527b6",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F17.png?alt=media&token=0c8c10b3-4a47-4f4d-8d47-643ab38b327a",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F18.png?alt=media&token=8b4361c4-4164-4b4f-a486-b300b5e38eca",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F19.png?alt=media&token=b6764e40-d9c4-459c-b017-88e3bf9dfc50",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F2.png?alt=media&token=9eecc1c1-3a2a-46db-8ada-a44bd34f03fe",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F20.png?alt=media&token=74778d10-72cd-40bf-9333-ff856aa8339d"
- };
- public static String meep[] = {
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F1.png?alt=media&token=f30214cc-5096-4e27-a2b8-8c67bf7d6bae",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F10.png?alt=media&token=9526a90a-730b-4a24-acd6-c6e396356ae7",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F11.png?alt=media&token=35b5d4d8-0aa4-4dc2-9a77-b9c809bb3275",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F12.png?alt=media&token=8aa2007a-77fd-4dc3-9e60-9f8471d98d09",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F13.png?alt=media&token=e7bf02af-d320-4ce9-bdb8-84f5736d5c7c",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F14.png?alt=media&token=f22fe9f3-be6f-4535-a881-836455a51096",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F15.png?alt=media&token=6b074b1e-6219-4d23-9690-dd91a6a35e5b",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F16.png?alt=media&token=163749a3-e3ff-41fe-8163-355f65df6b6e",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F17.png?alt=media&token=c4cfc998-3e8c-4200-a64b-e802c129f895",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F18.png?alt=media&token=091418f3-79dc-4f1f-bdf5-783808d483a4",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F19.png?alt=media&token=67191070-725f-4c48-81b0-d1a41f1348d6",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F2.png?alt=media&token=5393d0da-7cec-494a-a9be-5c5ba125c417",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F20.png?alt=media&token=618a9a25-6c2a-48ce-b3b2-ff573f145b0d"
- };
- public static String mim[] = {
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F1.png?alt=media&token=b6bbbe41-d010-40ce-8242-e3e9ee1929db",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F10.png?alt=media&token=b442d762-21e4-4ffe-a89c-4fbe461ecd9f",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F11.png?alt=media&token=b7ac6496-5fdb-489d-b2eb-dace3ef8ca49",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F12.png?alt=media&token=9e355112-60d7-4f3f-9ee2-05beb629ea3a",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F13.png?alt=media&token=a5392542-c4f7-461a-a0d1-96f7b0a1ec00",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F14.png?alt=media&token=60168a97-cf01-4262-8ccc-12c2b2c56a65",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F15.png?alt=media&token=8f6dedd6-5ff1-401f-b2b7-16022004f2ac",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F16.png?alt=media&token=d83d3e73-da1b-4393-bc56-26e0a2259518",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F17.png?alt=media&token=3b792b27-2a78-4959-ad5d-54665f88d373",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F18.png?alt=media&token=235469c3-3fbc-48d0-a997-9688312c78da",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F19.png?alt=media&token=3dda9388-7591-4308-93f2-e144b59867b9",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F2.png?alt=media&token=eb4a67bf-1676-4403-b812-f0ab039941fc",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F20.png?alt=media&token=c7731efd-f28b-4a38-a680-9e7e099e88ce"
- };
- public static String minion[] = {
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F1.png?alt=media&token=fae797cb-0022-4782-8550-2bcfd5553001",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F10.png?alt=media&token=f329251e-e36a-4263-bab5-a8b82038f8d5",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F11.png?alt=media&token=19e6ff22-cbe0-48b1-97a8-03a02b28d82f",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F12.png?alt=media&token=04404bc4-3f89-429f-babd-dffb19f684ff",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F13.png?alt=media&token=fc3c52f7-4d9b-42ff-9355-3866928c8149",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F14.png?alt=media&token=f90fa9db-a5fd-4407-9947-4cb3042fefaf",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F15.png?alt=media&token=a6549133-f7ec-44a4-9109-a02310f8a907",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F16.png?alt=media&token=d72874a1-0ef4-4c0e-9003-148633c295b1",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F17.png?alt=media&token=a0517e63-749b-439a-9eb4-2e0f4932bf85",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F18.png?alt=media&token=5be052d4-d082-4e2d-b8ed-240a8305a66a",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F19.png?alt=media&token=91773991-6c97-4500-868b-6137d3f17d06",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F2.png?alt=media&token=7a54a826-d470-4c5a-8261-665e1d485e63",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F20.png?alt=media&token=707d30cf-1d83-4878-9b78-9927b6f99ae9"
- };
- public static String mood[] = {
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F1.png?alt=media&token=9d5782d7-3546-4078-afff-dc99aea5d47e",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F10.png?alt=media&token=e9460600-124c-4453-9ac0-d1f5a900c7ee",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F11.png?alt=media&token=f9b81d4a-48c0-427d-84db-42a1c18acfb7",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F12.png?alt=media&token=c4aa8141-9664-4278-a82f-a2c2ef119a4c",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F13.png?alt=media&token=7668e441-db8d-4d2a-81c3-4ca09ff15d0b",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F14.png?alt=media&token=e84fbc97-20e2-45c6-a156-6b679200ed6e",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F15.png?alt=media&token=303a3067-1acf-40ce-8579-90cea4c12675",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F16.png?alt=media&token=00cb3b10-eb82-4083-b23f-fe96c8cb9a51",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F17.png?alt=media&token=c442cbb9-1ae5-464f-8fa8-fa2d3b741066",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F18.png?alt=media&token=4be9e294-0db0-4190-a434-ba6c4ead5515",
- "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F2.png?alt=media&token=7a96d399-261b-420a-9574-959b9c470b93"
- };
-
-}
diff --git a/app/src/main/java/com/hoanganhtuan95ptit/demo/utils/Utils.java b/app/src/main/java/com/hoanganhtuan95ptit/demo/utils/Utils.java
new file mode 100644
index 0000000..c466c6b
--- /dev/null
+++ b/app/src/main/java/com/hoanganhtuan95ptit/demo/utils/Utils.java
@@ -0,0 +1,1226 @@
+package com.hoanganhtuan95ptit.demo.utils;
+
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model.Emojicon;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model.EmojiconCategory;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model.StickerCategory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * Created by HOANG ANH TUAN on 7/18/2017.
+ */
+
+public class Utils {
+
+ public static HashMap emoticons = new HashMap<>();
+
+ static {
+ emoticons.put(":))", "emojicons/emoji_1.png");
+ emoticons.put("y:))", "emojicons/emoji_2.png");
+ emoticons.put("(:8", "emojicons/emoji_3.png");
+ emoticons.put(":'(", "emojicons/emoji_4.png");
+ emoticons.put(":D", "emojicons/emoji_5.png");
+ emoticons.put(">:|", "emojicons/emoji_6.png");
+ emoticons.put("|:|", "emojicons/emoji_7.png");
+ emoticons.put(":B", "emojicons/emoji_8.png");
+ emoticons.put("):.", "emojicons/emoji_9.png");
+ emoticons.put("b:|", "emojicons/emoji_10.png");
+ emoticons.put("**", "emojicons/emoji_11.png");
+ emoticons.put("**|", "emojicons/emoji_12.png");
+ emoticons.put("O:|", "emojicons/emoji_13.png");
+ emoticons.put("@@", "emojicons/emoji_14.png");
+ emoticons.put("8'", "emojicons/emoji_15.png");
+ emoticons.put(":-o", "emojicons/emoji_16.png");
+ emoticons.put("*:", "emojicons/emoji_17.png");
+ emoticons.put(">8p", "emojicons/emoji_18.png");
+ emoticons.put("cold", "emojicons/emoji_19.png");
+ emoticons.put("):(", "emojicons/emoji_20.png");
+ emoticons.put(",:|", "emojicons/emoji_21.png");
+ emoticons.put(">:(", "emojicons/emoji_22.png");
+ emoticons.put(":(=", "emojicons/emoji_23.png");
+ emoticons.put("|;(", "emojicons/emoji_24.png");
+ emoticons.put("B)", "emojicons/emoji_25.png");
+ emoticons.put(":8b", "emojicons/emoji_26.png");
+ emoticons.put(":=", "emojicons/emoji_27.png");
+ emoticons.put(";)", "emojicons/emoji_28.png");
+ emoticons.put("..:.", "emojicons/emoji_29.png");
+ emoticons.put(":P", "emojicons/emoji_30.png");
+ emoticons.put(">:;", "emojicons/emoji_31.png");
+ emoticons.put("|:;", "emojicons/emoji_32.png");
+ emoticons.put("|;)", "emojicons/emoji_33.png");
+ emoticons.put("b-", "emojicons/emoji_34.png");
+ emoticons.put(":-o", "emojicons/emoji_35.png");
+ emoticons.put(":'o", "emojicons/emoji_36.png");
+ emoticons.put("_:O", "emojicons/emoji_37.png");
+ emoticons.put("8d", "emojicons/emoji_38.png");
+ emoticons.put("6~", "emojicons/emoji_39.png");
+ emoticons.put("(yoyo)", "emojicons/emoji_40.png");
+ emoticons.put("<8o", "emojicons/emoji_41.png");
+ emoticons.put(";.)", "emojicons/emoji_42.png");
+ emoticons.put("':o", "emojicons/emoji_43.png");
+ emoticons.put(":)", "emojicons/emoji_44.png");
+ emoticons.put("(spiderman)", "emojicons/emoji_45.png");
+ emoticons.put(":).", "emojicons/emoji_46.png");
+ emoticons.put(":((", "emojicons/emoji_47.png");
+ emoticons.put("=;-", "emojicons/emoji_48.png");
+ emoticons.put(":oo", "emojicons/emoji_49.png");
+ emoticons.put(":s2", "emojicons/emoji_50.png");
+ emoticons.put(");o", "emojicons/emoji_51.png");
+ emoticons.put(":=~", "emojicons/emoji_52.png");
+ emoticons.put("B-0", "emojicons/emoji_53.png");
+ emoticons.put(">:", "emojicons/emoji_54.png");
+
+ emoticons.put("0x22200", "emojicons/emoji_1.png");
+ emoticons.put("0x22201", "emojicons/emoji_2.png");
+ emoticons.put("0x22202", "emojicons/emoji_3.png");
+ emoticons.put("0x22203", "emojicons/emoji_4.png");
+ emoticons.put("0x22204", "emojicons/emoji_5.png");
+ emoticons.put("0x22205", "emojicons/emoji_6.png");
+ emoticons.put("0x22206", "emojicons/emoji_7.png");
+ emoticons.put("0x22207", "emojicons/emoji_8.png");
+ emoticons.put("0x22208", "emojicons/emoji_9.png");
+ emoticons.put("0x22209", "emojicons/emoji_10.png");
+ emoticons.put("0x2220a", "emojicons/emoji_11.png");
+ emoticons.put("0x2220b", "emojicons/emoji_12.png");
+ emoticons.put("0x2220c", "emojicons/emoji_13.png");
+ emoticons.put("0x2220d", "emojicons/emoji_14.png");
+ emoticons.put("0x2220e", "emojicons/emoji_15.png");
+ emoticons.put("0x2220f", "emojicons/emoji_16.png");
+ emoticons.put("0x22210", "emojicons/emoji_17.png");
+ emoticons.put("0x22211", "emojicons/emoji_18.png");
+ emoticons.put("0x22212", "emojicons/emoji_19.png");
+ emoticons.put("0x22213", "emojicons/emoji_20.png");
+ emoticons.put("0x22214", "emojicons/emoji_21.png");
+ emoticons.put("0x22215", "emojicons/emoji_22.png");
+ emoticons.put("0x22216", "emojicons/emoji_23.png");
+ emoticons.put("0x22217", "emojicons/emoji_24.png");
+ emoticons.put("0x22218", "emojicons/emoji_25.png");
+ emoticons.put("0x22219", "emojicons/emoji_26.png");
+ emoticons.put("0x2221a", "emojicons/emoji_27.png");
+ emoticons.put("0x2221b", "emojicons/emoji_28.png");
+ emoticons.put("0x2221c", "emojicons/emoji_29.png");
+ emoticons.put("0x2221d", "emojicons/emoji_30.png");
+ emoticons.put("0x2221e", "emojicons/emoji_31.png");
+ emoticons.put("0x2221f", "emojicons/emoji_32.png");
+ emoticons.put("0x22220", "emojicons/emoji_33.png");
+ emoticons.put("0x22221", "emojicons/emoji_34.png");
+ emoticons.put("0x22222", "emojicons/emoji_35.png");
+ emoticons.put("0x22223", "emojicons/emoji_36.png");
+ emoticons.put("0x22224", "emojicons/emoji_37.png");
+ emoticons.put("0x22225", "emojicons/emoji_38.png");
+ emoticons.put("0x22226", "emojicons/emoji_39.png");
+ emoticons.put("0x22227", "emojicons/emoji_40.png");
+ emoticons.put("0x22228", "emojicons/emoji_41.png");
+ emoticons.put("0x22229", "emojicons/emoji_42.png");
+ emoticons.put("0x2222a", "emojicons/emoji_43.png");
+ emoticons.put("0x2222b", "emojicons/emoji_44.png");
+ emoticons.put("0x2222c", "emojicons/emoji_45.png");
+ emoticons.put("0x2222d", "emojicons/emoji_46.png");
+ emoticons.put("0x2222e", "emojicons/emoji_47.png");
+ emoticons.put("0x2222f", "emojicons/emoji_48.png");
+ emoticons.put("0x22230", "emojicons/emoji_49.png");
+ emoticons.put("0x22231", "emojicons/emoji_50.png");
+ emoticons.put("0x22232", "emojicons/emoji_51.png");
+ emoticons.put("0x22233", "emojicons/emoji_52.png");
+ emoticons.put("0x22234", "emojicons/emoji_53.png");
+ emoticons.put("0x22235", "emojicons/emoji_54.png");
+ emoticons.put("0x22236", "emojigifs/emoji_1.gif");
+ emoticons.put("0x22237", "emojigifs/emoji_3.gif");
+ emoticons.put("0x22238", "emojigifs/emoji_4.gif");
+ emoticons.put("0x22239", "emojigifs/emoji_5.gif");
+ emoticons.put("0x2223a", "emojigifs/emoji_6.gif");
+ emoticons.put("0x2223b", "emojigifs/emoji_7.gif");
+ emoticons.put("0x2223c", "emojigifs/emoji_8.gif");
+ emoticons.put("0x2223d", "emojigifs/emoji_9.gif");
+ emoticons.put("0x2223e", "emojigifs/emoji_10.gif");
+ emoticons.put("0x2223f", "emojigifs/emoji_11.gif");
+ emoticons.put("0x22240", "emojigifs/emoji_12.gif");
+ emoticons.put("0x22241", "emojigifs/emoji_13.gif");
+ emoticons.put("0x22242", "emojigifs/emoji_14.gif");
+ emoticons.put("0x22243", "emojigifs/emoji_15.gif");
+ emoticons.put("0x22244", "emojigifs/emoji_16.gif");
+ emoticons.put("0x22245", "emojigifs/emoji_17.gif");
+ emoticons.put("0x22246", "emojigifs/emoji_18.gif");
+ emoticons.put("0x22247", "emojigifs/emoji_19.gif");
+ emoticons.put("0x22248", "emojigifs/emoji_20.gif");
+ emoticons.put("0x22249", "emojigifs/emoji_21.gif");
+ emoticons.put("0x2224a", "emojigifs/emoji_22.gif");
+ emoticons.put("0x2224b", "emojicons/tree_animal_1.png");
+ emoticons.put("0x2224c", "emojicons/tree_animal_3.png");
+ emoticons.put("0x2224d", "emojicons/tree_animal_4.png");
+ emoticons.put("0x2224e", "emojicons/tree_animal_5.png");
+ emoticons.put("0x2224f", "emojicons/tree_animal_6.png");
+ emoticons.put("0x22250", "emojicons/tree_animal_7.png");
+ emoticons.put("0x22251", "emojicons/tree_animal_8.png");
+ emoticons.put("0x22252", "emojicons/tree_animal_9.png");
+ emoticons.put("0x22253", "emojicons/tree_animal_10.png");
+ emoticons.put("0x22254", "emojicons/tree_animal_11.png");
+ emoticons.put("0x22255", "emojicons/tree_animal_12.png");
+ emoticons.put("0x22256", "emojicons/tree_animal_13.png");
+ emoticons.put("0x22257", "emojicons/tree_animal_14.png");
+ emoticons.put("0x22258", "emojicons/tree_animal_15.png");
+ emoticons.put("0x22259", "emojicons/tree_animal_16.png");
+ emoticons.put("0x2225a", "emojicons/tree_animal_17.png");
+ emoticons.put("0x2225b", "emojicons/tree_animal_18.png");
+ emoticons.put("0x2225c", "emojicons/tree_animal_19.png");
+ emoticons.put("0x2225d", "emojicons/tree_animal_20.png");
+ emoticons.put("0x2225e", "emojicons/tree_animal_21.png");
+ emoticons.put("0x2225f", "emojicons/tree_animal_22.png");
+ emoticons.put("0x22260", "emojicons/tree_animal_23.png");
+ emoticons.put("0x22261", "emojicons/tree_animal_24.png");
+ emoticons.put("0x22262", "emojicons/tree_animal_25.png");
+ emoticons.put("0x22263", "emojicons/tree_animal_26.png");
+ emoticons.put("0x22264", "emojicons/tree_animal_27.png");
+ emoticons.put("0x22265", "emojicons/tree_animal_28.png");
+ emoticons.put("0x22266", "emojicons/tree_animal_29.png");
+ emoticons.put("0x22267", "emojicons/tree_animal_30.png");
+ emoticons.put("0x22268", "emojicons/tree_animal_31.png");
+ emoticons.put("0x22269", "emojicons/tree_animal_32.png");
+ emoticons.put("0x2226a", "emojicons/tree_animal_33.png");
+ emoticons.put("0x2226b", "emojicons/tree_animal_34.png");
+ emoticons.put("0x2226c", "emojicons/tree_animal_46.png");
+ emoticons.put("0x2226d", "emojicons/tree_animal_48.png");
+ emoticons.put("0x2226e", "emojicons/tree_animal_49.png");
+ emoticons.put("0x2226f", "emojicons/tree_animal_50.png");
+ emoticons.put("0x22270", "emojicons/tree_animal_51.png");
+ emoticons.put("0x22271", "emojicons/tree_animal_52.png");
+ emoticons.put("0x22272", "emojicons/tree_animal_53.png");
+ emoticons.put("0x22273", "emojicons/tree_animal_54.png");
+ emoticons.put("0x22274", "emojicons/tree_animal_55.png");
+ emoticons.put("0x22275", "emojicons/tree_animal_56.png");
+ emoticons.put("0x22276", "emojicons/tree_animal_57.png");
+ emoticons.put("0x22277", "emojicons/tree_animal_58.png");
+ emoticons.put("0x22278", "emojicons/tree_animal_59.png");
+ emoticons.put("0x22279", "emojicons/tree_animal_60.png");
+ emoticons.put("0x2227a", "emojicons/tree_animal_61.png");
+ emoticons.put("0x2227b", "emojicons/tree_animal_62.png");
+ emoticons.put("0x2227c", "emojicons/tree_animal_63.png");
+ emoticons.put("0x2227d", "emojicons/tree_animal_64.png");
+ emoticons.put("0x2227e", "emojicons/tree_animal_65.png");
+ emoticons.put("0x2227f", "emojicons/tree_animal_66.png");
+ emoticons.put("0x22280", "emojicons/tree_animal_67.png");
+ emoticons.put("0x22281", "emojicons/tree_animal_68.png");
+ emoticons.put("0x22282", "emojicons/tree_animal_69.png");
+ emoticons.put("0x22283", "emojicons/tree_animal_70.png");
+ emoticons.put("0x22284", "emojicons/tree_animal_71.png");
+ emoticons.put("0x22285", "emojicons/tree_animal_72.png");
+ emoticons.put("0x22286", "emojicons/tree_animal_73.png");
+ emoticons.put("0x22287", "emojicons/tree_animal_74.png");
+ emoticons.put("0x22288", "emojicons/tree_animal_75.png");
+ emoticons.put("0x22289", "emojicons/tree_animal_76.png");
+ emoticons.put("0x2228a", "emojicons/tree_animal_77.png");
+ emoticons.put("0x2228b", "emojicons/party_1.png");
+ emoticons.put("0x2228c", "emojicons/party_3.png");
+ emoticons.put("0x2228d", "emojicons/party_4.png");
+ emoticons.put("0x2228e", "emojicons/party_5.png");
+ emoticons.put("0x2228f", "emojicons/party_6.png");
+ emoticons.put("0x22290", "emojicons/party_7.png");
+ emoticons.put("0x22291", "emojicons/party_8.png");
+ emoticons.put("0x22292", "emojicons/party_9.png");
+ emoticons.put("0x22293", "emojicons/party_10.png");
+ emoticons.put("0x22294", "emojicons/party_11.png");
+ emoticons.put("0x22295", "emojicons/party_12.png");
+ emoticons.put("0x22296", "emojicons/party_13.png");
+ emoticons.put("0x22297", "emojicons/party_14.png");
+ emoticons.put("0x22298", "emojicons/party_15.png");
+ emoticons.put("0x22299", "emojicons/party_16.png");
+ emoticons.put("0x2229a", "emojicons/party_17.png");
+ emoticons.put("0x2229b", "emojicons/party_18.png");
+ emoticons.put("0x2229c", "emojicons/party_19.png");
+ emoticons.put("0x2229d", "emojicons/party_20.png");
+ emoticons.put("0x2229e", "emojicons/party_21.png");
+ emoticons.put("0x2229f", "emojicons/party_22.png");
+ emoticons.put("0x222a0", "emojicons/party_23.png");
+ emoticons.put("0x222a1", "emojicons/party_24.png");
+ emoticons.put("0x222a2", "emojicons/party_25.png");
+ emoticons.put("0x222a3", "emojicons/party_26.png");
+ emoticons.put("0x222a4", "emojicons/party_27.png");
+ emoticons.put("0x222a5", "emojicons/party_28.png");
+ emoticons.put("0x222a6", "emojicons/party_29.png");
+ emoticons.put("0x222a7", "emojicons/party_30.png");
+ emoticons.put("0x222a8", "emojicons/party_31.png");
+ emoticons.put("0x222a9", "emojicons/party_32.png");
+ emoticons.put("0x222aa", "emojicons/party_33.png");
+ emoticons.put("0x222ab", "emojicons/party_34.png");
+ emoticons.put("0x222ac", "emojicons/party_35.png");
+ emoticons.put("0x222ad", "emojicons/party_36.png");
+ emoticons.put("0x222ae", "emojicons/party_37.png");
+ emoticons.put("0x222af", "emojicons/party_38.png");
+ emoticons.put("0x222b0", "emojicons/party_39.png");
+ emoticons.put("0x222b1", "emojicons/party_20.png");
+ emoticons.put("0x222b2", "emojicons/party_21.png");
+ emoticons.put("0x222b3", "emojicons/party_22.png");
+ emoticons.put("0x222b4", "emojicons/party_23.png");
+ emoticons.put("0x222b5", "emojicons/party_24.png");
+ emoticons.put("0x222b6", "emojicons/party_46.png");
+ emoticons.put("0x222b7", "emojicons/party_47.png");
+ emoticons.put("0x222b8", "emojicons/weather_1.png");
+ emoticons.put("0x222b9", "emojicons/weather_3.png");
+ emoticons.put("0x222ba", "emojicons/weather_4.png");
+ emoticons.put("0x222bb", "emojicons/weather_5.png");
+ emoticons.put("0x222bc", "emojicons/weather_6.png");
+ emoticons.put("0x222bd", "emojicons/weather_7.png");
+ emoticons.put("0x222be", "emojicons/weather_8.png");
+ emoticons.put("0x222bf", "emojicons/weather_9.png");
+ emoticons.put("0x222c0", "emojicons/weather_10.png");
+ emoticons.put("0x222c1", "emojicons/weather_11.png");
+ emoticons.put("0x222c2", "emojicons/weather_12.png");
+ emoticons.put("0x222c3", "emojicons/weather_13.png");
+ emoticons.put("0x222c4", "emojicons/weather_14.png");
+ emoticons.put("0x222c5", "emojicons/weather_15.png");
+ emoticons.put("0x222c6", "emojicons/weather_16.png");
+ emoticons.put("0x222c7", "emojicons/weather_17.png");
+ emoticons.put("0x222c8", "emojicons/weather_18.png");
+ emoticons.put("0x222c9", "emojicons/weather_19.png");
+ emoticons.put("0x222ca", "emojicons/weather_20.png");
+ emoticons.put("0x222cb", "emojicons/weather_21.png");
+ emoticons.put("0x222cc", "emojicons/weather_22.png");
+ emoticons.put("0x222cd", "emojicons/weather_23.png");
+ emoticons.put("0x222ce", "emojicons/weather_24.png");
+ emoticons.put("0x222cf", "emojicons/weather_25.png");
+ emoticons.put("0x222d0", "emojicons/weather_26.png");
+ emoticons.put("0x222d1", "emojicons/weather_27.png");
+ emoticons.put("0x222d2", "emojicons/weather_28.png");
+ emoticons.put("0x222d3", "emojicons/weather_29.png");
+ emoticons.put("0x222d4", "emojicons/weather_30.png");
+ emoticons.put("0x222d5", "emojicons/weather_31.png");
+ emoticons.put("0x222d6", "emojicons/weather_32.png");
+ emoticons.put("0x222d7", "emojicons/weather_33.png");
+ emoticons.put("0x222d8", "emojicons/weather_34.png");
+ emoticons.put("0x222d9", "emojicons/weather_35.png");
+ emoticons.put("0x222da", "emojicons/weather_36.png");
+ emoticons.put("0x222db", "emojicons/weather_37.png");
+ emoticons.put("0x222dc", "emojicons/weather_38.png");
+ emoticons.put("0x222dd", "emojicons/weather_39.png");
+ emoticons.put("0x222de", "emojicons/weather_20.png");
+ emoticons.put("0x222df", "emojicons/weather_21.png");
+ emoticons.put("0x222e0", "emojicons/weather_22.png");
+ emoticons.put("0x222e1", "emojicons/weather_23.png");
+ emoticons.put("0x222e2", "emojicons/weather_24.png");
+ emoticons.put("0x222e3", "emojicons/weather_46.png");
+ emoticons.put("0x222e4", "emojicons/ensign_1.png");
+ emoticons.put("0x222e5", "emojicons/ensign_3.png");
+ emoticons.put("0x222e6", "emojicons/ensign_4.png");
+ emoticons.put("0x222e7", "emojicons/ensign_5.png");
+ emoticons.put("0x222e8", "emojicons/ensign_6.png");
+ emoticons.put("0x222e9", "emojicons/ensign_7.png");
+ emoticons.put("0x222ea", "emojicons/ensign_8.png");
+ emoticons.put("0x222eb", "emojicons/ensign_9.png");
+ emoticons.put("0x222ec", "emojicons/ensign_10.png");
+ emoticons.put("0x222ed", "emojicons/ensign_11.png");
+ emoticons.put("0x222ee", "emojicons/ensign_12.png");
+ emoticons.put("0x222ef", "emojicons/ensign_13.png");
+ emoticons.put("0x222f0", "emojicons/ensign_14.png");
+ emoticons.put("0x222f1", "emojicons/ensign_15.png");
+ emoticons.put("0x222f2", "emojicons/ensign_16.png");
+ emoticons.put("0x222f3", "emojicons/ensign_17.png");
+ emoticons.put("0x222f4", "emojicons/ensign_18.png");
+ emoticons.put("0x222f5", "emojicons/ensign_19.png");
+ emoticons.put("0x222f6", "emojicons/ensign_20.png");
+ emoticons.put("0x222f7", "emojicons/ensign_21.png");
+ emoticons.put("0x222f8", "emojicons/ensign_22.png");
+ emoticons.put("0x222f9", "emojicons/ensign_23.png");
+ emoticons.put("0x222fa", "emojicons/ensign_24.png");
+ emoticons.put("0x222fb", "emojicons/ensign_25.png");
+ emoticons.put("0x222fc", "emojicons/ensign_26.png");
+ emoticons.put("0x222fd", "emojicons/ensign_27.png");
+ emoticons.put("0x222fe", "emojicons/ensign_28.png");
+ emoticons.put("0x222ff", "emojicons/ensign_29.png");
+ emoticons.put("0x22300", "emojicons/ensign_30.png");
+ emoticons.put("0x22301", "emojicons/ensign_31.png");
+ emoticons.put("0x22302", "emojicons/ensign_32.png");
+ emoticons.put("0x22303", "emojicons/ensign_33.png");
+ emoticons.put("0x22304", "emojicons/ensign_34.png");
+ emoticons.put("0x22305", "emojicons/ensign_35.png");
+ emoticons.put("0x22306", "emojicons/ensign_36.png");
+ emoticons.put("0x22307", "emojicons/ensign_37.png");
+ emoticons.put("0x22308", "emojicons/ensign_38.png");
+ emoticons.put("0x22309", "emojicons/ensign_39.png");
+ emoticons.put("0x2230a", "emojicons/ensign_40.png");
+ emoticons.put("0x2230b", "emojicons/ensign_41.png");
+ emoticons.put("0x2230c", "emojicons/ensign_42.png");
+ emoticons.put("0x2230d", "emojicons/ensign_43.png");
+ emoticons.put("0x2230e", "emojicons/ensign_44.png");
+ emoticons.put("0x2230f", "emojicons/ensign_45.png");
+ emoticons.put("0x22310", "emojicons/ensign_46.png");
+ emoticons.put("0x22311", "emojicons/ensign_47.png");
+ emoticons.put("0x22312", "emojicons/ensign_48.png");
+ emoticons.put("0x22313", "emojicons/ensign_49.png");
+ emoticons.put("0x22314", "emojicons/ensign_50.png");
+ emoticons.put("0x22315", "emojicons/ensign_51.png");
+ emoticons.put("0x22316", "emojicons/ensign_52.png");
+ emoticons.put("0x22317", "emojicons/ensign_53.png");
+ emoticons.put("0x22318", "emojicons/ensign_54.png");
+ emoticons.put("0x22319", "emojicons/ensign_55.png");
+ emoticons.put("0x2231a", "emojicons/ensign_56.png");
+ emoticons.put("0x2231b", "emojicons/ensign_57.png");
+ emoticons.put("0x2231c", "emojicons/ensign_58.png");
+ emoticons.put("0x2231d", "emojicons/ensign_59.png");
+ emoticons.put("0x2231e", "emojicons/ensign_60.png");
+ emoticons.put("0x2231f", "emojicons/ensign_61.png");
+ emoticons.put("0x22320", "emojicons/ensign_62.png");
+ emoticons.put("0x22321", "emojicons/ensign_63.png");
+ emoticons.put("0x22322", "emojicons/ensign_64.png");
+ emoticons.put("0x22323", "emojicons/ensign_65.png");
+ emoticons.put("0x22324", "emojicons/ensign_66.png");
+ emoticons.put("0x22325", "emojicons/ensign_67.png");
+ emoticons.put("0x22326", "emojicons/ensign_68.png");
+ emoticons.put("0x22327", "emojicons/ensign_69.png");
+ emoticons.put("0x22328", "emojicons/ensign_70.png");
+ emoticons.put("0x22329", "emojicons/ensign_71.png");
+ emoticons.put("0x2232a", "emojicons/ensign_72.png");
+ emoticons.put("0x2232b", "emojicons/ensign_73.png");
+ emoticons.put("0x2232c", "emojicons/ensign_74.png");
+ emoticons.put("0x2232d", "emojicons/ensign_75.png");
+ emoticons.put("0x2232e", "emojicons/ensign_76.png");
+ emoticons.put("0x2232f", "emojicons/ensign_77.png");
+ emoticons.put("0x22330", "emojicons/ensign_78.png");
+ emoticons.put("0x22331", "emojicons/ensign_79.png");
+ emoticons.put("0x22332", "emojicons/ensign_80.png");
+ emoticons.put("0x22333", "emojicons/ensign_81.png");
+ emoticons.put("0x22334", "emojicons/ensign_82.png");
+ emoticons.put("0x22335", "emojicons/ensign_83.png");
+ emoticons.put("0x22336", "emojicons/ensign_84.png");
+ emoticons.put("0x22337", "emojicons/ensign_85.png");
+ emoticons.put("0x22338", "emojicons/ensign_86.png");
+ emoticons.put("0x22339", "emojicons/ensign_87.png");
+ emoticons.put("0x2233a", "emojicons/ensign_88.png");
+ emoticons.put("0x2233b", "emojicons/ensign_89.png");
+ emoticons.put("0x2233c", "emojicons/ensign_90.png");
+ emoticons.put("0x2233d", "emojicons/ensign_91.png");
+ emoticons.put("0x2233e", "emojicons/ensign_92.png");
+ emoticons.put("0x2233f", "emojicons/ensign_93.png");
+ emoticons.put("0x22340", "emojicons/ensign_94.png");
+ emoticons.put("0x22341", "emojicons/ensign_95.png");
+ emoticons.put("0x22342", "emojicons/ensign_96.png");
+ emoticons.put("0x22343", "emojicons/ensign_97.png");
+ emoticons.put("0x22344", "emojicons/ensign_98.png");
+ emoticons.put("0x22345", "emojicons/ensign_99.png");
+ emoticons.put("0x22346", "emojicons/ensign_101.png");
+ emoticons.put("0x22347", "emojicons/ensign_103.png");
+ emoticons.put("0x22348", "emojicons/ensign_104.png");
+ emoticons.put("0x22349", "emojicons/ensign_105.png");
+ emoticons.put("0x2234a", "emojicons/ensign_106.png");
+ emoticons.put("0x2234b", "emojicons/ensign_107.png");
+ emoticons.put("0x2234c", "emojicons/ensign_108.png");
+ emoticons.put("0x2234d", "emojicons/ensign_109.png");
+ emoticons.put("0x2234e", "emojicons/ensign_110.png");
+ emoticons.put("0x2234f", "emojicons/ensign_111.png");
+ emoticons.put("0x22350", "emojicons/ensign_112.png");
+ emoticons.put("0x22351", "emojicons/ensign_113.png");
+ emoticons.put("0x22352", "emojicons/ensign_114.png");
+ emoticons.put("0x22353", "emojicons/ensign_115.png");
+ emoticons.put("0x22354", "emojicons/ensign_116.png");
+ emoticons.put("0x22355", "emojicons/ensign_117.png");
+ emoticons.put("0x22356", "emojicons/ensign_118.png");
+ emoticons.put("0x22357", "emojicons/ensign_119.png");
+ emoticons.put("0x22358", "emojicons/ensign_120.png");
+ emoticons.put("0x22359", "emojicons/ensign_121.png");
+ emoticons.put("0x2235a", "emojicons/ensign_122.png");
+ emoticons.put("0x2235b", "emojicons/ensign_123.png");
+ emoticons.put("0x2235c", "emojicons/ensign_124.png");
+ emoticons.put("0x2235d", "emojicons/ensign_125.png");
+ emoticons.put("0x2235e", "emojicons/ensign_126.png");
+ emoticons.put("0x2235f", "emojicons/ensign_127.png");
+ emoticons.put("0x22360", "emojicons/ensign_128.png");
+ emoticons.put("0x22361", "emojicons/ensign_129.png");
+ emoticons.put("0x22362", "emojicons/ensign_130.png");
+ emoticons.put("0x22363", "emojicons/ensign_131.png");
+ emoticons.put("0x22364", "emojicons/ensign_132.png");
+ emoticons.put("0x22365", "emojicons/ensign_133.png");
+ emoticons.put("0x22366", "emojicons/ensign_134.png");
+ emoticons.put("0x22367", "emojicons/ensign_135.png");
+ emoticons.put("0x22368", "emojicons/ensign_136.png");
+ emoticons.put("0x22369", "emojicons/ensign_137.png");
+ emoticons.put("0x2236a", "emojicons/ensign_138.png");
+ emoticons.put("0x2236b", "emojicons/ensign_139.png");
+ emoticons.put("0x2236c", "emojicons/ensign_140.png");
+ emoticons.put("0x2236d", "emojicons/ensign_141.png");
+ emoticons.put("0x2236e", "emojicons/ensign_142.png");
+ emoticons.put("0x2236f", "emojicons/ensign_143.png");
+ emoticons.put("0x22370", "emojicons/ensign_144.png");
+ emoticons.put("0x22371", "emojicons/ensign_145.png");
+ emoticons.put("0x22372", "emojicons/ensign_146.png");
+ emoticons.put("0x22373", "emojicons/ensign_147.png");
+ emoticons.put("0x22374", "emojicons/ensign_148.png");
+ emoticons.put("0x22375", "emojicons/ensign_149.png");
+ emoticons.put("0x22376", "emojicons/ensign_150.png");
+ emoticons.put("0x22377", "emojicons/ensign_151.png");
+ emoticons.put("0x22378", "emojicons/ensign_152.png");
+ emoticons.put("0x22379", "emojicons/ensign_153.png");
+ emoticons.put("0x2237a", "emojicons/ensign_154.png");
+ emoticons.put("0x2237b", "emojicons/ensign_155.png");
+ emoticons.put("0x2237c", "emojicons/ensign_156.png");
+ emoticons.put("0x2237d", "emojicons/ensign_157.png");
+ emoticons.put("0x2237e", "emojicons/ensign_158.png");
+ emoticons.put("0x2237f", "emojicons/ensign_159.png");
+ emoticons.put("0x22380", "emojicons/ensign_160.png");
+ emoticons.put("0x22381", "emojicons/ensign_161.png");
+ emoticons.put("0x22382", "emojicons/ensign_162.png");
+ emoticons.put("0x22383", "emojicons/ensign_163.png");
+ emoticons.put("0x22384", "emojicons/ensign_164.png");
+ emoticons.put("0x22385", "emojicons/ensign_165.png");
+ emoticons.put("0x22386", "emojicons/ensign_166.png");
+ emoticons.put("0x22387", "emojicons/ensign_167.png");
+ emoticons.put("0x22388", "emojicons/ensign_168.png");
+ emoticons.put("0x22389", "emojicons/ensign_169.png");
+ emoticons.put("0x2238a", "emojicons/ensign_170.png");
+ emoticons.put("0x2238b", "emojicons/ensign_171.png");
+ emoticons.put("0x2238c", "emojicons/ensign_172.png");
+ emoticons.put("0x2238d", "emojicons/ensign_173.png");
+ emoticons.put("0x2238e", "emojicons/ensign_174.png");
+ emoticons.put("0x2238f", "emojicons/ensign_175.png");
+ emoticons.put("0x22390", "emojicons/ensign_176.png");
+ emoticons.put("0x22391", "emojicons/ensign_177.png");
+ emoticons.put("0x22392", "emojicons/ensign_178.png");
+ emoticons.put("0x22393", "emojicons/ensign_179.png");
+ emoticons.put("0x22394", "emojicons/ensign_180.png");
+ emoticons.put("0x22395", "emojicons/ensign_181.png");
+ emoticons.put("0x22396", "emojicons/ensign_182.png");
+ emoticons.put("0x22397", "emojicons/ensign_183.png");
+ emoticons.put("0x22398", "emojicons/ensign_184.png");
+ emoticons.put("0x22399", "emojicons/ensign_185.png");
+ emoticons.put("0x2239a", "emojicons/ensign_186.png");
+ emoticons.put("0x2239b", "emojicons/ensign_187.png");
+ emoticons.put("0x2239c", "emojicons/ensign_188.png");
+ emoticons.put("0x2239d", "emojicons/ensign_189.png");
+ emoticons.put("0x2239e", "emojicons/ensign_190.png");
+ emoticons.put("0x2239f", "emojicons/ensign_191.png");
+ emoticons.put("0x223a0", "emojicons/ensign_192.png");
+ emoticons.put("0x223a1", "emojicons/ensign_193.png");
+ emoticons.put("0x223a2", "emojicons/ensign_194.png");
+ emoticons.put("0x223a3", "emojicons/ensign_195.png");
+ emoticons.put("0x223a4", "emojicons/ensign_196.png");
+ emoticons.put("0x223a5", "emojicons/ensign_197.png");
+ emoticons.put("0x223a6", "emojicons/ensign_198.png");
+ emoticons.put("0x223a7", "emojicons/ensign_199.png");
+ emoticons.put("0x223a8", "emojicons/ensign_201.png");
+ emoticons.put("0x223a9", "emojicons/ensign_203.png");
+ emoticons.put("0x223aa", "emojicons/ensign_204.png");
+ emoticons.put("0x223ab", "emojicons/ensign_205.png");
+ emoticons.put("0x223ac", "emojicons/ensign_206.png");
+ emoticons.put("0x223ad", "emojicons/ensign_207.png");
+ emoticons.put("0x223ae", "emojicons/ensign_208.png");
+ emoticons.put("0x223af", "emojicons/ensign_209.png");
+ emoticons.put("0x223b0", "emojicons/ensign_210.png");
+ emoticons.put("0x223b1", "emojicons/ensign_211.png");
+ emoticons.put("0x223b2", "emojicons/ensign_212.png");
+ emoticons.put("0x223b3", "emojicons/ensign_213.png");
+ emoticons.put("0x223b4", "emojicons/ensign_214.png");
+ emoticons.put("0x223b5", "emojicons/ensign_215.png");
+ emoticons.put("0x223b6", "emojicons/ensign_216.png");
+ emoticons.put("0x223b7", "emojicons/ensign_217.png");
+ emoticons.put("0x223b8", "emojicons/ensign_218.png");
+ emoticons.put("0x223b9", "emojicons/ensign_219.png");
+ emoticons.put("0x223ba", "emojicons/ensign_220.png");
+ emoticons.put("0x223bb", "emojicons/ensign_221.png");
+ emoticons.put("0x223bc", "emojicons/ensign_222.png");
+ emoticons.put("0x223bd", "emojicons/ensign_223.png");
+ emoticons.put("0x223be", "emojicons/ensign_224.png");
+ emoticons.put("0x223bf", "emojicons/ensign_225.png");
+ emoticons.put("0x223c0", "emojicons/ensign_226.png");
+ emoticons.put("0x223c1", "emojicons/ensign_227.png");
+ emoticons.put("0x223c2", "emojicons/ensign_228.png");
+ emoticons.put("0x223c3", "emojicons/ensign_229.png");
+ emoticons.put("0x223c4", "emojicons/ensign_230.png");
+ emoticons.put("0x223c5", "emojicons/ensign_231.png");
+ emoticons.put("0x223c6", "emojicons/ensign_232.png");
+ emoticons.put("0x223c7", "emojicons/ensign_233.png");
+ emoticons.put("0x223c8", "emojicons/ensign_234.png");
+ emoticons.put("0x223c9", "emojicons/ensign_235.png");
+ emoticons.put("0x223ca", "emojicons/ensign_236.png");
+ emoticons.put("0x223cb", "emojicons/ensign_237.png");
+ emoticons.put("0x223cc", "emojicons/ensign_238.png");
+ emoticons.put("0x223cd", "emojicons/ensign_239.png");
+ emoticons.put("0x223ce", "emojicons/ensign_240.png");
+ emoticons.put("0x223cf", "emojicons/ensign_241.png");
+ emoticons.put("0x223d0", "emojicons/ensign_242.png");
+ emoticons.put("0x223d1", "emojicons/ensign_243.png");
+ }
+
+ public static ArrayList initDataStickerCategory() {
+ ArrayList stickerCategories = new ArrayList<>();
+ ArrayList stickers;
+ String urlTitle = "";
+ StickerCategory stickerCategory;
+
+ urlTitle = "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F1.png?alt=media&token=8846aa96-1acb-4778-b0fb-833ba47ff746";
+ stickers = new ArrayList<>();
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F10.png?alt=media&token=4793603a-ffc3-40ca-8dd7-3a8f3b6adb8a");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F11.png?alt=media&token=3d7d2573-302c-4401-8a86-85a96b25c3f4");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F12.png?alt=media&token=7dd2c6ab-a32e-427e-b3f6-2c926ed031ef");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F13.png?alt=media&token=a233fea3-d8ce-48f9-8df3-911e4831496e");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F14.png?alt=media&token=b70d17d1-c164-42ce-9b37-3452c55e6d15");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F15.png?alt=media&token=05918af9-d07b-41f3-8279-c3a1c1774084");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F16.png?alt=media&token=6cfaa4ab-09ae-417d-97e5-8dd13ce16859");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F17.png?alt=media&token=a215c04f-98f6-4b28-80a1-6e010f72a4af");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F18.png?alt=media&token=8d400f38-a6a3-4e99-ad48-31b26d71c001");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F19.png?alt=media&token=f0ab3dbd-f1cc-4a45-92f5-33f8a1097084");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F2.png?alt=media&token=80842850-5ace-4ff0-9521-37f63e9eeea3");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F20.png?alt=media&token=0abd0b14-6cf7-4ffa-adb5-cb5a120e798c");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fbun%2F1.png?alt=media&token=8846aa96-1acb-4778-b0fb-833ba47ff746");
+ stickerCategory = new StickerCategory(urlTitle, stickers);
+ stickerCategories.add(stickerCategory);
+
+ urlTitle = "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F1.png?alt=media&token=2156b270-d90f-407b-9575-4e9214b2fdf9";
+ stickers = new ArrayList<>();
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F1.png?alt=media&token=2156b270-d90f-407b-9575-4e9214b2fdf9");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F1.png?alt=media&token=2156b270-d90f-407b-9575-4e9214b2fdf9");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F10.png?alt=media&token=9b279f1b-cc1a-4ff8-bad2-4d3a5a157259");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F11.png?alt=media&token=4f1e8355-84db-48de-9283-38d65cb28c1e");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F12.png?alt=media&token=319b4849-0629-45d1-a257-7b68f198c2a4");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F13.png?alt=media&token=4c14d60e-ac19-403f-b192-1444ff711c90");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F14.png?alt=media&token=44411f89-557d-45ae-8abc-9410beb6ead1");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F15.png?alt=media&token=d5d91351-78a9-4f49-bdee-767a50486c4d");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F16.png?alt=media&token=114808e7-d7dd-41d1-980d-ab70b2c9e418");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F2.png?alt=media&token=cf6cf8fc-e801-4255-b050-2fb8ab9db2b4");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F3.png?alt=media&token=f5320545-7da7-413b-acc4-09eb394cf562");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F4.png?alt=media&token=b7cf02b2-bff7-4f9c-8d76-7c9010b1f96a");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F5.png?alt=media&token=312051fb-639b-4acc-a424-a46d3b16037e");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F6.png?alt=media&token=a0ee1234-0ff9-412d-8c7e-aeaaddd39178");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F7.png?alt=media&token=75f1c063-669e-4be7-b046-c28fa0276352");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F8.png?alt=media&token=8f1ebc66-dd7f-4dae-9bf3-51ee7d7b8cd0");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Ffinch%2F9.png?alt=media&token=9abe5a59-641a-470d-870a-becb23603825");
+ stickerCategory = new StickerCategory(urlTitle, stickers);
+ stickerCategories.add(stickerCategory);
+
+ urlTitle = "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F1.png?alt=media&token=d430eee5-c676-4417-bc33-a44afb81478d";
+ stickers = new ArrayList<>();
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F1.png?alt=media&token=d430eee5-c676-4417-bc33-a44afb81478d");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F10.png?alt=media&token=d89e3625-3410-4208-8cda-43cb6811b2f3");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F11.png?alt=media&token=841f0ade-e9b9-49ae-baa8-538466116fd0");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F12.png?alt=media&token=929f0e75-3623-40fb-a359-5be6e2462a3f");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F13.png?alt=media&token=ae3e3514-8683-4bee-b2ff-c53cae9486c6");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F14.png?alt=media&token=b57d6c30-f863-4b62-85c0-3426b8a7b026");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F15.png?alt=media&token=45324f28-41f5-41b7-a275-e657929ef25b");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F16.png?alt=media&token=beba0652-dade-4cbe-a41c-924d88da3584");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F17.png?alt=media&token=6008d8fb-c47f-4a57-a086-9443924d03f1");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F18.png?alt=media&token=7cd6e218-60f3-46ce-8966-7712209d4054");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F19.png?alt=media&token=650eee29-6b09-4712-b49b-0bcd9776f7b7");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F2.png?alt=media&token=1b0e4b49-8695-4d7f-9ef6-ebd3ee5c445f");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fheromals%2F20.png?alt=media&token=2f6e68cd-f9b3-4109-adc8-157609bd4247");
+ stickerCategory = new StickerCategory(urlTitle, stickers);
+ stickerCategories.add(stickerCategory);
+
+ urlTitle = "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F1.png?alt=media&token=df787696-5c9a-4acb-9df7-89f0218a8f22";
+ stickers = new ArrayList<>();
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F1.png?alt=media&token=df787696-5c9a-4acb-9df7-89f0218a8f22");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F10.png?alt=media&token=612f39a8-b1a5-4274-8774-eb5dc1fb657b");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F11.png?alt=media&token=022f42fc-7792-4242-962a-0e57b917233d");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F13.png?alt=media&token=5835d339-f08e-49fe-978e-6760e58a79ff");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F14.png?alt=media&token=93268424-d000-4fe0-abb6-85367350b35b");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F15.png?alt=media&token=218db1fb-dec5-406e-97b0-961ceda9012b");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F16.png?alt=media&token=33c19bd3-fe8f-4e7d-99be-5fd4f8b527b6");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F17.png?alt=media&token=0c8c10b3-4a47-4f4d-8d47-643ab38b327a");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F18.png?alt=media&token=8b4361c4-4164-4b4f-a486-b300b5e38eca");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F19.png?alt=media&token=b6764e40-d9c4-459c-b017-88e3bf9dfc50");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F2.png?alt=media&token=9eecc1c1-3a2a-46db-8ada-a44bd34f03fe");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmango%2F20.png?alt=media&token=74778d10-72cd-40bf-9333-ff856aa8339d");
+ stickerCategory = new StickerCategory(urlTitle, stickers);
+ stickerCategories.add(stickerCategory);
+
+ urlTitle = "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F1.png?alt=media&token=f30214cc-5096-4e27-a2b8-8c67bf7d6bae";
+ stickers = new ArrayList<>();
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F1.png?alt=media&token=f30214cc-5096-4e27-a2b8-8c67bf7d6bae");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F10.png?alt=media&token=9526a90a-730b-4a24-acd6-c6e396356ae7");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F11.png?alt=media&token=35b5d4d8-0aa4-4dc2-9a77-b9c809bb3275");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F12.png?alt=media&token=8aa2007a-77fd-4dc3-9e60-9f8471d98d09");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F13.png?alt=media&token=e7bf02af-d320-4ce9-bdb8-84f5736d5c7c");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F14.png?alt=media&token=f22fe9f3-be6f-4535-a881-836455a51096");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F15.png?alt=media&token=6b074b1e-6219-4d23-9690-dd91a6a35e5b");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F16.png?alt=media&token=163749a3-e3ff-41fe-8163-355f65df6b6e");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F17.png?alt=media&token=c4cfc998-3e8c-4200-a64b-e802c129f895");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F18.png?alt=media&token=091418f3-79dc-4f1f-bdf5-783808d483a4");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F19.png?alt=media&token=67191070-725f-4c48-81b0-d1a41f1348d6");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F2.png?alt=media&token=5393d0da-7cec-494a-a9be-5c5ba125c417");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmeep%2F20.png?alt=media&token=618a9a25-6c2a-48ce-b3b2-ff573f145b0d");
+ stickerCategory = new StickerCategory(urlTitle, stickers);
+ stickerCategories.add(stickerCategory);
+
+ urlTitle = "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F1.png?alt=media&token=b6bbbe41-d010-40ce-8242-e3e9ee1929db";
+ stickers = new ArrayList<>();
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F1.png?alt=media&token=b6bbbe41-d010-40ce-8242-e3e9ee1929db");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F10.png?alt=media&token=b442d762-21e4-4ffe-a89c-4fbe461ecd9f");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F11.png?alt=media&token=b7ac6496-5fdb-489d-b2eb-dace3ef8ca49");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F12.png?alt=media&token=9e355112-60d7-4f3f-9ee2-05beb629ea3a");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F13.png?alt=media&token=a5392542-c4f7-461a-a0d1-96f7b0a1ec00");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F14.png?alt=media&token=60168a97-cf01-4262-8ccc-12c2b2c56a65");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F15.png?alt=media&token=8f6dedd6-5ff1-401f-b2b7-16022004f2ac");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F16.png?alt=media&token=d83d3e73-da1b-4393-bc56-26e0a2259518");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F17.png?alt=media&token=3b792b27-2a78-4959-ad5d-54665f88d373");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F18.png?alt=media&token=235469c3-3fbc-48d0-a997-9688312c78da");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F19.png?alt=media&token=3dda9388-7591-4308-93f2-e144b59867b9");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F2.png?alt=media&token=eb4a67bf-1676-4403-b812-f0ab039941fc");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmim%2F20.png?alt=media&token=c7731efd-f28b-4a38-a680-9e7e099e88ce");
+ stickerCategory = new StickerCategory(urlTitle, stickers);
+ stickerCategories.add(stickerCategory);
+
+ urlTitle = "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F1.png?alt=media&token=fae797cb-0022-4782-8550-2bcfd5553001";
+ stickers = new ArrayList<>();
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F1.png?alt=media&token=fae797cb-0022-4782-8550-2bcfd5553001");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F10.png?alt=media&token=f329251e-e36a-4263-bab5-a8b82038f8d5");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F11.png?alt=media&token=19e6ff22-cbe0-48b1-97a8-03a02b28d82f");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F12.png?alt=media&token=04404bc4-3f89-429f-babd-dffb19f684ff");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F13.png?alt=media&token=fc3c52f7-4d9b-42ff-9355-3866928c8149");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F14.png?alt=media&token=f90fa9db-a5fd-4407-9947-4cb3042fefaf");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F15.png?alt=media&token=a6549133-f7ec-44a4-9109-a02310f8a907");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F16.png?alt=media&token=d72874a1-0ef4-4c0e-9003-148633c295b1");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F17.png?alt=media&token=a0517e63-749b-439a-9eb4-2e0f4932bf85");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F18.png?alt=media&token=5be052d4-d082-4e2d-b8ed-240a8305a66a");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F19.png?alt=media&token=91773991-6c97-4500-868b-6137d3f17d06");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F2.png?alt=media&token=7a54a826-d470-4c5a-8261-665e1d485e63");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fminion%2F20.png?alt=media&token=707d30cf-1d83-4878-9b78-9927b6f99ae9");
+ stickerCategory = new StickerCategory(urlTitle, stickers);
+ stickerCategories.add(stickerCategory);
+
+ urlTitle = "https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F1.png?alt=media&token=9d5782d7-3546-4078-afff-dc99aea5d47e";
+ stickers = new ArrayList<>();
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F1.png?alt=media&token=9d5782d7-3546-4078-afff-dc99aea5d47e");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F10.png?alt=media&token=e9460600-124c-4453-9ac0-d1f5a900c7ee");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F11.png?alt=media&token=f9b81d4a-48c0-427d-84db-42a1c18acfb7");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F12.png?alt=media&token=c4aa8141-9664-4278-a82f-a2c2ef119a4c");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F13.png?alt=media&token=7668e441-db8d-4d2a-81c3-4ca09ff15d0b");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F14.png?alt=media&token=e84fbc97-20e2-45c6-a156-6b679200ed6e");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F15.png?alt=media&token=303a3067-1acf-40ce-8579-90cea4c12675");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F16.png?alt=media&token=00cb3b10-eb82-4083-b23f-fe96c8cb9a51");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F17.png?alt=media&token=c442cbb9-1ae5-464f-8fa8-fa2d3b741066");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F18.png?alt=media&token=4be9e294-0db0-4190-a434-ba6c4ead5515");
+ stickers.add("https://firebasestorage.googleapis.com/v0/b/oi-firebase-8de7e.appspot.com/o/stickers%2Fmood%2F2.png?alt=media&token=7a96d399-261b-420a-9574-959b9c470b93");
+ stickerCategory = new StickerCategory(urlTitle, stickers);
+ stickerCategories.add(stickerCategory);
+
+ return stickerCategories;
+ }
+
+ public static ArrayList initDataEmoticonCategory() {
+ ArrayList emoticonCategories = new ArrayList<>();
+ String urlTitle;
+ ArrayList emojicons;
+ EmojiconCategory emojiconCategory;
+
+ //people
+ urlTitle = "emojicons/emoji_1.png";
+ emojicons = new ArrayList<>();
+ emojicons.add(new Emojicon("0x22200", "emojicons/emoji_1.png"));
+ emojicons.add(new Emojicon("0x22201", "emojicons/emoji_2.png"));
+ emojicons.add(new Emojicon("0x22202", "emojicons/emoji_3.png"));
+ emojicons.add(new Emojicon("0x22203", "emojicons/emoji_4.png"));
+ emojicons.add(new Emojicon("0x22204", "emojicons/emoji_5.png"));
+ emojicons.add(new Emojicon("0x22205", "emojicons/emoji_6.png"));
+ emojicons.add(new Emojicon("0x22206", "emojicons/emoji_7.png"));
+ emojicons.add(new Emojicon("0x22207", "emojicons/emoji_8.png"));
+ emojicons.add(new Emojicon("0x22208", "emojicons/emoji_9.png"));
+ emojicons.add(new Emojicon("0x22209", "emojicons/emoji_10.png"));
+ emojicons.add(new Emojicon("0x2220a", "emojicons/emoji_11.png"));
+ emojicons.add(new Emojicon("0x2220b", "emojicons/emoji_12.png"));
+ emojicons.add(new Emojicon("0x2220c", "emojicons/emoji_13.png"));
+ emojicons.add(new Emojicon("0x2220d", "emojicons/emoji_14.png"));
+ emojicons.add(new Emojicon("0x2220e", "emojicons/emoji_15.png"));
+ emojicons.add(new Emojicon("0x2220f", "emojicons/emoji_16.png"));
+ emojicons.add(new Emojicon("0x22210", "emojicons/emoji_17.png"));
+ emojicons.add(new Emojicon("0x22211", "emojicons/emoji_18.png"));
+ emojicons.add(new Emojicon("0x22212", "emojicons/emoji_19.png"));
+ emojicons.add(new Emojicon("0x22213", "emojicons/emoji_20.png"));
+ emojicons.add(new Emojicon("0x22214", "emojicons/emoji_21.png"));
+ emojicons.add(new Emojicon("0x22215", "emojicons/emoji_22.png"));
+ emojicons.add(new Emojicon("0x22216", "emojicons/emoji_23.png"));
+ emojicons.add(new Emojicon("0x22217", "emojicons/emoji_24.png"));
+ emojicons.add(new Emojicon("0x22218", "emojicons/emoji_25.png"));
+ emojicons.add(new Emojicon("0x22219", "emojicons/emoji_26.png"));
+ emojicons.add(new Emojicon("0x2221a", "emojicons/emoji_27.png"));
+ emojicons.add(new Emojicon("0x2221b", "emojicons/emoji_28.png"));
+ emojicons.add(new Emojicon("0x2221c", "emojicons/emoji_29.png"));
+ emojicons.add(new Emojicon("0x2221d", "emojicons/emoji_30.png"));
+ emojicons.add(new Emojicon("0x2221e", "emojicons/emoji_31.png"));
+ emojicons.add(new Emojicon("0x2221f", "emojicons/emoji_32.png"));
+ emojicons.add(new Emojicon("0x22220", "emojicons/emoji_33.png"));
+ emojicons.add(new Emojicon("0x22221", "emojicons/emoji_34.png"));
+ emojicons.add(new Emojicon("0x22222", "emojicons/emoji_35.png"));
+ emojicons.add(new Emojicon("0x22223", "emojicons/emoji_36.png"));
+ emojicons.add(new Emojicon("0x22224", "emojicons/emoji_37.png"));
+ emojicons.add(new Emojicon("0x22225", "emojicons/emoji_38.png"));
+ emojicons.add(new Emojicon("0x22226", "emojicons/emoji_39.png"));
+ emojicons.add(new Emojicon("0x22227", "emojicons/emoji_40.png"));
+ emojicons.add(new Emojicon("0x22228", "emojicons/emoji_41.png"));
+ emojicons.add(new Emojicon("0x22229", "emojicons/emoji_42.png"));
+ emojicons.add(new Emojicon("0x2222a", "emojicons/emoji_43.png"));
+ emojicons.add(new Emojicon("0x2222b", "emojicons/emoji_44.png"));
+ emojicons.add(new Emojicon("0x2222c", "emojicons/emoji_45.png"));
+ emojicons.add(new Emojicon("0x2222d", "emojicons/emoji_46.png"));
+ emojicons.add(new Emojicon("0x2222e", "emojicons/emoji_47.png"));
+ emojicons.add(new Emojicon("0x2222f", "emojicons/emoji_48.png"));
+ emojicons.add(new Emojicon("0x22230", "emojicons/emoji_49.png"));
+ emojicons.add(new Emojicon("0x22231", "emojicons/emoji_50.png"));
+ emojicons.add(new Emojicon("0x22232", "emojicons/emoji_51.png"));
+ emojicons.add(new Emojicon("0x22233", "emojicons/emoji_52.png"));
+ emojicons.add(new Emojicon("0x22234", "emojicons/emoji_53.png"));
+ emojicons.add(new Emojicon("0x22235", "emojicons/emoji_54.png"));
+ emojiconCategory = new EmojiconCategory(urlTitle, emojicons);
+ emoticonCategories.add(emojiconCategory);
+
+ //emojigifs
+ urlTitle = "emojigifs/emoji_1.gif";
+ emojicons = new ArrayList<>();
+ emojicons.add(new Emojicon("0x22236", "emojigifs/emoji_1.gif"));
+ emojicons.add(new Emojicon("0x22237", "emojigifs/emoji_3.gif"));
+ emojicons.add(new Emojicon("0x22238", "emojigifs/emoji_4.gif"));
+ emojicons.add(new Emojicon("0x22239", "emojigifs/emoji_5.gif"));
+ emojicons.add(new Emojicon("0x2223a", "emojigifs/emoji_6.gif"));
+ emojicons.add(new Emojicon("0x2223b", "emojigifs/emoji_7.gif"));
+ emojicons.add(new Emojicon("0x2223c", "emojigifs/emoji_8.gif"));
+ emojicons.add(new Emojicon("0x2223d", "emojigifs/emoji_9.gif"));
+ emojicons.add(new Emojicon("0x2223e", "emojigifs/emoji_10.gif"));
+ emojicons.add(new Emojicon("0x2223f", "emojigifs/emoji_11.gif"));
+ emojicons.add(new Emojicon("0x22240", "emojigifs/emoji_12.gif"));
+ emojicons.add(new Emojicon("0x22241", "emojigifs/emoji_13.gif"));
+ emojicons.add(new Emojicon("0x22242", "emojigifs/emoji_14.gif"));
+ emojicons.add(new Emojicon("0x22243", "emojigifs/emoji_15.gif"));
+ emojicons.add(new Emojicon("0x22244", "emojigifs/emoji_16.gif"));
+ emojicons.add(new Emojicon("0x22245", "emojigifs/emoji_17.gif"));
+ emojicons.add(new Emojicon("0x22246", "emojigifs/emoji_18.gif"));
+ emojicons.add(new Emojicon("0x22247", "emojigifs/emoji_19.gif"));
+ emojicons.add(new Emojicon("0x22248", "emojigifs/emoji_20.gif"));
+ emojicons.add(new Emojicon("0x22249", "emojigifs/emoji_21.gif"));
+ emojicons.add(new Emojicon("0x2224a", "emojigifs/emoji_22.gif"));
+ emojiconCategory = new EmojiconCategory(urlTitle, emojicons);
+ emoticonCategories.add(emojiconCategory);
+
+ //tree animal
+ urlTitle = "emojicons/tree_animal_11.png";
+ emojicons = new ArrayList<>();
+ emojicons.add(new Emojicon("0x2224b", "emojicons/tree_animal_1.png"));
+ emojicons.add(new Emojicon("0x2224c", "emojicons/tree_animal_3.png"));
+ emojicons.add(new Emojicon("0x2224d", "emojicons/tree_animal_4.png"));
+ emojicons.add(new Emojicon("0x2224e", "emojicons/tree_animal_5.png"));
+ emojicons.add(new Emojicon("0x2224f", "emojicons/tree_animal_6.png"));
+ emojicons.add(new Emojicon("0x22250", "emojicons/tree_animal_7.png"));
+ emojicons.add(new Emojicon("0x22251", "emojicons/tree_animal_8.png"));
+ emojicons.add(new Emojicon("0x22252", "emojicons/tree_animal_9.png"));
+ emojicons.add(new Emojicon("0x22253", "emojicons/tree_animal_10.png"));
+ emojicons.add(new Emojicon("0x22254", "emojicons/tree_animal_11.png"));
+ emojicons.add(new Emojicon("0x22255", "emojicons/tree_animal_12.png"));
+ emojicons.add(new Emojicon("0x22256", "emojicons/tree_animal_13.png"));
+ emojicons.add(new Emojicon("0x22257", "emojicons/tree_animal_14.png"));
+ emojicons.add(new Emojicon("0x22258", "emojicons/tree_animal_15.png"));
+ emojicons.add(new Emojicon("0x22259", "emojicons/tree_animal_16.png"));
+ emojicons.add(new Emojicon("0x2225a", "emojicons/tree_animal_17.png"));
+ emojicons.add(new Emojicon("0x2225b", "emojicons/tree_animal_18.png"));
+ emojicons.add(new Emojicon("0x2225c", "emojicons/tree_animal_19.png"));
+ emojicons.add(new Emojicon("0x2225d", "emojicons/tree_animal_20.png"));
+ emojicons.add(new Emojicon("0x2225e", "emojicons/tree_animal_21.png"));
+ emojicons.add(new Emojicon("0x2225f", "emojicons/tree_animal_22.png"));
+ emojicons.add(new Emojicon("0x22260", "emojicons/tree_animal_23.png"));
+ emojicons.add(new Emojicon("0x22261", "emojicons/tree_animal_24.png"));
+ emojicons.add(new Emojicon("0x22262", "emojicons/tree_animal_25.png"));
+ emojicons.add(new Emojicon("0x22263", "emojicons/tree_animal_26.png"));
+ emojicons.add(new Emojicon("0x22264", "emojicons/tree_animal_27.png"));
+ emojicons.add(new Emojicon("0x22265", "emojicons/tree_animal_28.png"));
+ emojicons.add(new Emojicon("0x22266", "emojicons/tree_animal_29.png"));
+ emojicons.add(new Emojicon("0x22267", "emojicons/tree_animal_30.png"));
+ emojicons.add(new Emojicon("0x22268", "emojicons/tree_animal_31.png"));
+ emojicons.add(new Emojicon("0x22269", "emojicons/tree_animal_32.png"));
+ emojicons.add(new Emojicon("0x2226a", "emojicons/tree_animal_33.png"));
+ emojicons.add(new Emojicon("0x2226b", "emojicons/tree_animal_34.png"));
+ emojicons.add(new Emojicon("0x2226c", "emojicons/tree_animal_46.png"));
+ emojicons.add(new Emojicon("0x2226d", "emojicons/tree_animal_48.png"));
+ emojicons.add(new Emojicon("0x2226e", "emojicons/tree_animal_49.png"));
+ emojicons.add(new Emojicon("0x2226f", "emojicons/tree_animal_50.png"));
+ emojicons.add(new Emojicon("0x22270", "emojicons/tree_animal_51.png"));
+ emojicons.add(new Emojicon("0x22271", "emojicons/tree_animal_52.png"));
+ emojicons.add(new Emojicon("0x22272", "emojicons/tree_animal_53.png"));
+ emojicons.add(new Emojicon("0x22273", "emojicons/tree_animal_54.png"));
+ emojicons.add(new Emojicon("0x22274", "emojicons/tree_animal_55.png"));
+ emojicons.add(new Emojicon("0x22275", "emojicons/tree_animal_56.png"));
+ emojicons.add(new Emojicon("0x22276", "emojicons/tree_animal_57.png"));
+ emojicons.add(new Emojicon("0x22277", "emojicons/tree_animal_58.png"));
+ emojicons.add(new Emojicon("0x22278", "emojicons/tree_animal_59.png"));
+ emojicons.add(new Emojicon("0x22279", "emojicons/tree_animal_60.png"));
+ emojicons.add(new Emojicon("0x2227a", "emojicons/tree_animal_61.png"));
+ emojicons.add(new Emojicon("0x2227b", "emojicons/tree_animal_62.png"));
+ emojicons.add(new Emojicon("0x2227c", "emojicons/tree_animal_63.png"));
+ emojicons.add(new Emojicon("0x2227d", "emojicons/tree_animal_64.png"));
+ emojicons.add(new Emojicon("0x2227e", "emojicons/tree_animal_65.png"));
+ emojicons.add(new Emojicon("0x2227f", "emojicons/tree_animal_66.png"));
+ emojicons.add(new Emojicon("0x22280", "emojicons/tree_animal_67.png"));
+ emojicons.add(new Emojicon("0x22281", "emojicons/tree_animal_68.png"));
+ emojicons.add(new Emojicon("0x22282", "emojicons/tree_animal_69.png"));
+ emojicons.add(new Emojicon("0x22283", "emojicons/tree_animal_70.png"));
+ emojicons.add(new Emojicon("0x22284", "emojicons/tree_animal_71.png"));
+ emojicons.add(new Emojicon("0x22285", "emojicons/tree_animal_72.png"));
+ emojicons.add(new Emojicon("0x22286", "emojicons/tree_animal_73.png"));
+ emojicons.add(new Emojicon("0x22287", "emojicons/tree_animal_74.png"));
+ emojicons.add(new Emojicon("0x22288", "emojicons/tree_animal_75.png"));
+ emojicons.add(new Emojicon("0x22289", "emojicons/tree_animal_76.png"));
+ emojicons.add(new Emojicon("0x2228a", "emojicons/tree_animal_77.png"));
+
+ emojiconCategory = new EmojiconCategory(urlTitle, emojicons);
+ emoticonCategories.add(emojiconCategory);
+
+ //tree animal
+ urlTitle = "emojicons/party_12.png";
+ emojicons = new ArrayList<>();
+ emojicons.add(new Emojicon("0x2228b", "emojicons/party_1.png"));
+ emojicons.add(new Emojicon("0x2228c", "emojicons/party_3.png"));
+ emojicons.add(new Emojicon("0x2228d", "emojicons/party_4.png"));
+ emojicons.add(new Emojicon("0x2228e", "emojicons/party_5.png"));
+ emojicons.add(new Emojicon("0x2228f", "emojicons/party_6.png"));
+ emojicons.add(new Emojicon("0x22290", "emojicons/party_7.png"));
+ emojicons.add(new Emojicon("0x22291", "emojicons/party_8.png"));
+ emojicons.add(new Emojicon("0x22292", "emojicons/party_9.png"));
+ emojicons.add(new Emojicon("0x22293", "emojicons/party_10.png"));
+ emojicons.add(new Emojicon("0x22294", "emojicons/party_11.png"));
+ emojicons.add(new Emojicon("0x22295", "emojicons/party_12.png"));
+ emojicons.add(new Emojicon("0x22296", "emojicons/party_13.png"));
+ emojicons.add(new Emojicon("0x22297", "emojicons/party_14.png"));
+ emojicons.add(new Emojicon("0x22298", "emojicons/party_15.png"));
+ emojicons.add(new Emojicon("0x22299", "emojicons/party_16.png"));
+ emojicons.add(new Emojicon("0x2229a", "emojicons/party_17.png"));
+ emojicons.add(new Emojicon("0x2229b", "emojicons/party_18.png"));
+ emojicons.add(new Emojicon("0x2229c", "emojicons/party_19.png"));
+ emojicons.add(new Emojicon("0x2229d", "emojicons/party_20.png"));
+ emojicons.add(new Emojicon("0x2229e", "emojicons/party_21.png"));
+ emojicons.add(new Emojicon("0x2229f", "emojicons/party_22.png"));
+ emojicons.add(new Emojicon("0x222a0", "emojicons/party_23.png"));
+ emojicons.add(new Emojicon("0x222a1", "emojicons/party_24.png"));
+ emojicons.add(new Emojicon("0x222a2", "emojicons/party_25.png"));
+ emojicons.add(new Emojicon("0x222a3", "emojicons/party_26.png"));
+ emojicons.add(new Emojicon("0x222a4", "emojicons/party_27.png"));
+ emojicons.add(new Emojicon("0x222a5", "emojicons/party_28.png"));
+ emojicons.add(new Emojicon("0x222a6", "emojicons/party_29.png"));
+ emojicons.add(new Emojicon("0x222a7", "emojicons/party_30.png"));
+ emojicons.add(new Emojicon("0x222a8", "emojicons/party_31.png"));
+ emojicons.add(new Emojicon("0x222a9", "emojicons/party_32.png"));
+ emojicons.add(new Emojicon("0x222aa", "emojicons/party_33.png"));
+ emojicons.add(new Emojicon("0x222ab", "emojicons/party_34.png"));
+ emojicons.add(new Emojicon("0x222ac", "emojicons/party_35.png"));
+ emojicons.add(new Emojicon("0x222ad", "emojicons/party_36.png"));
+ emojicons.add(new Emojicon("0x222ae", "emojicons/party_37.png"));
+ emojicons.add(new Emojicon("0x222af", "emojicons/party_38.png"));
+ emojicons.add(new Emojicon("0x222b0", "emojicons/party_39.png"));
+ emojicons.add(new Emojicon("0x222b1", "emojicons/party_20.png"));
+ emojicons.add(new Emojicon("0x222b2", "emojicons/party_21.png"));
+ emojicons.add(new Emojicon("0x222b3", "emojicons/party_22.png"));
+ emojicons.add(new Emojicon("0x222b4", "emojicons/party_23.png"));
+ emojicons.add(new Emojicon("0x222b5", "emojicons/party_24.png"));
+ emojicons.add(new Emojicon("0x222b6", "emojicons/party_46.png"));
+ emojicons.add(new Emojicon("0x222b7", "emojicons/party_47.png"));
+
+ emojiconCategory = new EmojiconCategory(urlTitle, emojicons);
+ emoticonCategories.add(emojiconCategory);
+
+
+ //weather
+ urlTitle = "emojicons/weather_18.png";
+ emojicons = new ArrayList<>();
+ emojicons.add(new Emojicon("0x222b8", "emojicons/weather_1.png"));
+ emojicons.add(new Emojicon("0x222b9", "emojicons/weather_3.png"));
+ emojicons.add(new Emojicon("0x222ba", "emojicons/weather_4.png"));
+ emojicons.add(new Emojicon("0x222bb", "emojicons/weather_5.png"));
+ emojicons.add(new Emojicon("0x222bc", "emojicons/weather_6.png"));
+ emojicons.add(new Emojicon("0x222bd", "emojicons/weather_7.png"));
+ emojicons.add(new Emojicon("0x222be", "emojicons/weather_8.png"));
+ emojicons.add(new Emojicon("0x222bf", "emojicons/weather_9.png"));
+ emojicons.add(new Emojicon("0x222c0", "emojicons/weather_10.png"));
+ emojicons.add(new Emojicon("0x222c1", "emojicons/weather_11.png"));
+ emojicons.add(new Emojicon("0x222c2", "emojicons/weather_12.png"));
+ emojicons.add(new Emojicon("0x222c3", "emojicons/weather_13.png"));
+ emojicons.add(new Emojicon("0x222c4", "emojicons/weather_14.png"));
+ emojicons.add(new Emojicon("0x222c5", "emojicons/weather_15.png"));
+ emojicons.add(new Emojicon("0x222c6", "emojicons/weather_16.png"));
+ emojicons.add(new Emojicon("0x222c7", "emojicons/weather_17.png"));
+ emojicons.add(new Emojicon("0x222c8", "emojicons/weather_18.png"));
+ emojicons.add(new Emojicon("0x222c9", "emojicons/weather_19.png"));
+ emojicons.add(new Emojicon("0x222ca", "emojicons/weather_20.png"));
+ emojicons.add(new Emojicon("0x222cb", "emojicons/weather_21.png"));
+ emojicons.add(new Emojicon("0x222cc", "emojicons/weather_22.png"));
+ emojicons.add(new Emojicon("0x222cd", "emojicons/weather_23.png"));
+ emojicons.add(new Emojicon("0x222ce", "emojicons/weather_24.png"));
+ emojicons.add(new Emojicon("0x222cf", "emojicons/weather_25.png"));
+ emojicons.add(new Emojicon("0x222d0", "emojicons/weather_26.png"));
+ emojicons.add(new Emojicon("0x222d1", "emojicons/weather_27.png"));
+ emojicons.add(new Emojicon("0x222d2", "emojicons/weather_28.png"));
+ emojicons.add(new Emojicon("0x222d3", "emojicons/weather_29.png"));
+ emojicons.add(new Emojicon("0x222d4", "emojicons/weather_30.png"));
+ emojicons.add(new Emojicon("0x222d5", "emojicons/weather_31.png"));
+ emojicons.add(new Emojicon("0x222d6", "emojicons/weather_32.png"));
+ emojicons.add(new Emojicon("0x222d7", "emojicons/weather_33.png"));
+ emojicons.add(new Emojicon("0x222d8", "emojicons/weather_34.png"));
+ emojicons.add(new Emojicon("0x222d9", "emojicons/weather_35.png"));
+ emojicons.add(new Emojicon("0x222da", "emojicons/weather_36.png"));
+ emojicons.add(new Emojicon("0x222db", "emojicons/weather_37.png"));
+ emojicons.add(new Emojicon("0x222dc", "emojicons/weather_38.png"));
+ emojicons.add(new Emojicon("0x222dd", "emojicons/weather_39.png"));
+ emojicons.add(new Emojicon("0x222de", "emojicons/weather_20.png"));
+ emojicons.add(new Emojicon("0x222df", "emojicons/weather_21.png"));
+ emojicons.add(new Emojicon("0x222e0", "emojicons/weather_22.png"));
+ emojicons.add(new Emojicon("0x222e1", "emojicons/weather_23.png"));
+ emojicons.add(new Emojicon("0x222e2", "emojicons/weather_24.png"));
+ emojicons.add(new Emojicon("0x222e3", "emojicons/weather_46.png"));
+
+ emojiconCategory = new EmojiconCategory(urlTitle, emojicons);
+ emoticonCategories.add(emojiconCategory);
+
+ //ensign1
+ urlTitle = "emojicons/ensign_1.png";
+ emojicons = new ArrayList<>();
+ emojicons.add(new Emojicon("0x222e4", "emojicons/ensign_1.png"));
+ emojicons.add(new Emojicon("0x222e5", "emojicons/ensign_3.png"));
+ emojicons.add(new Emojicon("0x222e6", "emojicons/ensign_4.png"));
+ emojicons.add(new Emojicon("0x222e7", "emojicons/ensign_5.png"));
+ emojicons.add(new Emojicon("0x222e8", "emojicons/ensign_6.png"));
+ emojicons.add(new Emojicon("0x222e9", "emojicons/ensign_7.png"));
+ emojicons.add(new Emojicon("0x222ea", "emojicons/ensign_8.png"));
+ emojicons.add(new Emojicon("0x222eb", "emojicons/ensign_9.png"));
+ emojicons.add(new Emojicon("0x222ec", "emojicons/ensign_10.png"));
+ emojicons.add(new Emojicon("0x222ed", "emojicons/ensign_11.png"));
+ emojicons.add(new Emojicon("0x222ee", "emojicons/ensign_12.png"));
+ emojicons.add(new Emojicon("0x222ef", "emojicons/ensign_13.png"));
+ emojicons.add(new Emojicon("0x222f0", "emojicons/ensign_14.png"));
+ emojicons.add(new Emojicon("0x222f1", "emojicons/ensign_15.png"));
+ emojicons.add(new Emojicon("0x222f2", "emojicons/ensign_16.png"));
+ emojicons.add(new Emojicon("0x222f3", "emojicons/ensign_17.png"));
+ emojicons.add(new Emojicon("0x222f4", "emojicons/ensign_18.png"));
+ emojicons.add(new Emojicon("0x222f5", "emojicons/ensign_19.png"));
+ emojicons.add(new Emojicon("0x222f6", "emojicons/ensign_20.png"));
+ emojicons.add(new Emojicon("0x222f7", "emojicons/ensign_21.png"));
+ emojicons.add(new Emojicon("0x222f8", "emojicons/ensign_22.png"));
+ emojicons.add(new Emojicon("0x222f9", "emojicons/ensign_23.png"));
+ emojicons.add(new Emojicon("0x222fa", "emojicons/ensign_24.png"));
+ emojicons.add(new Emojicon("0x222fb", "emojicons/ensign_25.png"));
+ emojicons.add(new Emojicon("0x222fc", "emojicons/ensign_26.png"));
+ emojicons.add(new Emojicon("0x222fd", "emojicons/ensign_27.png"));
+ emojicons.add(new Emojicon("0x222fe", "emojicons/ensign_28.png"));
+ emojicons.add(new Emojicon("0x222ff", "emojicons/ensign_29.png"));
+ emojicons.add(new Emojicon("0x22300", "emojicons/ensign_30.png"));
+ emojicons.add(new Emojicon("0x22301", "emojicons/ensign_31.png"));
+ emojicons.add(new Emojicon("0x22302", "emojicons/ensign_32.png"));
+ emojicons.add(new Emojicon("0x22303", "emojicons/ensign_33.png"));
+ emojicons.add(new Emojicon("0x22304", "emojicons/ensign_34.png"));
+ emojicons.add(new Emojicon("0x22305", "emojicons/ensign_35.png"));
+ emojicons.add(new Emojicon("0x22306", "emojicons/ensign_36.png"));
+ emojicons.add(new Emojicon("0x22307", "emojicons/ensign_37.png"));
+ emojicons.add(new Emojicon("0x22308", "emojicons/ensign_38.png"));
+ emojicons.add(new Emojicon("0x22309", "emojicons/ensign_39.png"));
+ emojicons.add(new Emojicon("0x2230a", "emojicons/ensign_40.png"));
+ emojicons.add(new Emojicon("0x2230b", "emojicons/ensign_41.png"));
+ emojicons.add(new Emojicon("0x2230c", "emojicons/ensign_42.png"));
+ emojicons.add(new Emojicon("0x2230d", "emojicons/ensign_43.png"));
+ emojicons.add(new Emojicon("0x2230e", "emojicons/ensign_44.png"));
+ emojicons.add(new Emojicon("0x2230f", "emojicons/ensign_45.png"));
+ emojicons.add(new Emojicon("0x22310", "emojicons/ensign_46.png"));
+ emojicons.add(new Emojicon("0x22311", "emojicons/ensign_47.png"));
+ emojicons.add(new Emojicon("0x22312", "emojicons/ensign_48.png"));
+ emojicons.add(new Emojicon("0x22313", "emojicons/ensign_49.png"));
+ emojicons.add(new Emojicon("0x22314", "emojicons/ensign_50.png"));
+ emojicons.add(new Emojicon("0x22315", "emojicons/ensign_51.png"));
+ emojicons.add(new Emojicon("0x22316", "emojicons/ensign_52.png"));
+ emojicons.add(new Emojicon("0x22317", "emojicons/ensign_53.png"));
+ emojicons.add(new Emojicon("0x22318", "emojicons/ensign_54.png"));
+ emojicons.add(new Emojicon("0x22319", "emojicons/ensign_55.png"));
+ emojicons.add(new Emojicon("0x2231a", "emojicons/ensign_56.png"));
+ emojicons.add(new Emojicon("0x2231b", "emojicons/ensign_57.png"));
+ emojicons.add(new Emojicon("0x2231c", "emojicons/ensign_58.png"));
+ emojicons.add(new Emojicon("0x2231d", "emojicons/ensign_59.png"));
+ emojicons.add(new Emojicon("0x2231e", "emojicons/ensign_60.png"));
+ emojicons.add(new Emojicon("0x2231f", "emojicons/ensign_61.png"));
+ emojicons.add(new Emojicon("0x22320", "emojicons/ensign_62.png"));
+ emojicons.add(new Emojicon("0x22321", "emojicons/ensign_63.png"));
+ emojicons.add(new Emojicon("0x22322", "emojicons/ensign_64.png"));
+ emojicons.add(new Emojicon("0x22323", "emojicons/ensign_65.png"));
+ emojicons.add(new Emojicon("0x22324", "emojicons/ensign_66.png"));
+ emojicons.add(new Emojicon("0x22325", "emojicons/ensign_67.png"));
+ emojicons.add(new Emojicon("0x22326", "emojicons/ensign_68.png"));
+ emojicons.add(new Emojicon("0x22327", "emojicons/ensign_69.png"));
+ emojicons.add(new Emojicon("0x22328", "emojicons/ensign_70.png"));
+ emojicons.add(new Emojicon("0x22329", "emojicons/ensign_71.png"));
+ emojicons.add(new Emojicon("0x2232a", "emojicons/ensign_72.png"));
+ emojicons.add(new Emojicon("0x2232b", "emojicons/ensign_73.png"));
+ emojicons.add(new Emojicon("0x2232c", "emojicons/ensign_74.png"));
+ emojicons.add(new Emojicon("0x2232d", "emojicons/ensign_75.png"));
+ emojicons.add(new Emojicon("0x2232e", "emojicons/ensign_76.png"));
+ emojicons.add(new Emojicon("0x2232f", "emojicons/ensign_77.png"));
+ emojicons.add(new Emojicon("0x22330", "emojicons/ensign_78.png"));
+ emojicons.add(new Emojicon("0x22331", "emojicons/ensign_79.png"));
+ emojicons.add(new Emojicon("0x22332", "emojicons/ensign_80.png"));
+ emojicons.add(new Emojicon("0x22333", "emojicons/ensign_81.png"));
+ emojicons.add(new Emojicon("0x22334", "emojicons/ensign_82.png"));
+ emojicons.add(new Emojicon("0x22335", "emojicons/ensign_83.png"));
+ emojicons.add(new Emojicon("0x22336", "emojicons/ensign_84.png"));
+ emojicons.add(new Emojicon("0x22337", "emojicons/ensign_85.png"));
+ emojicons.add(new Emojicon("0x22338", "emojicons/ensign_86.png"));
+ emojicons.add(new Emojicon("0x22339", "emojicons/ensign_87.png"));
+ emojicons.add(new Emojicon("0x2233a", "emojicons/ensign_88.png"));
+ emojicons.add(new Emojicon("0x2233b", "emojicons/ensign_89.png"));
+ emojicons.add(new Emojicon("0x2233c", "emojicons/ensign_90.png"));
+ emojicons.add(new Emojicon("0x2233d", "emojicons/ensign_91.png"));
+ emojicons.add(new Emojicon("0x2233e", "emojicons/ensign_92.png"));
+ emojicons.add(new Emojicon("0x2233f", "emojicons/ensign_93.png"));
+ emojicons.add(new Emojicon("0x22340", "emojicons/ensign_94.png"));
+ emojicons.add(new Emojicon("0x22341", "emojicons/ensign_95.png"));
+ emojicons.add(new Emojicon("0x22342", "emojicons/ensign_96.png"));
+ emojicons.add(new Emojicon("0x22343", "emojicons/ensign_97.png"));
+ emojicons.add(new Emojicon("0x22344", "emojicons/ensign_98.png"));
+ emojicons.add(new Emojicon("0x22345", "emojicons/ensign_99.png"));
+
+ emojiconCategory = new EmojiconCategory(urlTitle, emojicons);
+ emoticonCategories.add(emojiconCategory);
+
+
+ //ensign2
+ urlTitle = "emojicons/ensign_199.png";
+ emojicons = new ArrayList<>();
+ emojicons.add(new Emojicon("0x22346", "emojicons/ensign_101.png"));
+ emojicons.add(new Emojicon("0x22347", "emojicons/ensign_103.png"));
+ emojicons.add(new Emojicon("0x22348", "emojicons/ensign_104.png"));
+ emojicons.add(new Emojicon("0x22349", "emojicons/ensign_105.png"));
+ emojicons.add(new Emojicon("0x2234a", "emojicons/ensign_106.png"));
+ emojicons.add(new Emojicon("0x2234b", "emojicons/ensign_107.png"));
+ emojicons.add(new Emojicon("0x2234c", "emojicons/ensign_108.png"));
+ emojicons.add(new Emojicon("0x2234d", "emojicons/ensign_109.png"));
+ emojicons.add(new Emojicon("0x2234e", "emojicons/ensign_110.png"));
+ emojicons.add(new Emojicon("0x2234f", "emojicons/ensign_111.png"));
+ emojicons.add(new Emojicon("0x22350", "emojicons/ensign_112.png"));
+ emojicons.add(new Emojicon("0x22351", "emojicons/ensign_113.png"));
+ emojicons.add(new Emojicon("0x22352", "emojicons/ensign_114.png"));
+ emojicons.add(new Emojicon("0x22353", "emojicons/ensign_115.png"));
+ emojicons.add(new Emojicon("0x22354", "emojicons/ensign_116.png"));
+ emojicons.add(new Emojicon("0x22355", "emojicons/ensign_117.png"));
+ emojicons.add(new Emojicon("0x22356", "emojicons/ensign_118.png"));
+ emojicons.add(new Emojicon("0x22357", "emojicons/ensign_119.png"));
+ emojicons.add(new Emojicon("0x22358", "emojicons/ensign_120.png"));
+ emojicons.add(new Emojicon("0x22359", "emojicons/ensign_121.png"));
+ emojicons.add(new Emojicon("0x2235a", "emojicons/ensign_122.png"));
+ emojicons.add(new Emojicon("0x2235b", "emojicons/ensign_123.png"));
+ emojicons.add(new Emojicon("0x2235c", "emojicons/ensign_124.png"));
+ emojicons.add(new Emojicon("0x2235d", "emojicons/ensign_125.png"));
+ emojicons.add(new Emojicon("0x2235e", "emojicons/ensign_126.png"));
+ emojicons.add(new Emojicon("0x2235f", "emojicons/ensign_127.png"));
+ emojicons.add(new Emojicon("0x22360", "emojicons/ensign_128.png"));
+ emojicons.add(new Emojicon("0x22361", "emojicons/ensign_129.png"));
+ emojicons.add(new Emojicon("0x22362", "emojicons/ensign_130.png"));
+ emojicons.add(new Emojicon("0x22363", "emojicons/ensign_131.png"));
+ emojicons.add(new Emojicon("0x22364", "emojicons/ensign_132.png"));
+ emojicons.add(new Emojicon("0x22365", "emojicons/ensign_133.png"));
+ emojicons.add(new Emojicon("0x22366", "emojicons/ensign_134.png"));
+ emojicons.add(new Emojicon("0x22367", "emojicons/ensign_135.png"));
+ emojicons.add(new Emojicon("0x22368", "emojicons/ensign_136.png"));
+ emojicons.add(new Emojicon("0x22369", "emojicons/ensign_137.png"));
+ emojicons.add(new Emojicon("0x2236a", "emojicons/ensign_138.png"));
+ emojicons.add(new Emojicon("0x2236b", "emojicons/ensign_139.png"));
+ emojicons.add(new Emojicon("0x2236c", "emojicons/ensign_140.png"));
+ emojicons.add(new Emojicon("0x2236d", "emojicons/ensign_141.png"));
+ emojicons.add(new Emojicon("0x2236e", "emojicons/ensign_142.png"));
+ emojicons.add(new Emojicon("0x2236f", "emojicons/ensign_143.png"));
+ emojicons.add(new Emojicon("0x22370", "emojicons/ensign_144.png"));
+ emojicons.add(new Emojicon("0x22371", "emojicons/ensign_145.png"));
+ emojicons.add(new Emojicon("0x22372", "emojicons/ensign_146.png"));
+ emojicons.add(new Emojicon("0x22373", "emojicons/ensign_147.png"));
+ emojicons.add(new Emojicon("0x22374", "emojicons/ensign_148.png"));
+ emojicons.add(new Emojicon("0x22375", "emojicons/ensign_149.png"));
+ emojicons.add(new Emojicon("0x22376", "emojicons/ensign_150.png"));
+ emojicons.add(new Emojicon("0x22377", "emojicons/ensign_151.png"));
+ emojicons.add(new Emojicon("0x22378", "emojicons/ensign_152.png"));
+ emojicons.add(new Emojicon("0x22379", "emojicons/ensign_153.png"));
+ emojicons.add(new Emojicon("0x2237a", "emojicons/ensign_154.png"));
+ emojicons.add(new Emojicon("0x2237b", "emojicons/ensign_155.png"));
+ emojicons.add(new Emojicon("0x2237c", "emojicons/ensign_156.png"));
+ emojicons.add(new Emojicon("0x2237d", "emojicons/ensign_157.png"));
+ emojicons.add(new Emojicon("0x2237e", "emojicons/ensign_158.png"));
+ emojicons.add(new Emojicon("0x2237f", "emojicons/ensign_159.png"));
+ emojicons.add(new Emojicon("0x22380", "emojicons/ensign_160.png"));
+ emojicons.add(new Emojicon("0x22381", "emojicons/ensign_161.png"));
+ emojicons.add(new Emojicon("0x22382", "emojicons/ensign_162.png"));
+ emojicons.add(new Emojicon("0x22383", "emojicons/ensign_163.png"));
+ emojicons.add(new Emojicon("0x22384", "emojicons/ensign_164.png"));
+ emojicons.add(new Emojicon("0x22385", "emojicons/ensign_165.png"));
+ emojicons.add(new Emojicon("0x22386", "emojicons/ensign_166.png"));
+ emojicons.add(new Emojicon("0x22387", "emojicons/ensign_167.png"));
+ emojicons.add(new Emojicon("0x22388", "emojicons/ensign_168.png"));
+ emojicons.add(new Emojicon("0x22389", "emojicons/ensign_169.png"));
+ emojicons.add(new Emojicon("0x2238a", "emojicons/ensign_170.png"));
+ emojicons.add(new Emojicon("0x2238b", "emojicons/ensign_171.png"));
+ emojicons.add(new Emojicon("0x2238c", "emojicons/ensign_172.png"));
+ emojicons.add(new Emojicon("0x2238d", "emojicons/ensign_173.png"));
+ emojicons.add(new Emojicon("0x2238e", "emojicons/ensign_174.png"));
+ emojicons.add(new Emojicon("0x2238f", "emojicons/ensign_175.png"));
+ emojicons.add(new Emojicon("0x22390", "emojicons/ensign_176.png"));
+ emojicons.add(new Emojicon("0x22391", "emojicons/ensign_177.png"));
+ emojicons.add(new Emojicon("0x22392", "emojicons/ensign_178.png"));
+ emojicons.add(new Emojicon("0x22393", "emojicons/ensign_179.png"));
+ emojicons.add(new Emojicon("0x22394", "emojicons/ensign_180.png"));
+ emojicons.add(new Emojicon("0x22395", "emojicons/ensign_181.png"));
+ emojicons.add(new Emojicon("0x22396", "emojicons/ensign_182.png"));
+ emojicons.add(new Emojicon("0x22397", "emojicons/ensign_183.png"));
+ emojicons.add(new Emojicon("0x22398", "emojicons/ensign_184.png"));
+ emojicons.add(new Emojicon("0x22399", "emojicons/ensign_185.png"));
+ emojicons.add(new Emojicon("0x2239a", "emojicons/ensign_186.png"));
+ emojicons.add(new Emojicon("0x2239b", "emojicons/ensign_187.png"));
+ emojicons.add(new Emojicon("0x2239c", "emojicons/ensign_188.png"));
+ emojicons.add(new Emojicon("0x2239d", "emojicons/ensign_189.png"));
+ emojicons.add(new Emojicon("0x2239e", "emojicons/ensign_190.png"));
+ emojicons.add(new Emojicon("0x2239f", "emojicons/ensign_191.png"));
+ emojicons.add(new Emojicon("0x223a0", "emojicons/ensign_192.png"));
+ emojicons.add(new Emojicon("0x223a1", "emojicons/ensign_193.png"));
+ emojicons.add(new Emojicon("0x223a2", "emojicons/ensign_194.png"));
+ emojicons.add(new Emojicon("0x223a3", "emojicons/ensign_195.png"));
+ emojicons.add(new Emojicon("0x223a4", "emojicons/ensign_196.png"));
+ emojicons.add(new Emojicon("0x223a5", "emojicons/ensign_197.png"));
+ emojicons.add(new Emojicon("0x223a6", "emojicons/ensign_198.png"));
+ emojicons.add(new Emojicon("0x223a7", "emojicons/ensign_199.png"));
+
+ emojiconCategory = new EmojiconCategory(urlTitle, emojicons);
+ emoticonCategories.add(emojiconCategory);
+
+ //ensign3
+ urlTitle = "emojicons/ensign_219.png";
+ emojicons = new ArrayList<>();
+ emojicons.add(new Emojicon("0x223a8", "emojicons/ensign_201.png"));
+ emojicons.add(new Emojicon("0x223a9", "emojicons/ensign_203.png"));
+ emojicons.add(new Emojicon("0x223aa", "emojicons/ensign_204.png"));
+ emojicons.add(new Emojicon("0x223ab", "emojicons/ensign_205.png"));
+ emojicons.add(new Emojicon("0x223ac", "emojicons/ensign_206.png"));
+ emojicons.add(new Emojicon("0x223ad", "emojicons/ensign_207.png"));
+ emojicons.add(new Emojicon("0x223ae", "emojicons/ensign_208.png"));
+ emojicons.add(new Emojicon("0x223af", "emojicons/ensign_209.png"));
+ emojicons.add(new Emojicon("0x223b0", "emojicons/ensign_210.png"));
+ emojicons.add(new Emojicon("0x223b1", "emojicons/ensign_211.png"));
+ emojicons.add(new Emojicon("0x223b2", "emojicons/ensign_212.png"));
+ emojicons.add(new Emojicon("0x223b3", "emojicons/ensign_213.png"));
+ emojicons.add(new Emojicon("0x223b4", "emojicons/ensign_214.png"));
+ emojicons.add(new Emojicon("0x223b5", "emojicons/ensign_215.png"));
+ emojicons.add(new Emojicon("0x223b6", "emojicons/ensign_216.png"));
+ emojicons.add(new Emojicon("0x223b7", "emojicons/ensign_217.png"));
+ emojicons.add(new Emojicon("0x223b8", "emojicons/ensign_218.png"));
+ emojicons.add(new Emojicon("0x223b9", "emojicons/ensign_219.png"));
+ emojicons.add(new Emojicon("0x223ba", "emojicons/ensign_220.png"));
+ emojicons.add(new Emojicon("0x223bb", "emojicons/ensign_221.png"));
+ emojicons.add(new Emojicon("0x223bc", "emojicons/ensign_222.png"));
+ emojicons.add(new Emojicon("0x223bd", "emojicons/ensign_223.png"));
+ emojicons.add(new Emojicon("0x223be", "emojicons/ensign_224.png"));
+ emojicons.add(new Emojicon("0x223bf", "emojicons/ensign_225.png"));
+ emojicons.add(new Emojicon("0x223c0", "emojicons/ensign_226.png"));
+ emojicons.add(new Emojicon("0x223c1", "emojicons/ensign_227.png"));
+ emojicons.add(new Emojicon("0x223c2", "emojicons/ensign_228.png"));
+ emojicons.add(new Emojicon("0x223c3", "emojicons/ensign_229.png"));
+ emojicons.add(new Emojicon("0x223c4", "emojicons/ensign_230.png"));
+ emojicons.add(new Emojicon("0x223c5", "emojicons/ensign_231.png"));
+ emojicons.add(new Emojicon("0x223c6", "emojicons/ensign_232.png"));
+ emojicons.add(new Emojicon("0x223c7", "emojicons/ensign_233.png"));
+ emojicons.add(new Emojicon("0x223c8", "emojicons/ensign_234.png"));
+ emojicons.add(new Emojicon("0x223c9", "emojicons/ensign_235.png"));
+ emojicons.add(new Emojicon("0x223ca", "emojicons/ensign_236.png"));
+ emojicons.add(new Emojicon("0x223cb", "emojicons/ensign_237.png"));
+ emojicons.add(new Emojicon("0x223cc", "emojicons/ensign_238.png"));
+ emojicons.add(new Emojicon("0x223cd", "emojicons/ensign_239.png"));
+ emojicons.add(new Emojicon("0x223ce", "emojicons/ensign_240.png"));
+ emojicons.add(new Emojicon("0x223cf", "emojicons/ensign_241.png"));
+ emojicons.add(new Emojicon("0x223d0", "emojicons/ensign_242.png"));
+ emojicons.add(new Emojicon("0x223d1", "emojicons/ensign_243.png"));
+
+ emojiconCategory = new EmojiconCategory(urlTitle, emojicons);
+ emoticonCategories.add(emojiconCategory);
+
+ return emoticonCategories;
+ }
+}
diff --git a/app/src/main/res/drawable/ic_emojicon.png b/app/src/main/res/drawable/ic_emojicon.png
new file mode 100644
index 0000000..026a69d
Binary files /dev/null and b/app/src/main/res/drawable/ic_emojicon.png differ
diff --git a/app/src/main/res/drawable/ic_sticker.png b/app/src/main/res/drawable/ic_sticker.png
index 026a69d..ddddc89 100644
Binary files a/app/src/main/res/drawable/ic_sticker.png and b/app/src/main/res/drawable/ic_sticker.png differ
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 620eae4..67f47dd 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,18 +1,110 @@
+ android:layout_height="match_parent">
+ android:layout_above="@+id/ll_input" />
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_chat.xml b/app/src/main/res/layout/item_chat.xml
index f21bbc8..78e1578 100644
--- a/app/src/main/res/layout/item_chat.xml
+++ b/app/src/main/res/layout/item_chat.xml
@@ -4,8 +4,9 @@
android:layout_height="wrap_content"
android:orientation="vertical">
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_input.xml b/app/src/main/res/layout/layout_input.xml
deleted file mode 100644
index 21804f5..0000000
--- a/app/src/main/res/layout/layout_input.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0562a51..0ae2085 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -2,5 +2,5 @@
AwesomeKeyboard
Message #tag
WELCOME TO
- Bạn chưa cấp quyền đọc ảnh
+ not_READ_EXTERNAL_STORAGE
diff --git a/build.gradle b/build.gradle
index 5405083..1da8be0 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,6 +7,7 @@ buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
+ classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
}
}
diff --git a/library/.gitignore b/core/.gitignore
similarity index 100%
rename from library/.gitignore
rename to core/.gitignore
diff --git a/core/build.gradle b/core/build.gradle
new file mode 100644
index 0000000..0fed3dc
--- /dev/null
+++ b/core/build.gradle
@@ -0,0 +1,47 @@
+apply plugin: 'com.android.library'
+apply plugin: 'com.github.dcendents.android-maven'
+
+group = 'com.github.hoanganhtuan95ptit'
+
+android {
+ compileSdkVersion 25
+ buildToolsVersion "26.0.0"
+
+ defaultConfig {
+ minSdkVersion 15
+ targetSdkVersion 25
+ versionCode 1
+ versionName "1.0"
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ ndk {
+ abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
+ }
+ externalNativeBuild {
+ cmake {
+ arguments '-DANDROID_PLATFORM=android-14',
+ '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
+ cppFlags "-std=c++11 -frtti -fexceptions"
+ }
+ }
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "src/main/cpp/CMakeLists.txt"
+ }
+ }
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+ androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
+ exclude group: 'com.android.support', module: 'support-annotations'
+ })
+ compile 'com.android.support:appcompat-v7:25.3.1'
+ testCompile 'junit:junit:4.12'
+}
diff --git a/library/proguard-rules.pro b/core/proguard-rules.pro
similarity index 100%
rename from library/proguard-rules.pro
rename to core/proguard-rules.pro
diff --git a/library/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml
similarity index 78%
rename from library/src/main/AndroidManifest.xml
rename to core/src/main/AndroidManifest.xml
index 3b1cf8b..7f755f9 100644
--- a/library/src/main/AndroidManifest.xml
+++ b/core/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.hoanganhtuan95ptit.awesomekeyboard.core">
diff --git a/core/src/main/cpp/BitWritingBlock.cpp b/core/src/main/cpp/BitWritingBlock.cpp
new file mode 100644
index 0000000..66307ef
--- /dev/null
+++ b/core/src/main/cpp/BitWritingBlock.cpp
@@ -0,0 +1,60 @@
+#include "BitWritingBlock.h"
+#include
+
+using namespace std;
+
+BitWritingBlock::BitWritingBlock()
+{
+ currnet = new uint8_t[BLOCK_SIZE];
+ memset(currnet, 0, BLOCK_SIZE);
+ datas.push_back(currnet);
+ pos = 0;
+ remain = 8;
+}
+
+BitWritingBlock::~BitWritingBlock()
+{
+ for (list::iterator i = datas.begin(); i != datas.end(); ++i) {
+ delete[] (*i);
+ }
+}
+
+void BitWritingBlock::writeBits(uint32_t src, int32_t bitNum)
+{
+ while (0 < bitNum) {
+ if (remain <= bitNum) {
+ currnet[pos] = currnet[pos] | (src << (8 - remain));
+ src >>= remain;
+ bitNum -= remain;
+ remain = 8;
+ ++pos;
+ if (pos == BLOCK_SIZE) {
+ currnet = new uint8_t[BLOCK_SIZE];
+ memset(currnet, 0, BLOCK_SIZE);
+ datas.push_back(currnet);
+ pos = 0;
+ }
+ } else {
+ currnet[pos] = (currnet[pos] << bitNum) | (((1 << bitNum) - 1) & src);
+ remain -= bitNum;
+ bitNum = 0;
+ }
+ }
+}
+
+void BitWritingBlock::writeByte(uint8_t b)
+{
+ writeBits(b, 8);
+}
+
+bool BitWritingBlock::toFile(FILE* dst)
+{
+ uint8_t size;
+ for (list::iterator i = datas.begin(); i != datas.end(); ++i) {
+ uint8_t* block = (*i);
+ size = block == currnet ? (remain == 0 ? pos : pos + 1) : BLOCK_SIZE;
+ fwrite(&size, 1, 1, dst);
+ fwrite(block, size, 1, dst);
+ }
+ return true;
+}
diff --git a/core/src/main/cpp/BitWritingBlock.h b/core/src/main/cpp/BitWritingBlock.h
new file mode 100644
index 0000000..2bd5352
--- /dev/null
+++ b/core/src/main/cpp/BitWritingBlock.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include
+#include
+#include
+
+class BitWritingBlock {
+ static const int32_t BLOCK_SIZE = 255;
+
+ std::list datas;
+ uint8_t* currnet;
+ int pos;
+ int remain;
+public:
+ BitWritingBlock();
+ ~BitWritingBlock();
+
+ void writeBits(uint32_t src, int32_t bit);
+ void writeByte(uint8_t b);
+ bool toFile(FILE* dst);
+};
diff --git a/core/src/main/cpp/BitmapIterator.cpp b/core/src/main/cpp/BitmapIterator.cpp
new file mode 100644
index 0000000..4e6ea84
--- /dev/null
+++ b/core/src/main/cpp/BitmapIterator.cpp
@@ -0,0 +1,41 @@
+#include "BitmapIterator.h"
+
+BitmapIterator::BitmapIterator(GifDecoder* gifDecoder, std::shared_ptr data, DataBlock dataBlock) :
+ gifDecoder(gifDecoder),
+ data(data),
+ dataBlock(dataBlock),
+ hasNextFrame(false),
+ isFinished(false)
+{
+}
+
+bool BitmapIterator::hasNext()
+{
+ if (isFinished) {
+ return false;
+ }
+ if (hasNextFrame) {
+ return true;
+ }
+ uint32_t lastFrameCount = gifDecoder->getFrameCount();
+ bool result = gifDecoder->readContents(&dataBlock, true);
+ if (result && lastFrameCount != gifDecoder->getFrameCount()) {
+ hasNextFrame = true;
+ return true;
+ }
+ isFinished = true;
+ return false;
+}
+
+
+bool BitmapIterator::next(const uint32_t** frame, uint32_t* delayMs)
+{
+ if (!hasNextFrame) {
+ return false;
+ }
+ uint32_t index = gifDecoder->getFrameCount() - 1;
+ *frame = gifDecoder->getFrame(index);
+ *delayMs = gifDecoder->getDelay(index);
+ hasNextFrame = false;
+ return true;
+}
\ No newline at end of file
diff --git a/core/src/main/cpp/BitmapIterator.h b/core/src/main/cpp/BitmapIterator.h
new file mode 100644
index 0000000..5d4a0ef
--- /dev/null
+++ b/core/src/main/cpp/BitmapIterator.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include
+#include "GifDecoder.h"
+
+class BitmapIterator {
+private:
+ GifDecoder* gifDecoder;
+ std::shared_ptr data;
+ DataBlock dataBlock;
+ bool hasNextFrame;
+ bool isFinished;
+public:
+ BitmapIterator(GifDecoder* gifDecoder, std::shared_ptr data, DataBlock dataBlock);
+ bool hasNext();
+ bool next(const uint32_t** frame, uint32_t* delayMs);
+};
\ No newline at end of file
diff --git a/core/src/main/cpp/CMakeLists.txt b/core/src/main/cpp/CMakeLists.txt
new file mode 100644
index 0000000..9f70a68
--- /dev/null
+++ b/core/src/main/cpp/CMakeLists.txt
@@ -0,0 +1,18 @@
+cmake_minimum_required(VERSION 3.4.1)
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -UNDEBUG")
+
+add_library(native_lib_GifDecoder SHARED
+ GifDecoder.cpp
+ BitmapIterator.cpp
+ BitWritingBlock.cpp
+ DataBlock.cpp
+ GifFrame.cpp
+ native_lib_GifDecoder.cpp)
+
+# Include libraries needed for native-media-jni lib
+target_link_libraries(native_lib_GifDecoder
+ -ljnigraphics
+ android
+ log
+ OpenMAXAL)
diff --git a/core/src/main/cpp/DataBlock.cpp b/core/src/main/cpp/DataBlock.cpp
new file mode 100644
index 0000000..5dc0d76
--- /dev/null
+++ b/core/src/main/cpp/DataBlock.cpp
@@ -0,0 +1,35 @@
+#include "DataBlock.h"
+#include
+
+DataBlock::DataBlock(const uint8_t* data, int32_t remain) :
+ remain(remain)
+{
+ this->data = data;
+}
+
+DataBlock::DataBlock(const DataBlock& dataBlock)
+{
+ this->data = dataBlock.data;
+ this->remain = dataBlock.remain;
+}
+
+DataBlock::~DataBlock(void)
+{
+}
+
+bool DataBlock::read(uint8_t* dst, int32_t size)
+{
+ if (remain < size) {
+ return false;
+ }
+ memcpy(dst, data, size);
+
+ data += size;
+ remain -= size;
+ return true;
+}
+
+bool DataBlock::read(uint16_t* dst)
+{
+ return read((uint8_t*)dst, 2);
+}
\ No newline at end of file
diff --git a/core/src/main/cpp/DataBlock.h b/core/src/main/cpp/DataBlock.h
new file mode 100644
index 0000000..c0aa721
--- /dev/null
+++ b/core/src/main/cpp/DataBlock.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include
+
+class DataBlock
+{
+private:
+ const uint8_t* data;
+ int32_t remain;
+public:
+ DataBlock(const uint8_t* data, int32_t remain);
+ DataBlock(const DataBlock& dataBlock);
+ ~DataBlock(void);
+
+ bool read(uint8_t* dst, int32_t size);
+ bool read(uint16_t* dst);
+};
+
diff --git a/core/src/main/cpp/GifDecoder.cpp b/core/src/main/cpp/GifDecoder.cpp
new file mode 100644
index 0000000..0084c9f
--- /dev/null
+++ b/core/src/main/cpp/GifDecoder.cpp
@@ -0,0 +1,592 @@
+#include "GifDecoder.h"
+#include "DataBlock.h"
+#include "BitmapIterator.h"
+
+template< typename T >
+struct array_deleter
+{
+ void operator ()( T const * p)
+ {
+ delete[] p;
+ }
+};
+
+GifDecoder::GifDecoder()
+{
+ pixels = NULL;
+ lastBitmapIterator = NULL;
+}
+
+GifDecoder::~GifDecoder()
+{
+ if (NULL != pixels) {
+ delete[] pixels;
+ pixels = NULL;
+ }
+ for (std::vector::iterator i = frames.begin(); i != frames.end(); ++i) {
+ delete i->data;
+ }
+ delete lastBitmapIterator;
+}
+
+void GifDecoder::init()
+{
+ loopCount = 1;
+ dispose = 0;
+ transparency = false;
+ delay = 0;
+ frameCount = 0;
+ width = 0;
+ height = 0;
+ interlace = false;
+ if (NULL != pixels) {
+ delete[] pixels;
+ pixels = NULL;
+ }
+ image = NULL;
+ lastBitmap = NULL;
+}
+
+bool GifDecoder::load(const char* fileName)
+{
+ init();
+
+ FILE* fp = fopen(fileName, "rb");
+ if (NULL == fp) {
+ return false;
+ }
+ fseek(fp, 0, SEEK_END);
+ int32_t fileSize = ftell(fp);
+ uint8_t* data = new uint8_t[fileSize];
+ rewind(fp);
+ fread(data, fileSize, 1, fp);
+ fclose(fp);
+
+ bool result = loadFromMemory(data, fileSize);
+ delete[] data;
+
+ return result;
+}
+
+BitmapIterator* GifDecoder::loadUsingIterator(const char* fileName)
+{
+ init();
+
+ FILE* fp = fopen(fileName, "rb");
+ if (NULL == fp) {
+ return NULL;
+ }
+ fseek(fp, 0, SEEK_END);
+ int32_t fileSize = ftell(fp);
+ uint8_t* data = new uint8_t[fileSize];
+ rewind(fp);
+ fread(data, fileSize, 1, fp);
+ fclose(fp);
+
+ return loadFromMemoryUsingIterator(std::shared_ptr(data, array_deleter()), fileSize);
+}
+
+bool GifDecoder::loadFromMemory(const uint8_t* data, uint32_t size)
+{
+ DataBlock dataBlock(data, size);
+ if (!readHeader(&dataBlock)) {
+ return false;
+ }
+ return readContents(&dataBlock);
+}
+
+BitmapIterator* GifDecoder::loadFromMemoryUsingIterator(std::shared_ptr data, uint32_t size)
+{
+ DataBlock dataBlock(data.get(), size);
+ if (!readHeader(&dataBlock)) {
+ return NULL;
+ }
+ if (NULL != lastBitmapIterator) {
+ delete lastBitmapIterator;
+ }
+
+ lastBitmapIterator = new BitmapIterator(this, data, dataBlock);
+ return lastBitmapIterator;
+}
+
+bool GifDecoder::readLSD(DataBlock* dataBlock)
+{
+ // logical screen size
+ if (!dataBlock->read(&width) || !dataBlock->read(&height)) {
+ return false;
+ }
+
+ // packed fields
+ uint8_t packed;
+ if (!dataBlock->read(&packed, 1)) {
+ return false;
+ }
+ gctFlag = (packed & 0x80) != 0; // 1 : global color table flag
+ // 2-4 : color resolution
+ // 5 : gct sort flag
+ gctSize = 2 << (packed & 7); // 6-8 : gct size
+ if (!dataBlock->read(&bgIndex, 1)) { // background color index
+ return false;
+ }
+ if (!dataBlock->read(&pixelAspect, 1)) { // pixel aspect ratio
+ return false;
+ }
+ return true;
+}
+
+bool GifDecoder::readColorTable(DataBlock* dataBlock, uint32_t* colorTable, int32_t ncolors)
+{
+ for (int32_t i = 0; i < ncolors; ++i) {
+ if (!dataBlock->read((uint8_t*)(colorTable + i), 3)) {
+ return false;
+ }
+ colorTable[i] |= 0xFF000000;
+ }
+ return true;
+}
+
+bool GifDecoder::readHeader(DataBlock* dataBlock)
+{
+ uint8_t buffer[6];
+ if (!dataBlock->read(buffer, 6)) {
+ return false;
+ }
+ if (0 != memcmp("GIF", buffer, 3)) {
+ return false;
+ }
+
+ if (!readLSD(dataBlock)) {
+ return false;
+ }
+
+ if (gctFlag) {
+ if (!readColorTable(dataBlock, gct, gctSize)) {
+ return false;
+ }
+ bgColor = gct[bgIndex];
+ }
+ return true;
+}
+
+bool GifDecoder::readContents(DataBlock* dataBlock, bool isAFrameNeeded)
+{
+ // read GIF file content blocks
+ uint8_t code;
+ while (true) {
+ if (!dataBlock->read(&code, 1)) {
+ return false;
+ }
+ switch (code) {
+ case 0x2C: // image separator
+ if (!readBitmap(dataBlock)) {
+ return false;
+ } else if (isAFrameNeeded) {
+ if (1 < frameCount) {
+ delete[] frames[frameCount - 2].data;
+ frames[frameCount - 2].data = NULL;
+ }
+ return true;
+ }
+ break;
+ case 0x21: // extension
+ if (!dataBlock->read(&code, 1)) {
+ return false;
+ }
+ switch (code) {
+ case 0xf9: // graphics control extension
+ if (!readGraphicControlExt(dataBlock)) {
+ return false;
+ }
+ break;
+ case 0xff: // application extension
+ uint8_t blockSize;
+ readBlock(dataBlock, &blockSize);
+ if (0 == memcmp("NETSCAPE2.0", block, 11)) {
+ if (!readNetscapeExt(dataBlock)) {
+ return false;
+ }
+ } else { // don't care
+ if (!skip(dataBlock)) {
+ return false;
+ }
+ }
+ break;
+ case 0xfe:// comment extension
+ if (!skip(dataBlock)) {
+ return false;
+ }
+ break;
+ case 0x01:// plain text extension
+ if (!skip(dataBlock)) {
+ return false;
+ }
+ break;
+ default: // uninteresting extension
+ if (!skip(dataBlock)) {
+ return false;
+ }
+ }
+ break;
+ case 0x3b: // terminator
+ return true;
+ case 0x00: // bad byte, but keep going and see what happens break;
+ default:
+ return false;
+ }
+ }
+}
+
+bool GifDecoder::skip(DataBlock* dataBlock)
+{
+ uint8_t blockSize;
+ do {
+ if (!readBlock(dataBlock, &blockSize)) {
+ return false;
+ }
+ } while ((blockSize > 0));
+ return true;
+}
+
+bool GifDecoder::readBlock(DataBlock* dataBlock, uint8_t* blockSize)
+{
+
+ dataBlock->read(blockSize, 1);
+ return blockSize == 0 || dataBlock->read(block, *blockSize);
+
+// return dataBlock->read(block, *blockSize);
+}
+
+bool GifDecoder::readNetscapeExt(DataBlock* dataBlock)
+{
+ uint8_t blockSize;
+ do {
+ if (!readBlock(dataBlock, &blockSize)) {
+ return false;
+ }
+ if (block[0] == 1) {
+ // loop count sub-block
+ int32_t b1 = ((int32_t) block[1]) & 0xff;
+ int32_t b2 = ((int32_t) block[2]) & 0xff;
+ loopCount = (b2 << 8) | b1;
+ }
+ } while ((blockSize > 0));
+ return true;
+}
+
+bool GifDecoder::readGraphicControlExt(DataBlock* dataBlock)
+{
+ uint8_t unused;
+ if (!dataBlock->read(&unused, 1)) { // block size
+ return false;
+ }
+ uint8_t packed;
+ if (!dataBlock->read(&packed, 1)) { // packed fields)
+ return false;
+ }
+ dispose = (packed & 0x1c) >> 2; // disposal method
+ if (dispose == 0) {
+ dispose = 1; // elect to keep old image if discretionary
+ }
+ transparency = (packed & 1) != 0;
+ if (!dataBlock->read(&delay)) {
+ return false;
+ }
+ delay *= 10; // delay in milliseconds
+ if (!dataBlock->read(&transIndex, 1)) {// transparent color index)
+ return false;
+ }
+ return dataBlock->read(&unused, 1); // block terminator
+}
+
+bool GifDecoder::readBitmap(DataBlock* dataBlock)
+{
+ uint8_t packed;
+ if (!dataBlock->read(&ix) || !dataBlock->read(&iy) || // (sub)image position & size
+ !dataBlock->read(&iw) || !dataBlock->read(&ih) || !dataBlock->read(&packed, 1)) {
+ return false;
+ }
+
+ bool lctFlag = (packed & 0x80) != 0; // 1 - local color table flag interlace
+ int32_t lctSize = 2 << (packed & 0x07);
+ // 3 - sort flag
+ // 4-5 - reserved lctSize = 2 << (packed & 7); // 6-8 - local color
+ // table size
+ interlace = (packed & 0x40) != 0;
+ uint32_t lct[256];
+ uint32_t* act;
+ if (lctFlag) {
+ if (!readColorTable(dataBlock, lct, lctSize)) { // read table
+ return false;
+ }
+ act = lct; // make local table active
+ } else {
+ act = gct; // make global table active
+ if (bgIndex == transIndex) {
+ bgColor = 0;
+ }
+ }
+ uint32_t save;
+ if (transparency) {
+ save = act[transIndex];
+ act[transIndex] = 0; // set transparent color if specified
+ }
+
+ if (!decodeBitmapData(dataBlock) || !skip(dataBlock)) { // decode pixel data
+ return false;
+ }
+
+ frameCount++;
+ // create new image to receive frame data
+ setPixels(act); // transfer pixel data to image
+
+ if (transparency) {
+ act[transIndex] = save;
+ }
+ resetFrame();
+ return true;
+}
+
+void GifDecoder::resetFrame()
+{
+ lastDispose = dispose;
+ lrx = ix;
+ lry = iy;
+ lrw = iw;
+ lrh = ih;
+ lastBitmap = image;
+ lastBgColor = bgColor;
+ dispose = 0;
+ transparency = false;
+ delay = 0;
+}
+
+bool GifDecoder::decodeBitmapData(DataBlock* dataBlock)
+{
+ int32_t nullCode = -1;
+ int32_t npix = iw * ih;
+ int32_t available, clear, code_mask, code_size, end_of_information, in_code, old_code, bits, code, i, top, bi, pi;
+ uint32_t datum, first;
+ uint8_t count, data_size;
+ if (NULL == pixels) {
+ pixels = new uint8_t[npix]; // allocate new pixel array
+ } else if (lrw != iw || lrh != ih) {
+ delete[] pixels;
+ pixels = new uint8_t[npix];
+ }
+
+ uint16_t prefix[MAX_STACK_SIZE];
+ uint8_t suffix[MAX_STACK_SIZE];
+ uint8_t pixelStack[MAX_STACK_SIZE + 1];
+
+ // Initialize GIF data stream decoder.
+ if (!dataBlock->read(&data_size, 1)) {
+ return false;
+ }
+ clear = 1 << data_size;
+ end_of_information = clear + 1;
+ available = clear + 2;
+ old_code = nullCode;
+ code_size = data_size + 1;
+ code_mask = (1 << code_size) - 1;
+ for (code = 0; code < clear; code++) {
+ prefix[code] = 0; // XXX ArrayIndexOutOfBoundsException
+ suffix[code] = code;
+ }
+ // Decode GIF pixel stream.
+ datum = bits = first = top = pi = bi = count = 0;
+ for (i = 0; i < npix;) {
+ if (top == 0) {
+ if (bits < code_size) {
+ // Load bytes until there are enough bits for a code.
+ if (count == 0) {
+ // Read a new data block.
+ if (!readBlock(dataBlock, &count)) {
+ return false;
+ }
+ if (count <= 0) {
+ break;
+ }
+ bi = 0;
+ }
+ datum |= ((uint32_t) block[bi]) << bits;
+ bits += 8;
+ bi++;
+ count--;
+ continue;
+ }
+ // Get the next code.
+ code = (datum & code_mask);
+ datum >>= code_size;
+ bits -= code_size;
+ //TRACE("%d, %d\n", code, code_size);
+ // Interpret the code
+ if ((code > available) || (code == end_of_information)) {
+ break;
+ }
+ if (code == clear) {
+ // Reset decoder.
+ code_size = data_size + 1;
+ code_mask = (1 << code_size) - 1;
+ available = clear + 2;
+ old_code = nullCode;
+ continue;
+ }
+ if (old_code == nullCode) {
+ pixelStack[top++] = suffix[code];
+ old_code = code;
+ first = code;
+ continue;
+ }
+ in_code = code;
+ if (code == available) {
+ pixelStack[top++] = first;
+ code = old_code;
+ }
+ while (code > clear) {
+ pixelStack[top++] = suffix[code];
+ code = prefix[code];
+ }
+ first = (uint32_t)suffix[code];
+ // Add a new string to the string table,
+ pixelStack[top++] = first;
+ if (available < MAX_STACK_SIZE) {
+ prefix[available] = old_code;
+ suffix[available] = first;
+ }
+ available++;
+ if (((available & code_mask) == 0) && (available < MAX_STACK_SIZE)) {
+ code_size++;
+ code_mask |= available;
+ }
+ old_code = in_code;
+ }
+ // Pop a pixel off the pixel stack.
+ top--;
+ pixels[pi++] = pixelStack[top];
+ if (255 == pixelStack[top]) {
+ int a = 0;
+ }
+ i++;
+ }
+ for (i = pi; i < npix; i++) {
+ pixels[i] = 0; // clear missing pixels
+ }
+ return true;
+}
+
+void GifDecoder::setPixels(uint32_t* act)
+{
+ int32_t pixelNum = width * height;
+ uint32_t* dest = new uint32_t[pixelNum];
+ // fill in starting image contents based on last image's dispose code
+ if (lastDispose > 0) {
+ if (lastDispose == 3) {
+ // use image before last
+ int32_t n = frameCount - 2;
+ if (n > 0) {
+ lastBitmap = getFrame(n - 1);
+ } else {
+ lastBitmap = NULL;
+ }
+ }
+ if (lastBitmap != NULL) {
+ memcpy(dest, lastBitmap, pixelNum * 4);
+ // copy pixels
+ if (lastDispose == 2) {
+ // fill last image rect area with background color
+ int32_t c = 0;
+ if (!transparency) {
+ c = lastBgColor;
+ }
+ for (int32_t i = 0; i < lrh; i++) {
+ int32_t n1 = (lry + i) * width + lrx;
+ int32_t n2 = n1 + lrw;
+ for (int32_t k = n1; k < n2; k++) {
+ dest[k] = c;
+ }
+ }
+ }
+ }
+ }
+ // copy each source line to the appropriate place in the destination
+ int32_t pass = 1;
+ int32_t inc = 8;
+ int32_t iline = 0;
+ for (int32_t i = 0; i < ih; i++) {
+ int32_t line = i;
+ if (interlace) {
+ if (iline >= ih) {
+ pass++;
+ switch (pass) {
+ case 2:
+ iline = 4;
+ break;
+ case 3:
+ iline = 2;
+ inc = 4;
+ break;
+ case 4:
+ iline = 1;
+ inc = 2;
+ break;
+ default:
+ break;
+ }
+ }
+ line = iline;
+ iline += inc;
+ }
+ line += iy;
+ if (line < height) {
+ int32_t k = line * width;
+ int32_t dx = k + ix; // start of line in dest
+ int32_t dlim = dx + iw; // end of dest line
+ if ((k + width) < dlim) {
+ dlim = k + width; // past dest edge
+ }
+ int32_t sx = i * iw; // start of line in source
+ while (dx < dlim) {
+ // map color and insert in destination
+ int32_t index = ((int32_t) pixels[sx++]) & 0xff;
+ int32_t c = act[index];
+ if (c != 0) {
+ dest[dx] = c;
+ }
+ dx++;
+ }
+ }
+ }
+ frames.push_back(GifFrame(dest, delay));
+ image = dest;
+}
+
+uint32_t GifDecoder::getFrameCount()
+{
+ return frameCount;
+}
+
+const uint32_t* GifDecoder::getFrame(int32_t n)
+{
+ if (frameCount <= 0)
+ return 0;
+ n = n % frameCount;
+ return frames[n].data;
+}
+
+uint32_t GifDecoder::getDelay(int32_t n)
+{
+ if (frameCount <= 0)
+ return 0;
+ n = n % frameCount;
+ return frames[n].delayMs;
+}
+
+uint32_t GifDecoder::getWidth()
+{
+ return width;
+}
+
+uint32_t GifDecoder::getHeight()
+{
+ return height;
+}
diff --git a/core/src/main/cpp/GifDecoder.h b/core/src/main/cpp/GifDecoder.h
new file mode 100644
index 0000000..b4fd4a7
--- /dev/null
+++ b/core/src/main/cpp/GifDecoder.h
@@ -0,0 +1,76 @@
+#pragma once
+
+#include
+#include
+#include
+#include "DataBlock.h"
+#include "GifFrame.h"
+
+class BitmapIterator;
+
+class GifDecoder
+{
+ friend class BitmapIterator;
+private:
+ static const int32_t MAX_STACK_SIZE = 4096;
+
+ std::vector frames;
+ uint16_t width;
+ uint16_t height;
+ bool interlace;
+ bool gctFlag;
+ uint32_t gctSize;
+ uint8_t bgIndex;
+ uint8_t pixelAspect;
+ uint32_t gct[256]; // [0] ->r, [1] -> g, [2] -> b, max size to avoid bounds checks
+ uint8_t block[256];
+ uint16_t ix, iy, iw, ih;
+ uint32_t bgColor;
+ uint32_t loopCount; // iterations; 0 = repeat forever
+ uint32_t dispose; // 0=no action; 1=leave in place; 2=restore to bg; 3=restore to prev
+ bool transparency; // use transparent color
+ uint16_t delay;
+ uint8_t transIndex;
+ int32_t frameCount;
+ uint8_t* pixels;
+
+ uint32_t lastDispose;
+ uint16_t lrx, lry, lrw, lrh;
+ uint32_t lastBgColor;
+ uint32_t* image;
+ const uint32_t* lastBitmap;
+
+ BitmapIterator* lastBitmapIterator;
+
+ void init();
+
+ bool readLSD(DataBlock* dataBlock);
+ bool readColorTable(DataBlock* dataBlock, uint32_t* colorTable, int32_t ncolors);
+ bool readHeader(DataBlock* dataBlock);
+
+ bool readContents(DataBlock* dataBlock, bool isAFrameNeeded = false);
+ bool skip(DataBlock* dataBlock);
+ bool readBlock(DataBlock* dataBlock, uint8_t* blockSize);
+ bool readNetscapeExt(DataBlock* dataBlock);
+ bool readGraphicControlExt(DataBlock* dataBlock);
+ bool readBitmap(DataBlock* dataBlock);
+ void resetFrame();
+ bool decodeBitmapData(DataBlock* dataBlock);
+ void setPixels(uint32_t* act);
+
+public:
+ GifDecoder(void);
+ ~GifDecoder(void);
+
+ bool load(const char* fileName);
+ BitmapIterator* loadUsingIterator(const char* fileName);
+ bool loadFromMemory(const uint8_t* data, uint32_t size);
+ BitmapIterator* loadFromMemoryUsingIterator(std::shared_ptr data, uint32_t size);
+ uint32_t getFrameCount();
+ const uint32_t* getFrame(int32_t n);
+ uint32_t getDelay(int32_t n);
+
+ uint32_t getWidth();
+ uint32_t getHeight();
+};
+
diff --git a/core/src/main/cpp/GifFrame.cpp b/core/src/main/cpp/GifFrame.cpp
new file mode 100644
index 0000000..91d1b68
--- /dev/null
+++ b/core/src/main/cpp/GifFrame.cpp
@@ -0,0 +1,11 @@
+#include "GifFrame.h"
+
+
+GifFrame::GifFrame(uint32_t* data, int32_t delayMs) : data(data), delayMs(delayMs)
+{
+}
+
+
+GifFrame::~GifFrame(void)
+{
+}
diff --git a/core/src/main/cpp/GifFrame.h b/core/src/main/cpp/GifFrame.h
new file mode 100644
index 0000000..ae25da4
--- /dev/null
+++ b/core/src/main/cpp/GifFrame.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include
+
+class GifFrame
+{
+public:
+ GifFrame(uint32_t* data, int32_t delayMs);
+ ~GifFrame(void);
+
+ const uint32_t* data;
+ const int32_t delayMs;
+};
+
diff --git a/core/src/main/cpp/native_lib_GifDecoder.cpp b/core/src/main/cpp/native_lib_GifDecoder.cpp
new file mode 100644
index 0000000..99c1577
--- /dev/null
+++ b/core/src/main/cpp/native_lib_GifDecoder.cpp
@@ -0,0 +1,143 @@
+#include "native_lib_GifDecoder.h"
+#include "GifDecoder.h"
+#include "BitmapIterator.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+JNIEXPORT jlong JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeInit
+ (JNIEnv *env, jobject)
+{
+ return (jlong)new GifDecoder();
+}
+
+JNIEXPORT void JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeClose
+ (JNIEnv *, jobject, jlong handle)
+{
+ delete (GifDecoder*)handle;
+}
+
+JNIEXPORT jboolean JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeLoad
+ (JNIEnv * env, jobject, jlong handle, jstring fileName)
+{
+ const char* fileNameChars = env->GetStringUTFChars(fileName, 0);
+ bool result = ((GifDecoder*)handle)->load(fileNameChars);
+ env->ReleaseStringUTFChars(fileName, fileNameChars);
+ return result;
+}
+
+JNIEXPORT jlong JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_GifDecoder_nativeLoadUsingIterator
+ (JNIEnv * env, jobject, jlong handle, jstring fileName)
+{
+ const char* fileNameChars = env->GetStringUTFChars(fileName, 0);
+ BitmapIterator* result = ((GifDecoder*)handle)->loadUsingIterator(fileNameChars);
+ env->ReleaseStringUTFChars(fileName, fileNameChars);
+
+ return (jlong)result;
+}
+
+JNIEXPORT jint JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeGetFrameCount
+ (JNIEnv *, jobject, jlong handle)
+{
+ return ((GifDecoder*)handle)->getFrameCount();
+}
+
+JNIEXPORT jobject JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeGetFrame
+ (JNIEnv *env, jobject, jlong handle, jint idx)
+{
+ GifDecoder* decoder = (GifDecoder*)handle;
+ int imgWidth = decoder->getWidth();
+ int imgHeight = decoder->getHeight();
+
+ // Creating Bitmap Config Class
+ jclass bmpCfgCls = env->FindClass("android/graphics/Bitmap$Config");
+ jmethodID bmpClsValueOfMid = env->GetStaticMethodID(bmpCfgCls, "valueOf", "(Ljava/lang/String;)Landroid/graphics/Bitmap$Config;");
+ jobject jBmpCfg = env->CallStaticObjectMethod(bmpCfgCls, bmpClsValueOfMid, env->NewStringUTF("ARGB_8888"));
+
+ // Creating a Bitmap Class
+ jclass bmpCls = env->FindClass("android/graphics/Bitmap");
+ jmethodID createBitmapMid = env->GetStaticMethodID(bmpCls, "createBitmap", "(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;");
+ jobject jBmpObj = env->CallStaticObjectMethod(bmpCls, createBitmapMid, imgWidth, imgHeight, jBmpCfg);
+
+ void* bitmapPixels;
+ if (AndroidBitmap_lockPixels(env, jBmpObj, &bitmapPixels) < 0) {
+ return 0;
+ }
+ uint32_t* src = (uint32_t*) bitmapPixels;
+ int stride = imgWidth * 4;
+ int pixelsCount = stride * imgHeight;
+ memcpy(bitmapPixels, decoder->getFrame(idx), pixelsCount);
+ AndroidBitmap_unlockPixels(env, jBmpObj);
+
+ return jBmpObj;
+}
+
+JNIEXPORT jint JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeGetDelay
+ (JNIEnv *, jobject, jlong handle, jint idx)
+{
+ return ((GifDecoder*)handle)->getDelay(idx);
+}
+
+JNIEXPORT jint JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeGetWidth
+ (JNIEnv *, jobject, jlong handle)
+{
+ return ((GifDecoder*)handle)->getWidth();
+}
+
+JNIEXPORT jint JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeGetHeight
+ (JNIEnv *, jobject, jlong handle)
+{
+ return ((GifDecoder*)handle)->getHeight();
+}
+
+JNIEXPORT jboolean JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_GifDecoder_nativeBitmapIteratorHasNext
+ (JNIEnv *, jobject, jlong handle)
+{
+ return ((BitmapIterator*)handle)->hasNext();
+}
+
+JNIEXPORT jobject JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_GifDecoder_nativeBitmapIteratornext
+ (JNIEnv *env, jobject, jlong decoderHandle, jlong iteratorHandle)
+{
+ const uint32_t* frame = NULL;
+ uint32_t delayMs = 0;
+ bool result = ((BitmapIterator*)iteratorHandle)->next(&frame, &delayMs);
+ if (!result) {
+ return NULL;
+ }
+
+ GifDecoder* decoder = (GifDecoder*)decoderHandle;
+ int imgWidth = decoder->getWidth();
+ int imgHeight = decoder->getHeight();
+
+ // Creating Bitmap Config Class
+ jclass bmpCfgCls = env->FindClass("android/graphics/Bitmap$Config");
+ jmethodID bmpClsValueOfMid = env->GetStaticMethodID(bmpCfgCls, "valueOf", "(Ljava/lang/String;)Landroid/graphics/Bitmap$Config;");
+ jobject jBmpCfg = env->CallStaticObjectMethod(bmpCfgCls, bmpClsValueOfMid, env->NewStringUTF("ARGB_8888"));
+
+ // Creating a Bitmap Class
+ jclass bmpCls = env->FindClass("android/graphics/Bitmap");
+ jmethodID createBitmapMid = env->GetStaticMethodID(bmpCls, "createBitmap", "(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;");
+ jobject jBmpObj = env->CallStaticObjectMethod(bmpCls, createBitmapMid, imgWidth, imgHeight, jBmpCfg);
+
+ void* bitmapPixels;
+ if (AndroidBitmap_lockPixels(env, jBmpObj, &bitmapPixels) < 0) {
+ return NULL;
+ }
+ uint32_t* src = (uint32_t*) bitmapPixels;
+ int stride = imgWidth * 4;
+ int pixelsCount = stride * imgHeight;
+ memcpy(bitmapPixels, frame, pixelsCount);
+ AndroidBitmap_unlockPixels(env, jBmpObj);
+
+ // Creating a GifImageClass
+ jclass gifImageCls = env->FindClass("com/hoanganhtuan95ptit/keyboard/GifImage");
+ jmethodID gifImageClsInit = env->GetMethodID(gifImageCls, "", "(Landroid/graphics/Bitmap;I)V");
+ return env->NewObject(gifImageCls, gifImageClsInit, jBmpObj, delayMs);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/core/src/main/cpp/native_lib_GifDecoder.h b/core/src/main/cpp/native_lib_GifDecoder.h
new file mode 100644
index 0000000..c3dda57
--- /dev/null
+++ b/core/src/main/cpp/native_lib_GifDecoder.h
@@ -0,0 +1,77 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include
+/* Header for class com_waynejo_androidndkgif_GifDecoder */
+
+#ifndef _Included_native_lib_GifDecoder
+#define _Included_native_lib_GifDecoder
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: com_waynejo_androidndkgif_GifDecoder
+ * Method: nativeInit
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeInit
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_waynejo_androidndkgif_GifDecoder
+ * Method: nativeClose
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeClose
+ (JNIEnv *, jobject, jlong);
+
+/*
+ * Class: com_waynejo_androidndkgif_GifDecoder
+ * Method: nativeLoad
+ * Signature: (JLjava/lang/String;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeLoad
+ (JNIEnv *, jobject, jlong, jstring);
+
+/*
+ * Class: com_waynejo_androidndkgif_GifDecoder
+ * Method: nativeGetFrameCount
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeGetFrameCount
+ (JNIEnv *, jobject, jlong);
+
+/*
+ * Class: com_waynejo_androidndkgif_GifDecoder
+ * Method: nativeGetFrame
+ * Signature: (JI)Landroid/graphics/Bitmap;
+ */
+JNIEXPORT jobject JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeGetFrame
+ (JNIEnv *, jobject, jlong, jint);
+
+/*
+ * Class: com_waynejo_androidndkgif_GifDecoder
+ * Method: nativeGetDelay
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeGetDelay
+ (JNIEnv *, jobject, jlong, jint);
+
+/*
+ * Class: com_waynejo_androidndkgif_GifDecoder
+ * Method: nativeGetWidth
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeGetWidth
+ (JNIEnv *, jobject, jlong);
+
+/*
+ * Class: com_waynejo_androidndkgif_GifDecoder
+ * Method: nativeGetHeight
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_com_hoanganhtuan95ptit_awesomekeyboard_core_utils_EmojiconDecoder_nativeGetHeight
+ (JNIEnv *, jobject, jlong);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/Keyboard.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/Keyboard.java
new file mode 100644
index 0000000..102cf84
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/Keyboard.java
@@ -0,0 +1,13 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core;
+
+/**
+ * Created by HOANG ANH TUAN on 7/5/2017.
+ */
+
+public interface Keyboard {
+
+ void hideAllKeyboard();
+
+ void showKeyboard(int type);
+
+}
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/KeyboardBuilder.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/KeyboardBuilder.java
new file mode 100644
index 0000000..f6d7530
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/KeyboardBuilder.java
@@ -0,0 +1,55 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core;
+
+import android.app.Activity;
+import android.view.View;
+
+import com.hoanganhtuan95ptit.awesomekeyboard.core.callback.OnKeyDownListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.core.view.EmojiconEditText;
+
+import java.util.ArrayList;
+
+/**
+ * Created by HOANG ANH TUAN on 7/5/2017.
+ */
+
+public class KeyboardBuilder {
+
+ View root;
+ Activity context;
+ KeyboardLayout keyboardLayout;
+ OnKeyDownListener onKeyDownListener;
+ ArrayList editTexts = new ArrayList<>();
+
+ public static KeyboardBuilder with(Activity context) {
+ return new KeyboardBuilder(context);
+ }
+
+ public Keyboard builder() {
+ return new KeyboardImpl(this);
+ }
+
+ private KeyboardBuilder(Activity context) {
+ this.context = context;
+ }
+
+ public KeyboardBuilder setKeyboardLayout(KeyboardLayout keyboardLayout) {
+ this.keyboardLayout = keyboardLayout;
+ return this;
+ }
+
+ public KeyboardBuilder setRoot(View root) {
+ this.root = root;
+ return this;
+ }
+
+ public KeyboardBuilder setOnKeyDownListener(OnKeyDownListener onKeyDownListener) {
+ this.onKeyDownListener = onKeyDownListener;
+ return this;
+ }
+
+ public KeyboardBuilder addEditText(EmojiconEditText editText) {
+ this.editTexts.add(editText);
+ return this;
+ }
+
+}
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/KeyboardImpl.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/KeyboardImpl.java
new file mode 100644
index 0000000..d8430c9
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/KeyboardImpl.java
@@ -0,0 +1,151 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Rect;
+import android.os.Handler;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.LinearLayout;
+
+import com.hoanganhtuan95ptit.awesomekeyboard.core.callback.OnKeyDownListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.core.view.EmojiconEditText;
+
+import java.util.ArrayList;
+
+/**
+ * Created by HOANG ANH TUAN on 7/5/2017.
+ */
+
+class KeyboardImpl implements Keyboard, EmojiconEditText.OnKeyImeChangeListener {
+
+ private int keyboardHeight = 0;// chiều cao của bàn phím
+ private int temHeight = 0;
+
+ private View root;// view cha
+ private Activity context;
+ private KeyboardLayout keyboardLayout;// layout bàn phím
+ private ArrayList editTexts;
+ private OnKeyDownListener onKeyDownListener;
+
+ KeyboardImpl(KeyboardBuilder builder) {
+ this.keyboardLayout = builder.keyboardLayout;
+ this.root = builder.root;
+ this.context = builder.context;
+ this.editTexts = builder.editTexts;
+ this.onKeyDownListener = builder.onKeyDownListener;
+
+ intData();
+
+ setOnShowKeyboardDefault();
+ }
+
+ private void intData() {
+
+ context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
+ keyboardLayout.setVisibility(View.GONE);
+ }
+
+ private void setOnShowKeyboardDefault() {
+ showKeyboardDefault();
+ root.getViewTreeObserver().addOnGlobalLayoutListener(
+ new ViewTreeObserver.OnGlobalLayoutListener() {
+
+ @Override
+ public void onGlobalLayout() {
+ Rect r = new Rect();
+ root.getWindowVisibleDisplayFrame(r);
+
+ int screenHeight = root.getRootView().getHeight();
+ int heightDifference = screenHeight - (r.bottom);
+ if (heightDifference < 200 && heightDifference > temHeight)
+ temHeight = heightDifference;
+ if (heightDifference > 200 && heightDifference >= keyboardHeight) {
+ if (heightDifference > keyboardHeight) {
+ changeKeyboardHeight(heightDifference);
+ } else {
+ setHeightLayout();
+ context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
+ keyboardLayout.setVisibility(View.VISIBLE);
+ }
+ }
+ }
+ });
+ for (int i = 0; i < editTexts.size(); i++) {
+ editTexts.get(i).setOnKeyIme(this);
+ }
+ }
+
+ private void changeKeyboardHeight(int height) {
+ keyboardHeight = height;
+ setHeightLayout();
+ }
+
+ private void setHeightLayout() {
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, keyboardHeight - temHeight);
+ keyboardLayout.setLayoutParams(params);
+ }
+
+ private void showKeyboardDefault() {
+ View viewFocus = root.findFocus();
+ if (viewFocus == null) {
+ if (editTexts.isEmpty()) return;
+ else {
+ editTexts.get(0).requestFocus();
+ viewFocus = editTexts.get(0);
+ }
+ }
+ InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.showSoftInput(viewFocus, InputMethodManager.SHOW_IMPLICIT);
+ }
+
+ private void hideKeyboardDefault() {
+ View viewFocus = root.findFocus();
+ if (viewFocus == null) {
+ if (editTexts.isEmpty()) return;
+ else {
+ editTexts.get(0).requestFocus();
+ viewFocus = editTexts.get(0);
+ }
+ }
+ InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.hideSoftInputFromWindow(viewFocus.getWindowToken(), 0);
+ }
+
+ @Override
+ public void hideAllKeyboard() {
+ hideKeyboardDefault();
+ keyboardLayout.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void showKeyboard(int type) {
+ if (type == 1) {
+ showKeyboardDefault();
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ keyboardLayout.setVisibility(View.VISIBLE);
+ }
+ }, 400);
+ } else {
+ hideKeyboardDefault();
+ keyboardLayout.setVisibility(View.VISIBLE);
+ keyboardLayout.showKeyboard(type);
+ }
+ }
+
+ @Override
+ public boolean onKeyImeChanged(int keyCode, KeyEvent event) {
+ if (keyboardLayout.getVisibility() == View.VISIBLE) {
+ hideAllKeyboard();
+ if (onKeyDownListener != null) onKeyDownListener.onKeyDownCLicked();
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/KeyboardLayout.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/KeyboardLayout.java
new file mode 100644
index 0000000..7af14b7
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/KeyboardLayout.java
@@ -0,0 +1,29 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.RelativeLayout;
+
+/**
+ * Created by HOANG ANH TUAN on 7/17/2017.
+ */
+
+public abstract class KeyboardLayout extends RelativeLayout {
+
+ private static final String TAG = "KeyboardLayout";
+
+ public KeyboardLayout(Context context) {
+ super(context);
+ }
+
+ public KeyboardLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public KeyboardLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public abstract void showKeyboard(int type);
+
+}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnKeyDownListener.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/callback/OnKeyDownListener.java
similarity index 65%
rename from library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnKeyDownListener.java
rename to core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/callback/OnKeyDownListener.java
index 9655cd4..ec57bcf 100644
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnKeyDownListener.java
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/callback/OnKeyDownListener.java
@@ -1,4 +1,4 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.callback;
+package com.hoanganhtuan95ptit.awesomekeyboard.core.callback;
/**
* Created by HOANG ANH TUAN on 7/6/2017.
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/constants/EmojiconConstant.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/constants/EmojiconConstant.java
new file mode 100644
index 0000000..222c538
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/constants/EmojiconConstant.java
@@ -0,0 +1,15 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core.constants;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+/**
+ * Created by HOANG ANH TUAN on 7/12/2017.
+ */
+
+public class EmojiconConstant {
+
+ public static HashMap emoticons = new HashMap<>();
+
+}
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconCache.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconCache.java
new file mode 100644
index 0000000..43d32c9
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconCache.java
@@ -0,0 +1,82 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core.utils;
+
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+import android.util.LruCache;
+
+/**
+ * Created by HOANG ANH TUAN on 7/20/2017.
+ */
+
+public class EmojiconCache {
+
+ private static final int SIZE_MAX=1024;
+
+ private static EmojiconCache instance;
+
+ private static EmojiconCache getInstance() {
+ if (instance == null) instance = new EmojiconCache();
+ return instance;
+ }
+
+ private LruCache emojiconDecoderLruCache;
+ private LruCache drawableLruCache;
+ private LruCache stringBuilderLruCache;
+ private LruCache bitmapLruCache;
+
+ private EmojiconCache() {
+ emojiconDecoderLruCache=new LruCache<>(SIZE_MAX);
+ drawableLruCache=new LruCache<>(SIZE_MAX);
+ stringBuilderLruCache=new LruCache<>(SIZE_MAX);
+ bitmapLruCache=new LruCache<>(SIZE_MAX);
+ }
+
+ public static EmojiconSpannableStringBuilder getStringBuilder(String value) {
+ return getInstance().getStringBuilderLruCache().get(value);
+ }
+
+ public static void saveStringBuilder(String key, EmojiconSpannableStringBuilder stringBuilder) {
+ getInstance().getStringBuilderLruCache().put(key, stringBuilder);
+ }
+
+ static EmojiconDecoder getEmojiconDecoder(String key) {
+ return getInstance().getEmojiconDecoderLruCache().get(key);
+ }
+
+ static void saveEmojiconDecoder(String key, EmojiconDecoder emojiconDecoder) {
+ getInstance().getEmojiconDecoderLruCache().put(key, emojiconDecoder);
+ }
+
+ static Drawable getDrawable(String url, EmojiconType type) {
+ return getInstance().getDrawableLruCache().get(url + "type: " + type);
+ }
+
+ static void saveDrawable(String key, Drawable drawable) {
+ getInstance().getDrawableLruCache().put(key, drawable);
+ }
+
+ static Bitmap getBitmap(String key) {
+ return getInstance().getBitmapLruCache().get(key);
+ }
+
+ static void saveBitmap(String key, Bitmap bitmap) {
+ bitmap = Bitmap.createScaledBitmap(bitmap, 180, 180, false);
+ getInstance().getBitmapLruCache().put(key, bitmap);
+ }
+
+ private LruCache getEmojiconDecoderLruCache() {
+ return emojiconDecoderLruCache;
+ }
+
+ private LruCache getDrawableLruCache() {
+ return drawableLruCache;
+ }
+
+ private LruCache getStringBuilderLruCache() {
+ return stringBuilderLruCache;
+ }
+
+ private LruCache getBitmapLruCache() {
+ return bitmapLruCache;
+ }
+}
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconDecoder.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconDecoder.java
new file mode 100644
index 0000000..6989e9a
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconDecoder.java
@@ -0,0 +1,121 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core.utils;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Created by HOANG ANH TUAN on 7/20/2017.
+ */
+
+class EmojiconDecoder {
+
+ private static final String TAG = "EmojiconDecoder";
+
+ private int width = 0;
+ private int height = 0;
+ private int[] delays = new int[0];
+ private int frameNum;
+ private long handle;
+ private String url;
+ private Context context;
+
+ static {
+ System.loadLibrary("native_lib_GifDecoder");
+ }
+
+ private native long nativeInit();
+
+ private native void nativeClose(long var1);
+
+ private native boolean nativeLoad(long var1, String var3);
+
+ private native int nativeGetFrameCount(long var1);
+
+ private native Bitmap nativeGetFrame(long var1, int var3);
+
+ private native int nativeGetDelay(long var1, int var3);
+
+ private native int nativeGetWidth(long var1);
+
+ private native int nativeGetHeight(long var1);
+
+ EmojiconDecoder(String url, Context context) {
+ this.url = url;
+ this.context = context;
+ this.handle = nativeInit();
+ this.url = copy();
+ load();
+ }
+
+ int width() {
+ return this.width;
+ }
+
+ int height() {
+ return this.height;
+ }
+
+ int frameNum() {
+ return this.frameNum;
+ }
+
+ Bitmap frame(int idx) {
+ int i = idx % this.frameNum;
+ return 0 == this.frameNum ? null : EmojiconCache.getBitmap(url + i);
+ }
+
+ int delay(int idx) {
+ return 0 == this.frameNum ? 0 : this.delays[idx % this.frameNum];
+ }
+
+ private boolean load() {
+ if (!this.nativeLoad(handle, url)) {
+ this.nativeClose(handle);
+ return false;
+ } else {
+ this.width = this.nativeGetWidth(handle);
+ this.height = this.nativeGetHeight(handle);
+ this.frameNum = this.nativeGetFrameCount(handle);
+ this.delays = new int[this.frameNum];
+ for (int i = 0; i < this.frameNum; ++i) {
+ EmojiconCache.saveBitmap(url + i, this.nativeGetFrame(handle, i));
+ this.delays[i] = this.nativeGetDelay(handle, i);
+ }
+ this.nativeClose(handle);
+ return true;
+ }
+ }
+
+ private String copy() {
+ try {
+ InputStream is = context.getAssets().open(url);
+ String destFile = context.getFilesDir().getAbsolutePath() + File.separator + url;
+
+ File file = new File(destFile);
+ destFile = context.getFilesDir().getAbsolutePath() + File.separator + file.getName();
+ file = new File(destFile);
+ if (file.exists()) return destFile;
+
+ FileOutputStream os = new FileOutputStream(destFile);
+
+ byte[] buffer = new byte[1024];
+ int read;
+ while ((read = is.read(buffer)) != -1) {
+ os.write(buffer, 0, read);
+ }
+ is.close();
+ os.flush();
+ os.close();
+ return destFile;
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return "";
+ }
+}
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconGifDrawable.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconGifDrawable.java
new file mode 100644
index 0000000..597f52a
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconGifDrawable.java
@@ -0,0 +1,69 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core.utils;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.drawable.AnimationDrawable;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+
+/**
+ * Created by HOANG ANH TUAN on 7/9/2017.
+ */
+
+class EmojiconGifDrawable extends AnimationDrawable {
+
+ private String url;
+ private Context context;
+ private int textSize;
+ private int mCurrentIndex = 0;
+
+ EmojiconGifDrawable(Context context, String url, int textSize) {
+ this.context = context;
+ this.url = url;
+ this.textSize = textSize;
+ init();
+ }
+
+ private void init() {
+ //get cache EmojiconDecoder
+ EmojiconDecoder emojiconDecoder = EmojiconCache.getEmojiconDecoder(url);
+ if(emojiconDecoder==null){
+ emojiconDecoder=new EmojiconDecoder(url,context);
+ EmojiconCache.saveEmojiconDecoder(url,emojiconDecoder);
+ }
+ // add frame
+ for (int i = 0; i < emojiconDecoder.frameNum(); ++i) {
+ Bitmap bitmap = emojiconDecoder.frame(i);
+ BitmapDrawable drawable = new BitmapDrawable(context.getResources(), bitmap);
+ int height = textSize;
+ int width = (height * drawable.getIntrinsicWidth()) / drawable.getIntrinsicHeight();
+ drawable.setBounds(0, 0, width, height);
+ addFrame(drawable, emojiconDecoder.delay(i));
+ if (i == 0) {
+ setBounds(0, 0, width, height);
+ }
+ }
+ animation();
+ }
+
+ private void animation() {
+ final Handler mHandler = new Handler();
+ mHandler.post(new Runnable() {
+ public void run() {
+ mCurrentIndex = (mCurrentIndex + 1) % getNumberOfFrames();
+ mHandler.postDelayed(this, getDuration(mCurrentIndex));
+ }
+ });
+ }
+
+ int getDuration() {
+ return getDuration(mCurrentIndex);
+ }
+
+ public Drawable getDrawable() {
+ return getFrame(mCurrentIndex);
+ }
+
+
+}
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconHandler.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconHandler.java
new file mode 100644
index 0000000..966d232
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconHandler.java
@@ -0,0 +1,76 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core.utils;
+
+import android.content.Context;
+import android.text.Editable;
+import android.text.Spannable;
+import android.text.style.DynamicDrawableSpan;
+
+import com.hoanganhtuan95ptit.awesomekeyboard.core.constants.EmojiconConstant;
+
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Created by HOANG ANH TUAN on 7/20/2017.
+ */
+
+public class EmojiconHandler {
+
+ private static final int textSizeMax = 100;
+
+ public void convertFromTextToEmoticon(Context context, EmojiconSpannableStringBuilder builder, int textSize) {
+ if(EmojiconConstant.emoticons==null)return;
+ textSize = getTextSize(builder, textSize);
+ convertToEmoticon(context, builder, EmojiconType.ANIMATION, textSize, 0, builder.length());
+ }
+
+ public void convertFromTextToEmoticon(Context context, Editable builder, int textSize, int start, int end) {
+ if(EmojiconConstant.emoticons==null)return;
+ convertToEmoticon(context, builder, EmojiconType.NORMAL, textSize, start, end);
+ }
+
+ private void convertToEmoticon(Context context, Editable editable, EmojiconType type, int textSize, int start, int end) {
+ start = Math.max(start, 0);
+ end = Math.min(end, editable.length());
+ if (start >= end) return;
+
+ for (Map.Entry entry : EmojiconConstant.emoticons.entrySet()) {
+
+ String key = entry.getKey();
+ String value = entry.getValue();
+
+ Matcher matcher = Pattern.compile(Pattern.quote(key)).matcher(editable);
+ matcher.region(start, end);
+
+ while (matcher.find()) {
+ DynamicDrawableSpan newImageSpan = new EmojiconImageSpan(context, value, type, textSize);
+ if (type == EmojiconType.ANIMATION) {
+ ((EmojiconSpannableStringBuilder) editable).setDuration(((EmojiconImageSpan) newImageSpan).getDuration());
+ }
+ editable.setSpan(newImageSpan, matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ }
+ }
+ }
+
+
+ private int getTextSize(Editable editable, int textSize) {
+ int length = 0;
+ int count = 0;
+ for (Map.Entry entry : EmojiconConstant.emoticons.entrySet()) {
+
+ String key = entry.getKey();
+
+ Matcher matcher = Pattern.compile(Pattern.quote(key)).matcher(editable);
+
+ while (matcher.find()) {
+ length = length + key.length();
+ count++;
+ if (count > 3) return textSize;
+ }
+ }
+ if (length < editable.length()) return textSize;
+ return textSizeMax;
+ }
+
+}
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconImageSpan.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconImageSpan.java
new file mode 100644
index 0000000..d6af143
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconImageSpan.java
@@ -0,0 +1,136 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core.utils;
+
+import android.content.Context;
+import android.content.res.AssetManager;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.text.style.DynamicDrawableSpan;
+
+import java.io.InputStream;
+import java.lang.ref.WeakReference;
+
+class EmojiconImageSpan extends DynamicDrawableSpan {
+
+ private Drawable drawable;
+ private int duration;
+
+ EmojiconImageSpan(Context context, String url, EmojiconType type, int textSize) {
+ super();
+ initDrawable(context, url, type, textSize);
+ }
+
+ private void initDrawable(Context context, String url, EmojiconType type, int textSize) {
+ type = getEmoticonType(url, type);
+ drawable = EmojiconCache.getDrawable(url+"type: "+type+"textSize "+textSize, type);
+ if (drawable == null) {
+ if (type == EmojiconType.ANIMATION) {
+ drawable = new EmojiconGifDrawable(context, url, textSize);
+ } else {
+ Drawable d = new BitmapDrawable(context.getResources(), getImage(context, url));
+ int width = (textSize * d.getIntrinsicWidth()) / d.getIntrinsicHeight();
+ d.setBounds(0, 0, width, textSize);
+ drawable = d;
+ }
+ EmojiconCache.saveDrawable(url+"type: "+type+"textSize "+textSize,drawable);
+ }
+ if(drawable instanceof EmojiconGifDrawable){
+ duration = ((EmojiconGifDrawable) drawable).getDuration();
+ }
+ }
+
+ private EmojiconType getEmoticonType(String url, EmojiconType type) {
+ if (type == EmojiconType.NORMAL) return EmojiconType.NORMAL;
+ if (url.subSequence(url.length() - 5, url.length()).toString().contains("gif"))
+ return EmojiconType.ANIMATION;
+ return EmojiconType.NORMAL;
+ }
+
+ int getDuration() {
+ return duration;
+ }
+
+ @Override
+ public Drawable getDrawable() {
+ if (drawable instanceof EmojiconGifDrawable) {
+ return ((EmojiconGifDrawable) drawable).getDrawable();
+ }
+ return drawable;
+ }
+
+ @Override
+ public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
+
+ Drawable d = getCachedDrawable();
+ Rect rect = d.getBounds();
+
+ if (fm != null) {
+
+ int initialDescent = 0;
+ int extraSpace = 0;
+
+ if (rect.bottom - (fm.descent - fm.ascent) >= 0) {
+ initialDescent = fm.descent;
+ extraSpace = rect.bottom - (fm.descent - fm.ascent);
+ }
+
+ fm.descent = extraSpace / 2 + initialDescent;
+ fm.bottom = fm.descent;
+
+ fm.ascent = -rect.bottom + fm.descent;
+ fm.top = fm.ascent;
+ }
+
+ return rect.right;
+ }
+
+ @Override
+ public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
+ Drawable b = getDrawable();
+ canvas.save();
+
+ int transY = bottom - b.getBounds().bottom;
+ if (mVerticalAlignment == ALIGN_BASELINE) {
+ transY -= paint.getFontMetricsInt().descent;
+ }
+
+ canvas.translate(x, transY);
+ b.draw(canvas);
+ canvas.restore();
+
+ }
+
+ private WeakReference mDrawableRef;
+
+ private Drawable getCachedDrawable() {
+ WeakReference wr = mDrawableRef;
+ Drawable d = null;
+
+ if (wr != null)
+ d = wr.get();
+
+ if (d == null) {
+ d = getDrawable();
+ mDrawableRef = new WeakReference<>(d);
+ }
+
+ return d;
+ }
+
+ private static Bitmap getImage(Context context, String url) {
+ AssetManager mngr = context.getAssets();
+ InputStream in = null;
+ try {
+ in = mngr.open(url);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return BitmapFactory.decodeStream(in, null, null);
+ }
+
+
+}
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconSpannableStringBuilder.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconSpannableStringBuilder.java
new file mode 100644
index 0000000..5405771
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconSpannableStringBuilder.java
@@ -0,0 +1,26 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core.utils;
+
+import android.text.SpannableStringBuilder;
+
+/**
+ * Created by HOANG ANH TUAN on 7/14/2017.
+ */
+
+public class EmojiconSpannableStringBuilder extends SpannableStringBuilder {
+ private int duration = 0;
+
+ public EmojiconSpannableStringBuilder(CharSequence text) {
+ super(text);
+ }
+
+ public int getDuration() {
+ return duration;
+ }
+
+ void setDuration(int duration) {
+ if(duration==0)return;
+ if (this.duration == 0) {
+ this.duration = duration;
+ } else if (this.duration > duration) this.duration = duration;
+ }
+}
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconType.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconType.java
new file mode 100644
index 0000000..4496bd3
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/utils/EmojiconType.java
@@ -0,0 +1,9 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core.utils;
+
+/**
+ * Created by HOANG ANH TUAN on 7/20/2017.
+ */
+
+enum EmojiconType {
+ ANIMATION, NORMAL
+}
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/view/EmojiconEditText.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/view/EmojiconEditText.java
new file mode 100644
index 0000000..5907ef2
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/view/EmojiconEditText.java
@@ -0,0 +1,81 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core.view;
+
+import android.content.Context;
+import android.support.v7.widget.AppCompatEditText;
+import android.util.AttributeSet;
+import android.view.KeyEvent;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
+import android.view.inputmethod.InputConnectionWrapper;
+
+import com.hoanganhtuan95ptit.awesomekeyboard.core.utils.EmojiconHandler;
+
+/**
+ * Created by HOANG ANH TUAN on 7/11/2017.
+ */
+
+public class EmojiconEditText extends AppCompatEditText {
+
+ private int textSizeDefault = 50;
+ private OnKeyImeChangeListener onKeyIme;
+ private EmojiconHandler emojiconHandler;
+
+ public EmojiconEditText(Context context) {
+ super(context);
+ init();
+ }
+
+ public EmojiconEditText(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ private void init() {
+ emojiconHandler = new EmojiconHandler();
+ if (getTextSize() > textSizeDefault) textSizeDefault = (int) getTextSize();
+ }
+
+ @Override
+ public boolean onKeyPreIme(int keyCode, KeyEvent event) {
+ return onKeyIme != null && onKeyIme.onKeyImeChanged(keyCode, event);
+ }
+
+ public void setOnKeyIme(OnKeyImeChangeListener onKeyIme) {
+ this.onKeyIme = onKeyIme;
+ }
+
+ public interface OnKeyImeChangeListener {
+ boolean onKeyImeChanged(int keyCode, KeyEvent event);
+ }
+
+ @Override
+ protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
+ super.onTextChanged(text, start, lengthBefore, lengthAfter);
+ if (lengthAfter > lengthBefore) {
+ emojiconHandler.convertFromTextToEmoticon(getContext(), getEditableText(), textSizeDefault, getSelectionStart() - 10, getSelectionStart());
+ }
+ }
+
+ @Override
+ public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
+ return new EmojiconInputConnection(super.onCreateInputConnection(outAttrs), true);
+ }
+
+ private class EmojiconInputConnection extends InputConnectionWrapper {
+
+ EmojiconInputConnection(InputConnection target, boolean mutable) {
+ super(target, mutable);
+ }
+
+ @Override
+ public boolean deleteSurroundingText(int beforeLength, int afterLength) {
+ if (beforeLength == 1 && afterLength == 0) {
+ return sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL))
+ && sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL));
+ }
+ return super.deleteSurroundingText(beforeLength, afterLength);
+ }
+
+ }
+
+}
diff --git a/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/view/EmojiconTextView.java b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/view/EmojiconTextView.java
new file mode 100644
index 0000000..f11d6cb
--- /dev/null
+++ b/core/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/core/view/EmojiconTextView.java
@@ -0,0 +1,64 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.core.view;
+
+import android.content.Context;
+import android.os.Handler;
+import android.support.v7.widget.AppCompatTextView;
+import android.util.AttributeSet;
+
+import com.hoanganhtuan95ptit.awesomekeyboard.core.utils.EmojiconCache;
+import com.hoanganhtuan95ptit.awesomekeyboard.core.utils.EmojiconHandler;
+import com.hoanganhtuan95ptit.awesomekeyboard.core.utils.EmojiconSpannableStringBuilder;
+
+
+/**
+ * Created by HOANG ANH TUAN on 7/12/2017.
+ */
+
+public class EmojiconTextView extends AppCompatTextView {
+
+ private int duration;
+ private int textSizeDefault = 50;
+ private Handler mHandler;
+ private EmojiconSpannableStringBuilder stringBuilder;
+ private EmojiconHandler emojiconHandler;
+
+ public EmojiconTextView(Context context) {
+ super(context);
+ init();
+ }
+
+ public EmojiconTextView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ public EmojiconTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init();
+ }
+
+ private void init() {
+ mHandler = new Handler();
+ emojiconHandler = new EmojiconHandler();
+ textSizeDefault = Math.max((int) getTextSize(), textSizeDefault);
+ }
+
+
+ public void setEmojicon(String text) {
+ if (text.isEmpty()) return;
+ stringBuilder = new EmojiconSpannableStringBuilder(text);
+ emojiconHandler.convertFromTextToEmoticon(getContext(), stringBuilder, textSizeDefault);
+ setText(stringBuilder);
+ if (duration == 0) {
+ duration = Math.max(duration, stringBuilder.getDuration());
+ if (duration > 0) {
+ mHandler.post(new Runnable() {
+ public void run() {
+ postInvalidate();
+ mHandler.postDelayed(this, duration);
+ }
+ });
+ }
+ }
+ }
+}
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
new file mode 100644
index 0000000..4ff8a7e
--- /dev/null
+++ b/core/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ Core
+
diff --git a/demo.jks b/demo.jks
new file mode 100644
index 0000000..15f8eda
Binary files /dev/null and b/demo.jks differ
diff --git a/layout/.gitignore b/layout/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/layout/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/library/build.gradle b/layout/build.gradle
similarity index 74%
rename from library/build.gradle
rename to layout/build.gradle
index 4a9bba2..090393a 100644
--- a/library/build.gradle
+++ b/layout/build.gradle
@@ -1,4 +1,7 @@
apply plugin: 'com.android.library'
+apply plugin: 'com.github.dcendents.android-maven'
+
+group = 'com.github.hoanganhtuan95ptit'
android {
compileSdkVersion 25
@@ -22,18 +25,21 @@ android {
}
dependencies {
- compile fileTree(include: ['*.jar'], dir: 'libs')
+ compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
- compile 'com.android.support:recyclerview-v7:25.3.1'
-
- compile 'com.google.code.gson:gson:2.8.0'
+ testCompile 'junit:junit:4.12'
- compile 'com.facebook.fresco:fresco:1.3.0'
+ compile 'com.ogaclejapan.smarttablayout:library:1.6.1@aar'
+ compile 'com.ogaclejapan.smarttablayout:utils-v4:1.6.1@aar'
compile 'jp.wasabeef:blurry:2.1.1'
- testCompile 'junit:junit:4.12'
+ compile 'com.android.support:recyclerview-v7:25.3.1'
+
+ compile 'com.facebook.fresco:fresco:1.3.0'
+
+ compile project(path: ':core')
}
diff --git a/layout/proguard-rules.pro b/layout/proguard-rules.pro
new file mode 100644
index 0000000..ce3149c
--- /dev/null
+++ b/layout/proguard-rules.pro
@@ -0,0 +1,25 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in C:\Android\sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/layout/src/main/AndroidManifest.xml b/layout/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..3b31430
--- /dev/null
+++ b/layout/src/main/AndroidManifest.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/AwesomeKeyboardLayout.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/AwesomeKeyboardLayout.java
new file mode 100644
index 0000000..83381b3
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/AwesomeKeyboardLayout.java
@@ -0,0 +1,156 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.RelativeLayout;
+
+import com.hoanganhtuan95ptit.awesomekeyboard.core.KeyboardLayout;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.callback.OnDeleteClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.callback.OnItemColorClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.callback.OnItemEmoticonClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.callback.OnItemPhotoClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.callback.OnItemStickerClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.ColorLayout;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.EmojiconLayout;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.PhotoLayout;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.StickerLayout;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model.EmojiconCategory;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model.StickerCategory;
+
+/**
+ * Created by HOANG ANH TUAN on 7/17/2017.
+ */
+
+public class AwesomeKeyboardLayout extends KeyboardLayout {
+
+ private StickerLayout stickerLayout;
+ private PhotoLayout photoLayout;
+ private ColorLayout colorLayout;
+ private EmojiconLayout emojiconLayout;
+
+ public AwesomeKeyboardLayout(Context context) {
+ super(context);
+ initView();
+ }
+
+ public AwesomeKeyboardLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ initView();
+ }
+
+ public AwesomeKeyboardLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView();
+ }
+
+ private void initView() {
+
+ stickerLayout = new StickerLayout(getContext());
+ photoLayout = new PhotoLayout(getContext());
+ colorLayout = new ColorLayout(getContext());
+ emojiconLayout = new EmojiconLayout(getContext());
+
+ addView(colorLayout, RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
+ addView(photoLayout, RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
+ addView(emojiconLayout, RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
+ addView(stickerLayout, RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
+
+ stickerLayout.setVisibility(GONE);
+ photoLayout.setVisibility(GONE);
+ colorLayout.setVisibility(GONE);
+ emojiconLayout.setVisibility(GONE);
+ }
+
+ @Override
+ public void showKeyboard(int type) {
+ switch (type) {
+ case 2:
+ showSticker();
+ break;
+ case 3:
+ showPhoto();
+ break;
+ case 4:
+ showColor();
+ break;
+ case 5:
+ showEmojicon();
+ break;
+ }
+ }
+
+ private void showEmojicon() {
+ emojiconLayout.executeEmojicon();
+ photoLayout.setVisibility(GONE);
+ colorLayout.setVisibility(GONE);
+ stickerLayout.setVisibility(GONE);
+ }
+
+ public void showSticker() {
+ stickerLayout.executeSticker();
+ photoLayout.setVisibility(GONE);
+ colorLayout.setVisibility(GONE);
+ emojiconLayout.setVisibility(GONE);
+ }
+
+ public void showPhoto() {
+ photoLayout.executePhoto();
+ stickerLayout.setVisibility(GONE);
+ colorLayout.setVisibility(GONE);
+ emojiconLayout.setVisibility(GONE);
+ }
+
+ public void showColor() {
+ colorLayout.executeColor();
+ photoLayout.setVisibility(GONE);
+ stickerLayout.setVisibility(GONE);
+ emojiconLayout.setVisibility(GONE);
+ }
+
+
+ public void setOnItemStickerClickListener(OnItemStickerClickListener onItemStickerClickListener) {
+ stickerLayout.setOnItemStickerClickListener(onItemStickerClickListener);
+ }
+
+ public void setOnItemEmoticonClickListener(OnItemEmoticonClickListener onItemEmoticonClickListener) {
+ emojiconLayout.setOnItemEmoticonClickListener(onItemEmoticonClickListener);
+ }
+
+ public void setOnItemColorClickListener(OnItemColorClickListener onItemColorClickListener) {
+ colorLayout.setOnItemColorClickListener(onItemColorClickListener);
+ }
+
+ public void setOnDeleteClickListener(OnDeleteClickListener onDeleteClickListener) {
+ emojiconLayout.setOnDeleteClickListener(onDeleteClickListener);
+ }
+
+ public void setOnItemPhotoClickListener(OnItemPhotoClickListener onItemPhotoClickListener) {
+ photoLayout.setOnItemPhotoClickListener(onItemPhotoClickListener);
+ }
+
+ public void updateDataSticker(StickerCategory stickerCategory) {
+ stickerLayout.updateData(stickerCategory);
+ }
+
+ public void clearDataSticker() {
+ stickerLayout.clearData();
+ }
+
+
+ public void updateDataEmoticon(EmojiconCategory emojiconCategory) {
+ emojiconLayout.updateData(emojiconCategory);
+ }
+
+ public void clearDataEmoticon() {
+ emojiconLayout.clearData();
+ }
+
+ public void updateDataColor(String color) {
+ colorLayout.updateData(color);
+ }
+
+ public void clearDataColor() {
+ colorLayout.clearData();
+ }
+
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/AwesomeKeyboardSdk.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/AwesomeKeyboardSdk.java
new file mode 100644
index 0000000..3b137ff
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/AwesomeKeyboardSdk.java
@@ -0,0 +1,26 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout;
+
+import android.content.Context;
+
+import com.facebook.drawee.backends.pipeline.Fresco;
+import com.hoanganhtuan95ptit.awesomekeyboard.core.constants.EmojiconConstant;
+
+import java.util.HashMap;
+
+/**
+ * Created by HOANG ANH TUAN on 7/17/2017.
+ */
+
+public class AwesomeKeyboardSdk {
+
+ private AwesomeKeyboardSdk(Context context, HashMap emoticons) {
+ EmojiconConstant.emoticons = emoticons;
+ Fresco.initialize(context);
+ }
+
+ private static AwesomeKeyboardSdk awesomeKeyboard;
+
+ public static void initialize(Context context, HashMap emoticons) {
+ if (awesomeKeyboard == null) awesomeKeyboard = new AwesomeKeyboardSdk(context, emoticons);
+ }
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/AwesomeKeyboardType.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/AwesomeKeyboardType.java
new file mode 100644
index 0000000..86a9120
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/AwesomeKeyboardType.java
@@ -0,0 +1,23 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout;
+
+/**
+ * Created by HOANG ANH TUAN on 7/5/2017.
+ */
+
+public enum AwesomeKeyboardType {
+ NOMAL(1), STICKER(2), PHOTO(3), COLOR(4), EMOJICON(5);
+
+ private int value;
+
+ AwesomeKeyboardType(int value) {
+ this.value = value;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public void setValue(int value) {
+ this.value = value;
+ }
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnDeleteClickListener.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnDeleteClickListener.java
new file mode 100644
index 0000000..2978925
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnDeleteClickListener.java
@@ -0,0 +1,9 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.callback;
+
+/**
+ * Created by HOANG ANH TUAN on 7/18/2017.
+ */
+
+public interface OnDeleteClickListener {
+ void onDeleteClicked();
+}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnItemColorClickListener.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnItemColorClickListener.java
similarity index 68%
rename from library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnItemColorClickListener.java
rename to layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnItemColorClickListener.java
index 8b6e572..e8ddf46 100644
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnItemColorClickListener.java
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnItemColorClickListener.java
@@ -1,4 +1,4 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.callback;
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.callback;
/**
* Created by HOANG ANH TUAN on 6/28/2017.
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnItemEmoticonClickListener.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnItemEmoticonClickListener.java
new file mode 100644
index 0000000..9ff5e55
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnItemEmoticonClickListener.java
@@ -0,0 +1,9 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.callback;
+
+/**
+ * Created by HOANG ANH TUAN on 6/29/2017.
+ */
+
+public interface OnItemEmoticonClickListener {
+ void onItemEmoticonClicked(String key);
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnItemPhotoClickListener.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnItemPhotoClickListener.java
new file mode 100644
index 0000000..b1c86f6
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnItemPhotoClickListener.java
@@ -0,0 +1,9 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.callback;
+
+/**
+ * Created by HOANG ANH TUAN on 7/16/2017.
+ */
+
+public interface OnItemPhotoClickListener {
+ void onItemPhotoClicked(String url);
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnItemStickerClickListener.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnItemStickerClickListener.java
new file mode 100644
index 0000000..2c58877
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/callback/OnItemStickerClickListener.java
@@ -0,0 +1,11 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.callback;
+
+import java.io.Serializable;
+
+/**
+ * Created by HOANG ANH TUAN on 7/16/2017.
+ */
+
+public interface OnItemStickerClickListener extends Serializable {
+ void onItemStickerClicked(String url);
+}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/utils/FileUtils.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/utils/FileUtils.java
similarity index 94%
rename from library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/utils/FileUtils.java
rename to layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/utils/FileUtils.java
index aa11d95..34eae67 100644
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/utils/FileUtils.java
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/utils/FileUtils.java
@@ -1,4 +1,4 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.utils;
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.utils;
import android.app.Activity;
import android.database.Cursor;
@@ -6,8 +6,6 @@
import android.os.AsyncTask;
import android.provider.MediaStore;
-import com.hoanganhtuan95ptit.awesomekeyboard.utils.callback.OnPictureRead;
-
import java.io.File;
import java.util.SortedSet;
import java.util.TreeSet;
@@ -74,4 +72,8 @@ protected void onProgressUpdate(File... values) {
}.execute(activity);
}
+
+ public interface OnPictureRead {
+ void pictureRead(Object... objects);
+ }
}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/ColorLayout.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/ColorLayout.java
new file mode 100644
index 0000000..612cc04
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/ColorLayout.java
@@ -0,0 +1,76 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view;
+
+import android.app.Activity;
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.StaggeredGridLayoutManager;
+import android.util.AttributeSet;
+import android.view.ViewGroup;
+import android.widget.RelativeLayout;
+
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.R;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.callback.OnItemColorClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.adapter.ColorAdapter;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback.OnColorClickListener;
+
+/**
+ * Created by HOANG ANH TUAN on 6/28/2017.
+ */
+
+public class ColorLayout extends RelativeLayout implements OnColorClickListener {
+
+ private OnItemColorClickListener onItemColorClickListener;
+ private ColorAdapter colorAdapter;
+
+ public ColorLayout(Context context) {
+ super(context);
+ initView();
+ }
+
+ public ColorLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ initView();
+ }
+
+ public ColorLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView();
+ }
+
+ private void initView() {
+ Activity activity = (Activity) getContext();
+ RecyclerView recyclerView = new RecyclerView(getContext());
+ colorAdapter = new ColorAdapter(activity);
+
+ int padding = (int) activity.getResources().getDimension(R.dimen.itemColorMargin);
+ colorAdapter.setOnColorClickListener(this);
+
+ recyclerView.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
+ recyclerView.setLayoutManager(new StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.VERTICAL));
+ recyclerView.setAdapter(colorAdapter);
+ recyclerView.setPadding(padding, 0, padding, 0);
+
+ addView(recyclerView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
+ }
+
+ public void executeColor() {
+ setVisibility(VISIBLE);
+ }
+
+ public void updateData(String color) {
+ colorAdapter.add(color);
+ }
+
+ public void clearData() {
+ colorAdapter.clear();
+ }
+
+ public void setOnItemColorClickListener(OnItemColorClickListener onItemColorClickListener) {
+ this.onItemColorClickListener = onItemColorClickListener;
+ }
+
+ @Override
+ public void onColorClicked(String color) {
+ if (onItemColorClickListener != null) onItemColorClickListener.onItemColorClicked(color);
+ }
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/EmojiconLayout.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/EmojiconLayout.java
new file mode 100644
index 0000000..3c47b09
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/EmojiconLayout.java
@@ -0,0 +1,138 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view;
+
+import android.content.Context;
+import android.net.Uri;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+
+import com.facebook.drawee.view.SimpleDraweeView;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.R;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.callback.OnDeleteClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.callback.OnItemEmoticonClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.adapter.ViewPagerAdapter;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback.OnEmoticonClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.fragment.EmoticonsFragment;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model.EmojiconCategory;
+import com.ogaclejapan.smarttablayout.SmartTabLayout;
+
+import java.util.ArrayList;
+
+/**
+ * Created by HOANG ANH TUAN on 7/18/2017.
+ */
+
+public class EmojiconLayout extends RelativeLayout implements SmartTabLayout.TabProvider,
+ View.OnClickListener,
+ OnEmoticonClickListener{
+
+ private static final String TAG = "EmojiconLayout";
+
+ private ViewPager viewPager;
+ private SmartTabLayout smartTabLayout;
+
+ private ArrayList emoticonCategories=new ArrayList<>();
+
+ private ViewPagerAdapter viewPagerAdapter;
+
+ private OnItemEmoticonClickListener onItemEmoticonClickListener;
+ private OnDeleteClickListener onDeleteClickListener;
+
+ public EmojiconLayout(Context context) {
+ super(context);
+ initView();
+ }
+
+ public EmojiconLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ initView();
+ }
+
+ public EmojiconLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView();
+ }
+
+ private void initView() {
+
+ Log.e(TAG,"initView");
+ FragmentActivity activity = (FragmentActivity) getContext();
+ viewPagerAdapter = new ViewPagerAdapter(activity.getSupportFragmentManager());
+
+ setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
+ LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View view = inflater.inflate(R.layout.layout_emojicon, this, false);
+
+ viewPager = (ViewPager) view.findViewById(R.id.viewPagerEmojicon);
+ smartTabLayout = (SmartTabLayout) view.findViewById(R.id.smartTabLayoutEmojicon);
+ ImageView imgDelete = (ImageView) view.findViewById(R.id.img_delete);
+
+ viewPager.setAdapter(viewPagerAdapter);
+
+ smartTabLayout.setCustomTabView(this);
+ imgDelete.setOnClickListener(this);
+
+ addView(view);
+ }
+
+ public void executeEmojicon() {
+ setVisibility(VISIBLE);
+ }
+
+ public void updateData(EmojiconCategory emojiconCategory) {
+ emoticonCategories.add(emojiconCategory);
+ viewPagerAdapter.add(EmoticonsFragment.initialize(emojiconCategory.getEmojicons(), this));
+ updatePage();
+ }
+
+ public void clearData() {
+ emoticonCategories.clear();
+ viewPagerAdapter.clear();
+ updatePage();
+ }
+
+ private void updatePage(){
+ smartTabLayout.setViewPager(viewPager);
+ }
+
+ public void setOnItemEmoticonClickListener(OnItemEmoticonClickListener onItemEmoticonClickListener) {
+ this.onItemEmoticonClickListener = onItemEmoticonClickListener;
+ }
+
+ public void setOnDeleteClickListener(OnDeleteClickListener onDeleteClickListener) {
+ this.onDeleteClickListener = onDeleteClickListener;
+ }
+
+ @Override
+ public View createTabView(ViewGroup container, int position, PagerAdapter adapter) {
+ LayoutInflater inflater = LayoutInflater.from(container.getContext());
+ View tab = inflater.inflate(R.layout.item_title, container, false);
+ SimpleDraweeView img = (SimpleDraweeView) tab.findViewById(R.id.img);
+
+ String url = "asset:///" + emoticonCategories.get(position).getUrlTitle();
+ Uri uri = Uri.parse(url);
+ img.setImageURI(uri);
+
+ return tab;
+ }
+
+ @Override
+ public void onEmoticonsClicked(String key, int position) {
+ if (onItemEmoticonClickListener != null)
+ onItemEmoticonClickListener.onItemEmoticonClicked(key);
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (onDeleteClickListener != null) onDeleteClickListener.onDeleteClicked();
+ }
+
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/PhotoLayout.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/PhotoLayout.java
new file mode 100644
index 0000000..3119742
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/PhotoLayout.java
@@ -0,0 +1,88 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view;
+
+import android.app.Activity;
+import android.content.Context;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.AttributeSet;
+import android.view.ViewGroup;
+import android.widget.RelativeLayout;
+
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.callback.OnItemPhotoClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.utils.FileUtils;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.adapter.PhotoAdapter;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model.Photo;
+
+/**
+ * Created by HOANG ANH TUAN on 7/15/2017.
+ */
+
+public class PhotoLayout extends RelativeLayout implements FileUtils.OnPictureRead,PhotoAdapter.OnPhotoClickListener {
+
+ private OnItemPhotoClickListener onItemPhotoClickListener;
+
+ private RecyclerView recyclerView;
+ private PhotoAdapter photoAdapter;
+ private Activity activity;
+
+ public PhotoLayout(Context context) {
+ super(context);
+ init();
+ }
+
+ public PhotoLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ public PhotoLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init();
+ }
+
+ private void init() {
+ activity = (Activity) getContext();
+ recyclerView = new RecyclerView(getContext());
+ photoAdapter = new PhotoAdapter(activity);
+
+ photoAdapter.setlistener(this);
+
+ recyclerView.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
+ recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
+ recyclerView.setAdapter(photoAdapter);
+ recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+ photoAdapter.unSelect();
+ }
+ });
+
+ addView(recyclerView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
+ }
+
+ public void executePhoto() {
+ photoAdapter.clear();
+ setVisibility(VISIBLE);
+ FileUtils.readAllPicture(activity, this);
+ }
+
+ public void setOnItemPhotoClickListener(OnItemPhotoClickListener onItemPhotoClickListener) {
+ this.onItemPhotoClickListener = onItemPhotoClickListener;
+ }
+
+ @Override
+ public void pictureRead(Object... objects) {
+ Photo photo = new Photo();
+ photo.setTimeCreate((long) objects[1]);
+ photo.setUrl((String) objects[0]);
+ photoAdapter.add(photo);
+ recyclerView.scrollToPosition(0);
+ }
+
+ @Override
+ public void onPhotoClicked(String url) {
+ if(onItemPhotoClickListener!=null)onItemPhotoClickListener.onItemPhotoClicked(url);
+ }
+
+}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/SquaredFrameLayout.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/SquaredFrameLayout.java
similarity index 94%
rename from library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/SquaredFrameLayout.java
rename to layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/SquaredFrameLayout.java
index c571a57..612b9e7 100644
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/SquaredFrameLayout.java
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/SquaredFrameLayout.java
@@ -1,4 +1,4 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view;
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view;
import android.annotation.TargetApi;
import android.content.Context;
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/StickerLayout.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/StickerLayout.java
new file mode 100644
index 0000000..955fdde
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/StickerLayout.java
@@ -0,0 +1,118 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view;
+
+import android.content.Context;
+import android.net.Uri;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.RelativeLayout;
+
+import com.facebook.drawee.view.SimpleDraweeView;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.R;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.callback.OnItemStickerClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.adapter.ViewPagerAdapter;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback.OnStickerClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.fragment.StickerFragment;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model.StickerCategory;
+import com.ogaclejapan.smarttablayout.SmartTabLayout;
+
+import java.util.ArrayList;
+
+/**
+ * Created by HOANG ANH TUAN on 7/15/2017.
+ */
+
+public class StickerLayout extends RelativeLayout implements SmartTabLayout.TabProvider,
+ OnStickerClickListener{
+
+ private ArrayList stickers = new ArrayList<>();
+
+ private ViewPager viewPager;
+ private SmartTabLayout smartTabLayout;
+
+ private ViewPagerAdapter viewPagerAdapter;
+
+ private OnItemStickerClickListener onItemStickerClickListener;
+
+ public StickerLayout(Context context) {
+ super(context);
+ initView();
+ }
+
+ public StickerLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ initView();
+ }
+
+ public StickerLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView();
+ }
+
+ private void initView() {
+
+ FragmentActivity activity = (FragmentActivity) getContext();
+ viewPagerAdapter = new ViewPagerAdapter(activity.getSupportFragmentManager());
+
+ setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
+ LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View view = inflater.inflate(R.layout.layout_sticker, this, false);
+
+ viewPager = (ViewPager) view.findViewById(R.id.viewPager);
+ smartTabLayout = (SmartTabLayout) view.findViewById(R.id.smartTabLayout);
+
+ viewPager.setAdapter(viewPagerAdapter);
+
+ smartTabLayout.setCustomTabView(this);
+
+ addView(view);
+ }
+
+ public void executeSticker() {
+ setVisibility(VISIBLE);
+ }
+
+ public void updateData(StickerCategory stickerCategory) {
+ stickers.add(stickerCategory);
+ viewPagerAdapter.add(StickerFragment.initialize(stickerCategory.getStickers(), this));
+ smartTabLayout.setViewPager(viewPager);
+ }
+
+ public void clearData() {
+ stickers.clear();
+ viewPagerAdapter.clear();
+ smartTabLayout.setViewPager(viewPager);
+ }
+
+ private void updatePage(){
+ smartTabLayout.setViewPager(viewPager);
+ }
+
+ @Override
+ public View createTabView(ViewGroup container, int position, PagerAdapter adapter) {
+
+ LayoutInflater inflater = LayoutInflater.from(container.getContext());
+ View tab = inflater.inflate(R.layout.item_title, container, false);
+ String url = stickers.get(position).getUrlTitle();
+ Uri uri = Uri.parse(url);
+ SimpleDraweeView img = (SimpleDraweeView) tab.findViewById(R.id.img);
+ img.setImageURI(uri);
+
+ return tab;
+ }
+
+ public void setOnItemStickerClickListener(OnItemStickerClickListener onItemStickerClickListener) {
+ this.onItemStickerClickListener = onItemStickerClickListener;
+ }
+
+ @Override
+ public void onStickerClicked(String url) {
+ if (onItemStickerClickListener != null)
+ onItemStickerClickListener.onItemStickerClicked(url);
+ }
+}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/BaseAdapter.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/BaseAdapter.java
similarity index 97%
rename from library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/BaseAdapter.java
rename to layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/BaseAdapter.java
index cdde217..92c2bbc 100644
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/BaseAdapter.java
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/BaseAdapter.java
@@ -1,4 +1,4 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.adapter;
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.adapter;
import android.app.Activity;
import android.support.v7.widget.RecyclerView;
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/ColorAdapter.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/ColorAdapter.java
similarity index 89%
rename from library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/ColorAdapter.java
rename to layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/ColorAdapter.java
index bed74ef..b538f80 100644
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/ColorAdapter.java
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/ColorAdapter.java
@@ -1,4 +1,4 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.adapter;
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.adapter;
import android.app.Activity;
import android.graphics.Color;
@@ -8,8 +8,8 @@
import com.facebook.drawee.drawable.ScalingUtils;
import com.facebook.drawee.view.SimpleDraweeView;
-import com.hoanganhtuan95ptit.awesomekeyboard.R;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnColorClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.R;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback.OnColorClickListener;
/**
* Created by DuyPC on 5/27/2017.
@@ -24,7 +24,7 @@ public ColorAdapter(Activity activity) {
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- int margin = (int) activity.getResources().getDimension(R.dimen.itemStickerMargin);
+ int margin = (int) activity.getResources().getDimension(R.dimen.itemColorMargin);
View v = inflater.inflate(R.layout.item_sticker, parent, false);
@@ -54,7 +54,7 @@ private class ViewHolder extends RecyclerView.ViewHolder {
ViewHolder(View view) {
super(view);
- imagePicture = (SimpleDraweeView) view.findViewById(R.id.image_picture);
+ imagePicture = (SimpleDraweeView) view.findViewById(R.id.img);
}
}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/EmoticonsAdapter.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/EmoticonsAdapter.java
similarity index 78%
rename from library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/EmoticonsAdapter.java
rename to layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/EmoticonsAdapter.java
index 08d3c03..16154db 100644
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/EmoticonsAdapter.java
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/EmoticonsAdapter.java
@@ -1,4 +1,4 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.adapter;
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.adapter;
import android.app.Activity;
import android.net.Uri;
@@ -8,8 +8,8 @@
import com.facebook.drawee.drawable.ScalingUtils;
import com.facebook.drawee.view.SimpleDraweeView;
-import com.hoanganhtuan95ptit.awesomekeyboard.R;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnEmoticonClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.R;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback.OnEmoticonClickListener;
/**
* Created by HOANG ANH TUAN on 6/29/2017.
@@ -26,7 +26,7 @@ public EmoticonsAdapter(Activity activity) {
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
int padding = (int) activity.getResources().getDimension(R.dimen.itemEmojiconsPadding);
- View v = inflater.inflate(R.layout.item_emoticon, parent, false);
+ View v = inflater.inflate(R.layout.item_sticker, parent, false);
ViewHolder viewHolder = new ViewHolder(v);
viewHolder.imagePicture.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER);
viewHolder.imagePicture.setPadding(padding, padding, padding, padding);
@@ -34,16 +34,16 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType
}
@Override
- public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
ViewHolder viewHolder = (ViewHolder) holder;
- final int name = position + 1;
- Uri uri = Uri.parse("asset:///emoticons/" + name + ".png");
+ final String url = getDatas().get(position);
+ Uri uri = Uri.parse("asset:///" + url);
viewHolder.imagePicture.setImageURI(uri);
viewHolder.imagePicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onEmoticonClickListener != null)
- onEmoticonClickListener.onEmoticonsClicked(name + ".png");
+ onEmoticonClickListener.onEmoticonsClicked(url,position);
}
});
}
@@ -53,7 +53,7 @@ private class ViewHolder extends RecyclerView.ViewHolder {
ViewHolder(View view) {
super(view);
- imagePicture = (SimpleDraweeView) view.findViewById(R.id.image_picture);
+ imagePicture = (SimpleDraweeView) view.findViewById(R.id.img);
}
}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/PhotoAdapter.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/PhotoAdapter.java
new file mode 100644
index 0000000..d03223d
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/PhotoAdapter.java
@@ -0,0 +1,155 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.adapter;
+
+import android.app.Activity;
+import android.graphics.Color;
+import android.net.Uri;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.facebook.drawee.backends.pipeline.Fresco;
+import com.facebook.drawee.interfaces.DraweeController;
+import com.facebook.drawee.view.SimpleDraweeView;
+import com.facebook.imagepipeline.common.ResizeOptions;
+import com.facebook.imagepipeline.request.ImageRequest;
+import com.facebook.imagepipeline.request.ImageRequestBuilder;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.R;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model.Photo;
+
+import java.util.Collections;
+import java.util.Comparator;
+
+import jp.wasabeef.blurry.Blurry;
+
+/**
+ * Created by HOANG ANH TUAN on 7/15/2017.
+ */
+
+public class PhotoAdapter extends BaseAdapter {
+
+ private OnPhotoClickListener listener;
+
+ private int positionSelected = -1;
+ private static final int photoSizeDefault = 380;
+
+ public PhotoAdapter(Activity activity) {
+ super(activity);
+ }
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ int padding = (int) activity.getResources().getDimension(R.dimen.itemPhotoPadding);
+ View v = inflater.inflate(R.layout.item_photo, parent, false);
+ ViewHolder viewHolder = new ViewHolder(v);
+ viewHolder.rePhoto.setPadding(padding, padding, padding, padding);
+ return viewHolder;
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
+ final ViewHolder viewHolder = (ViewHolder) holder;
+ final Photo photo = getDatas().get(position);
+
+ Uri uri = Uri.parse("file://" + photo.getUrl());
+ ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
+ .setResizeOptions(new ResizeOptions(photoSizeDefault, photoSizeDefault))
+ .build();
+ DraweeController controller = Fresco.newDraweeControllerBuilder()
+ .setOldController(viewHolder.img.getController())
+ .setImageRequest(request)
+ .build();
+ viewHolder.img.setController(controller);
+
+ if (position != positionSelected) {
+ unSelect(viewHolder);
+ } else {
+ select(viewHolder);
+ }
+
+ viewHolder.img.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (viewHolder.getAdapterPosition() == positionSelected) {
+ unSelect(viewHolder);
+ positionSelected = -1;
+ } else {
+ select(viewHolder);
+ int positionSelectOld = positionSelected;
+ positionSelected = viewHolder.getAdapterPosition();
+ if (positionSelectOld >= 0) notifyItemChanged(positionSelectOld);
+ }
+ }
+ });
+ viewHolder.tvSend.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (listener != null) listener.onPhotoClicked(photo.getUrl());
+ }
+ });
+
+ }
+
+ @Override
+ protected void sort() {
+ super.sort();
+ Collections.sort(getDatas(), new Comparator() {
+ @Override
+ public int compare(Photo o1, Photo o2) {
+ if (o1.getTimeCreate() > o2.getTimeCreate()) return -1;
+ if (o1.getTimeCreate() < o2.getTimeCreate()) return 1;
+ return 0;
+ }
+ });
+ }
+
+ private void unSelect(ViewHolder viewHolder) {
+ Blurry.delete(viewHolder.rePhoto);
+ viewHolder.tvSend.setVisibility(View.GONE);
+ }
+
+ private void select(ViewHolder viewHolder) {
+ Blurry.with(activity)
+ .radius(6)
+ .sampling(6)
+ .color(Color.argb(66, 255, 255, 255))
+ .async()
+ .onto(viewHolder.rePhoto);
+ viewHolder.tvSend.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void clear() {
+ super.clear();
+ unSelect();
+ }
+
+ public void unSelect() {
+ if (positionSelected < 0) return;
+ int positionSelectOld = positionSelected;
+ positionSelected = -1;
+ notifyItemChanged(positionSelectOld);
+ }
+
+ public void setlistener(OnPhotoClickListener lIstener) {
+ this.listener = lIstener;
+ }
+
+ private class ViewHolder extends RecyclerView.ViewHolder {
+ SimpleDraweeView img;
+ TextView tvSend;
+ RelativeLayout rePhoto;
+
+ ViewHolder(View view) {
+ super(view);
+ img = (SimpleDraweeView) view.findViewById(R.id.img);
+ tvSend = (TextView) view.findViewById(R.id.tv_send);
+ rePhoto = (RelativeLayout) view.findViewById(R.id.re_photo);
+ }
+ }
+
+ public interface OnPhotoClickListener {
+ void onPhotoClicked(String url);
+ }
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/StickerAdapter.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/StickerAdapter.java
new file mode 100644
index 0000000..cb7fb9e
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/StickerAdapter.java
@@ -0,0 +1,67 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.adapter;
+
+import android.app.Activity;
+import android.net.Uri;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.facebook.drawee.drawable.ScalingUtils;
+import com.facebook.drawee.view.SimpleDraweeView;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.R;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.SquaredFrameLayout;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback.OnStickerClickListener;
+
+/**
+ * Created by HOANG ANH TUAN on 7/15/2017.
+ */
+
+public class StickerAdapter extends BaseAdapter {
+
+ private OnStickerClickListener onStickerClickListener;
+
+ public StickerAdapter(Activity activity) {
+ super(activity);
+ }
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ int padding = (int) activity.getResources().getDimension(R.dimen.itemStickerPadding);
+ View v = inflater.inflate(R.layout.item_sticker, parent, false);
+ ViewHolder itemViewHolder = new ViewHolder(v);
+ itemViewHolder.img.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER);
+ itemViewHolder.itemSticker.setPadding(padding, padding, padding, padding);
+ return itemViewHolder;
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ final ViewHolder itemViewHolder = (ViewHolder) holder;
+ final String url = getDatas().get(position);
+ Uri uri = Uri.parse(url);
+ itemViewHolder.img.setImageURI(uri);
+ itemViewHolder.img.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (onStickerClickListener != null) onStickerClickListener.onStickerClicked(url);
+ }
+ });
+ }
+
+ public void setOnStickerClickListener(OnStickerClickListener onStickerClickListener) {
+ this.onStickerClickListener = onStickerClickListener;
+ }
+
+ private class ViewHolder extends RecyclerView.ViewHolder {
+
+ SimpleDraweeView img;
+ SquaredFrameLayout itemSticker;
+
+ ViewHolder(View itemView) {
+ super(itemView);
+ img = (SimpleDraweeView) itemView.findViewById(R.id.img);
+ itemSticker = (SquaredFrameLayout) itemView.findViewById(R.id.item_sticker);
+ }
+ }
+
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/ViewPagerAdapter.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/ViewPagerAdapter.java
new file mode 100644
index 0000000..def0641
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/adapter/ViewPagerAdapter.java
@@ -0,0 +1,47 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.adapter;
+
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentStatePagerAdapter;
+
+import java.util.ArrayList;
+
+/**
+ * Created by HOANG ANH TUAN on 7/16/2017.
+ */
+
+public class ViewPagerAdapter extends FragmentStatePagerAdapter {
+ private ArrayList fragments = new ArrayList<>();
+
+ public void add(Fragment t) {
+ synchronized (this) {
+ fragments.add(t);
+ notifyDataSetChanged();
+ }
+ }
+
+ public void clear() {
+ synchronized (this) {
+ fragments.clear();
+ notifyDataSetChanged();
+ }
+ }
+
+ public ViewPagerAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ return fragments.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return fragments.size();
+ }
+
+ public void setFragments(ArrayList fragments) {
+ this.fragments = fragments;
+ }
+}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnColorClickListener.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnColorClickListener.java
similarity index 65%
rename from library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnColorClickListener.java
rename to layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnColorClickListener.java
index 95b1d29..46704ec 100644
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnColorClickListener.java
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnColorClickListener.java
@@ -1,4 +1,4 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.callback;
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback;
/**
* Created by HOANG ANH TUAN on 7/6/2017.
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnDeleteListener.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnDeleteListener.java
similarity index 71%
rename from library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnDeleteListener.java
rename to layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnDeleteListener.java
index 98132b5..fe62119 100644
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnDeleteListener.java
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnDeleteListener.java
@@ -1,4 +1,4 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.callback;
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback;
import java.io.Serializable;
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnEmoticonClickListener.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnEmoticonClickListener.java
similarity index 54%
rename from library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnEmoticonClickListener.java
rename to layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnEmoticonClickListener.java
index 54536f8..ab6b5a9 100644
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnEmoticonClickListener.java
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnEmoticonClickListener.java
@@ -1,4 +1,4 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.callback;
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback;
import java.io.Serializable;
@@ -7,5 +7,5 @@
*/
public interface OnEmoticonClickListener extends Serializable {
- void onEmoticonsClicked(String assetUrl);
+ void onEmoticonsClicked(String key, int position);
}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnPhotoClickListener.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnPhotoClickListener.java
similarity index 65%
rename from library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnPhotoClickListener.java
rename to layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnPhotoClickListener.java
index 43de27e..2bce831 100644
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnPhotoClickListener.java
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnPhotoClickListener.java
@@ -1,4 +1,4 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.callback;
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback;
/**
* Created by HOANG ANH TUAN on 7/6/2017.
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnStickerClickListener.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnStickerClickListener.java
similarity index 72%
rename from library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnStickerClickListener.java
rename to layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnStickerClickListener.java
index 896b4a8..c9a6132 100644
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnStickerClickListener.java
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/callback/OnStickerClickListener.java
@@ -1,4 +1,4 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.callback;
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback;
import java.io.Serializable;
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/fragment/EmoticonsFragment.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/fragment/EmoticonsFragment.java
new file mode 100644
index 0000000..7814628
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/fragment/EmoticonsFragment.java
@@ -0,0 +1,84 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.fragment;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.StaggeredGridLayoutManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.R;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.adapter.EmoticonsAdapter;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback.OnEmoticonClickListener;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model.Emojicon;
+
+import java.util.ArrayList;
+
+/**
+ * Created by HOANG ANH TUAN on 6/29/2017.
+ */
+
+public class EmoticonsFragment extends Fragment implements OnEmoticonClickListener {
+
+ private static final String LISTENER = "ON_EMOTICON_CLICK_LISTENER";
+ private static final String EMOJICONS = "EMOJICONS";
+
+ private OnEmoticonClickListener onEmoticonClickListener;
+
+ private Activity activity;
+ private ArrayList urls;
+ private EmoticonsAdapter emoticonsAdapter;
+
+ public static EmoticonsFragment initialize(ArrayList urls, OnEmoticonClickListener onEmoticonClickListener) {
+ EmoticonsFragment emoticonsFragment = new EmoticonsFragment();
+ Bundle bundle = new Bundle();
+ bundle.putSerializable(EMOJICONS, urls);
+ bundle.putSerializable(LISTENER, onEmoticonClickListener);
+ emoticonsFragment.setArguments(bundle);
+ return emoticonsFragment;
+ }
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ activity = getActivity();
+ this.urls = (ArrayList) getArguments().getSerializable(EMOJICONS);
+ this.onEmoticonClickListener = (OnEmoticonClickListener) getArguments().getSerializable(LISTENER);
+ getArguments().remove(LISTENER);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ RecyclerView recyclerView = new RecyclerView(getContext());
+ emoticonsAdapter = new EmoticonsAdapter(activity);
+
+ emoticonsAdapter.setOnEmoticonClickListener(this);
+ recyclerView.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
+ recyclerView.setLayoutManager(new StaggeredGridLayoutManager(8, StaggeredGridLayoutManager.VERTICAL));
+ recyclerView.setAdapter(emoticonsAdapter);
+
+ int padding = (int) activity.getResources().getDimension(R.dimen.itemStickerPadding);
+ recyclerView.setPadding(padding, 0, padding, 0);
+ updateData();
+
+ return recyclerView;
+ }
+
+ private void updateData() {
+ if (urls != null) {
+ for (int i = 0; i < urls.size(); i++) {
+ emoticonsAdapter.add(urls.get(i).getUrl());
+ }
+ }
+ }
+
+ @Override
+ public void onEmoticonsClicked(String assetUrl, int position) {
+ if (onEmoticonClickListener != null)
+ onEmoticonClickListener.onEmoticonsClicked(urls.get(position).getKey(), position);
+ }
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/fragment/StickerFragment.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/fragment/StickerFragment.java
new file mode 100644
index 0000000..296945d
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/fragment/StickerFragment.java
@@ -0,0 +1,83 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.fragment;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.StaggeredGridLayoutManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.R;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.adapter.StickerAdapter;
+import com.hoanganhtuan95ptit.awesomekeyboard.layout.view.callback.OnStickerClickListener;
+
+import java.util.ArrayList;
+
+
+/**
+ * Created by HOANG ANH TUAN on 7/15/2017.
+ */
+
+public class StickerFragment extends Fragment implements OnStickerClickListener {
+
+ private static final String LISTENER = "ON_STICKER_CLICK_LISTENER";
+ private static final String STICKER = "STICKERS";
+
+ private Activity activity;
+ private StickerAdapter stickerAdapter;
+ private ArrayList stickers;
+ private OnStickerClickListener onStickerClickListener;
+
+ public static Fragment initialize(ArrayList stickers, OnStickerClickListener onStickerClickListener) {
+ StickerFragment stickerFragment = new StickerFragment();
+ Bundle bundle = new Bundle();
+ bundle.putSerializable(LISTENER, onStickerClickListener);
+ bundle.putSerializable(STICKER, stickers);
+ stickerFragment.setArguments(bundle);
+ return stickerFragment;
+ }
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ activity = getActivity();
+ this.onStickerClickListener = (OnStickerClickListener) getArguments().getSerializable(LISTENER);
+ this.stickers = (ArrayList) getArguments().getSerializable(STICKER);
+ getArguments().remove(LISTENER);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ RecyclerView recyclerView = new RecyclerView(getContext());
+ stickerAdapter = new StickerAdapter(activity);
+
+ stickerAdapter.setOnStickerClickListener(this);
+ recyclerView.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
+ recyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL));
+ recyclerView.setAdapter(stickerAdapter);
+
+ int padding = (int) activity.getResources().getDimension(R.dimen.itemStickerPadding);
+ recyclerView.setPadding(padding, 0, padding, 0);
+ updateData();
+
+ return recyclerView;
+ }
+
+ private void updateData() {
+ if (stickers != null) {
+ for (int i = 0; i < stickers.size(); i++) {
+ stickerAdapter.add(stickers.get(i));
+ }
+ }
+ }
+
+ @Override
+ public void onStickerClicked(String url) {
+ if (onStickerClickListener != null)
+ onStickerClickListener.onStickerClicked(url);
+ }
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/model/Emojicon.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/model/Emojicon.java
new file mode 100644
index 0000000..3a13c42
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/model/Emojicon.java
@@ -0,0 +1,35 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model;
+
+import java.io.Serializable;
+
+/**
+ * Created by HOANG ANH TUAN on 7/19/2017.
+ */
+
+public class Emojicon implements Serializable {
+ private String key;
+ private String url;
+
+ public Emojicon(String key, String url) {
+ this.key = key;
+ this.url = url;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public Emojicon setKey(String key) {
+ this.key = key;
+ return this;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public Emojicon setUrl(String url) {
+ this.url = url;
+ return this;
+ }
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/model/EmojiconCategory.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/model/EmojiconCategory.java
new file mode 100644
index 0000000..5a33c3f
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/model/EmojiconCategory.java
@@ -0,0 +1,36 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ * Created by HOANG ANH TUAN on 7/19/2017.
+ */
+
+public class EmojiconCategory implements Serializable {
+ private String urlTitle;
+ private ArrayList emojicons;
+
+ public EmojiconCategory(String urlTitle, ArrayList emojicons) {
+ this.urlTitle = urlTitle;
+ this.emojicons = emojicons;
+ }
+
+ public String getUrlTitle() {
+ return urlTitle;
+ }
+
+ public EmojiconCategory setUrlTitle(String urlTitle) {
+ this.urlTitle = urlTitle;
+ return this;
+ }
+
+ public ArrayList getEmojicons() {
+ return emojicons;
+ }
+
+ public EmojiconCategory setEmojicons(ArrayList emojicons) {
+ this.emojicons = emojicons;
+ return this;
+ }
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/model/Photo.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/model/Photo.java
new file mode 100644
index 0000000..2a5de0d
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/model/Photo.java
@@ -0,0 +1,30 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model;
+
+import java.io.Serializable;
+
+/**
+ * Created by HOANG ANH TUAN on 7/11/2017.
+ */
+
+public class Photo implements Serializable {
+
+ private String url;
+ private long timeCreate;
+
+ public long getTimeCreate() {
+ return timeCreate;
+ }
+
+ public void setTimeCreate(long timeCreate) {
+ this.timeCreate = timeCreate;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+}
diff --git a/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/model/StickerCategory.java b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/model/StickerCategory.java
new file mode 100644
index 0000000..d8c1622
--- /dev/null
+++ b/layout/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/layout/view/model/StickerCategory.java
@@ -0,0 +1,34 @@
+package com.hoanganhtuan95ptit.awesomekeyboard.layout.view.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ * Created by HOANG ANH TUAN on 7/11/2017.
+ */
+
+public class StickerCategory implements Serializable {
+ private String urlTitle;
+ private ArrayList stickers;
+
+ public StickerCategory(String urlTitle, ArrayList stickers) {
+ this.urlTitle = urlTitle;
+ this.stickers = stickers;
+ }
+
+ public String getUrlTitle() {
+ return urlTitle;
+ }
+
+ public void setUrlTitle(String urlTitle) {
+ this.urlTitle = urlTitle;
+ }
+
+ public ArrayList getStickers() {
+ return stickers;
+ }
+
+ public void setStickers(ArrayList stickers) {
+ this.stickers = stickers;
+ }
+}
diff --git a/library/src/main/res/drawable/ic_delete.png b/layout/src/main/res/drawable/ic_delete.png
similarity index 100%
rename from library/src/main/res/drawable/ic_delete.png
rename to layout/src/main/res/drawable/ic_delete.png
diff --git a/layout/src/main/res/drawable/xml_bg_selected.xml b/layout/src/main/res/drawable/xml_bg_selected.xml
new file mode 100644
index 0000000..467af1b
--- /dev/null
+++ b/layout/src/main/res/drawable/xml_bg_selected.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/library/src/main/res/drawable/xml_bg_send.xml b/layout/src/main/res/drawable/xml_bg_send.xml
similarity index 100%
rename from library/src/main/res/drawable/xml_bg_send.xml
rename to layout/src/main/res/drawable/xml_bg_send.xml
diff --git a/library/src/main/res/drawable/xml_circle.xml b/layout/src/main/res/drawable/xml_circle.xml
similarity index 55%
rename from library/src/main/res/drawable/xml_circle.xml
rename to layout/src/main/res/drawable/xml_circle.xml
index 0f7d434..591bcc3 100644
--- a/library/src/main/res/drawable/xml_circle.xml
+++ b/layout/src/main/res/drawable/xml_circle.xml
@@ -1,5 +1,8 @@
-
+
+
\ No newline at end of file
diff --git a/library/src/main/res/layout/item_photo.xml b/layout/src/main/res/layout/item_photo.xml
similarity index 83%
rename from library/src/main/res/layout/item_photo.xml
rename to layout/src/main/res/layout/item_photo.xml
index f4a5d2b..c6671e9 100644
--- a/library/src/main/res/layout/item_photo.xml
+++ b/layout/src/main/res/layout/item_photo.xml
@@ -1,8 +1,7 @@
+ android:layout_height="match_parent">
+ android:background="#30e1e1e1"/>
+
+
+
+
\ No newline at end of file
diff --git a/layout/src/main/res/layout/item_title.xml b/layout/src/main/res/layout/item_title.xml
new file mode 100644
index 0000000..b870691
--- /dev/null
+++ b/layout/src/main/res/layout/item_title.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout/src/main/res/layout/layout_emojicon.xml b/layout/src/main/res/layout/layout_emojicon.xml
new file mode 100644
index 0000000..79caf66
--- /dev/null
+++ b/layout/src/main/res/layout/layout_emojicon.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout/src/main/res/layout/layout_sticker.xml b/layout/src/main/res/layout/layout_sticker.xml
new file mode 100644
index 0000000..20f48fd
--- /dev/null
+++ b/layout/src/main/res/layout/layout_sticker.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout/src/main/res/values/colors.xml b/layout/src/main/res/values/colors.xml
new file mode 100644
index 0000000..87f399f
--- /dev/null
+++ b/layout/src/main/res/values/colors.xml
@@ -0,0 +1,4 @@
+
+
+ #305b5b5b
+
\ No newline at end of file
diff --git a/library/src/main/res/values/dimens.xml b/layout/src/main/res/values/dimens.xml
similarity index 74%
rename from library/src/main/res/values/dimens.xml
rename to layout/src/main/res/values/dimens.xml
index 2cb0684..f6552a7 100644
--- a/library/src/main/res/values/dimens.xml
+++ b/layout/src/main/res/values/dimens.xml
@@ -1,12 +1,13 @@
-
+ 40dp
10dp
- 8dp
- 1dp
- 10dp
+ 6dp
6dp
1dp
+ 1dp
+ 12dp
+ 8dp
9dp
40dp
6dp
diff --git a/layout/src/main/res/values/strings.xml b/layout/src/main/res/values/strings.xml
new file mode 100644
index 0000000..43e3e7a
--- /dev/null
+++ b/layout/src/main/res/values/strings.xml
@@ -0,0 +1,4 @@
+
+ Library
+ Send
+
diff --git a/library/src/main/assets/emoticons/1.png b/library/src/main/assets/emoticons/1.png
deleted file mode 100644
index e9249d6..0000000
Binary files a/library/src/main/assets/emoticons/1.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/10.png b/library/src/main/assets/emoticons/10.png
deleted file mode 100644
index ed55e1a..0000000
Binary files a/library/src/main/assets/emoticons/10.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/11.png b/library/src/main/assets/emoticons/11.png
deleted file mode 100644
index 141d5ee..0000000
Binary files a/library/src/main/assets/emoticons/11.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/12.png b/library/src/main/assets/emoticons/12.png
deleted file mode 100644
index f5f9f6a..0000000
Binary files a/library/src/main/assets/emoticons/12.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/13.png b/library/src/main/assets/emoticons/13.png
deleted file mode 100644
index 173a44b..0000000
Binary files a/library/src/main/assets/emoticons/13.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/14.png b/library/src/main/assets/emoticons/14.png
deleted file mode 100644
index bbf5e5b..0000000
Binary files a/library/src/main/assets/emoticons/14.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/15.png b/library/src/main/assets/emoticons/15.png
deleted file mode 100644
index fd867a9..0000000
Binary files a/library/src/main/assets/emoticons/15.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/16.png b/library/src/main/assets/emoticons/16.png
deleted file mode 100644
index c986081..0000000
Binary files a/library/src/main/assets/emoticons/16.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/17.png b/library/src/main/assets/emoticons/17.png
deleted file mode 100644
index 3ab9a90..0000000
Binary files a/library/src/main/assets/emoticons/17.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/18.png b/library/src/main/assets/emoticons/18.png
deleted file mode 100644
index 3f69cf4..0000000
Binary files a/library/src/main/assets/emoticons/18.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/19.png b/library/src/main/assets/emoticons/19.png
deleted file mode 100644
index db6b570..0000000
Binary files a/library/src/main/assets/emoticons/19.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/2.png b/library/src/main/assets/emoticons/2.png
deleted file mode 100644
index 088d43c..0000000
Binary files a/library/src/main/assets/emoticons/2.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/20.png b/library/src/main/assets/emoticons/20.png
deleted file mode 100644
index f469ae5..0000000
Binary files a/library/src/main/assets/emoticons/20.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/21.png b/library/src/main/assets/emoticons/21.png
deleted file mode 100644
index eb31810..0000000
Binary files a/library/src/main/assets/emoticons/21.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/22.png b/library/src/main/assets/emoticons/22.png
deleted file mode 100644
index 97a8630..0000000
Binary files a/library/src/main/assets/emoticons/22.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/23.png b/library/src/main/assets/emoticons/23.png
deleted file mode 100644
index 7721e23..0000000
Binary files a/library/src/main/assets/emoticons/23.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/24.png b/library/src/main/assets/emoticons/24.png
deleted file mode 100644
index 8c2da43..0000000
Binary files a/library/src/main/assets/emoticons/24.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/25.png b/library/src/main/assets/emoticons/25.png
deleted file mode 100644
index 0ccd5d5..0000000
Binary files a/library/src/main/assets/emoticons/25.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/26.png b/library/src/main/assets/emoticons/26.png
deleted file mode 100644
index ce3c3c8..0000000
Binary files a/library/src/main/assets/emoticons/26.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/27.png b/library/src/main/assets/emoticons/27.png
deleted file mode 100644
index 3f955fc..0000000
Binary files a/library/src/main/assets/emoticons/27.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/28.png b/library/src/main/assets/emoticons/28.png
deleted file mode 100644
index 8c70265..0000000
Binary files a/library/src/main/assets/emoticons/28.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/29.png b/library/src/main/assets/emoticons/29.png
deleted file mode 100644
index 384dcdf..0000000
Binary files a/library/src/main/assets/emoticons/29.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/3.png b/library/src/main/assets/emoticons/3.png
deleted file mode 100644
index e487642..0000000
Binary files a/library/src/main/assets/emoticons/3.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/30.png b/library/src/main/assets/emoticons/30.png
deleted file mode 100644
index 4d2650a..0000000
Binary files a/library/src/main/assets/emoticons/30.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/31.png b/library/src/main/assets/emoticons/31.png
deleted file mode 100644
index 9b89c52..0000000
Binary files a/library/src/main/assets/emoticons/31.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/32.png b/library/src/main/assets/emoticons/32.png
deleted file mode 100644
index 6d87c17..0000000
Binary files a/library/src/main/assets/emoticons/32.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/33.png b/library/src/main/assets/emoticons/33.png
deleted file mode 100644
index a1b5401..0000000
Binary files a/library/src/main/assets/emoticons/33.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/34.png b/library/src/main/assets/emoticons/34.png
deleted file mode 100644
index 5385c86..0000000
Binary files a/library/src/main/assets/emoticons/34.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/35.png b/library/src/main/assets/emoticons/35.png
deleted file mode 100644
index ad81467..0000000
Binary files a/library/src/main/assets/emoticons/35.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/36.png b/library/src/main/assets/emoticons/36.png
deleted file mode 100644
index b9430b9..0000000
Binary files a/library/src/main/assets/emoticons/36.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/37.png b/library/src/main/assets/emoticons/37.png
deleted file mode 100644
index 0f8e686..0000000
Binary files a/library/src/main/assets/emoticons/37.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/38.png b/library/src/main/assets/emoticons/38.png
deleted file mode 100644
index b6bb4d8..0000000
Binary files a/library/src/main/assets/emoticons/38.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/39.png b/library/src/main/assets/emoticons/39.png
deleted file mode 100644
index 3eaf398..0000000
Binary files a/library/src/main/assets/emoticons/39.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/4.png b/library/src/main/assets/emoticons/4.png
deleted file mode 100644
index 75e8b6d..0000000
Binary files a/library/src/main/assets/emoticons/4.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/40.png b/library/src/main/assets/emoticons/40.png
deleted file mode 100644
index a5d0044..0000000
Binary files a/library/src/main/assets/emoticons/40.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/41.png b/library/src/main/assets/emoticons/41.png
deleted file mode 100644
index 7fafdcd..0000000
Binary files a/library/src/main/assets/emoticons/41.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/42.png b/library/src/main/assets/emoticons/42.png
deleted file mode 100644
index 2555190..0000000
Binary files a/library/src/main/assets/emoticons/42.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/43.png b/library/src/main/assets/emoticons/43.png
deleted file mode 100644
index 55e61b1..0000000
Binary files a/library/src/main/assets/emoticons/43.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/44.png b/library/src/main/assets/emoticons/44.png
deleted file mode 100644
index 899810f..0000000
Binary files a/library/src/main/assets/emoticons/44.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/45.png b/library/src/main/assets/emoticons/45.png
deleted file mode 100644
index ff27c65..0000000
Binary files a/library/src/main/assets/emoticons/45.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/46.png b/library/src/main/assets/emoticons/46.png
deleted file mode 100644
index fb221e5..0000000
Binary files a/library/src/main/assets/emoticons/46.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/47.png b/library/src/main/assets/emoticons/47.png
deleted file mode 100644
index ba7aae3..0000000
Binary files a/library/src/main/assets/emoticons/47.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/48.png b/library/src/main/assets/emoticons/48.png
deleted file mode 100644
index 5475320..0000000
Binary files a/library/src/main/assets/emoticons/48.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/49.png b/library/src/main/assets/emoticons/49.png
deleted file mode 100644
index 93e24e4..0000000
Binary files a/library/src/main/assets/emoticons/49.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/5.png b/library/src/main/assets/emoticons/5.png
deleted file mode 100644
index aebb603..0000000
Binary files a/library/src/main/assets/emoticons/5.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/50.png b/library/src/main/assets/emoticons/50.png
deleted file mode 100644
index 5905e81..0000000
Binary files a/library/src/main/assets/emoticons/50.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/51.png b/library/src/main/assets/emoticons/51.png
deleted file mode 100644
index 049a8e6..0000000
Binary files a/library/src/main/assets/emoticons/51.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/52.png b/library/src/main/assets/emoticons/52.png
deleted file mode 100644
index ba16477..0000000
Binary files a/library/src/main/assets/emoticons/52.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/53.png b/library/src/main/assets/emoticons/53.png
deleted file mode 100644
index 7fe20d5..0000000
Binary files a/library/src/main/assets/emoticons/53.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/54.png b/library/src/main/assets/emoticons/54.png
deleted file mode 100644
index 5d5bb93..0000000
Binary files a/library/src/main/assets/emoticons/54.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/6.png b/library/src/main/assets/emoticons/6.png
deleted file mode 100644
index f300a68..0000000
Binary files a/library/src/main/assets/emoticons/6.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/7.png b/library/src/main/assets/emoticons/7.png
deleted file mode 100644
index 9b1564a..0000000
Binary files a/library/src/main/assets/emoticons/7.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/8.png b/library/src/main/assets/emoticons/8.png
deleted file mode 100644
index 3e637c7..0000000
Binary files a/library/src/main/assets/emoticons/8.png and /dev/null differ
diff --git a/library/src/main/assets/emoticons/9.png b/library/src/main/assets/emoticons/9.png
deleted file mode 100644
index fc528f0..0000000
Binary files a/library/src/main/assets/emoticons/9.png and /dev/null differ
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/Keyboard.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/Keyboard.java
deleted file mode 100644
index 4d59fcd..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/Keyboard.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard;
-
-/**
- * Created by HOANG ANH TUAN on 7/5/2017.
- */
-
-public interface Keyboard {
-
- void hideAllKeyboard();
-
- void showKeyboard(KeyboardType type);
-
- void updateSticker();
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/KeyboardBuilder.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/KeyboardBuilder.java
deleted file mode 100644
index fe958c1..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/KeyboardBuilder.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard;
-
-import android.app.Activity;
-import android.content.Context;
-import android.text.SpannableStringBuilder;
-import android.text.style.ImageSpan;
-import android.view.View;
-import android.widget.EditText;
-
-import com.facebook.drawee.backends.pipeline.Fresco;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnDeleteClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemColorClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemEmoticonClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemPhotoClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemStickerClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnKeyDownListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnShopClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.ListenerEditText;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.StickerLayout;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.model.Sticker;
-
-import java.util.ArrayList;
-
-/**
- * Created by HOANG ANH TUAN on 7/5/2017.
- */
-
-public class KeyboardBuilder {
-
- KeyboardLayout keyboardLayout;// layout bàn phím
- View root;// view cha
- ListenerEditText editText;
- Activity context;
-
-
- OnKeyDownListener onKeyDownListener;
- OnShopClickListener onShopClickListener;
- OnItemStickerClickListener onItemStickerClickListener;
- OnItemPhotoClickListener onItemPhotoClickListener;
- OnItemColorClickListener onItemColorClickListener;
-
- public static KeyboardBuilder with(Activity context) {
- Fresco.initialize(context);
- return new KeyboardBuilder(context);
- }
-
- public Keyboard builder() {
- return new KeyboardImpl(this);
- }
-
- private KeyboardBuilder(Activity context) {
- this.context = context;
- }
-
- public KeyboardBuilder setKeyboardLayout(KeyboardLayout keyboardLayout) {
- this.keyboardLayout = keyboardLayout;
- return this;
- }
-
- public KeyboardBuilder setRoot(View root) {
- this.root = root;
- return this;
- }
-
- public KeyboardBuilder setEditText(ListenerEditText editText) {
- this.editText = editText;
- return this;
- }
-
- public KeyboardBuilder setOnKeyDownListener(OnKeyDownListener onKeyDownListener) {
- this.onKeyDownListener = onKeyDownListener;
- return this;
- }
-
- public KeyboardBuilder setOnShopClickListener(OnShopClickListener onShopClickListener) {
- this.onShopClickListener = onShopClickListener;
- return this;
- }
-
- public KeyboardBuilder setOnItemStickerClickListener(OnItemStickerClickListener onItemStickerClickListener) {
- this.onItemStickerClickListener = onItemStickerClickListener;
- return this;
- }
-
- public KeyboardBuilder setOnItemPhotoClickListener(OnItemPhotoClickListener onItemPhotoClickListener) {
- this.onItemPhotoClickListener = onItemPhotoClickListener;
- return this;
- }
-
- public KeyboardBuilder setOnItemColorClickListener(OnItemColorClickListener onItemColorClickListener) {
- this.onItemColorClickListener = onItemColorClickListener;
- return this;
- }
-
- public static void addSticker(Context context, Sticker sticker) {
- StickerLayout.addSticker(context, sticker);
- }
-
- public static ArrayList getSticker(Context context) {
- return StickerLayout.getStickers(context);
- }
-
- public static void clearSticker(Context context) {
- StickerLayout.clearSticker(context);
- }
-
- public static SpannableStringBuilder convertFromTextToEmoji(Context context, String text) {
- return StickerLayout.convertFromTextToEmoji(context, text);
- }
-
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/KeyboardImpl.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/KeyboardImpl.java
deleted file mode 100644
index ad17b49..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/KeyboardImpl.java
+++ /dev/null
@@ -1,203 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard;
-
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.Rect;
-import android.os.Handler;
-import android.text.Spanned;
-import android.text.style.ImageSpan;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
-import android.view.WindowManager;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.LinearLayout;
-
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnDeleteClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemEmoticonClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnKeyDownListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnKeyImeChangeListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.utils.CacheUtils;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.ListenerEditText;
-
-/**
- * Created by HOANG ANH TUAN on 7/5/2017.
- */
-
-class KeyboardImpl implements Keyboard, OnItemEmoticonClickListener, OnDeleteClickListener {
-
- private int keyboardHeight = 0;// chiều cao của bàn phím
- private int temHeight = 0;
-
- private KeyboardLayout keyboardLayout;// layout bàn phím
- private View root;// view cha
- private ListenerEditText editText;
- private Activity context;
-
- private OnKeyDownListener onKeyDownListener;
-
- KeyboardImpl(KeyboardBuilder builder) {
- this.keyboardLayout = builder.keyboardLayout;
- this.root = builder.root;
- this.editText = builder.editText;
- this.context = builder.context;
- this.onKeyDownListener = builder.onKeyDownListener;
-
- intData();
-
- this.keyboardLayout.setOnItemStickerClickListener(builder.onItemStickerClickListener);
- this.keyboardLayout.setOnItemEmoticonClickListener(this);
- this.keyboardLayout.setOnDeleteClickListener(this);
- this.keyboardLayout.setOnShopClickListener(builder.onShopClickListener);
- this.keyboardLayout.setOnItemPhotoClickListener(builder.onItemPhotoClickListener);
- this.keyboardLayout.setOnItemColorClickListener(builder.onItemColorClickListener);
-
- setOnShowKeyboardDefault();
- }
-
- private void intData() {
- temHeight = getTemHeight();
- keyboardHeight = getHeight();
-
- this.context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
- keyboardLayout.setVisibility(View.GONE);
- }
-
- private void setOnShowKeyboardDefault() {
- showKeyboardNomal();
- root.getViewTreeObserver().addOnGlobalLayoutListener(
- new ViewTreeObserver.OnGlobalLayoutListener() {
-
- @Override
- public void onGlobalLayout() {
- Rect r = new Rect();
- root.getWindowVisibleDisplayFrame(r);
-
- int screenHeight = root.getRootView().getHeight();
- int heightDifference = screenHeight - (r.bottom);
- if (heightDifference < 200 && heightDifference > temHeight)
- temHeight = heightDifference;
- if (heightDifference > 200 && heightDifference >= keyboardHeight) {
- if (heightDifference > keyboardHeight) {
- changeKeyboardHeight(heightDifference);
- context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
- } else {
- setHeightLayout();
- context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
- keyboardLayout.setVisibility(View.VISIBLE);
- }
- }
- }
- });
- editText.setKeyImeChangeListener(new OnKeyImeChangeListener() {
- @Override
- public boolean onKeyImeChanged(int keyCode, KeyEvent event) {
- if (keyboardLayout.getVisibility() == View.VISIBLE) {
- hideAllKeyboard();
- if (onKeyDownListener != null) onKeyDownListener.onKeyDownCLicked();
- return true;
- }
- return false;
- }
- });
- }
-
- private void changeKeyboardHeight(int height) {
- keyboardHeight = height;
- cache();
- setHeightLayout();
- }
-
- private void setHeightLayout() {
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, keyboardHeight - temHeight);
- keyboardLayout.setLayoutParams(params);
- }
-
- private void showKeyboardNomal() {
- if (editText == null) return;
- editText.requestFocus();
- InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
- }
-
- private void hideKeyboardNomal() {
- if (editText == null) return;
- InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
- }
-
- private int getHeight() {
- return CacheUtils.getData(context, R.string.app_name, "keyboardHeight", 0);
- }
-
- private int getTemHeight() {
- return CacheUtils.getData(context, R.string.app_name, "temHeight", 0);
- }
-
- private void cache() {
- CacheUtils.getData(context, R.string.app_name, "keyboardHeight", keyboardHeight);
- CacheUtils.getData(context, R.string.app_name, "temHeight", temHeight);
- }
-
- @Override
- public void hideAllKeyboard() {
- hideKeyboardNomal();
- keyboardLayout.setVisibility(View.GONE);
- }
-
- @Override
- public void showKeyboard(KeyboardType type) {
- if (type == KeyboardType.NOMAL) {
- showNomal();
- } else {
- showEmoticons(type);
- }
- }
-
- @Override
- public void updateSticker() {
- keyboardLayout.updateStiker();
- }
-
- @Override
- public void onItemEmoticonClicked(ImageSpan emoji) {
- int start = editText.getSelectionStart();
- int end = editText.getSelectionEnd();
- editText.getEditableText().replace(start, end, emoji.getSource());
- editText.getEditableText().setSpan(emoji, start, start + emoji.getSource().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
-
- @Override
- public void onDeleteClicked() {
- KeyEvent event = new KeyEvent(0, 0, 0, KeyEvent.KEYCODE_DEL, 0, 0, 0, 0, KeyEvent.KEYCODE_ENDCALL);
- editText.dispatchKeyEvent(event);
- }
-
- private void showNomal() {
- showKeyboardNomal();
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- keyboardLayout.setVisibility(View.VISIBLE);
- }
- }, 400);
- }
-
- private void showEmoticons(KeyboardType type) {
- hideKeyboardNomal();
- keyboardLayout.setVisibility(View.VISIBLE);
- switch (type) {
- case COLOR:
- keyboardLayout.showColor();
- break;
- case STICKER:
- keyboardLayout.showSticker();
- break;
- case PHOTO:
- keyboardLayout.showPhoto();
- break;
- }
- }
-
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/KeyboardLayout.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/KeyboardLayout.java
deleted file mode 100644
index 01cbd84..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/KeyboardLayout.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.RelativeLayout;
-
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnDeleteClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemColorClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemEmoticonClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemPhotoClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemStickerClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnShopClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.ColorLayout;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.PhotoLayout;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.StickerLayout;
-
-/**
- * Created by HOANG ANH TUAN on 7/5/2017.
- */
-
-public class KeyboardLayout extends RelativeLayout {
-
- private StickerLayout stickerLayout;
- private PhotoLayout photoLayout;
- private ColorLayout colorLayout;
-
- public KeyboardLayout(Context context) {
- super(context);
- addKeyboard();
- }
-
- public KeyboardLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- addKeyboard();
- }
-
- public KeyboardLayout(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- addKeyboard();
- }
-
- private void addKeyboard() {
- stickerLayout = new StickerLayout(getContext());
- photoLayout = new PhotoLayout(getContext());
- colorLayout = new ColorLayout(getContext());
-
- addView(colorLayout, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
- addView(photoLayout, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
- addView(stickerLayout, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
-
- stickerLayout.setVisibility(GONE);
- photoLayout.setVisibility(GONE);
- colorLayout.setVisibility(GONE);
- }
-
-
- public void showSticker() {
- stickerLayout.executeSticker();
- photoLayout.setVisibility(GONE);
- colorLayout.setVisibility(GONE);
- }
-
-
- public void showPhoto() {
- photoLayout.executePhoto();
- stickerLayout.setVisibility(GONE);
- colorLayout.setVisibility(GONE);
- }
-
-
- public void showColor() {
- colorLayout.executeColor();
- photoLayout.setVisibility(GONE);
- stickerLayout.setVisibility(GONE);
- }
-
- public void updateStiker(){
- stickerLayout.updateSticker();
- }
-
- public void setOnDeleteClickListener(OnDeleteClickListener onDeleteClickListener) {
- stickerLayout.setOnDeleteClickListener(onDeleteClickListener);
- }
-
- public void setOnShopClickListener(OnShopClickListener onShopClickListener) {
- stickerLayout.setOnShopClickListener(onShopClickListener);
- }
-
- public void setOnItemEmoticonClickListener(OnItemEmoticonClickListener onItemEmoticonClickListener) {
- stickerLayout.setOnItemEmoticonClickListener(onItemEmoticonClickListener);
- }
-
- public void setOnItemStickerClickListener(OnItemStickerClickListener onItemStickerClickListener) {
- stickerLayout.setOnItemStickerClickListener(onItemStickerClickListener);
- }
-
- public void setOnItemPhotoClickListener(OnItemPhotoClickListener onItemPhotoClickListener) {
- photoLayout.setOnItemPhotoClickListener(onItemPhotoClickListener);
- }
-
- public void setOnItemColorClickListener(OnItemColorClickListener onItemColorClickListener) {
- colorLayout.setOnItemColorClickListener(onItemColorClickListener);
- }
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/KeyboardType.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/KeyboardType.java
deleted file mode 100644
index 7f7fc40..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/KeyboardType.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard;
-
-/**
- * Created by HOANG ANH TUAN on 7/5/2017.
- */
-
-public enum KeyboardType {
- NOMAL,STICKER,PHOTO,COLOR,NOTHING
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnDeleteClickListener.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnDeleteClickListener.java
deleted file mode 100644
index a6fefee..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnDeleteClickListener.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.callback;
-
-/**
- * Created by HOANG ANH TUAN on 6/29/2017.
- */
-
-public interface OnDeleteClickListener {
- void onDeleteClicked();
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnItemEmoticonClickListener.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnItemEmoticonClickListener.java
deleted file mode 100644
index 0446bf7..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnItemEmoticonClickListener.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.callback;
-
-import android.text.style.ImageSpan;
-
-/**
- * Created by HOANG ANH TUAN on 6/29/2017.
- */
-
-public interface OnItemEmoticonClickListener {
- void onItemEmoticonClicked(ImageSpan emoji);
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnItemPhotoClickListener.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnItemPhotoClickListener.java
deleted file mode 100644
index 39bdee1..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnItemPhotoClickListener.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.callback;
-
-/**
- * Created by HOANG ANH TUAN on 6/28/2017.
- */
-
-public interface OnItemPhotoClickListener {
- void onItemPhotoClicked(String url);
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnItemStickerClickListener.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnItemStickerClickListener.java
deleted file mode 100644
index ac6257a..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnItemStickerClickListener.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.callback;
-
-/**
- * Created by HOANG ANH TUAN on 6/28/2017.
- */
-
-public interface OnItemStickerClickListener {
- void onItemStickerClicked(String url);
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnKeyImeChangeListener.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnKeyImeChangeListener.java
deleted file mode 100644
index f281801..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnKeyImeChangeListener.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.callback;
-
-import android.view.KeyEvent;
-
-/**
- * Created by HOANG ANH TUAN on 7/5/2017.
- */
-
-public interface OnKeyImeChangeListener {
- boolean onKeyImeChanged(int keyCode, KeyEvent event);
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnShopClickListener.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnShopClickListener.java
deleted file mode 100644
index a8bd77b..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/callback/OnShopClickListener.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.callback;
-
-/**
- * Created by HOANG ANH TUAN on 6/29/2017.
- */
-
-public interface OnShopClickListener {
- void onShopClicked();
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/utils/CacheUtils.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/utils/CacheUtils.java
deleted file mode 100644
index b9aa6ac..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/utils/CacheUtils.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.utils;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.support.annotation.StringRes;
-
-
-/*
- * lưu trữ liệu tại local
- * Created by HoangAnhTuan on 6/21/2017.
- */
-
-public class CacheUtils {
-
- /**
- * lưu dữ liệu dang string
- *
- * @param context context
- * @param appName tên ứng dụng
- * @param key key dữ liệu cần lưu
- * @param value dữ liệu lưu
- */
- public static void saveData(Context context, @StringRes int appName, String key, String value) {
- SharedPreferences sharedPreferences = context.getSharedPreferences(context.getString(appName), Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sharedPreferences.edit();
- editor.putString(key, value);
- editor.commit();
- }
-
- /**
- * lưu dữ liệu dang float
- *
- * @param context context
- * @param appName tên ứng dụng
- * @param key key dữ liệu cần lưu
- * @param value dữ liệu lưu
- */
- public static void saveData(Context context, @StringRes int appName, String key, float value) {
- SharedPreferences sharedPreferences = context.getSharedPreferences(context.getString(appName), Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sharedPreferences.edit();
- editor.putFloat(key, value);
- editor.commit();
- }
-
- /**
- * lưu dữ liệu dang int
- *
- * @param context context
- * @param appName tên ứng dụng
- * @param key key dữ liệu cần lưu
- * @param value dữ liệu lưu
- */
- public static void saveData(Context context, @StringRes int appName, String key, int value) {
- SharedPreferences sharedPreferences = context.getSharedPreferences(context.getString(appName), Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sharedPreferences.edit();
- editor.putInt(key, value);
- editor.commit();
- }
-
- /**
- * lưu dữ liệu dang long
- *
- * @param context context
- * @param appName tên ứng dụng
- * @param key key dữ liệu cần lưu
- * @param value dữ liệu lưu
- */
- public static void saveData(Context context, @StringRes int appName, String key, long value) {
- SharedPreferences sharedPreferences = context.getSharedPreferences(context.getString(appName), Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sharedPreferences.edit();
- editor.putLong(key, value);
- editor.commit();
- }
-
- /**
- * lưu dữ liệu dang boolean
- *
- * @param context context
- * @param appName tên ứng dụng
- * @param key key dữ liệu cần lưu
- * @param value dữ liệu lưu
- */
- public static void saveData(Context context, @StringRes int appName, String key, boolean value) {
- SharedPreferences sharedPreferences = context.getSharedPreferences(context.getString(appName), Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sharedPreferences.edit();
- editor.putBoolean(key, value);
- editor.commit();
- }
-
- /**
- * lấy dữ liệu dạng string ra
- *
- * @param context context
- * @param appName tên app
- * @param key key dữ liệu cần lưu
- * @param value dữ liệu sẽ được thay thế, nếu không có dữ liệu
- * @return dữ liệu trả về
- */
- public static String getData(Context context, @StringRes int appName, String key, String value) {
- SharedPreferences sharedPreferences = context.getSharedPreferences(context.getString(appName), Context.MODE_PRIVATE);
- return sharedPreferences.getString(key, value);
- }
-
- /**
- * lấy dữ liệu dạng string ra
- *
- * @param context context
- * @param appName tên app
- * @param key key dữ liệu cần lưu
- * @param value dữ liệu sẽ được thay thế, nếu không có dữ liệu
- * @return dữ liệu trả về
- */
- public static float getData(Context context, @StringRes int appName, String key, float value) {
- SharedPreferences sharedPreferences = context.getSharedPreferences(context.getString(appName), Context.MODE_PRIVATE);
- return sharedPreferences.getFloat(key, value);
- }
-
- /**
- * lấy dữ liệu dạng string ra
- *
- * @param context context
- * @param appName tên app
- * @param key key dữ liệu cần lưu
- * @param value dữ liệu sẽ được thay thế, nếu không có dữ liệu
- * @return dữ liệu trả về
- */
- public static int getData(Context context, @StringRes int appName, String key, int value) {
- SharedPreferences sharedPreferences = context.getSharedPreferences(context.getString(appName), Context.MODE_PRIVATE);
- return sharedPreferences.getInt(key, value);
- }
-
- /**
- * lấy dữ liệu dạng string ra
- *
- * @param context context
- * @param appName tên app
- * @param key key dữ liệu cần lưu
- * @param value dữ liệu sẽ được thay thế, nếu không có dữ liệu
- * @return dữ liệu trả về
- */
- public static long getData(Context context, @StringRes int appName, String key, long value) {
- SharedPreferences sharedPreferences = context.getSharedPreferences(context.getString(appName), Context.MODE_PRIVATE);
- return sharedPreferences.getLong(key, value);
- }
-
- /**
- * lấy dữ liệu dạng string ra
- *
- * @param context context
- * @param appName tên app
- * @param key key dữ liệu cần lưu
- * @param value dữ liệu sẽ được thay thế, nếu không có dữ liệu
- * @return dữ liệu trả về
- */
- public static boolean getData(Context context, @StringRes int appName, String key, boolean value) {
- SharedPreferences sharedPreferences = context.getSharedPreferences(context.getString(appName), Context.MODE_PRIVATE);
- return sharedPreferences.getBoolean(key, value);
- }
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/utils/callback/OnPictureRead.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/utils/callback/OnPictureRead.java
deleted file mode 100644
index 5f557b4..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/utils/callback/OnPictureRead.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.utils.callback;
-
-/**
- * Created by HoangAnhTuan on 6/19/2017.
- */
-
-public interface OnPictureRead {
- void pictureRead(Object... objects);
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/ColorLayout.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/ColorLayout.java
deleted file mode 100644
index 90b207e..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/ColorLayout.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view;
-
-import android.app.Activity;
-import android.content.Context;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.StaggeredGridLayoutManager;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.RelativeLayout;
-
-import com.hoanganhtuan95ptit.awesomekeyboard.R;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemColorClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.adapter.ColorAdapter;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnColorClickListener;
-
-/**
- * Created by HOANG ANH TUAN on 6/28/2017.
- */
-
-public class ColorLayout extends RelativeLayout implements OnColorClickListener {
-
- private OnItemColorClickListener onItemColorClickListener;
-
- public ColorLayout(Context context) {
- super(context);
- initView();
- }
-
- private void initView() {
- setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
- LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View view = inflater.inflate(R.layout.layout_photo, this, false);
- initRecyclerView(view);
- this.addView(view);
- }
-
- private void initRecyclerView(View view) {
- RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
- ColorAdapter colorAdapter = new ColorAdapter((Activity) this.getContext());
- colorAdapter.setOnColorClickListener(this);
- recyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL));
- recyclerView.setAdapter(colorAdapter);
- addData(colorAdapter);
- }
-
- public void executeColor(){
- this.setVisibility(VISIBLE);
- }
-
- private void addData(ColorAdapter colorAdapter) {
- colorAdapter.add("#1ecef3");
- colorAdapter.add("#12cf13");
- colorAdapter.add("#43bec5");
- colorAdapter.add("#67b967");
- colorAdapter.add("#0084fd");
- colorAdapter.add("#6599cb");
- colorAdapter.add("#7547ff");
- colorAdapter.add("#a695c9");
- colorAdapter.add("#d4a88b");
- colorAdapter.add("#d496bb");
- colorAdapter.add("#e58684");
- colorAdapter.add("#f83c4b");
- colorAdapter.add("#fd5ca2");
- colorAdapter.add("#fdc300");
- colorAdapter.add("#ff7f28");
- }
-
- public void setOnItemColorClickListener(OnItemColorClickListener onItemColorClickListener) {
- this.onItemColorClickListener = onItemColorClickListener;
- }
-
- @Override
- public void onColorClicked(String color) {
- if (onItemColorClickListener != null) onItemColorClickListener.onItemColorClicked(color);
- }
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/ListenerEditText.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/ListenerEditText.java
deleted file mode 100644
index 95034d2..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/ListenerEditText.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view;
-
-import android.content.Context;
-import android.support.v7.widget.AppCompatEditText;
-import android.util.AttributeSet;
-import android.view.KeyEvent;
-
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnKeyImeChangeListener;
-
-/**
- * Created by HOANG ANH TUAN on 7/6/2017.
- */
-
-public class ListenerEditText extends AppCompatEditText {
-
- private OnKeyImeChangeListener onKeyIme;
-
- public ListenerEditText(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public void setKeyImeChangeListener(OnKeyImeChangeListener onKeyIme) {
- this.onKeyIme = onKeyIme;
- }
-
- @Override
- public boolean onKeyPreIme(int keyCode, KeyEvent event) {
- if (onKeyIme != null) {
- return onKeyIme.onKeyImeChanged(keyCode, event);
- }
- return false;
- }
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/PhotoLayout.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/PhotoLayout.java
deleted file mode 100644
index 06020f6..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/PhotoLayout.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view;
-
-import android.app.Activity;
-import android.content.Context;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.RelativeLayout;
-
-import com.hoanganhtuan95ptit.awesomekeyboard.R;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemPhotoClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.utils.FileUtils;
-import com.hoanganhtuan95ptit.awesomekeyboard.utils.callback.OnPictureRead;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.adapter.PhotoAdapter;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnPhotoClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.model.Photo;
-
-
-/**
- * Created by HOANG ANH TUAN on 6/28/2017.
- */
-
-public class PhotoLayout extends RelativeLayout implements OnPhotoClickListener,OnPictureRead {
-
- private RecyclerView recyclerView;
- private PhotoAdapter photoAdapter;
- private boolean readFile=false;
-
- private OnItemPhotoClickListener onItemPhotoClickListener;
-
- public PhotoLayout(Context context) {
- super(context);
- initView();
- }
-
- private void initView() {
- setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
- LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View view = inflater.inflate(R.layout.layout_photo, this, false);
- initRecyclerView(view);
- this.addView(view);
- }
-
- private void initRecyclerView(View view) {
- recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
- photoAdapter = new PhotoAdapter((Activity) this.getContext());
- photoAdapter.setOnPhotoClickListener(this);
- recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
- recyclerView.setAdapter(photoAdapter);
- recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
- @Override
- public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
- super.onScrollStateChanged(recyclerView, newState);
- photoAdapter.unseleckAll();
- }
- });
- }
-
- public void executePhoto() {
- this.setVisibility(VISIBLE);
- if (!readFile) {
- readFile=true;
- FileUtils.readAllPicture((Activity) getContext(),this);
- }
- }
-
-
- public void setOnItemPhotoClickListener(OnItemPhotoClickListener onItemPhotoClickListener) {
- this.onItemPhotoClickListener = onItemPhotoClickListener;
- }
-
- @Override
- public void pictureRead(Object... objects) {
- Photo photo = new Photo();
- photo.setSelect(false);
- photo.setTime((Long) objects[1]);
- photo.setUrl((String) objects[0]);
- photoAdapter.add(photo);
- recyclerView.scrollToPosition(0);
- }
-
- @Override
- public void onPhotoClicked(String url) {
- if(onItemPhotoClickListener!=null)onItemPhotoClickListener.onItemPhotoClicked(url);
- }
-
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/StickerLayout.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/StickerLayout.java
deleted file mode 100644
index 243a890..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/StickerLayout.java
+++ /dev/null
@@ -1,615 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.res.AssetManager;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentStatePagerAdapter;
-import android.support.v4.view.ViewPager;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.text.Html;
-import android.text.SpannableStringBuilder;
-import android.text.style.ImageSpan;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.RelativeLayout;
-
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-import com.hoanganhtuan95ptit.awesomekeyboard.R;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnDeleteClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemEmoticonClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnItemStickerClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnShopClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.utils.CacheUtils;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.adapter.TitleAdapter;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnDeleteListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnEmoticonClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnStickerClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnTitleClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.fragment.EmoticonsFragment;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.fragment.StickerFragment;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.model.Sticker;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by HOANG ANH TUAN on 6/28/2017.
- */
-
-public class StickerLayout extends RelativeLayout implements OnTitleClickListener,
- OnDeleteListener,
- View.OnClickListener,
- OnEmoticonClickListener,
- OnStickerClickListener {
-
- private RecyclerView recyclerView;
- private ViewPager viewPager;
- private ImageView imgShop;
-
- private ArrayList stickers;
- private TitleAdapter titleAdapter;
-
- private OnDeleteClickListener onDeleteClickListener;
- private OnShopClickListener onShopClickListener;
- private OnItemEmoticonClickListener onItemEmoticonClickListener;
- private OnItemStickerClickListener onItemStickerClickListener;
-
- public StickerLayout(Context context) {
- super(context);
- initView();
- }
-
- private void initView() {
- setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
- LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View view = inflater.inflate(R.layout.layout_sticker, this, false);
- mappingView(view);
- this.addView(view);
- }
-
- private void mappingView(View view) {
- recyclerView = (RecyclerView) view.findViewById(R.id.recycler_title);
- viewPager = (ViewPager) view.findViewById(R.id.view_pager_sticker);
- imgShop = (ImageView) view.findViewById(R.id.img_shop);
- initData();
- setOnclick();
- }
-
- private void setOnclick() {
- imgShop.setOnClickListener(this);
- }
-
- private void initData() {
- stickers = getStickers(getContext());
- initViewpager();
- initRecyclerView();
- }
-
- private void initRecyclerView() {
- titleAdapter = new TitleAdapter((Activity) getContext());
- titleAdapter.setOnTitleClickListener(this);
- recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
- recyclerView.setAdapter(titleAdapter);
- recyclerView.setHasFixedSize(true);
-
- titleAdapter.add("asset:///emoticons/16.png");
- for (int i = 0; i < stickers.size(); i++) {
- titleAdapter.add(stickers.get(i).getImage());
- }
- }
-
- private void initViewpager() {
- viewPager.setAdapter(new MyPagerAdapter(((FragmentActivity) getContext()).getSupportFragmentManager()));
- viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- }
-
- @Override
- public void onPageSelected(int position) {
- titleAdapter.setSelect(position);
- recyclerView.scrollToPosition(position);
- }
-
- @Override
- public void onPageScrollStateChanged(int state) {
- }
- });
- }
-
- public void executeSticker() {
- this.setVisibility(VISIBLE);
- }
-
- @Override
- public void onClick(View v) {
- if (v.getId() == R.id.img_shop && onShopClickListener != null) {
- onShopClickListener.onShopClicked();
- }
- }
-
- @Override
- public void onDeleteClicked() {
- if (onDeleteClickListener != null) {
- onDeleteClickListener.onDeleteClicked();
- }
- }
-
- @Override
- public void onTitleClicked(int position) {
- viewPager.setCurrentItem(position);
- titleAdapter.setSelect(position);
- }
-
- @Override
- public void onStickerClicked(String url) {
- if (onItemStickerClickListener != null) {
- onItemStickerClickListener.onItemStickerClicked(url);
- }
- }
-
- @Override
- public void onEmoticonsClicked(String assetUrl) {
- if (onItemEmoticonClickListener != null) {
- onItemEmoticonClickListener.onItemEmoticonClicked(getImagSpan(getContext(), assetUrl));
- }
- }
-
- public void setOnDeleteClickListener(OnDeleteClickListener onDeleteClickListener) {
- this.onDeleteClickListener = onDeleteClickListener;
- }
-
- public void setOnShopClickListener(OnShopClickListener onShopClickListener) {
- this.onShopClickListener = onShopClickListener;
- }
-
- public void setOnItemEmoticonClickListener(OnItemEmoticonClickListener onItemEmoticonClickListener) {
- this.onItemEmoticonClickListener = onItemEmoticonClickListener;
- }
-
- public void setOnItemStickerClickListener(OnItemStickerClickListener onItemStickerClickListener) {
- this.onItemStickerClickListener = onItemStickerClickListener;
- }
-
- public void updateSticker() {
- initData();
- }
-
- private class MyPagerAdapter extends FragmentStatePagerAdapter {
-
- MyPagerAdapter(FragmentManager fm) {
- super(fm);
- }
-
- @Override
- public Fragment getItem(int position) {
- if (position == 0)
- return EmoticonsFragment.initialize(StickerLayout.this, StickerLayout.this);
- return StickerFragment.initialize(stickers.get(position - 1).getImages(), StickerLayout.this);
- }
-
- @Override
- public int getCount() {
- return stickers.size() + 1;
- }
- }
-
- private static ImageSpan getImagSpan(Context context, String url) {
- Drawable d = new BitmapDrawable(context.getResources(), getImage(context, url));
- d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
- return new ImageSpan(d, convertFromTextToCode(url), ImageSpan.ALIGN_BASELINE);
- }
-
- private static SpannableStringBuilder convert(SpannableStringBuilder spannableStringBuilder, String code, Context context, String url) {
- StringBuilder stringBuilder = new StringBuilder(spannableStringBuilder.toString());
- int position = stringBuilder.indexOf(code);
- if (position >= 0) {
- spannableStringBuilder.replace(position, position + code.length(), Html.fromHtml("
", getImageGetter(context, url), null));
- spannableStringBuilder = convert(spannableStringBuilder, code, context, url);
- }
- return spannableStringBuilder;
- }
-
- private static Html.ImageGetter getImageGetter(final Context context, final String url) {
- return new Html.ImageGetter() {
- public Drawable getDrawable(String source) {
- Drawable d = new BitmapDrawable(context.getResources(), getImage(context, url));
- d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
- return d;
- }
- };
- }
-
- private static Bitmap getImage(Context context, String path) {
- AssetManager mngr = context.getAssets();
- InputStream in = null;
- try {
- in = mngr.open("emoticons/" + path);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return BitmapFactory.decodeStream(in, null, null);
- }
-
- private static String convertFromTextToCode(String url) {
- switch (url) {
- case "1.png":
- url = ":,)";
- break;
- case "2.png":
- url = ":')";
- break;
- case "3.png":
- url = ":)";
- break;
- case "4.png":
- url = ":3";
- break;
- case "5.png":
- url = ":'(";
- break;
- case "6.png":
- url = ":D";
- break;
- case "7.png":
- url = ":|";
- break;
- case "8.png":
- url = ":/";
- break;
- case "9.png":
- url = ":B";
- break;
- case "10.png":
- url = ":/)";
- break;
- case "11.png":
- url = "f:|";
- break;
- case "12.png":
- url = ":/B";
- break;
- case "13.png":
- url = "p:|";
- break;
- case "14.png":
- url = ":p";
- break;
- case "15.png":
- url = ":b";
- break;
- case "16.png":
- url = ":))";
- break;
- case "17.png":
- url = ":|)";
- break;
- case "18.png":
- url = ":-B";
- break;
- case "19.png":
- url = ":'))";
- break;
- case "20.png":
- url = ":*|";
- break;
- case "21.png":
- url = ">:)";
- break;
- case "22.png":
- url = ":*";
- break;
- case "23.png":
- url = ">:|";
- break;
- case "24.png":
- url = "<:(";
- break;
- case "25.png":
- url = "B:(";
- break;
- case "26.png":
- url = "=(";
- break;
- case "27.png":
- url = "':(";
- break;
- case "28.png":
- url = "b)";
- break;
- case "29.png":
- url = ":zz";
- break;
- case "30.png":
- url = ":=";
- break;
- case "31.png":
- url = "~.:zz";
- break;
- case "32.png":
- url = ">:'|";
- break;
- case "33.png":
- url = ":oD";
- break;
- case "34.png":
- url = ":''";
- break;
- case "35.png":
- url = "8D";
- break;
- case "36.png":
- url = ":o";
- break;
- case "37png":
- url = ":n.";
- break;
- case "38.png":
- url = ":9";
- break;
- case "39.png":
- url = "8.";
- break;
- case "40.png":
- url = ";.";
- break;
- case "41.png":
- url = ":?";
- break;
- case "42.png":
- url = "K:.";
- break;
- case "43.png":
- url = "._|";
- break;
- case "44.png":
- url = ".|";
- break;
- case "45.png":
- url = "::)";
- break;
- case "46.png":
- url = "Spiderman";
- break;
- case "47.png":
- url = ";))";
- break;
- case "48.png":
- url = ";((";
- break;
- case "49.png":
- url = ">B:";
- break;
- case "50.png":
- url = ":'C";
- break;
- case "51.png":
- url = ":8";
- break;
- case "52.png":
- url = "B(";
- break;
- case "53.png":
- url = ":=`";
- break;
- case "54.png":
- url = ":=D";
- break;
- }
- return url;
- }
-
- public static ArrayList getStickers(Context context) {
- String data = CacheUtils.getData(context, R.string.app_name, "STICKER", "");
- ArrayList stickers = new Gson().fromJson(data, new TypeToken>() {
- }.getType());
- if (stickers == null) stickers = new ArrayList<>();
- return stickers;
- }
-
- public static void clearSticker(Context context) {
- CacheUtils.saveData(context, R.string.app_name, "STICKER", new Gson().toJson(new ArrayList<>()));
- }
-
- public static SpannableStringBuilder convertFromTextToEmoji(Context context, String text) {
- SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text);
- for (int i = 54; i >= 1; i--) {
- String url = i + ".png";
- spannableStringBuilder = convert(spannableStringBuilder, convertFromTextToCode(url), context, url);
- }
- return spannableStringBuilder;
- }
-
- public static void addSticker(Context context, Sticker sticker) {
- //get data
- ArrayList stickers = getStickers(context);
- //add data
- stickers.add(stickers.size(), sticker);
- // save data
- CacheUtils.saveData(context, R.string.app_name, "STICKER", new Gson().toJson(stickers));
- }
-
-
-}
-
-// public String getImageSpanByCode(String code){
-// String url = null;
-// switch (code) {
-// case ":,)":
-// url = "1.png";
-// break;
-// case ":')":
-// url = "2.png";
-// break;
-// case ":)":
-// url = "3.png";
-// break;
-// case ":3":
-// url = "4.png";
-// break;
-// case ":'(":
-// url = "5.png";
-// break;
-// case ":D":
-// url = "6.png";
-// break;
-// case ":|":
-// url = "7.png";
-// break;
-// case ":/":
-// url = "8.png";
-// break;
-// case ":B":
-// url = "9.png";
-// break;
-// case ":/)":
-// url = "10.png";
-// break;
-// case "f:|":
-// url = "11.png";
-// break;
-// case ":/B":
-// url = "12.png";
-// break;
-// case "p:|":
-// url = "13.png";
-// break;
-// case ":p":
-// url = "14.png";
-// break;
-// case ":b":
-// url = "15.png";
-// break;
-// case ":))":
-// url = "16.png";
-// break;
-// case ":|)":
-// url = "17.png";
-// break;
-// case ":-B":
-// url = "18.png";
-// break;
-// case ":'))":
-// url = "19.png";
-// break;
-// case ":*|":
-// url = "20.png";
-// break;
-// case ">:)":
-// url = "21.png";
-// break;
-// case ":*":
-// url = "22.png";
-// break;
-// case ">:|":
-// url = "23.png";
-// break;
-// case "<:(":
-// url = "24.png";
-// break;
-// case "B:(":
-// url = "25.png";
-// break;
-// case "=(":
-// url = "26.png";
-// break;
-// case "':(":
-// url = "27.png";
-// break;
-// case "b)":
-// url = "28.png";
-// break;
-// case ":zz":
-// url = "29.png";
-// break;
-// case ":=":
-// url = "30.png";
-// break;
-// case "~.:zz":
-// url = "31.png";
-// break;
-// case ">:'|":
-// url = "32.png";
-// break;
-// case ":oD":
-// url = "33.png";
-// break;
-// case ":''":
-// url = "34.png";
-// break;
-// case "8D":
-// url = "35.png";
-// break;
-// case ":o":
-// url = "36.png";
-// break;
-// case ":n.":
-// url = "37png";
-// break;
-// case ":9":
-// url = "38.png";
-// break;
-// case "8.":
-// url = "39.png";
-// break;
-// case ";.":
-// url = "40.png";
-// break;
-// case ":?":
-// url = "41.png";
-// break;
-// case "K:.":
-// url = "42.png";
-// break;
-// case "._|":
-// url = "43.png";
-// break;
-// case ".|":
-// url = "44.png";
-// break;
-// case "::)":
-// url = "45.png";
-// break;
-// case "Spiderman":
-// url = "46.png";
-// break;
-// case ";))":
-// url = "47.png";
-// break;
-// case ";((":
-// url = "48.png";
-// break;
-// case ">B:":
-// url = "49.png";
-// break;
-// case ":'C":
-// url = "50.png";
-// break;
-// case ":8":
-// url = "51.png";
-// break;
-// case "B(":
-// url = "52.png";
-// break;
-// case ":=`":
-// url = "53.png";
-// break;
-// case ":=D":
-// url = "54.png";
-// break;
-// }
-// }
-
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/PhotoAdapter.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/PhotoAdapter.java
deleted file mode 100644
index 8c4447c..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/PhotoAdapter.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.adapter;
-
-import android.app.Activity;
-import android.graphics.Color;
-import android.net.Uri;
-import android.support.v7.widget.RecyclerView;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-
-import com.facebook.drawee.backends.pipeline.Fresco;
-import com.facebook.drawee.drawable.ScalingUtils;
-import com.facebook.drawee.interfaces.DraweeController;
-import com.facebook.drawee.view.SimpleDraweeView;
-import com.facebook.imagepipeline.common.ResizeOptions;
-import com.facebook.imagepipeline.request.ImageRequest;
-import com.facebook.imagepipeline.request.ImageRequestBuilder;
-import com.hoanganhtuan95ptit.awesomekeyboard.R;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnPhotoClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.model.Photo;
-
-import java.util.Collections;
-import java.util.Comparator;
-
-import jp.wasabeef.blurry.Blurry;
-
-/**
- * Created by DuyPC on 5/23/2017.
- */
-
-public class PhotoAdapter extends BaseAdapter {
-
- private OnPhotoClickListener onPhotoClickListener;
-
- public PhotoAdapter(Activity activity) {
- super(activity);
- }
-
- @Override
- protected void sort() {
- super.sort();
- Collections.sort(getDatas(), new Comparator() {
- @Override
- public int compare(Photo o1, Photo o2) {
- if (o1.getTime() > o2.getTime()) return -1;
- if (o1.getTime() < o2.getTime()) return 1;
- return 0;
- }
- });
- }
-
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- int padding = (int) activity.getResources().getDimension(R.dimen.itemPhotoPadding);
- View v = inflater.inflate(R.layout.item_photo, parent, false);
- ViewHolder viewHolder = new ViewHolder(v);
- viewHolder.imagePhoto.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP);
- viewHolder.rePhoto.setPadding(padding, padding, padding, padding);
- return viewHolder;
- }
-
- @Override
- public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
- final ViewHolder viewHolder = (ViewHolder) holder;
- final Photo photo = getDatas().get(position);
-
- // load anh
- Uri uri = Uri.parse("file://" + photo.getUrl());
- int width = 400, height = 400;
- ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
- .setResizeOptions(new ResizeOptions(width, height))
- .build();
- DraweeController controller = Fresco.newDraweeControllerBuilder()
- .setOldController(viewHolder.imagePhoto.getController())
- .setImageRequest(request)
- .build();
- viewHolder.imagePhoto.setController(controller);
-
- //blure anh
- if (!photo.isSelect()) {
- Blurry.delete(viewHolder.rePhoto);
- viewHolder.tvSend.setVisibility(View.GONE);
- } else {
- Blurry.with(activity)
- .radius(6)
- .sampling(6)
- .color(Color.argb(66, 255, 255, 255))
- .async()
- .animate(100)
- .onto(viewHolder.rePhoto);
- viewHolder.tvSend.setVisibility(View.VISIBLE);
- }
-
- viewHolder.imagePhoto.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (photo.isSelect()) {
- Blurry.delete(viewHolder.rePhoto);
- viewHolder.tvSend.setVisibility(View.GONE);
- photo.setSelect(false);
- } else {
- unseleckAll();
- Blurry.with(activity)
- .radius(6)
- .sampling(6)
- .color(Color.argb(66, 255, 255, 255))
- .async()
- .animate(100)
- .onto(viewHolder.rePhoto);
- viewHolder.tvSend.setVisibility(View.VISIBLE);
- photo.setSelect(true);
- }
- }
- });
- viewHolder.tvSend.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if(onPhotoClickListener!=null)onPhotoClickListener.onPhotoClicked(photo.getUrl());
- }
- });
- }
-
- private class ViewHolder extends RecyclerView.ViewHolder {
- SimpleDraweeView imagePhoto;
- TextView tvSend;
- RelativeLayout rePhoto;
-
- ViewHolder(View view) {
- super(view);
- imagePhoto = (SimpleDraweeView) view.findViewById(R.id.image_photo);
- tvSend = (TextView) view.findViewById(R.id.tv_send_photo);
- rePhoto = (RelativeLayout) view.findViewById(R.id.re_photo);
- }
- }
-
- public void unseleckAll(){
- for (int i = 0; i < getDatas().size(); i++) {
- if (getDatas().get(i).isSelect()) {
- getDatas().get(i).setSelect(false);
- notifyItemChanged(i);
- }
- }
- }
-
- public void setOnPhotoClickListener(OnPhotoClickListener onPhotoClickListener) {
- this.onPhotoClickListener = onPhotoClickListener;
- }
-
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/StickerAdapter.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/StickerAdapter.java
deleted file mode 100644
index 87b7ad3..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/StickerAdapter.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.adapter;
-
-import android.app.Activity;
-import android.net.Uri;
-import android.support.v7.widget.RecyclerView;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.facebook.drawee.drawable.ScalingUtils;
-import com.facebook.drawee.view.SimpleDraweeView;
-import com.hoanganhtuan95ptit.awesomekeyboard.R;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnStickerClickListener;
-
-/**
- * Created by DuyPC on 5/23/2017.
- */
-
-public class StickerAdapter extends BaseAdapter {
-
- private OnStickerClickListener onStickerClickListener;
-
- public StickerAdapter(Activity activity) {
- super(activity);
- }
-
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- int padding = (int) activity.getResources().getDimension(R.dimen.itemStickerPadding);
- View view = inflater.inflate(R.layout.item_sticker, parent, false);
- ViewHolder viewHolder=new ViewHolder(view);
- viewHolder.imagePicture.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER);
- viewHolder.imagePicture.setPadding(padding, padding, padding, padding);
- return viewHolder;
- }
-
- @Override
- public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
- final ViewHolder viewHolder = (ViewHolder) holder;
- Uri uri = Uri.parse(getDatas().get(position));
- viewHolder.imagePicture.setImageURI(uri);
- viewHolder.imagePicture.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (onStickerClickListener != null)
- onStickerClickListener.onStickerClicked(getDatas().get(viewHolder.getAdapterPosition()));
- }
- });
- }
-
- private class ViewHolder extends RecyclerView.ViewHolder {
- SimpleDraweeView imagePicture;
-
- ViewHolder(View view) {
- super(view);
- imagePicture = (SimpleDraweeView) view.findViewById(R.id.image_picture);
- }
- }
-
- public void setOnStickerClickListener(OnStickerClickListener onStickerClickListener) {
- this.onStickerClickListener = onStickerClickListener;
- }
-
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/TitleAdapter.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/TitleAdapter.java
deleted file mode 100644
index 2344e45..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/adapter/TitleAdapter.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.adapter;
-
-import android.app.Activity;
-import android.net.Uri;
-import android.support.v7.widget.RecyclerView;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.facebook.drawee.drawable.ScalingUtils;
-import com.facebook.drawee.view.SimpleDraweeView;
-import com.hoanganhtuan95ptit.awesomekeyboard.R;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnTitleClickListener;
-
-/**
- * Created by HOANG ANH TUAN on 6/28/2017.
- */
-
-public class TitleAdapter extends BaseAdapter {
-
- private OnTitleClickListener onTitleClickListener;
- private int select;
-
- public TitleAdapter(Activity activity) {
- super(activity);
- }
-
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- int padding = (int) activity.getResources().getDimension(R.dimen.itemTitlePadding);
- View view = inflater.inflate(R.layout.item_title, parent, false);
- ViewHolder viewHolder = new ViewHolder(view);
- viewHolder.imagePicture.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER);
- viewHolder.imagePicture.setPadding(padding, padding, padding, padding);
- return viewHolder;
- }
-
- @Override
- public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
- ViewHolder viewHolder = (ViewHolder) holder;
- String sticker = getDatas().get(position);
-
- if (this.select == position) viewHolder.imagePicture.setBackgroundColor(0xffe1e1e1);
- else viewHolder.imagePicture.setBackgroundColor(0xffffffff);
-
- Uri uri = Uri.parse(sticker);
- viewHolder.imagePicture.setImageURI(uri);
- viewHolder.imagePicture.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (onTitleClickListener != null)
- onTitleClickListener.onTitleClicked(holder.getAdapterPosition());
- }
- });
- }
-
- public void setSelect(int select) {
- int a = this.select;
- this.select = select;
- notifyItemChanged(a);
- notifyItemChanged(this.select);
- }
-
- private class ViewHolder extends RecyclerView.ViewHolder {
- SimpleDraweeView imagePicture;
-
- ViewHolder(View view) {
- super(view);
- imagePicture = (SimpleDraweeView) view.findViewById(R.id.image_picture);
- }
- }
-
- public void setOnTitleClickListener(OnTitleClickListener onTitleClickListener) {
- this.onTitleClickListener = onTitleClickListener;
- }
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnTitleClickListener.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnTitleClickListener.java
deleted file mode 100644
index edca873..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/callback/OnTitleClickListener.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.callback;
-
-/**
- * Created by HOANG ANH TUAN on 7/6/2017.
- */
-
-public interface OnTitleClickListener {
- void onTitleClicked(int position);
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/fragment/EmoticonsFragment.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/fragment/EmoticonsFragment.java
deleted file mode 100644
index f9633ec..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/fragment/EmoticonsFragment.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.fragment;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.StaggeredGridLayoutManager;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-
-import com.hoanganhtuan95ptit.awesomekeyboard.R;
-import com.hoanganhtuan95ptit.awesomekeyboard.callback.OnDeleteClickListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.adapter.EmoticonsAdapter;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnDeleteListener;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnEmoticonClickListener;
-
-import java.io.Serializable;
-
-
-/**
- * Created by HOANG ANH TUAN on 6/29/2017.
- */
-
-public class EmoticonsFragment extends Fragment {
-
- private OnEmoticonClickListener onEmoticonClickListener;
- private OnDeleteListener onDeleteListener;
-
- public static EmoticonsFragment initialize(OnEmoticonClickListener onEmoticonClickListener,
- OnDeleteListener onDeleteListener) {
- EmoticonsFragment emoticonsFragment = new EmoticonsFragment();
- Bundle bundle = new Bundle();
- bundle.putSerializable("onEmoticonClickListener", onEmoticonClickListener);
- bundle.putSerializable("onDeleteListener", onDeleteListener);
- emoticonsFragment.setArguments(bundle);
- return emoticonsFragment;
- }
-
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- this.onEmoticonClickListener = (OnEmoticonClickListener) getArguments().getSerializable("onEmoticonClickListener");
- this.onDeleteListener = (OnDeleteListener) getArguments().getSerializable("onDeleteListener");
- getArguments().clear();
- }
-
- @Nullable
- @Override
- public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment_emoticons, container, false);
- initView(view);
- return view;
- }
-
- private void initView(View view) {
- initRecyclerView(view);
- initButtonDelete(view);
- }
-
- private void initButtonDelete(View view) {
- ImageView imgDelete = (ImageView) view.findViewById(R.id.img_delete);
- imgDelete.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (onDeleteListener != null) onDeleteListener.onDeleteClicked();
- }
- });
- }
-
- private void initRecyclerView(View view) {
- RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
- recyclerView.setLayoutManager(new StaggeredGridLayoutManager(6, StaggeredGridLayoutManager.VERTICAL));
- EmoticonsAdapter emoticonsAdapter = new EmoticonsAdapter((Activity) getContext());
- emoticonsAdapter.setOnEmoticonClickListener(onEmoticonClickListener);
- recyclerView.setAdapter(emoticonsAdapter);
- for (int i = 1; i <= 54; i++) {
- emoticonsAdapter.add(i + ".png");
- }
- }
-
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/fragment/StickerFragment.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/fragment/StickerFragment.java
deleted file mode 100644
index 8c3c951..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/fragment/StickerFragment.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.fragment;
-
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.StaggeredGridLayoutManager;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.hoanganhtuan95ptit.awesomekeyboard.R;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.adapter.StickerAdapter;
-import com.hoanganhtuan95ptit.awesomekeyboard.view.callback.OnStickerClickListener;
-
-import java.util.ArrayList;
-
-/**
- * Created by DuyPC on 5/31/2017.
- */
-
-public class StickerFragment extends Fragment {
-
- private ArrayList images;
- private OnStickerClickListener onStickerClickListener;
-
- public static StickerFragment initialize(ArrayList urls,OnStickerClickListener onStickerClickListener) {
- StickerFragment stickerFragment = new StickerFragment();
- Bundle bundle = new Bundle();
- bundle.putStringArrayList("urls", urls);
- bundle.putSerializable("onStickerClickListener", onStickerClickListener);
- stickerFragment.setArguments(bundle);
- return stickerFragment;
- }
-
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- this.images=getArguments().getStringArrayList("urls");
- this.onStickerClickListener= (OnStickerClickListener) getArguments().getSerializable("onStickerClickListener");
- getArguments().clear();
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment_sticker, parent, false);
- setUpRecyclerView(view);
- return view;
- }
-
- private void setUpRecyclerView(View view) {
- RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler_sticker);
- recyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL));
- StickerAdapter adapter = new StickerAdapter(getActivity());
- adapter.setOnStickerClickListener(onStickerClickListener);
- recyclerView.setAdapter(adapter);
- for (String url : images) {
- adapter.add(url);
- }
- }
-
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/model/Photo.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/model/Photo.java
deleted file mode 100644
index 939075a..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/model/Photo.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.model;
-
-import java.io.Serializable;
-
-/**
- * Created by DuyPC on 5/23/2017.
- */
-
-public class Photo implements Serializable {
-
- private String url;
- private long time;
- private boolean select=false;
-
- public String getUrl() {
- return url;
- }
-
- public void setUrl(String url) {
- this.url = url;
- }
-
- public long getTime() {
- return time;
- }
-
- public void setTime(long time) {
- this.time = time;
- }
-
- public boolean isSelect() {
- return select;
- }
-
- public void setSelect(boolean select) {
- this.select = select;
- }
-}
diff --git a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/model/Sticker.java b/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/model/Sticker.java
deleted file mode 100644
index 545b60f..0000000
--- a/library/src/main/java/com/hoanganhtuan95ptit/awesomekeyboard/view/model/Sticker.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.hoanganhtuan95ptit.awesomekeyboard.view.model;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-
-/**
- * Created by HOANG ANH TUAN on 6/29/2017.
- */
-
-public class Sticker implements Serializable {
- private String image;
- private String name;
- private ArrayList images;
-
- public Sticker(String image, String name, ArrayList images) {
- this.image = image;
- this.name = name;
- this.images = images;
- }
-
- public String getImage() {
- return image;
- }
-
- public void setImage(String image) {
- this.image = image;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public ArrayList getImages() {
- return images;
- }
-
- public void setImages(ArrayList images) {
- this.images = images;
- }
-}
diff --git a/library/src/main/res/drawable/ic_plus.png b/library/src/main/res/drawable/ic_plus.png
deleted file mode 100644
index d3c152b..0000000
Binary files a/library/src/main/res/drawable/ic_plus.png and /dev/null differ
diff --git a/library/src/main/res/layout/fragment_emoticons.xml b/library/src/main/res/layout/fragment_emoticons.xml
deleted file mode 100644
index 1d853ca..0000000
--- a/library/src/main/res/layout/fragment_emoticons.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/library/src/main/res/layout/fragment_sticker.xml b/library/src/main/res/layout/fragment_sticker.xml
deleted file mode 100644
index 7b82ead..0000000
--- a/library/src/main/res/layout/fragment_sticker.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
\ No newline at end of file
diff --git a/library/src/main/res/layout/item_emoticon.xml b/library/src/main/res/layout/item_emoticon.xml
deleted file mode 100644
index 518eadd..0000000
--- a/library/src/main/res/layout/item_emoticon.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/library/src/main/res/layout/item_sticker.xml b/library/src/main/res/layout/item_sticker.xml
deleted file mode 100644
index 518eadd..0000000
--- a/library/src/main/res/layout/item_sticker.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/library/src/main/res/layout/item_title.xml b/library/src/main/res/layout/item_title.xml
deleted file mode 100644
index 29cda0c..0000000
--- a/library/src/main/res/layout/item_title.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/library/src/main/res/layout/layout_photo.xml b/library/src/main/res/layout/layout_photo.xml
deleted file mode 100644
index 7f43342..0000000
--- a/library/src/main/res/layout/layout_photo.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
\ No newline at end of file
diff --git a/library/src/main/res/layout/layout_sticker.xml b/library/src/main/res/layout/layout_sticker.xml
deleted file mode 100644
index 9dd0702..0000000
--- a/library/src/main/res/layout/layout_sticker.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/library/src/main/res/values/strings.xml b/library/src/main/res/values/strings.xml
deleted file mode 100644
index e386cc1..0000000
--- a/library/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
- AwesomeKeyboard
- Send
-
-
-
diff --git a/output/2017_07_21_08_28_10.mp4 b/output/2017_07_21_08_28_10.mp4
new file mode 100644
index 0000000..582b4ab
Binary files /dev/null and b/output/2017_07_21_08_28_10.mp4 differ
diff --git a/output/Screenshot_2017-07-06-12-54-22.png b/output/Screenshot_2017-07-06-12-54-22.png
deleted file mode 100644
index 0890257..0000000
Binary files a/output/Screenshot_2017-07-06-12-54-22.png and /dev/null differ
diff --git a/output/Screenshot_2017-07-06-12-54-26.png b/output/Screenshot_2017-07-06-12-54-26.png
deleted file mode 100644
index 83a31c9..0000000
Binary files a/output/Screenshot_2017-07-06-12-54-26.png and /dev/null differ
diff --git a/output/Screenshot_2017-07-06-12-55-11.png b/output/Screenshot_2017-07-06-12-55-11.png
deleted file mode 100644
index c0153c4..0000000
Binary files a/output/Screenshot_2017-07-06-12-55-11.png and /dev/null differ
diff --git a/output/Screenshot_2017-07-06-12-55-15.png b/output/Screenshot_2017-07-06-12-55-15.png
deleted file mode 100644
index 547d293..0000000
Binary files a/output/Screenshot_2017-07-06-12-55-15.png and /dev/null differ
diff --git a/output/Screenshot_2017-07-06-12-55-21.png b/output/Screenshot_2017-07-06-12-55-21.png
deleted file mode 100644
index 8c1bb1f..0000000
Binary files a/output/Screenshot_2017-07-06-12-55-21.png and /dev/null differ
diff --git a/output/Screenshot_2017-07-21-15-48-25.png b/output/Screenshot_2017-07-21-15-48-25.png
new file mode 100644
index 0000000..510af88
Binary files /dev/null and b/output/Screenshot_2017-07-21-15-48-25.png differ
diff --git a/output/Screenshot_2017-07-21-16-18-50.png b/output/Screenshot_2017-07-21-16-18-50.png
new file mode 100644
index 0000000..c202f84
Binary files /dev/null and b/output/Screenshot_2017-07-21-16-18-50.png differ
diff --git a/output/Screenshot_2017-07-21-16-19-01.png b/output/Screenshot_2017-07-21-16-19-01.png
new file mode 100644
index 0000000..41a76c3
Binary files /dev/null and b/output/Screenshot_2017-07-21-16-19-01.png differ
diff --git a/output/Screenshot_2017-07-21-16-19-18.png b/output/Screenshot_2017-07-21-16-19-18.png
new file mode 100644
index 0000000..cc0f096
Binary files /dev/null and b/output/Screenshot_2017-07-21-16-19-18.png differ
diff --git a/output/Screenshot_2017-07-21-16-19-28.png b/output/Screenshot_2017-07-21-16-19-28.png
new file mode 100644
index 0000000..f41f249
Binary files /dev/null and b/output/Screenshot_2017-07-21-16-19-28.png differ
diff --git a/output/Screenshot_2017-07-21-16-19-41.png b/output/Screenshot_2017-07-21-16-19-41.png
new file mode 100644
index 0000000..bcbcaef
Binary files /dev/null and b/output/Screenshot_2017-07-21-16-19-41.png differ
diff --git a/output/app-debug.apk b/output/app-debug.apk
index bea6b70..49a2f2c 100644
Binary files a/output/app-debug.apk and b/output/app-debug.apk differ
diff --git a/output/ezgif.com-video-to-gif.gif b/output/ezgif.com-video-to-gif.gif
new file mode 100644
index 0000000..97b7049
Binary files /dev/null and b/output/ezgif.com-video-to-gif.gif differ
diff --git a/settings.gradle b/settings.gradle
index 3306997..183b3d3 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':app', ':library'
+include ':app', ':core', ':layout'