[Modify]实现多语言分区切换和给H5页面传递当前语言

This commit is contained in:
wushaocheng
2023-05-18 17:12:20 +08:00
parent 4e7ac5368c
commit 6f39168afe
20 changed files with 312 additions and 40 deletions

View File

@@ -69,8 +69,7 @@
<uses-permission android:name="com.meizu.flyme.push.permission.RECEIVE" /> <!-- 兼容flyme3.0配置权限 -->
<uses-permission android:name="${applicationId}.push.permission.MESSAGE" />
<uses-permission android:name="com.meizu.c2dm.permission.RECEIVE" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<!-- AppsFlyer需要参考https://dev.appsflyer.com/hc/docs/install-android-sdk#setting-required-permissions -->
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> <!-- AppsFlyer需要参考https://dev.appsflyer.com/hc/docs/install-android-sdk#setting-required-permissions -->
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
<application
@@ -957,12 +956,16 @@
android:configChanges="screenSize|orientation|keyboardHidden|mcc|mnc|locale|touchscreen|screenLayout|keyboard|navigation|fontScale|uiMode|smallestScreenSize|layoutDirection"
android:exported="false"
android:theme="@style/dialog_web_view_activity" />
<activity
android:name=".ui.webview.FairyDialogWebViewActivity"
android:configChanges="screenSize|orientation|keyboardHidden|mcc|mnc|locale|touchscreen|screenLayout|keyboard|navigation|fontScale|uiMode|smallestScreenSize|layoutDirection"
android:exported="false"
android:theme="@style/dialog_web_view_activity" />
<activity
android:name=".ui.setting.AreaSelectActivity"
android:configChanges="screenSize|orientation|keyboardHidden|mcc|mnc|locale|touchscreen|screenLayout|keyboard|navigation|fontScale|uiMode|smallestScreenSize|layoutDirection"
android:exported="false"
android:screenOrientation="portrait" />
<meta-data
android:name="notch.config"
@@ -1003,8 +1006,7 @@
android:name="com.netease.nimlib.service.NimReceiver"
android:exported="false"
android:process=":core"
tools:node="remove">
</receiver>
tools:node="remove"></receiver>
<receiver android:name="com.netease.nimlib.service.ResponseReceiver" />
<receiver
android:name=".reciever.IncomingCallReceiver"
@@ -1014,6 +1016,7 @@
</intent-filter>
</receiver>
<receiver android:name=".reciever.NotificationClickReceiver" />
<service
android:name="com.netease.nimlib.service.NimService"
android:process=":core" />

View File

@@ -0,0 +1,64 @@
package com.yizhuan.erban.ui.setting
import android.content.Context
import android.content.Intent
import androidx.activity.viewModels
import com.netease.nim.uikit.StatusBarUtil
import com.yizhuan.erban.R
import com.yizhuan.erban.avroom.anotherroompk.RoomPKCreateActivity
import com.yizhuan.erban.base.BaseViewBindingActivity
import com.yizhuan.erban.databinding.ActivityAreaSelectBinding
import com.yizhuan.erban.ui.setting.adapter.PartitionAdapter
import com.yizhuan.erban.ui.setting.viewmodel.SetViewModel
import com.yizhuan.xchat_android_library.utils.ResUtil
/**
* 切换语言
* Created by wushaocheng on 2023/05/18.
*/
class AreaSelectActivity : BaseViewBindingActivity<ActivityAreaSelectBinding>() {
private val setViewModel: SetViewModel by viewModels()
private val mPartitionAdapter by lazy { PartitionAdapter() }
companion object {
fun start(context: Context) {
val starter = Intent(context, AreaSelectActivity::class.java)
context.startActivity(starter)
}
}
override fun init() {
initWhiteTitleBar("分区")
binding.recyclerView.adapter = mPartitionAdapter
setViewModel.partitionLiveData.observe(this) {
mPartitionAdapter.setSelectId(it.userPartitionId)
mPartitionAdapter.setNewData(it.partitionInfos)
}
setViewModel.changePartitionLiveData.observe(this) {
toast("切换成功")
}
mPartitionAdapter.setOnItemClickListener { _, _, position ->
mPartitionAdapter.getItem(position)?.id?.let { setViewModel.changePartition(it) }
mPartitionAdapter.setSelectPosition(position)
mPartitionAdapter.notifyDataSetChanged()
}
setViewModel.getPartitionList()
}
override fun needSteepStateBar(): Boolean {
return true
}
override fun setStatusBar() {
super.setStatusBar()
StatusBarUtil.transparencyBar(this)
StatusBarUtil.StatusBarLightMode(this)
}
}

