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 00000000..f7657fec Binary files /dev/null and b/app/src/main/res/drawable-hdpi/yes.png differ 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