diff --git a/app/build.gradle b/app/build.gradle
index 2dae591..603c1b1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -144,6 +144,8 @@ dependencies {
implementation 'org.bouncycastle:bcpkix-jdk15on:1.47'
implementation 'commons-codec:commons-codec:1.15'
implementation 'com.google.android.play:app-update:2.0.1'
+ //emoji表情符号
+ implementation 'androidx.emoji:emoji-bundled:1.0.0'
implementation project(':videocompressor')
implementation project(':recorderlib')
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 37e1e20..57b0250 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,9 +23,8 @@
-
-
-
@@ -44,7 +43,6 @@
android:name="android.hardware.telephony"
android:required="false" />
-
@@ -351,6 +349,10 @@
android:name=".ui.activity.ChangeMyPhoneActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="portrait" />
+
+ android:exported="false" />
onInitialized()");
+ }
+
+ @Override
+ public void onFailed(@Nullable Throwable throwable)
+ {
+ Log.e("app", "loadEmojiFromBundled()->onFailed()", throwable);
+ }
+ });
+
+ EmojiCompat.init(config);
+ }
+
// public static RefWatcher getRefWatcher(Context context) {
// App application = (App) context.getApplicationContext();
// return application.refWatcher;
diff --git a/app/src/main/java/com/rehome/zhdcoa/adapter/EmojiAdapter.java b/app/src/main/java/com/rehome/zhdcoa/adapter/EmojiAdapter.java
new file mode 100644
index 0000000..6d5962a
--- /dev/null
+++ b/app/src/main/java/com/rehome/zhdcoa/adapter/EmojiAdapter.java
@@ -0,0 +1,54 @@
+package com.rehome.zhdcoa.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.emoji.text.EmojiCompat;
+import androidx.viewbinding.ViewBinding;
+
+import com.rehome.zhdcoa.base.BaseViewBindingAdapter;
+import com.rehome.zhdcoa.bean.GridViewBean;
+import com.rehome.zhdcoa.databinding.AdapterEmojiBinding;
+
+import java.util.List;
+
+public class EmojiAdapter extends BaseViewBindingAdapter {
+
+ private final Context context;
+ private final List data;
+
+ public EmojiAdapter(Context context,List datas) {
+ super(context);
+ this.context=context;
+ this.data=datas;
+ }
+
+ @Override
+ protected void handleData(int position, @NonNull AdapterEmojiBinding binding) {
+ String item = data.get(position);
+ CharSequence character = EmojiCompat.get().process(item);
+ binding.tv.setText(character);
+ }
+
+ @Override
+ protected AdapterEmojiBinding getBinding(@NonNull LayoutInflater inflater, ViewGroup parent) {
+ return AdapterEmojiBinding.inflate(inflater, parent, false);
+ }
+
+ @Override
+ public int getCount() {
+ return data.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return data.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return Long.valueOf(position);
+ }
+}
diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/activity/EmojiActivity.kt b/app/src/main/java/com/rehome/zhdcoa/ui/activity/EmojiActivity.kt
new file mode 100644
index 0000000..9a5f168
--- /dev/null
+++ b/app/src/main/java/com/rehome/zhdcoa/ui/activity/EmojiActivity.kt
@@ -0,0 +1,170 @@
+package com.rehome.zhdcoa.ui.activity
+
+import android.content.Intent
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.os.Bundle
+import android.widget.AdapterView
+import com.rehome.zhdcoa.adapter.EmojiAdapter
+import com.rehome.zhdcoa.base.BaseActivityOaToolbarViewBinding
+import com.rehome.zhdcoa.databinding.ActivityEmojiBinding
+
+class EmojiActivity : BaseActivityOaToolbarViewBinding() {
+
+ private val emojiArray= mutableListOf()
+
+
+ override fun getViewBinding()= ActivityEmojiBinding.inflate(layoutInflater)
+
+ override fun getToolbar() = binding.toolbarView.toolbar
+
+ override fun initView() {
+ initToolbar("选择表情")
+ setLeftOnClickListener { finish() }
+ addData()
+
+
+
+ var adapter = EmojiAdapter(this, emojiArray)
+ binding.gv.selector = ColorDrawable(Color.TRANSPARENT)
+ binding.gv.adapter = adapter
+
+ binding.gv.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, i, l ->
+ val emojiStr = emojiArray[i]
+ val resultIntent = Intent()
+ val bundle = Bundle()
+ bundle.putString("emoji", emojiStr)
+ resultIntent.putExtras(bundle)
+ setResult(RESULT_OK, resultIntent)
+ finish();
+ }
+
+ }
+
+ override fun initData() {
+
+ }
+
+
+ private fun addData() {
+ emojiArray.add("\uD83D\uDE00")
+ emojiArray.add("😃")
+ emojiArray.add("😄")
+ emojiArray.add("😁")
+
+ emojiArray.add("\uD83D\uDE06")
+ emojiArray.add("\uD83D\uDE05")
+ emojiArray.add("\uD83E\uDD23")
+ emojiArray.add("\uD83D\uDE02")
+
+ emojiArray.add("\uD83D\uDE42")
+ emojiArray.add("\uD83D\uDE43")
+ emojiArray.add("\uD83E\uDD2D")
+ emojiArray.add("\uD83D\uDE09")
+
+ emojiArray.add("\uD83D\uDE0A")
+ emojiArray.add("\uD83D\uDE07")
+ emojiArray.add("\uD83E\uDD70")
+ emojiArray.add("\uD83D\uDE0D")
+
+ emojiArray.add("\uD83E\uDD29")
+ emojiArray.add("\uD83D\uDE18")
+ emojiArray.add("\uD83D\uDE17")
+ emojiArray.add("☺️")
+
+ emojiArray.add("\uD83D\uDE1A")
+ emojiArray.add("\uD83D\uDE19")
+ emojiArray.add("\uD83E\uDD17")
+ emojiArray.add("\uD83D\uDE0B")
+
+ emojiArray.add("\uD83D\uDE1B")
+ emojiArray.add("\uD83D\uDE1C")
+ emojiArray.add("\uD83E\uDD2A")
+ emojiArray.add("\uD83D\uDE1D")
+
+ emojiArray.add("\uD83E\uDD75")
+ emojiArray.add("\uD83E\uDD76")
+ emojiArray.add("\uD83E\uDD74")
+ emojiArray.add("\uD83D\uDE35")
+
+
+ emojiArray.add("\uD83D\uDE0E")
+ emojiArray.add("\uD83E\uDD13")
+ emojiArray.add("\uD83E\uDDD0")
+ emojiArray.add("\uD83E\uDD11")
+
+
+ emojiArray.add("\uD83E\uDD10")
+ emojiArray.add("\uD83E\uDD28")
+ emojiArray.add("\uD83D\uDE10")
+ emojiArray.add("\uD83D\uDE11")
+
+ emojiArray.add("\uD83D\uDE36")
+ emojiArray.add("\uD83D\uDE44")
+ emojiArray.add("\uD83D\uDE36️")
+ emojiArray.add("\uD83D\uDE0F")
+
+
+ emojiArray.add("\uD83E\uDD25")
+ emojiArray.add("\uD83D\uDE0C")
+ emojiArray.add("\uD83D\uDE14")
+ emojiArray.add("\uD83D\uDE2A")
+
+ emojiArray.add("\uD83E\uDD24")
+ emojiArray.add("\uD83D\uDE34")
+ emojiArray.add("\uD83D\uDE37")
+ emojiArray.add("\uD83E\uDD12")
+
+ emojiArray.add("\uD83E\uDD15")
+ emojiArray.add("\uD83E\uDD22")
+ emojiArray.add("\uD83E\uDD2E")
+ emojiArray.add("\uD83E\uDD27")
+
+ emojiArray.add("\uD83E\uDD75")
+ emojiArray.add("\uD83E\uDD76")
+ emojiArray.add("\uD83E\uDD74")
+ emojiArray.add("\uD83D\uDE35")
+
+ emojiArray.add("\uD83D\uDE12")
+ emojiArray.add("\uD83E\uDD2F")
+ emojiArray.add("\uD83E\uDD20")
+ emojiArray.add("\uD83E\uDD73")
+
+ emojiArray.add("\uD83D\uDE26")
+ emojiArray.add("\uD83D\uDE1F")
+ emojiArray.add("\uD83D\uDE41")
+ emojiArray.add("\uD83E\uDD2B")
+
+ emojiArray.add("\uD83D\uDE2E")
+ emojiArray.add("\uD83D\uDE2F")
+ emojiArray.add("\uD83D\uDE32")
+ emojiArray.add("\uD83D\uDE33")
+
+
+ emojiArray.add("\uD83D\uDE27")
+ emojiArray.add("\uD83D\uDE28")
+ emojiArray.add("\uD83D\uDE30")
+ emojiArray.add("\uD83D\uDE25")
+
+ emojiArray.add("\uD83D\uDE22")
+ emojiArray.add("\uD83D\uDE2D")
+ emojiArray.add("\uD83D\uDE31")
+ emojiArray.add("\uD83D\uDE16")
+
+ emojiArray.add("\uD83D\uDE23")
+ emojiArray.add("\uD83D\uDE1E")
+ emojiArray.add("\uD83D\uDE13")
+ emojiArray.add("\uD83D\uDE29")
+
+ emojiArray.add("\uD83D\uDE2B")
+ emojiArray.add("\uD83E\uDD71")
+ emojiArray.add("\uD83D\uDE24")
+ emojiArray.add("\uD83D\uDE21")
+
+ emojiArray.add("\uD83D\uDE20")
+ emojiArray.add("\uD83E\uDD2C")
+ emojiArray.add("\uD83D\uDE08")
+ emojiArray.add("\uD83E\uDD14")
+ //emojiArray.add("\uD83D\uDE2C")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/fragment/MineFragment.java b/app/src/main/java/com/rehome/zhdcoa/ui/fragment/MineFragment.java
index 41d0223..d005593 100755
--- a/app/src/main/java/com/rehome/zhdcoa/ui/fragment/MineFragment.java
+++ b/app/src/main/java/com/rehome/zhdcoa/ui/fragment/MineFragment.java
@@ -1,5 +1,7 @@
package com.rehome.zhdcoa.ui.fragment;
+import static android.app.Activity.RESULT_OK;
+
import android.Manifest;
import android.app.Activity;
import android.content.Context;
@@ -11,18 +13,28 @@ import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
+import android.os.Bundle;
import android.os.Environment;
import android.os.Looper;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
+import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.Toast;
+
+import androidx.activity.result.ActivityResult;
+import androidx.activity.result.ActivityResultCallback;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
+import androidx.emoji.text.EmojiCompat;
+
import com.azhon.appupdate.listener.OnButtonClickListener;
import com.azhon.appupdate.listener.OnDownloadListener;
import com.azhon.appupdate.manager.DownloadManager;
@@ -47,6 +59,7 @@ import com.rehome.zhdcoa.bean.HeadPhotoResultBean;
import com.rehome.zhdcoa.bean.QtdbBean;
import com.rehome.zhdcoa.ui.activity.ApplyAboutMeActivity;
import com.rehome.zhdcoa.ui.activity.ChangeMyPhoneActivity;
+import com.rehome.zhdcoa.ui.activity.EmojiActivity;
import com.rehome.zhdcoa.ui.activity.LoginActivity;
import com.rehome.zhdcoa.ui.activity.MyAdviceActivity;
import com.rehome.zhdcoa.ui.activity.MyOrderActivity;
@@ -82,6 +95,8 @@ public class MineFragment extends BaseLazyFragment {
private static final int CROP = 2;
public static final int UPDATE_HEAD_PHOTO = 100;
+ private ActivityResultLauncher launcherResultEmoji;
+
CircleImageView civHead;
TextView tvName;
TextView tvMentions;
@@ -101,7 +116,11 @@ public class MineFragment extends BaseLazyFragment {
TextView tvSm;
TextView tvSq;
TextView tv_order;
+ TextView tv_emj;
+
+ // 在我们的这个位置的话创建我们的数组
+ List array = new ArrayList<>();
private String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "com.rehome.ydoa/images";
@@ -126,6 +145,12 @@ public class MineFragment extends BaseLazyFragment {
return instance;
}
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ launcherResultEmoji = createActivityResultLauncher();
+ }
+
@Override
protected int getContentViewId() {
return R.layout.fragment_mine;
@@ -134,6 +159,18 @@ public class MineFragment extends BaseLazyFragment {
@Override
protected void initView() {
findView();
+
+
+ array.add("\uD83D\uDE00");
+ array.add("😃");
+ array.add("😄");
+ array.add("😁");
+
+
+ CharSequence character = EmojiCompat.get().process(array.get(0));
+ tv_emj.setText(character);
+
+
//android 10 以上
if (requireActivity().getExternalFilesDir(null) != null) {
path = Objects.requireNonNull(requireActivity().getExternalFilesDir(null)).getPath() + "/images";
@@ -183,6 +220,7 @@ public class MineFragment extends BaseLazyFragment {
tvSm = view.findViewById(R.id.tv_sm);
tvSq = view.findViewById(R.id.tv_sq);
tv_order = view.findViewById(R.id.tv_order);
+ tv_emj = view.findViewById(R.id.tv_emj);
//提到我的
tvMentions.setOnClickListener(new View.OnClickListener() {
@@ -211,6 +249,16 @@ public class MineFragment extends BaseLazyFragment {
startActivity(intent2);
}
});
+
+ tv_emj.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(getActivity(), EmojiActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ launcherResultEmoji.launch(intent);
+ }
+ });
+
//修改密码
tvUpdatePwd.setOnClickListener(new View.OnClickListener() {
@Override
@@ -256,6 +304,10 @@ public class MineFragment extends BaseLazyFragment {
dialog1.show();
}
});
+
+
+
+
//我的订单
tv_order.setOnClickListener(new View.OnClickListener() {
@Override
@@ -370,6 +422,34 @@ public class MineFragment extends BaseLazyFragment {
protected void initListener() {
}
+ private ActivityResultLauncher createActivityResultLauncher() {
+ return registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
+ new ActivityResultCallback() {
+ @Override
+ public void onActivityResult(ActivityResult result) {
+ int resultCode = result.getResultCode();
+ Intent data = result.getData();
+ if (resultCode == RESULT_OK) {
+ String emojiStr = data.getStringExtra("emoji");
+ CharSequence character = EmojiCompat.get().process(emojiStr);
+ tv_emj.setText(character);
+ showLog(toHex(emojiStr));
+ }
+ }
+ });
+ }
+
+ /**
+ * 将字符串转换为十六进制
+ */
+ private static String toHex(String input) {
+ StringBuilder sb = new StringBuilder();
+ for (char c : input.toCharArray()) {
+ sb.append(Integer.toString((int) c, 16));
+ }
+ return sb.toString().toUpperCase();
+ }
+
public void clearImageDiskCache(Context context) {
try {
if (Looper.myLooper() == Looper.getMainLooper()) {
@@ -837,7 +917,7 @@ public class MineFragment extends BaseLazyFragment {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == Activity.RESULT_OK) {
+ if (resultCode == RESULT_OK) {
switch (requestCode) {
case PICTURE_BOOK_CODE:
try {
diff --git a/app/src/main/res/layout/activity_emoji.xml b/app/src/main/res/layout/activity_emoji.xml
new file mode 100644
index 0000000..c47f382
--- /dev/null
+++ b/app/src/main/res/layout/activity_emoji.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/adapter_emoji.xml b/app/src/main/res/layout/adapter_emoji.xml
new file mode 100644
index 0000000..be638b1
--- /dev/null
+++ b/app/src/main/res/layout/adapter_emoji.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml
index 2aa1c7a..cdb69ad 100755
--- a/app/src/main/res/layout/fragment_mine.xml
+++ b/app/src/main/res/layout/fragment_mine.xml
@@ -7,31 +7,46 @@
-
-
+ android:layout_marginTop="120dp"
+ android:layout_marginBottom="9dp"
+ android:orientation="horizontal">
+
+
+