View File

@@ -72,6 +72,7 @@ class SettingActivity : BaseViewBindingActivity<ActivitySettingBinding>(), View.
binding.tvShieldManager.setOnClickListener(this)
binding.rlyPermission.setOnClickListener(this)
binding.rlyCheck.setOnClickListener(this)
binding.rlyArea.setOnClickListener(this)
}
@SuppressLint("CheckResult")
@@ -135,6 +136,7 @@ class SettingActivity : BaseViewBindingActivity<ActivitySettingBinding>(), View.
R.id.tv_shield_manager -> ShieldManageActivity.start(context)
R.id.rly_permission -> PermissionGuideActivity.start(context)
R.id.rly_check -> AppUpgradeHelper.checkAppUpgrade(this, dialogManager)
R.id.rly_area -> AreaSelectActivity.start(this)
}
}

View File

@@ -0,0 +1,34 @@
package com.yizhuan.erban.ui.setting.adapter
import androidx.constraintlayout.widget.ConstraintLayout
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.yizhuan.erban.R
import com.yizhuan.xchat_android_core.set.bean.PartitionBean
class PartitionAdapter :
BaseQuickAdapter<PartitionBean, BaseViewHolder>(R.layout.item_partition) {
private var selectPosition = -1
private var selectId = 0
fun setSelectPosition(selectPosition: Int) {
this.selectPosition = selectPosition
}
fun setSelectId(selectId: Int) {
this.selectId = selectId
}
override fun convert(helper: BaseViewHolder, item: PartitionBean) {
helper.setText(R.id.tvArea, item.desc)
val isSelect = selectPosition == helper.layoutPosition
if (selectId == item.id && selectPosition == -1) {
helper.getView<ConstraintLayout>(R.id.cs_bg).isSelected = true
} else if (selectPosition != -1) {
helper.getView<ConstraintLayout>(R.id.cs_bg).isSelected = isSelect
} else {
helper.getView<ConstraintLayout>(R.id.cs_bg).isSelected = false
}
}
}

View File

