Commit 3beaf72c authored by wanglei's avatar wanglei

init

parent f429367e
package com.base.locationsharewhite.bean package com.base.locationsharewhite.bean
import com.base.locationsharewhite.utils.AppPreferences import com.base.locationsharewhite.utils.AppPreferences
import java.util.Locale
object ConstObject { object ConstObject {
...@@ -22,4 +23,21 @@ object ConstObject { ...@@ -22,4 +23,21 @@ object ConstObject {
AppPreferences.getInstance().put("myLocationCode", value, true) AppPreferences.getInstance().put("myLocationCode", value, true)
} }
var appLanguageSp = Locale.getDefault().language + "_" + Locale.getDefault().country
get() {
return AppPreferences.getInstance().getString("appLanguageSp", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("appLanguageSp", value, true)
}
var changeLanguageSp = appLanguageSp
get() {
return AppPreferences.getInstance().getString("changeLanguageSp", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("changeLanguageSp", value, true)
}
} }
\ No newline at end of file
package com.base.locationsharewhite.bean
import java.util.Locale
data class LanguageBean(
val key: String,
val language: String,
val country:String,
) {
var isSelect: Boolean = false
var isFollowSystem: Boolean = false
companion object {
const val English = "English"
const val 简体中文 = "简体中文"
const val português = "português"
const val Español = "Español "
const val Français = "Français"
const val Deutsch = "Deutsch"
const val ไทย = "ไทย"
const val Bahasa_Indonesia = "Bahasa Indonesia"
const val Melayu = "Melayu"
const val Tiếng_Việt = "Tiếng Việt"
const val 日本語 = "日本語"
const val Italiano = "Italiano"
const val 한국인 = "한국인"
const val Nederlands = "Nederlands"
const val 繁體中文 = "繁體中文"
const val Türk = "Türk"
}
}
\ No newline at end of file
...@@ -5,8 +5,11 @@ import android.content.Intent ...@@ -5,8 +5,11 @@ import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import com.base.locationsharewhite.bean.ConstObject.appLanguageSp
import com.base.locationsharewhite.bean.ConstObject.changeLanguageSp
import com.base.locationsharewhite.ui.main.MainActivity import com.base.locationsharewhite.ui.main.MainActivity
import com.base.locationsharewhite.utils.ActivityLauncher import com.base.locationsharewhite.utils.ActivityLauncher
import com.base.locationsharewhite.utils.LanguageUtils.changeAppLanguage
import com.base.locationsharewhite.utils.LogEx import com.base.locationsharewhite.utils.LogEx
abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() { abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() {
...@@ -54,34 +57,34 @@ abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() { ...@@ -54,34 +57,34 @@ abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() {
super.onResume() super.onResume()
} }
// fun updateAppLanguage( fun updateAppLanguage(
// activityLanguage: String, activityLanguage: String,
// activityTag: String? = null, activityTag: String? = null,
// activityChangeCallback: ((language: String) -> Unit)? = null activityChangeCallback: ((language: String) -> Unit)? = null
// ): Boolean { ): Boolean {
// LogEx.logDebug( LogEx.logDebug(
// TAG, TAG,
// "activityTag=$activityTag " + "activityTag=$activityTag " +
// "appLanguageSp=$appLanguageSp " + "appLanguageSp=$appLanguageSp " +
// "changeLanguageSp=$changeLanguageSp " + "changeLanguageSp=$changeLanguageSp " +
// "activityLanguage=$activityLanguage" "activityLanguage=$activityLanguage"
// ) )
// var isRecreate = false var isRecreate = false
//
// if (appLanguageSp != changeLanguageSp || activityLanguage != changeLanguageSp) { if (appLanguageSp != changeLanguageSp || activityLanguage != changeLanguageSp) {
//
// changeAppLanguage(this, changeLanguageSp) changeAppLanguage(this, changeLanguageSp)
// // Restart the app // Restart the app
// appLanguageSp = changeLanguageSp appLanguageSp = changeLanguageSp
// activityChangeCallback?.invoke(changeLanguageSp) activityChangeCallback?.invoke(changeLanguageSp)
// LogEx.logDebug(TAG, "activityTag=$activityTag recreate") LogEx.logDebug(TAG, "activityTag=$activityTag recreate")
// isRecreate = true isRecreate = true
//
// //https://stackoverflow.com/questions/63209993/getting-lifecycle-exception-while-recreating-the-activity //https://stackoverflow.com/questions/63209993/getting-lifecycle-exception-while-recreating-the-activity
// //MIUI recreate //MIUI recreate
// this@BaseActivity.recreate() this@BaseActivity.recreate()
// } }
// return isRecreate return isRecreate
// } }
} }
\ No newline at end of file
...@@ -20,8 +20,11 @@ class MyApplication : Application() { ...@@ -20,8 +20,11 @@ class MyApplication : Application() {
lateinit var context: MyApplication lateinit var context: MyApplication
var splashLanguage: String = Locale.getDefault().language var splashLanguage: String = Locale.getDefault().language + "_" + Locale.getDefault().country
var mainLanguage: String = Locale.getDefault().language var mainLanguage: String = Locale.getDefault().language + "_" + Locale.getDefault().country
var setLanguage: String = Locale.getDefault().language + "_" + Locale.getDefault().country
var settingsLanguage: String = Locale.getDefault().language + "_" + Locale.getDefault().country
var umpCanAd: Boolean = true var umpCanAd: Boolean = true
@JvmField @JvmField
......
...@@ -52,7 +52,6 @@ class HowUseShareActivity : BaseActivity<ActivityHowUseShareBinding>() { ...@@ -52,7 +52,6 @@ class HowUseShareActivity : BaseActivity<ActivityHowUseShareBinding>() {
} }
override fun onPageSelected(position: Int) { override fun onPageSelected(position: Int) {
LogEx.logDebug("banner", "position=$position")
if (position == 0) { if (position == 0) {
step1ui() step1ui()
} else { } else {
......
...@@ -5,6 +5,7 @@ import android.graphics.Color ...@@ -5,6 +5,7 @@ import android.graphics.Color
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import com.base.locationsharewhite.databinding.ActivityMainBinding import com.base.locationsharewhite.databinding.ActivityMainBinding
import com.base.locationsharewhite.helper.BaseActivity import com.base.locationsharewhite.helper.BaseActivity
import com.base.locationsharewhite.helper.MyApplication
import com.base.locationsharewhite.ui.howuse.HowUseActivity import com.base.locationsharewhite.ui.howuse.HowUseActivity
import com.base.locationsharewhite.ui.locationmap.LocationMapActivity import com.base.locationsharewhite.ui.locationmap.LocationMapActivity
import com.base.locationsharewhite.ui.set.SettingActivity import com.base.locationsharewhite.ui.set.SettingActivity
...@@ -41,4 +42,14 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -41,4 +42,14 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
startActivity(Intent(this, SettingActivity::class.java)) startActivity(Intent(this, SettingActivity::class.java))
} }
} }
override fun onResume() {
super.onResume()
val isRecreate = updateAppLanguage(MyApplication.mainLanguage) {
MyApplication.mainLanguage = it
}
if (isRecreate) {
return
}
}
} }
\ No newline at end of file
package com.base.locationsharewhite.ui.set package com.base.locationsharewhite.ui.set
import android.graphics.Color
import androidx.core.view.updatePadding
import com.base.locationsharewhite.bean.ConstObject
import com.base.locationsharewhite.bean.ConstObject.appLanguageSp
import com.base.locationsharewhite.bean.LanguageBean
import com.base.locationsharewhite.databinding.ActivityLanguageBinding import com.base.locationsharewhite.databinding.ActivityLanguageBinding
import com.base.locationsharewhite.helper.BaseActivity import com.base.locationsharewhite.helper.BaseActivity
import com.base.locationsharewhite.helper.MyApplication
import com.base.locationsharewhite.utils.BarUtils
import java.util.Locale
class LanguageActivity : BaseActivity<ActivityLanguageBinding>() { class LanguageActivity : BaseActivity<ActivityLanguageBinding>() {
private val TAG = "LanguageActivity"
private lateinit var adapter: LanguageAdapter
override val binding: ActivityLanguageBinding by lazy { override val binding: ActivityLanguageBinding by lazy {
ActivityLanguageBinding.inflate(layoutInflater) ActivityLanguageBinding.inflate(layoutInflater)
} }
override fun initView() { override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.WHITE)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
adapter = LanguageAdapter(click = {
})
binding.rv.adapter = adapter
initData()
}
private fun initData() {
val languageBeanList = listOf(
LanguageBean(LanguageBean.English, Locale.ENGLISH.language, Locale.ENGLISH.country),
LanguageBean(LanguageBean.简体中文, Locale.CHINA.language, Locale.CHINA.country),
LanguageBean(LanguageBean.português, Locale("pt", "BR").language, Locale("pt", "BR").country),
LanguageBean(LanguageBean.Español, Locale("es").language, Locale("es").country),
LanguageBean(LanguageBean.Français, Locale.FRENCH.language, Locale.FRENCH.country),
LanguageBean(LanguageBean.Deutsch, Locale.GERMAN.language, Locale.GERMAN.country),
LanguageBean(LanguageBean.ไทย, Locale("th", "TH").language, Locale("th", "TH").country),
LanguageBean(LanguageBean.Bahasa_Indonesia, Locale("in", "ID").language, Locale("in", "ID").country),
LanguageBean(LanguageBean.Melayu, Locale("ms", "MY").language, Locale("ms", "MY").country),
LanguageBean(LanguageBean.Tiếng_Việt, Locale("vi", "VN").language, Locale("vi", "VN").country),
LanguageBean(LanguageBean.日本語, Locale.JAPAN.language, Locale.JAPAN.country),
LanguageBean(LanguageBean.Italiano, Locale.ITALY.language, Locale.ITALY.country),
LanguageBean(LanguageBean.한국인, Locale.KOREAN.language, Locale.KOREAN.country),
LanguageBean(LanguageBean.Nederlands, Locale("nl", "NL").language, Locale("nl", "NL").country),
LanguageBean(LanguageBean.繁體中文, Locale.TRADITIONAL_CHINESE.language, Locale.TRADITIONAL_CHINESE.country),
LanguageBean(LanguageBean.Türk, Locale("tr", "TR").language, Locale("tr", "TR").country),
)
val spLC = appLanguageSp.split("_")
if (spLC.size == 2) {
//匹配语言和国家
languageBeanList.findLast { it.language == spLC[0] && it.country == spLC[1] }?.isSelect = true
} else {
//匹配语言
languageBeanList.findLast { it.language == spLC[0] }?.isSelect = true
}
adapter.submitList(languageBeanList)
}
override fun initListener() {
super.initListener()
binding.tvNext.setOnClickListener {
val selectLanguage = adapter.items.findLast { it.isSelect }?.language
selectLanguage ?: return@setOnClickListener
ConstObject.changeLanguageSp = selectLanguage
finish()
}
}
override fun onResume() {
super.onResume()
val isRecreate = updateAppLanguage(MyApplication.setLanguage, TAG) {
MyApplication.setLanguage = it
}
if (isRecreate) {
return
}
} }
} }
\ No newline at end of file
package com.base.locationsharewhite.ui.set
import android.annotation.SuppressLint
import android.content.Context
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.base.locationsharewhite.R
import com.base.locationsharewhite.bean.LanguageBean
import com.base.locationsharewhite.databinding.ItemLanguageBinding
import com.base.locationsharewhite.ui.views.XmlEx.inflate
import com.chad.library.adapter4.BaseQuickAdapter
class LanguageAdapter(
val click: (item: LanguageBean) -> Unit
) : BaseQuickAdapter<LanguageBean, LanguageAdapter.LanguageViewHolder>() {
inner class LanguageViewHolder(view: View) : RecyclerView.ViewHolder(view)
@SuppressLint("NotifyDataSetChanged")
override fun onBindViewHolder(holder: LanguageViewHolder, position: Int, item: LanguageBean?) {
item ?: return
val binding = ItemLanguageBinding.bind(holder.itemView)
binding.tv.text = item.key
binding.fl.isSelected = item.isSelect
binding.root.setOnClickListener {
items.map { it.isSelect = false }
item.isSelect = true
notifyDataSetChanged()
click.invoke(item)
}
}
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): LanguageViewHolder {
return LanguageViewHolder(R.layout.item_language.inflate(parent))
}
}
\ No newline at end of file
...@@ -6,9 +6,11 @@ import androidx.activity.addCallback ...@@ -6,9 +6,11 @@ import androidx.activity.addCallback
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import com.base.locationsharewhite.databinding.ActivitySettingBinding import com.base.locationsharewhite.databinding.ActivitySettingBinding
import com.base.locationsharewhite.helper.BaseActivity import com.base.locationsharewhite.helper.BaseActivity
import com.base.locationsharewhite.helper.MyApplication
import com.base.locationsharewhite.utils.BarUtils import com.base.locationsharewhite.utils.BarUtils
class SettingActivity : BaseActivity<ActivitySettingBinding>() { class SettingActivity : BaseActivity<ActivitySettingBinding>() {
private val TAG = "SettingActivity"
override val binding: ActivitySettingBinding by lazy { override val binding: ActivitySettingBinding by lazy {
ActivitySettingBinding.inflate(layoutInflater) ActivitySettingBinding.inflate(layoutInflater)
...@@ -31,6 +33,19 @@ class SettingActivity : BaseActivity<ActivitySettingBinding>() { ...@@ -31,6 +33,19 @@ class SettingActivity : BaseActivity<ActivitySettingBinding>() {
binding.llFeedback.setOnClickListener { binding.llFeedback.setOnClickListener {
startActivity(Intent(this, FeedbackActivity::class.java)) startActivity(Intent(this, FeedbackActivity::class.java))
} }
binding.llLanguage.setOnClickListener {
startActivity(Intent(this, LanguageActivity::class.java))
}
}
override fun onResume() {
super.onResume()
val isRecreate = updateAppLanguage(MyApplication.settingsLanguage, TAG) {
MyApplication.settingsLanguage = it
}
if (isRecreate) {
return
}
} }
} }
\ No newline at end of file
package com.base.locationsharewhite.utils
import android.content.Context
import android.os.LocaleList
import java.util.Locale
object LanguageUtils {
fun getSystemLanguage(): String {
return Locale.getDefault().language
}
val supportLanguage = listOf(
Locale.ENGLISH.language,
Locale.PRC.language,
Locale("pt", "BR").language,
Locale("es").language,
Locale.FRENCH.language,
Locale("de").language,
Locale("th", "TH").language,
Locale("in", "ID").language,
Locale("ms", "MY").language,
Locale("vi", "VN").language,
Locale("ja", "JP").language,
Locale("it", "IT").language,
Locale("ko", "KR").language,
Locale("nl", "NL").language,
Locale("zh", "TW").language,
Locale("tr", "TR").language
)
fun getSystemLanguageDefault(): String {
var systemLanguage = getSystemLanguage()
if (!supportLanguage.contains(systemLanguage)) {
systemLanguage = Locale.ENGLISH.language
}
return systemLanguage
}
fun isSupportSystemLanguage(): Boolean {
return supportLanguage.contains(getSystemLanguage())
}
fun changeAppLanguage(context: Context, languageCountry: String) {
val config = context.resources.configuration
val lc = languageCountry.split("_")
val locale = if (lc.size == 2) {
Locale(lc[0], lc[1])
} else {
Locale(lc[0])
}
//Android 7.0以上的方法
config.setLocale(locale)
config.setLocales(LocaleList(locale))
context.createConfigurationContext(config)
context.resources.updateConfiguration(config, context.resources.displayMetrics)
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#03B988" android:state_selected="true" />
<item android:color="#0C2A22" android:state_selected="false" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_stroke_03b988_15_3" android:state_selected="true" />
<item android:drawable="@drawable/bg_stroke_0c2a22_15_3" android:state_selected="false" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="3dp"
android:color="#03B988" />
<corners android:radius="15dp"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="3dp"
android:color="#0C2A22" />
<corners android:radius="15dp" />
</shape>
\ No newline at end of file
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<LinearLayout <LinearLayout
android:layout_width="75dp" android:id="@+id/tv_next"
android:layout_width="wrap_content"
android:layout_height="38dp" android:layout_height="38dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:background="@drawable/bg_03b988_19" android:background="@drawable/bg_03b988_19"
...@@ -30,6 +31,7 @@ ...@@ -30,6 +31,7 @@
app:layout_constraintTop_toTopOf="@id/tv"> app:layout_constraintTop_toTopOf="@id/tv">
<TextView <TextView
android:paddingStart="8dp"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
...@@ -53,8 +55,12 @@ ...@@ -53,8 +55,12 @@
</LinearLayout> </LinearLayout>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_marginTop="8dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:overScrollMode="never"
android:paddingVertical="16dp"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
android:textSize="28sp" /> android:textSize="28sp" />
<LinearLayout <LinearLayout
android:layout_width="106dp" android:layout_width="wrap_content"
android:layout_height="38dp" android:layout_height="38dp"
android:layout_gravity="center_vertical|end" android:layout_gravity="center_vertical|end"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
...@@ -73,6 +73,7 @@ ...@@ -73,6 +73,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:text="@string/rename" android:text="@string/rename"
android:textColor="#08C95C" android:textColor="#08C95C"
android:textSize="17sp" /> android:textSize="17sp" />
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"> android:id="@+id/fl"
android:layout_width="185dp"
android:layout_height="76dp"
android:layout_margin="8dp"
android:background="@drawable/bg_language_selector">
</androidx.constraintlayout.widget.ConstraintLayout> <TextView
\ No newline at end of file android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/color_language_text"
android:textSize="18sp"
android:textStyle="bold"
tools:text="English" />
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?><resources>
<string name="moment_please_s">请时刻...%1$d%%</string>
<string name="friend_location_map">朋友位置图</string>
<string name="view_friend_locations_on_the_map">在地图上查看好友位置</string>
<string name="my_location_code">我的位置代码</string>
<string name="share_my_location">分享我的位置</string>
<string name="how_to_use">如何使用?</string>
<string name="settings">设置</string>
<string name="friends">朋友们</string>
<string name="friend_tips">当您将位置代码发送给朋友并粘贴该代码以成功共享位置时,大约需要 1-10 分钟才能建立位置共享链接。请耐心等待!</string>
<string name="got_it">知道了</string>
<string name="do_not_show_again">不再显示</string>
<string name="no_friend_location_information">没有好友位置信息</string>
<string name="street_map">街道地图</string>
<string name="statellite_map">卫星地图</string>
<string name="location_code_tips">复制下面的位置代码并将其发送给朋友。当您的朋友将位置代码粘贴到应用程序中并单击“共享”时,您就可以获得他们的位置。</string>
<string name="copy">复制</string>
<string name="location_code_share_tips">请您的朋友向您发送位置代码。\n然后将您朋友的位置代码粘贴到下面,\n单击共享按钮共享您的位置。\n</string>
<string name="enter_others_location_code">输入其他\n位置代码</string>
<string name="share_my_location_da">分享我的位置</string>
<string name="what_do_you_want_to_do">你想让我做什么?</string>
<string name="share_my_nlocation">分享我的\n位置</string>
<string name="view_others_nlocation">查看其他\n位置</string>
<string name="how_to_share_my_location">如何分享我的位置?</string>
<string name="just_2_steps">只需 2 步</string>
<string name="how_share_location_step_1">1. 请您的朋友向您发送位置代码。</string>
<string name="how_share_location_step_2">2. 然后在下面粘贴您朋友的位置代码,然后单击共享按钮共享您的位置。</string>
<string name="more_two_use">温馨提示:需要两人以上同时下载AP才能使用</string>
<string name="next">下一个</string>
<string name="let_s_go">我们走吧</string>
<string name="how_to_view_others_location">如何查看别人的位置?</string>
<string name="how_view_other_step_1">1. 复制下面的位置代码并将其发送给朋友。\n</string>
<string name="how_view_other_step_2">2.当您的朋友在应用中粘贴LLocation\n代码并点击分享时,您就可以获得他们的位置\n</string>
<string name="hello_ndefault">您好,\n默认!</string>
<string name="rename">重命名</string>
<string name="language">语言</string>
<string name="rate_us">评价我们</string>
<string name="feedback">反馈</string>
<string name="about_us">关于我们</string>
<string name="share_app">分享应用程序</string>
<string name="enter_your_suggestion_please">请输入您的建议</string>
<string name="within_500_characters">500字以内</string>
<string name="thanks_for_your_feedback">感谢您的反馈</string>
</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