From 58287bc84b014076ab8e9219d36e1be98ff61094 Mon Sep 17 00:00:00 2001 From: zhangxiaogang Date: Thu, 18 Nov 2021 00:11:54 +1300 Subject: [PATCH] translation framework init and logout, lanaguage setting ui, hide foward context menu item for translation text --- .../java/com/hyphenate/easeim/DemoHelper.java | 12 +++ .../easeim/common/model/DemoModel.java | 14 +++ .../common/utils/PreferenceManager.java | 14 +++ .../contact/adapter/LanguageAdapter.java | 54 ++++++++++ .../me/activity/CommonSettingsActivity.java | 6 ++ .../section/me/activity/LanguageActivity.java | 101 ++++++++++++++++++ app/src/main/res/drawable-hdpi/yes.png | Bin 0 -> 2782 bytes app/src/main/res/layout/activity_language.xml | 41 +++++++ .../layout/demo_activity_common_settings.xml | 15 ++- .../main/res/layout/demo_item_language.xml | 33 ++++++ 10 files changed, 289 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/hyphenate/easeim/section/contact/adapter/LanguageAdapter.java create mode 100644 app/src/main/java/com/hyphenate/easeim/section/me/activity/LanguageActivity.java create mode 100644 app/src/main/res/drawable-hdpi/yes.png create mode 100644 app/src/main/res/layout/activity_language.xml create mode 100644 app/src/main/res/layout/demo_item_language.xml diff --git a/app/src/main/java/com/hyphenate/easeim/DemoHelper.java b/app/src/main/java/com/hyphenate/easeim/DemoHelper.java index 0288decd..7fea9599 100644 --- a/app/src/main/java/com/hyphenate/easeim/DemoHelper.java +++ b/app/src/main/java/com/hyphenate/easeim/DemoHelper.java @@ -73,6 +73,8 @@ import com.hyphenate.easeui.provider.EaseEmojiconInfoProvider; import com.hyphenate.easeui.provider.EaseSettingsProvider; import com.hyphenate.easeui.provider.EaseUserProfileProvider; +import com.hyphenate.chat.translator.EMTranslateParams; +import com.hyphenate.chat.translator.EMTranslationManager; import com.hyphenate.exceptions.HyphenateException; import com.hyphenate.push.EMPushConfig; import com.hyphenate.push.EMPushHelper; @@ -149,6 +151,9 @@ public void init(Context context) { //callKit初始化 InitCallKit(context); + //Translation Manager 初始化 + initTranslationManager(); + //启动获取用户信息线程 fetchUserInfoList = FetchUserInfoList.getInstance(); fetchUserRunnable = new FetchUserRunnable(); @@ -375,6 +380,12 @@ public EaseUser getUser(String username) { }); } + private void initTranslationManager() { + EMTranslateParams params = new EMTranslateParams("46c34219512d4f09ae6f8e04c083b7a3", "https://api.cognitive.microsofttranslator.com"); + + EMTranslationManager.getInstance().init(params); + } + /** * 统一配置头像 * @return @@ -575,6 +586,7 @@ public void logoutSuccess() { Log.d(TAG, "logout: onSuccess"); setAutoLogin(false); DemoDbHelper.getInstance(DemoApplication.getInstance()).closeDb(); + EMTranslationManager.getInstance().logout(); } public EaseAvatarOptions getEaseAvatarOptions() { diff --git a/app/src/main/java/com/hyphenate/easeim/common/model/DemoModel.java b/app/src/main/java/com/hyphenate/easeim/common/model/DemoModel.java index 427f5ae8..f74eb638 100644 --- a/app/src/main/java/com/hyphenate/easeim/common/model/DemoModel.java +++ b/app/src/main/java/com/hyphenate/easeim/common/model/DemoModel.java @@ -798,6 +798,20 @@ public void modifyConComeFromStatus() { preferences.edit().putBoolean("is_conversation_come_from_server", false).apply(); } + /** + * 获取目标翻译语言 + */ + public String getTargetLanguage() { + return PreferenceManager.getInstance().getTargetLanguage(); + } + + /** + * 设置目标翻译语言 + */ + public void setTargetLanguage(String languageCode) { + PreferenceManager.getInstance().setTargetLanguage(languageCode); + } + enum Key{ VibrateAndPlayToneOn, VibrateOn, diff --git a/app/src/main/java/com/hyphenate/easeim/common/utils/PreferenceManager.java b/app/src/main/java/com/hyphenate/easeim/common/utils/PreferenceManager.java index 25d5e8f1..fb3ef960 100644 --- a/app/src/main/java/com/hyphenate/easeim/common/utils/PreferenceManager.java +++ b/app/src/main/java/com/hyphenate/easeim/common/utils/PreferenceManager.java @@ -80,6 +80,8 @@ public class PreferenceManager { private static String SHARED_KEY_ENABLE_TOKEN_LOGIN = "enable_token_login"; + private static String SHARED_KEY_TARGET_LANGUAGE = "shared_key_target_language"; + @SuppressLint("CommitPrefEdits") private PreferenceManager(Context cxt) { mSharedPreferences = cxt.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); @@ -570,4 +572,16 @@ public boolean isEnableTokenLogin() { return mSharedPreferences.getBoolean(SHARED_KEY_ENABLE_TOKEN_LOGIN, false); } + /** + * 翻译目标语言 + * @param languageCode + */ + public void setTargetLanguage(String languageCode) { + editor.putString(SHARED_KEY_TARGET_LANGUAGE, languageCode); + editor.apply(); + } + + public String getTargetLanguage() { + return mSharedPreferences.getString(SHARED_KEY_TARGET_LANGUAGE, "en"); + } } diff --git a/app/src/main/java/com/hyphenate/easeim/section/contact/adapter/LanguageAdapter.java b/app/src/main/java/com/hyphenate/easeim/section/contact/adapter/LanguageAdapter.java new file mode 100644 index 00000000..ff9abb19 --- /dev/null +++ b/app/src/main/java/com/hyphenate/easeim/section/contact/adapter/LanguageAdapter.java @@ -0,0 +1,54 @@ +package com.hyphenate.easeim.section.contact.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.hyphenate.chat.translator.EMLanguage; + +import java.util.List; + +import com.hyphenate.easeim.R; + +public class LanguageAdapter extends ArrayAdapter { + private long mSelectedIndex = 0; + + public LanguageAdapter(@NonNull Context context, @NonNull List objects) { + super(context, 0, objects); + } + + @Override + public View getView(int position, View convertedView, ViewGroup parent) { + if(convertedView == null) { + convertedView = LayoutInflater.from(getContext()).inflate(R.layout.demo_item_language, parent, false); + } + + TextView textView = (TextView) convertedView.findViewById(R.id.language_content); + ImageView imageView = (ImageView) convertedView.findViewById(R.id.language_select); + + EMLanguage languageItem = getItem(position); + textView.setText(languageItem.LanguageLocalName); + long id = getItemId(position); + if (mSelectedIndex == id) { + imageView.setImageResource(R.drawable.yes); + }else { + imageView.setImageResource(0); + } + + return convertedView; + } + + public void setSelectedIndex(long index) { + mSelectedIndex = index; + } + + public long getSelectedIndex() { + return mSelectedIndex; + } +} diff --git a/app/src/main/java/com/hyphenate/easeim/section/me/activity/CommonSettingsActivity.java b/app/src/main/java/com/hyphenate/easeim/section/me/activity/CommonSettingsActivity.java index b0c48209..c5fd8402 100644 --- a/app/src/main/java/com/hyphenate/easeim/section/me/activity/CommonSettingsActivity.java +++ b/app/src/main/java/com/hyphenate/easeim/section/me/activity/CommonSettingsActivity.java @@ -27,6 +27,7 @@ public class CommonSettingsActivity extends BaseInitActivity implements View.OnC private SwitchItemView itemAutoDownload; private SwitchItemView itemAutoAcceptGroup; private SwitchItemView itemSwitchChatroomDeleteMsg; + private ArrowItemView itemLanguage; private DemoModel settingsModel; private EMOptions chatOptions; @@ -55,6 +56,7 @@ protected void initView(Bundle savedInstanceState) { itemAutoDownload = findViewById(R.id.item_switch_auto_download); itemAutoAcceptGroup = findViewById(R.id.item_switch_auto_accept_group); itemSwitchChatroomDeleteMsg = findViewById(R.id.item_switch_chatroom_delete_msg); + itemLanguage = findViewById(R.id.item_language); } @Override @@ -71,6 +73,7 @@ protected void initListener() { itemAutoDownload.setOnCheckedChangeListener(this); itemAutoAcceptGroup.setOnCheckedChangeListener(this); itemSwitchChatroomDeleteMsg.setOnCheckedChangeListener(this); + itemLanguage.setOnClickListener(this); } @Override @@ -98,6 +101,9 @@ public void onClick(View v) { case R.id.item_call_option : CallOptionActivity.actionStart(mContext); break; + case R.id.item_language: + LanguageActivity.actionStart(mContext); + break; } } diff --git a/app/src/main/java/com/hyphenate/easeim/section/me/activity/LanguageActivity.java b/app/src/main/java/com/hyphenate/easeim/section/me/activity/LanguageActivity.java new file mode 100644 index 00000000..2ad85dc8 --- /dev/null +++ b/app/src/main/java/com/hyphenate/easeim/section/me/activity/LanguageActivity.java @@ -0,0 +1,101 @@ +package com.hyphenate.easeim.section.me.activity; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; + +import com.hyphenate.easeim.DemoHelper; +import com.hyphenate.easeim.R; +import com.hyphenate.easeim.section.base.BaseInitActivity; +import com.hyphenate.easeim.section.contact.adapter.LanguageAdapter; +import com.hyphenate.chat.translator.EMLanguage; +import com.hyphenate.chat.translator.EMTranslationManager; +import com.hyphenate.easeui.widget.EaseTitleBar; + +import java.util.List; + +public class LanguageActivity extends BaseInitActivity implements EaseTitleBar.OnBackPressListener, EaseTitleBar.OnRightClickListener, AdapterView.OnItemClickListener { + private EaseTitleBar titleBar; + private ListView rvList; + private LanguageAdapter adapter; + + private List emLanguageList; + + public static void actionStart(Context context) { + Intent starter = new Intent(context, LanguageActivity.class); + context.startActivity(starter); + } + + @Override + protected int getLayoutId() { + return R.layout.activity_language; + } + + @Override + protected void initView(Bundle savedInstanceState) { + super.initView(savedInstanceState); + titleBar = findViewById(R.id.title_bar_language); + rvList = findViewById(R.id.language_list); + + emLanguageList = EMTranslationManager.getInstance().getSupportedLanguages(); + adapter = new LanguageAdapter(mContext, emLanguageList); + rvList.setAdapter(adapter); + initSelectedLanguage(); + rvList.setOnItemClickListener(this); + } + + @Override + protected void initListener() { + super.initListener(); + titleBar.setOnBackPressListener(this); + titleBar.setOnRightClickListener(this); + } + + + @Override + public void onBackPress(View view) { + onBackPressed(); + } + + + @Override + public void onRightClick(View view) { + updateLanguage(); + + onBackPressed(); + } + + private void initSelectedLanguage() { + String languageCode = DemoHelper.getInstance().getModel().getTargetLanguage(); + int selectedIndex = 0; + + for(int index = 0 ; index < emLanguageList.size(); index++) { + EMLanguage language = emLanguageList.get(index); + if(language.LanguageCode.equals(languageCode)) { + selectedIndex = index; + break; + } + } + + adapter.setSelectedIndex(selectedIndex); + } + + private void updateLanguage() { + long selectedIndex = adapter.getSelectedIndex(); + String languageCode = emLanguageList.get((int)selectedIndex).LanguageCode; + + DemoHelper.getInstance().getModel().setTargetLanguage(languageCode); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if(id != adapter.getSelectedIndex()) { + adapter.setSelectedIndex(id); + adapter.notifyDataSetChanged(); + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/yes.png b/app/src/main/res/drawable-hdpi/yes.png new file mode 100644 index 0000000000000000000000000000000000000000..f7657fecbfa3dad3d73e6f88b56a7d04be61de93 GIT binary patch literal 2782 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_language.xml b/app/src/main/res/layout/activity_language.xml new file mode 100644 index 00000000..b937a803 --- /dev/null +++ b/app/src/main/res/layout/activity_language.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/demo_activity_common_settings.xml b/app/src/main/res/layout/demo_activity_common_settings.xml index a7261cc0..796f61f6 100644 --- a/app/src/main/res/layout/demo_activity_common_settings.xml +++ b/app/src/main/res/layout/demo_activity_common_settings.xml @@ -29,13 +29,26 @@ android:layout_height="@dimen/em_common_item_height" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toBottomOf="@id/item_security" + app:layout_constraintTop_toBottomOf="@id/item_language" app:arrowItemAvatarHeight="@dimen/em_about_me_avatar_size" app:arrowItemAvatarWidth="@dimen/em_about_me_avatar_size" app:arrowItemTitle="@string/push_settings" app:arrowItemTitleSize="@dimen/em_size_normal" android:foreground="@drawable/demo_ripple_click_gray" android:background="@color/white"/> + + + + + + + + + + \ No newline at end of file