@@ -4,6 +4,8 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.yizhuan.erban.base.BaseViewModel
import com.yizhuan.xchat_android_core.bean.response.ListResult
import com.yizhuan.xchat_android_core.set.bean.PartitionBean
import com.yizhuan.xchat_android_core.set.bean.PartitionInfoBean
import com.yizhuan.xchat_android_core.set.bean.ShieldInfo
import com.yizhuan.xchat_android_core.set.model.SetModel
import com.yizhuan.xchat_android_core.utils.toast
@@ -16,6 +18,12 @@ class SetViewModel : BaseViewModel() {
private val _unMaskLiveData = MutableLiveData<String>()
val unMaskLiveData: LiveData<String> = _unMaskLiveData
private val _partitionLiveData = MutableLiveData<PartitionInfoBean>()
val partitionLiveData: LiveData<PartitionInfoBean> = _partitionLiveData
private val _changePartitionLiveData = MutableLiveData<String>()
val changePartitionLiveData: LiveData<String> = _changePartitionLiveData
fun getShieldRoom(pageNum: Int, pageSize: Int) {
safeLaunch(
onError = {
@@ -38,4 +46,28 @@ class SetViewModel : BaseViewModel() {
)
}
/**
* 获取用户当前分区和分区列表
*/
fun getPartitionList() {
safeLaunch(
true,
block = {
_partitionLiveData.value = SetModel.getPartitionList()
}
)
}
/**
* 切换分区
*/
fun changePartition(partitionId : Int) {
safeLaunch(
true,
block = {
_changePartitionLiveData.value = SetModel.changePartition(partitionId)
}
)
}
}

View File

@@ -61,6 +61,7 @@ import org.greenrobot.eventbus.EventBus;
import java.io.File;
import java.util.HashMap;
import java.util.Locale;
/**
* <p> html js 与webview 交互接口</p>
@@ -473,6 +474,7 @@ public class JSInterface {
jsonObject.put("appVersionCode", String.valueOf(AppUtils.getVersionCode(context)));
jsonObject.put("deviceId", DeviceUtil.getDeviceId(context));
jsonObject.put("channel", AppMetaDataUtil.getChannelID());
jsonObject.put("accept-language", Locale.getDefault().getLanguage());
Log.e(TAG, "getDeviceInfo: " + jsonObject);
return jsonObject.toJSONString();
}

View File

@@ -15,6 +15,8 @@ import com.yizhuan.xchat_android_core.Constants;
import com.yizhuan.xchat_android_library.utils.AppUtils;
import com.yizhuan.xchat_android_library.utils.VersionUtil;
import java.util.Locale;
/**
* <p> html js 与webview 交互接口</p>
* Created by ${user} on 2017/11/6.
@@ -110,6 +112,7 @@ public class SimpleJSInterface {
jsonObject.put("appVersion", VersionUtil.getLocalName(context));
jsonObject.put("appVersionCode", String.valueOf(AppUtils.getVersionCode(context)));
jsonObject.put("channel", getChannel());
jsonObject.put("accept-language", Locale.getDefault().getLanguage());
Log.e(TAG, "getDeviceInfo: " + jsonObject);
return jsonObject.toJSONString();
}

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ededed" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ffffff" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_ededed" android:state_selected="true" />
<item android:drawable="@drawable/bg_ffffff" android:state_selected="false" />
</selector>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.setting.AreaSelectActivity">
<com.yizhuan.erban.base.TitleBar
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintTop_toTopOf="parent"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title_bar"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -414,6 +414,40 @@
tools:ignore="SpUsage" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginEnd="15dp"
android:background="@color/line_353548" />
<RelativeLayout
android:id="@+id/rly_area"
android:layout_width="match_parent"
android:layout_height="50dp"
android:clickable="true"
android:focusable="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/dp_15"
android:text="分区"
android:textColor="@color/text_title_color"
android:textSize="14sp" />
<ImageView
android:id="@+id/arrow_right_area"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/dp_15"
android:src="@drawable/arrow_right" />
</RelativeLayout>
<TextView
android:id="@+id/btn_login_out"
android:layout_width="320dp"

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cs_bg"
android:background="@drawable/selector_partition_bg"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvArea"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/color_ededed"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -2,22 +2,20 @@
<resources>
<string name="app_name">&app_name;</string>
<string name="no_list_data">暫無消息</string>
<string name="str_network_not_capable">網絡不給力</string>
<string name="network_error_reload">網絡異常,加載失敗</string>
<string name="click_screen_reload">點擊刷新</string>
<string name="loading">加載中&#8230;</string>
<string name="click_or_pull_refresh">點擊或者下拉嘗試刷新</string>
<string name="sure">確定</string>
<string name="no_list_data">لا أخبار</string>
<string name="str_network_not_capable">الشبكة ليست قوية</string>
<string name="network_error_reload">فشل تحميل استثناء الشبكة</string>
<string name="click_screen_reload">انقر للتحديث</string>
<string name="loading">تحميل &#8230;</string>
<string name="click_or_pull_refresh">انقر أو اسحب لأسفل لمحاولة التحديث</string>
<string name="sure">تأكد</string>
<string name="cancel">يلغي</string>
<string name="network_is_abnormal">استثناء الشبكة ، يرجى المحاولة مرة أخرى</string>
<string name="gift_action">هدية</string>
<string name="decoration_action">إرتد ملابس</string>
<string name="login_facebook">تسجيل الدخول عبر الفيسبوك</string>
<string name="login_line">تسجيل الدخول</string>
<string name="login_google">Googleتسجيل الدخول عبر</string>

View File

@@ -3,21 +3,19 @@
<resources>
<string name="app_name">&app_name;</string>
<string name="no_list_data">暫無消息</string>
<string name="str_network_not_capable">網絡不給力</string>
<string name="network_error_reload">網絡異常,加載失敗</string>
<string name="click_screen_reload">點擊刷新</string>
<string name="loading">加載中&#8230;</string>
<string name="click_or_pull_refresh">點擊或者下拉嘗試刷新</string>
<string name="sure">確定</string>
<string name="no_list_data">no news</string>
<string name="str_network_not_capable">network is not strong</string>
<string name="network_error_reload">network exception, failed to load</string>
<string name="click_screen_reload">click to refresh</string>
<string name="loading">loading&#8230;</string>
<string name="click_or_pull_refresh">click or pull down to try to refresh</string>
<string name="sure">Sure</string>
<string name="cancel">Cancel</string>
<string name="network_is_abnormal">Network exception, please try again</string>
<string name="gift_action">Gift</string>
<string name="decoration_action">Dress up</string>
<string name="login_facebook">Facebook login</string>
<string name="login_line">Login</string>
<string name="login_google">Google login</string>
@@ -67,7 +65,7 @@
<string name="tip_type_not_image">The image is not selected</string>
<string name="tip_no_camera">No camera</string>
<string name="tip_tips">Hint</string>
<string name="tip_compress">Compressing photos...</string>
<string name="tip_compress">Compressing photos</string>
<string name="tip_compress_failed">"%1$s picture compression failed: %2$s picturePath:%3$s"</string>
<string name="msg_crop_failed">"image with cropping failure"</string>
<string name="msg_compress_failed">"there are pictures that failed to compress"</string>
@@ -171,7 +169,7 @@
<string name="search_user_id">Search user id</string>
<string name="search_room_or_id">Search room name or id</string>
<string name="search_input_room_or_id">Please enter the room name or id</string>
<string name="online">Online...</string>
<string name="online">Online</string>
<string name="me_customer_server">Customer service</string>

View File

@@ -3,13 +3,13 @@
<resources>
<string name="app_name">&app_name;</string>
<string name="no_list_data">暫無消息</string>
<string name="str_network_not_capable">網絡不給力</string>
<string name="network_error_reload">網絡異常,加載失敗</string>
<string name="click_screen_reload">點擊刷新</string>
<string name="loading">加載中&#8230;</string>
<string name="click_or_pull_refresh">點擊或者下拉嘗試刷新</string>
<string name="sure">確定</string>
<string name="no_list_data">tidak ada pesan</string>
<string name="str_network_not_capable">jaringan tidak kuat</string>
<string name="network_error_reload">pengecualian jaringan, gagal dimuat</string>
<string name="click_screen_reload">klik untuk menyegarkan</string>
<string name="loading">memuat&#8230;</string>
<string name="click_or_pull_refresh">klik atau tarik ke bawah untuk menyegarkan</string>
<string name="sure">konfirmasi</string>
<string name="cancel">Batal</string>
<string name="network_is_abnormal">Pengecualian jaringan, harap coba lagi</string>
<string name="gift_action">Hadiah</string>

View File

@@ -3,20 +3,19 @@
<resources>
<string name="app_name">&app_name;</string>
<string name="no_list_data">暫無消息</string>
<string name="str_network_not_capable">網絡不給力</string>
<string name="network_error_reload">網絡異常,加載失敗</string>
<string name="click_screen_reload">點擊刷新</string>
<string name="loading">加載中&#8230;</string>
<string name="click_or_pull_refresh">點擊或者下拉嘗試刷新</string>
<string name="sure">確定</string>
<string name="no_list_data">haber yok</string>
<string name="str_network_not_capable">Ağ güçlü değil</string>
<string name="network_error_reload">Ağ istisnası, yüklenemedi</string>
<string name="click_screen_reload">yenilemek için tıklayın</string>
<string name="loading">Yükleniyor&#8230;</string>
<string name="click_or_pull_refresh">Yenilemeyi denemek için tıklayın veya aşağı çekin</string>
<string name="sure">Elbette</string>
<string name="cancel">İptal etmek</string>
<string name="network_is_abnormal">Ağ istisnası, lütfen tekrar deneyin</string>
<string name="gift_action">Hediye</string>
<string name="decoration_action">giyinmek</string>
<string name="login_facebook">facebook girişi</string>
<string name="login_line">Giriş yapmak</string>
<string name="login_google">Google girişi</string>