Commit fe134c80 authored by wanglei's avatar wanglei

...多语言

parent 543554ec
...@@ -25,18 +25,7 @@ ...@@ -25,18 +25,7 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.ScanQR" android:theme="@style/Theme.ScanQR"
tools:targetApi="31"> tools:targetApi="31">
<activity
android:name=".ui.language.LanguageActivity"
android:exported="false" />
<activity
android:name=".ui.product.ProductCodeActivity"
android:exported="false" />
<activity
android:name=".ui.website.WebsiteCodeActivity"
android:exported="false" />
<activity
android:name=".ui.website.WebsiteActivity"
android:exported="false" />
<activity <activity
android:name=".ui.start.StartActivity" android:name=".ui.start.StartActivity"
android:exported="true" android:exported="true"
...@@ -86,6 +75,26 @@ ...@@ -86,6 +75,26 @@
android:exported="false" android:exported="false"
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.language.LanguageActivity"
android:exported="false"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.product.ProductCodeActivity"
android:exported="false"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.website.WebsiteCodeActivity"
android:exported="false"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.website.WebsiteActivity"
android:exported="false"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
......
package com.base.scanqr.base package com.base.scanqr.base
import android.app.Activity
import android.app.Dialog import android.app.Dialog
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
...@@ -93,8 +92,11 @@ abstract class BaseActivity<VB : ViewBinding>( ...@@ -93,8 +92,11 @@ abstract class BaseActivity<VB : ViewBinding>(
super.attachBaseContext(MultiLanguages.attach(newBase)) super.attachBaseContext(MultiLanguages.attach(newBase))
} }
/**
fun changeLanguage(currentActivity: Activity, bundle: Bundle = Bundle()): Boolean { * 使用时类的全局变量最好用可为空来定义,
* 避免重新创建activity,在onPause;onStop,onDestroy调用这些全局变量时空异常
*/
fun changeLanguage(): Boolean {
val spLanguage = Locale(appLanguageSp, appLanguageCountrySp) val spLanguage = Locale(appLanguageSp, appLanguageCountrySp)
val flag = currentLocale != spLanguage val flag = currentLocale != spLanguage
val restart = MultiLanguages.setAppLanguage(this, spLanguage) val restart = MultiLanguages.setAppLanguage(this, spLanguage)
...@@ -123,8 +125,10 @@ abstract class BaseActivity<VB : ViewBinding>( ...@@ -123,8 +125,10 @@ abstract class BaseActivity<VB : ViewBinding>(
LogEx.logDebug(TAG, "changeLanguage recreate") LogEx.logDebug(TAG, "changeLanguage recreate")
recreate() recreate()
} else { } else {
startActivity(Intent(this, currentActivity::class.java).apply { startActivity(Intent(this, this::class.java).apply {
putExtras(bundle) val bundle = intent.extras
LogEx.logDebug(TAG, "changeLanguage bundle is null=${bundle == null}")
putExtras(bundle ?: Bundle())
}) })
overridePendingTransition(R.anim.activity_alpha_in, R.anim.activity_alpha_out) overridePendingTransition(R.anim.activity_alpha_in, R.anim.activity_alpha_out)
finish() finish()
......
...@@ -41,13 +41,4 @@ object ConstObject { ...@@ -41,13 +41,4 @@ object ConstObject {
field = value field = value
AppPreferences.getInstance().put("languageCountrySp", value, true) AppPreferences.getInstance().put("languageCountrySp", value, true)
} }
var noShowFriendsShareGuide = false
get() {
return AppPreferences.getInstance().getBoolean("noShowFriendsShareGuide", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("noShowFriendsShareGuide", value, true)
}
} }
\ No newline at end of file
...@@ -14,6 +14,12 @@ class EmailActivity : BaseActivity<ActivityEmailBinding>(ActivityEmailBinding::i ...@@ -14,6 +14,12 @@ class EmailActivity : BaseActivity<ActivityEmailBinding>(ActivityEmailBinding::i
private val email = EmailUIBean() private val email = EmailUIBean()
override fun onResumeOneShoot() {
super.onResumeOneShoot()
val flag = changeLanguage()
if (flag) return
}
override fun initView() { override fun initView() {
super.initView() super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight()) binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
......
...@@ -26,6 +26,13 @@ class EmailCodeActivity : BaseActivity<ActivityEmailCodeBinding>(ActivityEmailCo ...@@ -26,6 +26,13 @@ class EmailCodeActivity : BaseActivity<ActivityEmailCodeBinding>(ActivityEmailCo
private var email = EmailUIBean() private var email = EmailUIBean()
private var tempImage: String = "" private var tempImage: String = ""
private var content: String = "" private var content: String = ""
override fun onResumeOneShoot() {
super.onResumeOneShoot()
val flag = changeLanguage()
if (flag) return
}
override fun initView() { override fun initView() {
super.initView() super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight()) binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
......
package com.base.scanqr.ui.language package com.base.scanqr.ui.language
import android.content.Intent
import androidx.activity.addCallback
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import com.base.scanqr.base.BaseActivity import com.base.scanqr.base.BaseActivity
import com.base.scanqr.bean.ConstObject.appLanguageCountrySp import com.base.scanqr.bean.ConstObject.appLanguageCountrySp
import com.base.scanqr.bean.ConstObject.appLanguageSp import com.base.scanqr.bean.ConstObject.appLanguageSp
import com.base.scanqr.bean.LanguageBean import com.base.scanqr.bean.LanguageBean
import com.base.scanqr.databinding.ActivityLanguageBinding import com.base.scanqr.databinding.ActivityLanguageBinding
import com.base.scanqr.ui.main.MainActivity
import com.base.scanqr.utils.BarUtils import com.base.scanqr.utils.BarUtils
import com.base.scanqr.utils.LogEx
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import java.util.Locale import java.util.Locale
class LanguageActivity : BaseActivity<ActivityLanguageBinding>(ActivityLanguageBinding::inflate) { class LanguageActivity : BaseActivity<ActivityLanguageBinding>(ActivityLanguageBinding::inflate) {
private var isGuide: Boolean = false
private var adapter: LanguageAdapter? = null private var adapter: LanguageAdapter? = null
override fun initView() { override fun initView() {
super.initView() super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight()) binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
isGuide = intent.extras?.getBoolean("isGuide") ?: isGuide
adapter = LanguageAdapter { adapter = LanguageAdapter {
} }
...@@ -27,10 +32,32 @@ class LanguageActivity : BaseActivity<ActivityLanguageBinding>(ActivityLanguageB ...@@ -27,10 +32,32 @@ class LanguageActivity : BaseActivity<ActivityLanguageBinding>(ActivityLanguageB
override fun initListener() { override fun initListener() {
super.initListener() super.initListener()
onBackPressedDispatcher.addCallback {
finishToMainTop()
}
binding.flQueren.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.flQueren.setOnClickListener {
val selectLanguageBean = adapter?.items?.findLast { it.isSelect }
selectLanguageBean ?: return@setOnClickListener
LogEx.logDebug(TAG, "selectLanguageBean=$selectLanguageBean")
appLanguageSp = selectLanguageBean.language
appLanguageCountrySp = selectLanguageBean.country
if (isGuide) {
startActivity(Intent(this, MainActivity::class.java).apply {
// putExtra("isGuide", true)
})
}
finish()
}
} }
override fun onResumeOneShoot() { override fun onResumeOneShoot() {
super.onResumeOneShoot() super.onResumeOneShoot()
val flag = changeLanguage()
if (flag) return
initData() initData()
} }
......
...@@ -20,7 +20,7 @@ import com.gyf.immersionbar.ktx.immersionBar ...@@ -20,7 +20,7 @@ import com.gyf.immersionbar.ktx.immersionBar
class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate) { class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate) {
private lateinit var navController: NavController private var navController: NavController? = null
var cameraUtils: CameraUtils? = null var cameraUtils: CameraUtils? = null
private val homeTabs by lazy { private val homeTabs by lazy {
...@@ -32,6 +32,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl ...@@ -32,6 +32,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
) )
} }
override fun onResumeOneShoot() {
super.onResumeOneShoot()
changeLanguage()
}
override fun initView() { override fun initView() {
super.initView() super.initView()
...@@ -79,19 +83,19 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl ...@@ -79,19 +83,19 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
private fun naviFragment(id: Int) { private fun naviFragment(id: Int) {
when (id) { when (id) {
0 -> { 0 -> {
navController.navigate(R.id.createFragment) navController?.navigate(R.id.createFragment)
} }
1 -> { 1 -> {
navController.navigate(R.id.scanFragment) navController?.navigate(R.id.scanFragment)
} }
2 -> { 2 -> {
navController.navigate(R.id.historyFragment) navController?.navigate(R.id.historyFragment)
} }
3 -> { 3 -> {
navController.navigate(R.id.settingsFragment) navController?.navigate(R.id.settingsFragment)
} }
} }
} }
......
...@@ -33,6 +33,11 @@ class ProductCodeActivity : BaseActivity<ActivityProductCodeBinding>(ActivityPro ...@@ -33,6 +33,11 @@ class ProductCodeActivity : BaseActivity<ActivityProductCodeBinding>(ActivityPro
private var productUIBean = ProductUIBean() private var productUIBean = ProductUIBean()
private var tempImage: String = "" private var tempImage: String = ""
override fun onResumeOneShoot() {
super.onResumeOneShoot()
val flag = changeLanguage()
if (flag) return
}
override fun initView() { override fun initView() {
super.initView() super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight()) binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
......
...@@ -7,6 +7,7 @@ import com.base.scanqr.base.BaseActivity ...@@ -7,6 +7,7 @@ import com.base.scanqr.base.BaseActivity
import com.base.scanqr.bean.ConstObject import com.base.scanqr.bean.ConstObject
import com.base.scanqr.bean.ConstObject.isFirstLauncher import com.base.scanqr.bean.ConstObject.isFirstLauncher
import com.base.scanqr.databinding.ActivityStartBinding import com.base.scanqr.databinding.ActivityStartBinding
import com.base.scanqr.ui.language.LanguageActivity
import com.base.scanqr.ui.main.MainActivity import com.base.scanqr.ui.main.MainActivity
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
...@@ -86,7 +87,8 @@ class StartActivity : BaseActivity<ActivityStartBinding>(ActivityStartBinding::i ...@@ -86,7 +87,8 @@ class StartActivity : BaseActivity<ActivityStartBinding>(ActivityStartBinding::i
} }
private fun firstLauncherJump() { private fun firstLauncherJump() {
startActivity(Intent(this, MainActivity::class.java).apply { startActivity(Intent(this, LanguageActivity::class.java).apply {
putExtra("isGuide", true)
}) })
finish() finish()
} }
......
...@@ -13,6 +13,12 @@ import com.google.gson.Gson ...@@ -13,6 +13,12 @@ import com.google.gson.Gson
class TextActivity : BaseActivity<ActivityTextBinding>(ActivityTextBinding::inflate) { class TextActivity : BaseActivity<ActivityTextBinding>(ActivityTextBinding::inflate) {
override fun onResumeOneShoot() {
super.onResumeOneShoot()
val flag = changeLanguage()
if (flag) return
}
override fun initView() { override fun initView() {
super.initView() super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight()) binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
......
...@@ -30,6 +30,12 @@ class TextCodeActivity : BaseActivity<ActivityTextCodeBinding>(ActivityTextCodeB ...@@ -30,6 +30,12 @@ class TextCodeActivity : BaseActivity<ActivityTextCodeBinding>(ActivityTextCodeB
private var textUIBean = TextUIBean() private var textUIBean = TextUIBean()
private var tempImage: String = "" private var tempImage: String = ""
override fun onResumeOneShoot() {
super.onResumeOneShoot()
val flag = changeLanguage()
if (flag) return
}
override fun initView() { override fun initView() {
super.initView() super.initView()
......
...@@ -17,6 +17,11 @@ class WebsiteActivity : BaseActivity<ActivityWebsiteBinding>(ActivityWebsiteBind ...@@ -17,6 +17,11 @@ class WebsiteActivity : BaseActivity<ActivityWebsiteBinding>(ActivityWebsiteBind
private var websiteUIBean = WebsiteUIBean() private var websiteUIBean = WebsiteUIBean()
override fun onResumeOneShoot() {
super.onResumeOneShoot()
val flag = changeLanguage()
if (flag) return
}
override fun initView() { override fun initView() {
super.initView() super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight()) binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
......
...@@ -26,6 +26,11 @@ class WebsiteCodeActivity : BaseActivity<ActivityWebsiteCodeBinding>(ActivityWeb ...@@ -26,6 +26,11 @@ class WebsiteCodeActivity : BaseActivity<ActivityWebsiteCodeBinding>(ActivityWeb
private var websiteUIBean = WebsiteUIBean() private var websiteUIBean = WebsiteUIBean()
private var tempImage: String = "" private var tempImage: String = ""
override fun onResumeOneShoot() {
super.onResumeOneShoot()
val flag = changeLanguage()
if (flag) return
}
override fun initView() { override fun initView() {
super.initView() super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight()) binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
......
...@@ -36,6 +36,11 @@ class WifiActivity : BaseActivity<ActivityWifiBinding>(ActivityWifiBinding::infl ...@@ -36,6 +36,11 @@ class WifiActivity : BaseActivity<ActivityWifiBinding>(ActivityWifiBinding::infl
private var wifiScanFinish: Boolean = false private var wifiScanFinish: Boolean = false
private var currentWifi: WifiUIBean = WifiUIBean() private var currentWifi: WifiUIBean = WifiUIBean()
override fun onResumeOneShoot() {
super.onResumeOneShoot()
val flag = changeLanguage()
if (flag) return
}
override fun initView() { override fun initView() {
super.initView() super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight()) binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
......
...@@ -27,6 +27,13 @@ class WifiCodeActivity : BaseActivity<ActivityWifiCodeBinding>(ActivityWifiCodeB ...@@ -27,6 +27,13 @@ class WifiCodeActivity : BaseActivity<ActivityWifiCodeBinding>(ActivityWifiCodeB
private var wifiBean: WifiUIBean = WifiUIBean() private var wifiBean: WifiUIBean = WifiUIBean()
private var wifiContent: String = "" private var wifiContent: String = ""
private var tempImage: String = "" private var tempImage: String = ""
override fun onResumeOneShoot() {
super.onResumeOneShoot()
val flag = changeLanguage()
if (flag) return
}
override fun initView() { override fun initView() {
super.initView() super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight()) binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
......
...@@ -71,12 +71,11 @@ ...@@ -71,12 +71,11 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginTop="18dp" android:layout_marginTop="18dp"
android:text="Web address" android:text="@string/web_address"
android:textColor="#6473F8" android:textColor="#6473F8"
android:textSize="16sp" /> android:textSize="16sp" />
<EditText <EditText
android:text="http://"
android:id="@+id/edit" android:id="@+id/edit"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="52dp" android:layout_height="52dp"
...@@ -87,6 +86,7 @@ ...@@ -87,6 +86,7 @@
android:hint="http://" android:hint="http://"
android:inputType="textUri" android:inputType="textUri"
android:paddingHorizontal="14dp" android:paddingHorizontal="14dp"
android:text="http://"
android:textColor="@color/black" android:textColor="@color/black"
android:textColorHint="#999999" /> android:textColorHint="#999999" />
</LinearLayout> </LinearLayout>
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="create">创建</string>
<string name="scan">扫描</string>
<string name="history">历史</string>
<string name="settings">设置</string>
<string name="password">密码</string>
<string name="content">内容</string>
<string name="subject">副标题</string>
<string name="website">网站</string>
<string name="text">文本</string>
<string name="change_language">改变语言</string>
<string name="send_feedback">提交反馈</string>
<string name="privacy_policy">隐私政策</string>
</resources>
\ No newline at end of file
...@@ -63,4 +63,5 @@ ...@@ -63,4 +63,5 @@
<string name="version">"Version "</string> <string name="version">"Version "</string>
<string name="no_qrcode">NO QRCode</string> <string name="no_qrcode">NO QRCode</string>
<string name="choose_language">Choose language</string> <string name="choose_language">Choose language</string>
<string name="web_address">Web address</string>
</resources> </resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment