app/src/main/java/jp/aosystem/dice/MainActivity.kt
package jp.aosystem.dice
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.res.Configuration
import android.os.*
import android.util.DisplayMetrics
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.view.ViewTreeObserver.OnGlobalLayoutListener
import android.widget.ImageView
import android.widget.LinearLayout
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.constraintlayout.widget.ConstraintLayout
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.google.android.gms.ads.MobileAds
import jp.aosystem.dice.databinding.ActivityMainBinding
import java.util.*
import kotlin.random.Random
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var viewModel: ConstraintLayout
//
private var baseWidth: Int = 0
private var baseHeight: Int = 0
private val resourceImg: Array<Int> = arrayOf(
R.drawable.dice0,
R.drawable.dice1,
R.drawable.dice2,
R.drawable.dice3,
R.drawable.dice4,
R.drawable.dice5,
R.drawable.dice6,
R.drawable.dice7,
R.drawable.dice8,
R.drawable.dice9,
R.drawable.dice10,
R.drawable.dice11,
R.drawable.dice12,
)
private var diceImage: Array<ImageView> = arrayOf()
private var actionCount: Int = 0 //回転の制御
private var destroyFlag: Boolean = false //Activity破棄された場合など
private var diceCount: Int = 1
private var themeNumber: Int = 0
private var localeLanguage: String = ""
//adMob
private lateinit var adView: AdView //adMob
private val adSize: AdSize
get() {
val display = windowManager.defaultDisplay
val outMetrics = DisplayMetrics()
display.getMetrics(outMetrics)
val density = outMetrics.density
var adWidthPixels = this.binding.adContainer.width.toFloat()
if (adWidthPixels == 0f) {
adWidthPixels = outMetrics.widthPixels.toFloat()
}
val adWidth = (adWidthPixels / density).toInt()
return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth)
}
companion object {
//private const val AD_UNIT_ID: String = "ca-app-pub-3940256099942544/6300978111" //adMob Test
private const val AD_UNIT_ID: String = "ca-app-pub-0000000000000000/0000000000" //adMob
private const val RESULT_SETTING_ACTIVITY: Int = 1
internal const val SETTINGS: String = "settings"
internal const val DICE_COUNT: String = "diceCount"
internal const val THEME_NUMBER: String = "themeNumber"
internal const val LOCALE_LANGUAGE: String = "localeLanguage"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//setContentView(R.layout.activity_main)
this.binding = ActivityMainBinding.inflate(layoutInflater)
this.viewModel = this.binding.root
setContentView(this.viewModel)
//タイトルバー非表示
supportActionBar?.hide()
//テーマ読み込みと設定
this.loadThemeNumber()
this.setTheme()
//設定読み出し
this.loadDiceCount()
//adMob
MobileAds.initialize(this) {}
this.adView = AdView(this)
this.binding.adContainer.addView(this.adView)
this.loadBanner()
}
override fun onResume() {
super.onResume()
//準備が出来たらwidth,heightを取得して次へ進む
this.binding.layoutBase.viewTreeObserver.addOnGlobalLayoutListener(object: OnGlobalLayoutListener {
override fun onGlobalLayout() {
this@MainActivity.binding.layoutBase.viewTreeObserver.removeOnGlobalLayoutListener(this)
this@MainActivity.baseWidth = this@MainActivity.binding.layoutBase.width
this@MainActivity.baseHeight = this@MainActivity.binding.layoutBase.height
this@MainActivity.initDice()
}
})
}
override fun onDestroy() {
this.destroyFlag = true
super.onDestroy()
}
//adMob
private fun loadBanner() {
this.adView.adUnitId = AD_UNIT_ID
this.adView.adSize = adSize
val adRequest = AdRequest
.Builder()
//.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build()
this.adView.loadAd(adRequest)
}
private fun initDice() {
this.binding.layoutBase.removeAllViews()
this.diceImage = arrayOf(
ImageView(this),
ImageView(this),
ImageView(this),
ImageView(this),
ImageView(this),
ImageView(this),
)
val boxSize: Int = minOf(this.baseWidth,this.baseHeight)
when (this.diceCount) {
1 -> {
this.diceImage[0].setImageResource(resourceImg[12])
val diceSize: Int = boxSize
val marginTop: Int = (this.baseHeight - boxSize).div(2)
val linearLayout: LinearLayout = LinearLayout(this)
linearLayout.y = marginTop.toFloat()
linearLayout.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout.gravity = Gravity.CENTER
linearLayout.addView(this.diceImage[0],diceSize,diceSize)
this.binding.layoutBase.addView(linearLayout)
}
2 -> {
this.diceImage[0].setImageResource(resourceImg[11])
this.diceImage[1].setImageResource(resourceImg[12])
var diceSize: Int = boxSize.div(2)
var marginTop: Int = (this.baseHeight - boxSize.div(2)).div(2)
if (this.baseWidth > this.baseHeight) { //横
diceSize = minOf(this.baseWidth.div(2),this.baseHeight)
marginTop = (this.baseHeight - diceSize).div(2)
}
val linearLayout: LinearLayout = LinearLayout(this)
linearLayout.y = marginTop.toFloat()
linearLayout.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout.gravity = Gravity.CENTER
linearLayout.addView(this.diceImage[0],diceSize,diceSize)
linearLayout.addView(this.diceImage[1],diceSize,diceSize)
this.binding.layoutBase.addView(linearLayout)
}
3 -> {
this.diceImage[0].setImageResource(resourceImg[10])
this.diceImage[1].setImageResource(resourceImg[11])
this.diceImage[2].setImageResource(resourceImg[12])
if (this.baseWidth > this.baseHeight) { //横
val diceSize: Int = minOf(this.baseWidth.div(3),this.baseHeight)
val marginTop: Int = (this.baseHeight - diceSize).div(2)
val linearLayout1: LinearLayout = LinearLayout(this)
linearLayout1.y = marginTop.toFloat()
linearLayout1.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout1.gravity = Gravity.CENTER
linearLayout1.addView(this.diceImage[0], diceSize, diceSize)
linearLayout1.addView(this.diceImage[1], diceSize, diceSize)
linearLayout1.addView(this.diceImage[2], diceSize, diceSize)
this.binding.layoutBase.addView(linearLayout1)
} else { //縦
val diceSize: Int = boxSize.div(2)
val marginTop: Int = (this.baseHeight - diceSize.times(2)).div(2)
val linearLayout1: LinearLayout = LinearLayout(this)
linearLayout1.y = marginTop.toFloat()
linearLayout1.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout1.gravity = Gravity.CENTER
linearLayout1.addView(this.diceImage[0],diceSize,diceSize)
linearLayout1.addView(this.diceImage[1],diceSize,diceSize)
this.binding.layoutBase.addView(linearLayout1)
val linearLayout2: LinearLayout = LinearLayout(this)
linearLayout2.y = marginTop.toFloat()
linearLayout2.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout2.gravity = Gravity.CENTER
linearLayout2.addView(this.diceImage[2],diceSize,diceSize)
this.binding.layoutBase.addView(linearLayout2)
}
}
4 -> {
this.diceImage[0].setImageResource(resourceImg[9])
this.diceImage[1].setImageResource(resourceImg[10])
this.diceImage[2].setImageResource(resourceImg[11])
this.diceImage[3].setImageResource(resourceImg[12])
if (this.baseWidth > this.baseHeight) { //横
val diceSize: Int = minOf(this.baseWidth.div(4),this.baseHeight)
val marginTop: Int = (this.baseHeight - diceSize).div(2)
val linearLayout1: LinearLayout = LinearLayout(this)
linearLayout1.y = marginTop.toFloat()
linearLayout1.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout1.gravity = Gravity.CENTER
linearLayout1.addView(this.diceImage[0], diceSize, diceSize)
linearLayout1.addView(this.diceImage[1], diceSize, diceSize)
linearLayout1.addView(this.diceImage[2], diceSize, diceSize)
linearLayout1.addView(this.diceImage[3], diceSize, diceSize)
this.binding.layoutBase.addView(linearLayout1)
} else { //縦
val diceSize: Int = boxSize.div(2)
val marginTop: Int = (this.baseHeight - diceSize.times(2)).div(2)
val linearLayout1: LinearLayout = LinearLayout(this)
linearLayout1.y = marginTop.toFloat()
linearLayout1.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout1.gravity = Gravity.CENTER
linearLayout1.addView(this.diceImage[0],diceSize,diceSize)
linearLayout1.addView(this.diceImage[1],diceSize,diceSize)
this.binding.layoutBase.addView(linearLayout1)
val linearLayout2: LinearLayout = LinearLayout(this)
linearLayout2.y = marginTop.toFloat()
linearLayout2.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout2.gravity = Gravity.CENTER
linearLayout2.addView(this.diceImage[2],diceSize,diceSize)
linearLayout2.addView(this.diceImage[3],diceSize,diceSize)
this.binding.layoutBase.addView(linearLayout2)
}
}
5 -> {
this.diceImage[0].setImageResource(resourceImg[8])
this.diceImage[1].setImageResource(resourceImg[9])
this.diceImage[2].setImageResource(resourceImg[10])
this.diceImage[3].setImageResource(resourceImg[11])
this.diceImage[4].setImageResource(resourceImg[12])
if (this.baseWidth > this.baseHeight) { //横
val diceSize: Int = minOf(this.baseWidth.div(5),this.baseHeight)
val marginTop: Int = (this.baseHeight - diceSize).div(2)
val linearLayout1: LinearLayout = LinearLayout(this)
linearLayout1.y = marginTop.toFloat()
linearLayout1.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout1.gravity = Gravity.CENTER
linearLayout1.addView(this.diceImage[0], diceSize, diceSize)
linearLayout1.addView(this.diceImage[1], diceSize, diceSize)
linearLayout1.addView(this.diceImage[2], diceSize, diceSize)
linearLayout1.addView(this.diceImage[3], diceSize, diceSize)
linearLayout1.addView(this.diceImage[4], diceSize, diceSize)
this.binding.layoutBase.addView(linearLayout1)
} else { //縦
val diceSize: Int = boxSize.div(3)
val marginTop: Int = (this.baseHeight - diceSize.times(3)).div(2)
val linearLayout1: LinearLayout = LinearLayout(this)
linearLayout1.y = marginTop.toFloat()
linearLayout1.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout1.gravity = Gravity.CENTER
linearLayout1.addView(this.diceImage[0],diceSize,diceSize)
linearLayout1.addView(this.diceImage[1],diceSize,diceSize)
this.binding.layoutBase.addView(linearLayout1)
val linearLayout2: LinearLayout = LinearLayout(this)
linearLayout2.y = marginTop.toFloat()
linearLayout2.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout2.gravity = Gravity.CENTER
linearLayout2.addView(this.diceImage[2],diceSize,diceSize)
linearLayout2.addView(this.diceImage[3],diceSize,diceSize)
this.binding.layoutBase.addView(linearLayout2)
val linearLayout3: LinearLayout = LinearLayout(this)
linearLayout3.y = marginTop.toFloat()
linearLayout3.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout3.gravity = Gravity.CENTER
linearLayout3.addView(this.diceImage[4],diceSize,diceSize)
this.binding.layoutBase.addView(linearLayout3)
}
}
6 -> {
this.diceImage[0].setImageResource(resourceImg[7])
this.diceImage[1].setImageResource(resourceImg[8])
this.diceImage[2].setImageResource(resourceImg[9])
this.diceImage[3].setImageResource(resourceImg[10])
this.diceImage[4].setImageResource(resourceImg[11])
this.diceImage[5].setImageResource(resourceImg[12])
if (this.baseWidth > this.baseHeight) { //横
val diceSize: Int = minOf(this.baseWidth.div(6),this.baseHeight)
val marginTop: Int = (this.baseHeight - diceSize).div(2)
val linearLayout1: LinearLayout = LinearLayout(this)
linearLayout1.y = marginTop.toFloat()
linearLayout1.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout1.gravity = Gravity.CENTER
linearLayout1.addView(this.diceImage[0], diceSize, diceSize)
linearLayout1.addView(this.diceImage[1], diceSize, diceSize)
linearLayout1.addView(this.diceImage[2], diceSize, diceSize)
linearLayout1.addView(this.diceImage[3], diceSize, diceSize)
linearLayout1.addView(this.diceImage[4], diceSize, diceSize)
linearLayout1.addView(this.diceImage[5], diceSize, diceSize)
this.binding.layoutBase.addView(linearLayout1)
} else { //縦
val diceSize: Int = boxSize.div(3)
val marginTop: Int = (this.baseHeight - diceSize.times(3)).div(2)
val linearLayout1: LinearLayout = LinearLayout(this)
linearLayout1.y = marginTop.toFloat()
linearLayout1.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout1.gravity = Gravity.CENTER
linearLayout1.addView(this.diceImage[0],diceSize,diceSize)
linearLayout1.addView(this.diceImage[1],diceSize,diceSize)
this.binding.layoutBase.addView(linearLayout1)
val linearLayout2: LinearLayout = LinearLayout(this)
linearLayout2.y = marginTop.toFloat()
linearLayout2.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout2.gravity = Gravity.CENTER
linearLayout2.addView(this.diceImage[2],diceSize,diceSize)
linearLayout2.addView(this.diceImage[3],diceSize,diceSize)
this.binding.layoutBase.addView(linearLayout2)
val linearLayout3: LinearLayout = LinearLayout(this)
linearLayout3.y = marginTop.toFloat()
linearLayout3.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
linearLayout3.gravity = Gravity.CENTER
linearLayout3.addView(this.diceImage[4],diceSize,diceSize)
linearLayout3.addView(this.diceImage[5],diceSize,diceSize)
this.binding.layoutBase.addView(linearLayout3)
}
}
}
}
fun onClickStart(v: View) {
this.destroyFlag = false
this.actionCount = 0
this.actionTimeline()
}
private fun actionTimeline() {
Handler(Looper.getMainLooper()).postDelayed({
if (this.destroyFlag) {
return@postDelayed
}
actionStart(false)
this.actionCount += 1
if (this.actionCount > 50) {
this.actionCount = 0
if (this.destroyFlag) {
return@postDelayed
}
actionStart(true)
return@postDelayed
}
actionTimeline()
}, 20)
}
private fun actionStart(endFlag: Boolean) {
if (endFlag) {
if (this.diceCount >= 1) {
this.diceImage[0].setImageResource(resourceImg[Random.nextInt(6) + 1])
}
if (this.diceCount >= 2) {
this.diceImage[1].setImageResource(resourceImg[Random.nextInt(6) + 1])
}
if (this.diceCount >= 3) {
this.diceImage[2].setImageResource(resourceImg[Random.nextInt(6) + 1])
}
if (this.diceCount >= 4) {
this.diceImage[3].setImageResource(resourceImg[Random.nextInt(6) + 1])
}
if (this.diceCount >= 5) {
this.diceImage[4].setImageResource(resourceImg[Random.nextInt(6) + 1])
}
if (this.diceCount >= 6) {
this.diceImage[5].setImageResource(resourceImg[Random.nextInt(6) + 1])
}
} else {
if (this.diceCount >= 1) {
this.diceImage[0].setImageResource(resourceImg[Random.nextInt(6) + 7])
}
if (this.diceCount >= 2) {
this.diceImage[1].setImageResource(resourceImg[Random.nextInt(6) + 7])
}
if (this.diceCount >= 3) {
this.diceImage[2].setImageResource(resourceImg[Random.nextInt(6) + 7])
}
if (this.diceCount >= 4) {
this.diceImage[3].setImageResource(resourceImg[Random.nextInt(6) + 7])
}
if (this.diceCount >= 5) {
this.diceImage[4].setImageResource(resourceImg[Random.nextInt(6) + 7])
}
if (this.diceCount >= 6) {
this.diceImage[5].setImageResource(resourceImg[Random.nextInt(6) + 7])
}
}
}
fun onClickSetting(v: View) {
this.destroyFlag = true
val intent = Intent(applicationContext, SettingActivity::class.java)
intent.putExtra(DICE_COUNT, this.diceCount)
intent.putExtra(THEME_NUMBER, this.themeNumber)
intent.putExtra(LOCALE_LANGUAGE, this.localeLanguage)
startActivityForResult(intent, RESULT_SETTING_ACTIVITY)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
super.onActivityResult(requestCode, resultCode, intent)
if (resultCode == Activity.RESULT_OK && requestCode == RESULT_SETTING_ACTIVITY && intent != null) {
var recreateFlag: Boolean = false
val lastDiceCount = this.diceCount
this.diceCount = intent.getIntExtra(DICE_COUNT, 1)
if (lastDiceCount != this.diceCount) {
this.saveDiceCount()
recreateFlag = true
}
val lastThemeNumber = this.themeNumber
this.themeNumber = intent.getIntExtra(THEME_NUMBER, 0)
if (lastThemeNumber != this.themeNumber) {
this.saveThemeNumber()
recreateFlag = true
}
val lastLocaleLanguage = this.localeLanguage
this.localeLanguage = intent.getStringExtra(LOCALE_LANGUAGE) ?: ""
if (this.localeLanguage != lastLocaleLanguage) {
this.saveLocaleLanguage()
recreateFlag = true
}
if (recreateFlag) {
recreate()
}
}
}
//-------------------------------------------
//diceCountを保存
private fun saveDiceCount() {
getSharedPreferences(SETTINGS, Context.MODE_PRIVATE).edit().apply {
putInt(DICE_COUNT, this@MainActivity.diceCount)
apply()
}
}
//diceCountを読み出し
private fun loadDiceCount() {
val pref = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE)
this.diceCount = pref.getInt(DICE_COUNT, 1)
}
//-------------------------------------------
//テーマを保存
private fun saveThemeNumber() {
getSharedPreferences(SETTINGS, Context.MODE_PRIVATE).edit().apply {
putInt(THEME_NUMBER, this@MainActivity.themeNumber)
apply()
}
}
//テーマを読み出し
private fun loadThemeNumber() {
val pref = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE)
this.themeNumber = pref.getInt(THEME_NUMBER, 0)
}
//テーマを設定
private fun setTheme() {
when (this.themeNumber) {
0 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
1 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
}
}
//-------------------------------------------
//localeLanguageを保存
private fun saveLocaleLanguage() {
getSharedPreferences(SETTINGS, Context.MODE_PRIVATE).edit().apply {
putString(LOCALE_LANGUAGE, this@MainActivity.localeLanguage)
apply()
}
}
//言語設定
override fun attachBaseContext(base: Context) {
val pref = base.getSharedPreferences(SETTINGS, Context.MODE_PRIVATE)
this.localeLanguage = pref.getString(LOCALE_LANGUAGE, "") ?: ""
val loc: Locale? = if (this.localeLanguage != "") Locale(this.localeLanguage) else null
if (loc != null) {
val res = base.resources
val config = Configuration(res.configuration)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //minSdkVersion 24
val localeList = LocaleList(loc)
LocaleList.setDefault(localeList)
config.setLocales(localeList)
} else { //minSdkVersion 17 16はダメ
config.setLocale(loc)
}
super.attachBaseContext(base.createConfigurationContext(config))
} else {
super.attachBaseContext(base)
}
}
//----------------------------------------------
}
app/src/main/java/jp/aosystem/dice/SettingActivity.kt
package jp.aosystem.dice
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
import android.os.LocaleList
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintLayout
import jp.aosystem.dice.databinding.ActivitySettingBinding
import java.util.*
class SettingActivity : AppCompatActivity() {
private lateinit var binding: ActivitySettingBinding
private lateinit var viewModel: ConstraintLayout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//setContentView(R.layout.activity_main)
this.binding = ActivitySettingBinding.inflate(layoutInflater)
this.viewModel = this.binding.root
setContentView(this.viewModel)
//データ受け取り
val intent = this.intent
val diceCount: Int = intent.getIntExtra(MainActivity.DICE_COUNT,1)
val themeNumber: Int = intent.getIntExtra(MainActivity.THEME_NUMBER,0)
when (diceCount) {
1 -> this.binding.radioDiceCount1.isChecked = true
2 -> this.binding.radioDiceCount2.isChecked = true
3 -> this.binding.radioDiceCount3.isChecked = true
4 -> this.binding.radioDiceCount4.isChecked = true
5 -> this.binding.radioDiceCount5.isChecked = true
6 -> this.binding.radioDiceCount6.isChecked = true
}
this.binding.switchTheme.isChecked = themeNumber != 0
val localeLanguage: String = intent.getStringExtra(MainActivity.LOCALE_LANGUAGE) ?: ""
when (localeLanguage) {
"en" -> this.binding.radioLanguageEn.isChecked = true
"ja" -> this.binding.radioLanguageJa.isChecked = true
else -> this.binding.radioLanguageSystem.isChecked = true
}
//タイトルバー非表示
supportActionBar?.hide()
}
fun onClickApply(v: View) {
var diceCount: Int = 1
if (this.binding.radioDiceCount1.isChecked) {
diceCount = 1
} else if (this.binding.radioDiceCount2.isChecked) {
diceCount = 2
} else if (this.binding.radioDiceCount3.isChecked) {
diceCount = 3
} else if (this.binding.radioDiceCount4.isChecked) {
diceCount = 4
} else if (this.binding.radioDiceCount5.isChecked) {
diceCount = 5
} else if (this.binding.radioDiceCount6.isChecked) {
diceCount = 6
}
val themeNumber = if (this.binding.switchTheme.isChecked) 1 else 0
var localeLanguage: String = ""
if (this.binding.radioLanguageEn.isChecked) {
localeLanguage = "en"
} else if (this.binding.radioLanguageJa.isChecked) {
localeLanguage = "ja"
}
val intent = Intent()
intent.putExtra(MainActivity.DICE_COUNT, diceCount)
intent.putExtra(MainActivity.THEME_NUMBER, themeNumber)
intent.putExtra(MainActivity.LOCALE_LANGUAGE, localeLanguage)
setResult(Activity.RESULT_OK, intent)
finish()
}
fun onClickCancel(v: View) {
val intent = Intent()
setResult(Activity.RESULT_CANCELED, intent)
finish()
}
//--------------------------------------------------------------------------------
//言語設定
override fun attachBaseContext(base: Context) {
val pref = base.getSharedPreferences(MainActivity.SETTINGS, Context.MODE_PRIVATE)
val localeLanguage: String = pref.getString(MainActivity.LOCALE_LANGUAGE, "") ?: ""
val loc: Locale? = if (localeLanguage != "") Locale(localeLanguage) else null
if (loc != null) {
val res = base.resources
val config = Configuration(res.configuration)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //minSdkVersion 24
val localeList = LocaleList(loc)
LocaleList.setDefault(localeList)
config.setLocales(localeList)
} else { //minSdkVersion 17 16はダメ
config.setLocale(loc)
}
super.attachBaseContext(base.createConfigurationContext(config))
} else {
super.attachBaseContext(base)
}
}
//--------------------------------------------------------------------------------
}