SimpleCommonUtils.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. package jiguang.chat.utils;
  2. import android.content.Context;
  3. import android.text.Editable;
  4. import android.text.Spannable;
  5. import android.text.SpannableStringBuilder;
  6. import android.text.TextUtils;
  7. import android.util.Log;
  8. import android.view.KeyEvent;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.EditText;
  12. import android.widget.TextView;
  13. import net.zoneland.x.bpm.mobile.v1.zoneXBPM.R;
  14. import java.io.IOException;
  15. import java.lang.reflect.Constructor;
  16. import jiguang.chat.adapter.BigEmoticonsAdapter;
  17. import jiguang.chat.adapter.BigEmoticonsAndTitleAdapter;
  18. import jiguang.chat.adapter.TextEmoticonsAdapter;
  19. import jiguang.chat.filter.XhsFilter;
  20. import jiguang.chat.model.Constants;
  21. import jiguang.chat.utils.keyboard.adpater.EmoticonsAdapter;
  22. import jiguang.chat.utils.keyboard.adpater.PageSetAdapter;
  23. import jiguang.chat.utils.keyboard.data.EmoticonEntity;
  24. import jiguang.chat.utils.keyboard.data.EmoticonPageEntity;
  25. import jiguang.chat.utils.keyboard.data.EmoticonPageSetEntity;
  26. import jiguang.chat.utils.keyboard.data.PageEntity;
  27. import jiguang.chat.utils.keyboard.data.PageSetEntity;
  28. import jiguang.chat.utils.keyboard.interfaces.EmoticonClickListener;
  29. import jiguang.chat.utils.keyboard.interfaces.EmoticonDisplayListener;
  30. import jiguang.chat.utils.keyboard.interfaces.PageViewInstantiateListener;
  31. import jiguang.chat.utils.keyboard.utils.EmoticonsKeyboardUtils;
  32. import jiguang.chat.utils.keyboard.utils.imageloader.ImageBase;
  33. import jiguang.chat.utils.keyboard.utils.imageloader.ImageLoader;
  34. import jiguang.chat.utils.keyboard.widget.EmoticonPageView;
  35. import jiguang.chat.utils.keyboard.widget.EmoticonsEditText;
  36. import jiguang.chat.view.SimpleAppsGridView;
  37. public class SimpleCommonUtils {
  38. public static void initEmoticonsEditText(EmoticonsEditText etContent) {
  39. // etContent.addEmoticonFilter(new EmojiFilter());
  40. // etContent.addEmoticonFilter(new XhsFilter());
  41. }
  42. public static EmoticonClickListener getCommonEmoticonClickListener(final EditText editText) {
  43. return new EmoticonClickListener() {
  44. @Override
  45. public void onEmoticonClick(Object o, int actionType, boolean isDelBtn) {
  46. if (isDelBtn) {
  47. SimpleCommonUtils.delClick(editText);
  48. } else {
  49. if (o == null) {
  50. return;
  51. }
  52. if (actionType == Constants.EMOTICON_CLICK_TEXT) {
  53. String content = null;
  54. // if (o instanceof EmojiBean) {
  55. // content = ((EmojiBean) o).emoji;
  56. // } else
  57. if (o instanceof EmoticonEntity) {
  58. content = ((EmoticonEntity) o).getContent();
  59. }
  60. if (TextUtils.isEmpty(content)) {
  61. return;
  62. }
  63. int index = editText.getSelectionStart();
  64. Editable editable = editText.getText();
  65. editable.insert(index, content);
  66. }
  67. }
  68. }
  69. };
  70. }
  71. public static PageSetAdapter sCommonPageSetAdapter;
  72. public static PageSetAdapter getCommonAdapter(Context context, EmoticonClickListener emoticonClickListener) {
  73. if(sCommonPageSetAdapter != null){
  74. return sCommonPageSetAdapter;
  75. }
  76. PageSetAdapter pageSetAdapter = new PageSetAdapter();
  77. addEmojiPageSetEntity(pageSetAdapter, context, emoticonClickListener);
  78. // addXhsPageSetEntity(pageSetAdapter, context, emoticonClickListener);
  79. // addWechatPageSetEntity(pageSetAdapter, context, emoticonClickListener);
  80. addGoodGoodStudyPageSetEntity(pageSetAdapter, context, emoticonClickListener);
  81. addKaomojiPageSetEntity(pageSetAdapter, context, emoticonClickListener);
  82. // addTestPageSetEntity(pageSetAdapter, context); //控制能否从表情滑动到更多功能
  83. return pageSetAdapter;
  84. }
  85. /**
  86. * 插入emoji表情集
  87. *
  88. * @param pageSetAdapter
  89. * @param context
  90. * @param emoticonClickListener
  91. */
  92. public static void addEmojiPageSetEntity(PageSetAdapter pageSetAdapter, Context context, final EmoticonClickListener emoticonClickListener) {
  93. // ArrayList<EmojiBean> emojiArray = new ArrayList<>();
  94. // Collections.addAll(emojiArray, DefEmoticons.sEmojiArray);
  95. // EmoticonPageSetEntity emojiPageSetEntity
  96. // = new EmoticonPageSetEntity.Builder()
  97. // .setLine(3)
  98. // .setRow(7)
  99. // .setEmoticonList(emojiArray)
  100. // .setIPageViewInstantiateItem(getDefaultEmoticonPageViewInstantiateItem(new EmoticonDisplayListener<Object>() {
  101. // @Override
  102. // public void onBindView(int position, ViewGroup parent, EmoticonsAdapter.ViewHolder viewHolder, Object object, final boolean isDelBtn) {
  103. // final EmojiBean emojiBean = (EmojiBean) object;
  104. // if (emojiBean == null && !isDelBtn) {
  105. // return;
  106. // }
  107. //
  108. // viewHolder.ly_root.setBackgroundResource(R.drawable.bg_emoticon);
  109. //
  110. // if (isDelBtn) {
  111. // viewHolder.iv_emoticon.setImageResource(R.mipmap.icon_del);
  112. // } else {
  113. // viewHolder.iv_emoticon.setImageResource(emojiBean.icon);
  114. // }
  115. //
  116. // viewHolder.rootView.setOnClickListener(new View.OnClickListener() {
  117. // @Override
  118. // public void onClick(View v) {
  119. // if (emoticonClickListener != null) {
  120. // emoticonClickListener.onEmoticonClick(emojiBean, Constants.EMOTICON_CLICK_TEXT, isDelBtn);
  121. // }
  122. // }
  123. // });
  124. // }
  125. // }))
  126. // .setShowDelBtn(EmoticonPageEntity.DelBtnStatus.LAST)
  127. // .setIconUri(ImageBase.Scheme.DRAWABLE.toUri("icon_emoji"))
  128. // .build();
  129. // pageSetAdapter.add(emojiPageSetEntity);
  130. }
  131. /**
  132. * 插入JG表情集
  133. *
  134. * @param pageSetAdapter
  135. * @param context
  136. * @param emoticonClickListener
  137. */
  138. public static void addXhsPageSetEntity(PageSetAdapter pageSetAdapter, Context context, EmoticonClickListener emoticonClickListener) {
  139. EmoticonPageSetEntity xhsPageSetEntity
  140. = new EmoticonPageSetEntity.Builder()
  141. .setLine(3)
  142. .setRow(7)
  143. .setEmoticonList(ParseDataUtils.ParseXhsData(DefXhsEmoticons.xhsEmoticonArray, ImageBase.Scheme.ASSETS))
  144. .setIPageViewInstantiateItem(getDefaultEmoticonPageViewInstantiateItem(getCommonEmoticonDisplayListener(emoticonClickListener, Constants.EMOTICON_CLICK_TEXT)))
  145. .setShowDelBtn(EmoticonPageEntity.DelBtnStatus.LAST)
  146. .setIconUri(ImageBase.Scheme.ASSETS.toUri("j_qinqin.png"))
  147. .build();
  148. pageSetAdapter.add(xhsPageSetEntity);
  149. }
  150. /**
  151. * 插入微信表情集
  152. *
  153. * @param pageSetAdapter
  154. * @param context
  155. * @param emoticonClickListener
  156. */
  157. public static void addWechatPageSetEntity(PageSetAdapter pageSetAdapter, Context context, EmoticonClickListener emoticonClickListener) {
  158. String filePath = FileUtils.getFolderPath("wxemoticons");
  159. EmoticonPageSetEntity<EmoticonEntity> emoticonPageSetEntity = ParseDataUtils.parseDataFromFile(context, filePath, "wxemoticons.zip", "wxemoticons.xml");
  160. if (emoticonPageSetEntity == null) {
  161. return;
  162. }
  163. EmoticonPageSetEntity pageSetEntity
  164. = new EmoticonPageSetEntity.Builder()
  165. .setLine(emoticonPageSetEntity.getLine())
  166. .setRow(emoticonPageSetEntity.getRow())
  167. .setEmoticonList(emoticonPageSetEntity.getEmoticonList())
  168. .setIPageViewInstantiateItem(getEmoticonPageViewInstantiateItem(BigEmoticonsAdapter.class, emoticonClickListener))
  169. .setIconUri(ImageBase.Scheme.FILE.toUri(filePath + "/" + emoticonPageSetEntity.getIconUri()))
  170. .build();
  171. pageSetAdapter.add(pageSetEntity);
  172. }
  173. /**
  174. * 插入JG熊图片集
  175. *
  176. * @param pageSetAdapter
  177. * @param context
  178. * @param emoticonClickListener
  179. */
  180. public static void addGoodGoodStudyPageSetEntity(PageSetAdapter pageSetAdapter, Context context, EmoticonClickListener emoticonClickListener) {
  181. String filePath = FileUtils.getFolderPath("goodgoodstudy");
  182. EmoticonPageSetEntity<EmoticonEntity> emoticonPageSetEntity = ParseDataUtils.parseDataFromFile(context, filePath, "goodgoodstudy.zip", "goodgoodstudy.xml");
  183. if (emoticonPageSetEntity == null) {
  184. return;
  185. }
  186. EmoticonPageSetEntity pageSetEntity
  187. = new EmoticonPageSetEntity.Builder()
  188. .setLine(emoticonPageSetEntity.getLine())
  189. .setRow(emoticonPageSetEntity.getRow())
  190. .setEmoticonList(emoticonPageSetEntity.getEmoticonList())
  191. .setIPageViewInstantiateItem(getEmoticonPageViewInstantiateItem(BigEmoticonsAndTitleAdapter.class, emoticonClickListener))
  192. .setIconUri(ImageBase.Scheme.FILE.toUri(filePath + "/" + emoticonPageSetEntity.getIconUri()))
  193. .build();
  194. pageSetAdapter.add(pageSetEntity);
  195. }
  196. /**
  197. * 插入颜文字表情集
  198. *
  199. * @param pageSetAdapter
  200. * @param context
  201. * @param emoticonClickListener
  202. */
  203. public static void addKaomojiPageSetEntity(PageSetAdapter pageSetAdapter, Context context, EmoticonClickListener emoticonClickListener) {
  204. EmoticonPageSetEntity kaomojiPageSetEntity
  205. = new EmoticonPageSetEntity.Builder()
  206. .setLine(3)
  207. .setRow(3)
  208. .setEmoticonList(ParseDataUtils.parseKaomojiData(context))
  209. .setIPageViewInstantiateItem(getEmoticonPageViewInstantiateItem(TextEmoticonsAdapter.class, emoticonClickListener))
  210. .setIconUri(ImageBase.Scheme.DRAWABLE.toUri("icon_kaomoji"))
  211. .build();
  212. pageSetAdapter.add(kaomojiPageSetEntity);
  213. }
  214. /**
  215. * 测试页集
  216. *
  217. * @param pageSetAdapter
  218. * @param context
  219. */
  220. public static void addTestPageSetEntity(PageSetAdapter pageSetAdapter, Context context) {
  221. PageSetEntity pageSetEntity = new PageSetEntity.Builder()
  222. .addPageEntity(new PageEntity(new SimpleAppsGridView(context)))
  223. .setIconUri(ImageBase.Scheme.DRAWABLE.toUri("icon_kaomoji"))
  224. .setShowIndicator(false)
  225. .build();
  226. pageSetAdapter.add(pageSetEntity);
  227. }
  228. @SuppressWarnings("unchecked")
  229. public static Object newInstance(Class _Class, Object... args) throws Exception {
  230. return newInstance(_Class, 0, args);
  231. }
  232. @SuppressWarnings("unchecked")
  233. public static Object newInstance(Class _Class, int constructorIndex, Object... args) throws Exception {
  234. Constructor cons = _Class.getConstructors()[constructorIndex];
  235. return cons.newInstance(args);
  236. }
  237. public static PageViewInstantiateListener<EmoticonPageEntity> getDefaultEmoticonPageViewInstantiateItem(final EmoticonDisplayListener<Object> emoticonDisplayListener) {
  238. return getEmoticonPageViewInstantiateItem(EmoticonsAdapter.class, null, emoticonDisplayListener);
  239. }
  240. public static PageViewInstantiateListener<EmoticonPageEntity> getEmoticonPageViewInstantiateItem(final Class _class, EmoticonClickListener onEmoticonClickListener) {
  241. return getEmoticonPageViewInstantiateItem(_class, onEmoticonClickListener, null);
  242. }
  243. public static PageViewInstantiateListener<EmoticonPageEntity> getEmoticonPageViewInstantiateItem(final Class _class, final EmoticonClickListener onEmoticonClickListener, final EmoticonDisplayListener<Object> emoticonDisplayListener) {
  244. return new PageViewInstantiateListener<EmoticonPageEntity>() {
  245. @Override
  246. public View instantiateItem(ViewGroup container, int position, EmoticonPageEntity pageEntity) {
  247. if (pageEntity.getRootView() == null) {
  248. EmoticonPageView pageView = new EmoticonPageView(container.getContext());
  249. pageView.setNumColumns(pageEntity.getRow());
  250. pageEntity.setRootView(pageView);
  251. try {
  252. EmoticonsAdapter adapter = (EmoticonsAdapter) newInstance(_class, container.getContext(), pageEntity, onEmoticonClickListener);
  253. if (emoticonDisplayListener != null) {
  254. adapter.setOnDisPlayListener(emoticonDisplayListener);
  255. }
  256. pageView.getEmoticonsGridView().setAdapter(adapter);
  257. } catch (Exception e) {
  258. e.printStackTrace();
  259. }
  260. }
  261. return pageEntity.getRootView();
  262. }
  263. };
  264. }
  265. public static EmoticonDisplayListener<Object> getCommonEmoticonDisplayListener(final EmoticonClickListener onEmoticonClickListener, final int type) {
  266. return new EmoticonDisplayListener<Object>() {
  267. @Override
  268. public void onBindView(int position, ViewGroup parent, EmoticonsAdapter.ViewHolder viewHolder, Object object, final boolean isDelBtn) {
  269. final EmoticonEntity emoticonEntity = (EmoticonEntity) object;
  270. if (emoticonEntity == null && !isDelBtn) {
  271. return;
  272. }
  273. viewHolder.ly_root.setBackgroundResource(R.drawable.bg_emoticon);
  274. if (isDelBtn) {
  275. viewHolder.iv_emoticon.setImageResource(R.mipmap.icon_del);
  276. } else {
  277. try {
  278. ImageLoader.getInstance(viewHolder.iv_emoticon.getContext()).displayImage(emoticonEntity.getIconUri(), viewHolder.iv_emoticon);
  279. } catch (IOException e) {
  280. e.printStackTrace();
  281. }
  282. }
  283. viewHolder.rootView.setOnClickListener(new View.OnClickListener() {
  284. @Override
  285. public void onClick(View v) {
  286. if (onEmoticonClickListener != null) {
  287. onEmoticonClickListener.onEmoticonClick(emoticonEntity, type, isDelBtn);
  288. }
  289. }
  290. });
  291. }
  292. };
  293. }
  294. public static void delClick(EditText editText) {
  295. int action = KeyEvent.ACTION_DOWN;
  296. int code = KeyEvent.KEYCODE_DEL;
  297. KeyEvent event = new KeyEvent(action, code);
  298. editText.onKeyDown(KeyEvent.KEYCODE_DEL, event);
  299. }
  300. public static void spannableEmoticonFilter(TextView tv_content, String content) {
  301. try {
  302. SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(content);
  303. // Spannable spannable = EmojiDisplay.spannableFilter(tv_content.getContext(),
  304. // spannableStringBuilder,
  305. // content,
  306. // EmoticonsKeyboardUtils.getFontHeight(tv_content));
  307. // Spannable spannable = XhsFilter.spannableFilter(tv_content.getContext(),
  308. // spannableStringBuilder,
  309. // content,
  310. // EmoticonsKeyboardUtils.getFontHeight(tv_content),
  311. // null);
  312. tv_content.setText(content);
  313. } catch (Exception e) {
  314. Log.e("SimpleCommonUtils","EmojiDisplay error!!!!!!!!!!!!");
  315. }
  316. }
  317. }