diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3dacd755..fbdfc158 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,14 +26,14 @@ android { applicationId = "com.app.calendar" minSdk = 27 targetSdk = 35 - versionCode = 47 + versionCode = 48 versionName = "2.0.0" applicationId = "com.app.body_manage" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { named("release") { - isMinifyEnabled = false + isMinifyEnabled = true setProguardFiles( listOf( getDefaultProguardFile("proguard-android-optimize.txt"), @@ -94,7 +94,7 @@ dependencies { implementation("com.facebook.soloader:soloader:0.11.0") // lifecycle - implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.3") + implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.4") // In-App-Review implementation("com.google.android.play:review:2.0.1") diff --git a/app/src/main/java/com/app/body_manage/dialog/FloatNumberPickerDialog.kt b/app/src/main/java/com/app/body_manage/dialog/FloatNumberPickerDialog.kt index c8a77943..129b6ce0 100644 --- a/app/src/main/java/com/app/body_manage/dialog/FloatNumberPickerDialog.kt +++ b/app/src/main/java/com/app/body_manage/dialog/FloatNumberPickerDialog.kt @@ -44,7 +44,7 @@ class FloatNumberPickerDialog : DialogFragment() { private var number: Float = 50F private var unit: String = "" private var label: String = "" - private lateinit var callBack: (weight: Float) -> Unit + private var callBack: (weight: Float) -> Unit = { _ -> } // 初期値 private var hundredsPlace: String = "" diff --git a/app/src/main/java/com/app/body_manage/ui/top/TopActivity.kt b/app/src/main/java/com/app/body_manage/ui/top/TopActivity.kt index 3e78607d..5555a51f 100644 --- a/app/src/main/java/com/app/body_manage/ui/top/TopActivity.kt +++ b/app/src/main/java/com/app/body_manage/ui/top/TopActivity.kt @@ -2,6 +2,7 @@ package com.app.body_manage.ui.top import android.content.Context import android.content.Intent +import android.net.Uri import android.os.Bundle import android.widget.Toast import androidx.activity.addCallback @@ -180,11 +181,14 @@ class TopActivity : AppCompatActivity() { val lastMeasure by viewModel.lastMeasure.collectAsState() val initialMeasure by viewModel.initialMeasure.collectAsState() val todayMeasure by viewModel.todayMeasure.collectAsState() + val enableUpdate by viewModel.enableUpdate.collectAsState(false) + TopScreen( userPreference = userPreference, lastMeasure = lastMeasure, initialMeasure = initialMeasure, todayMeasure = todayMeasure, + enableUpdate = enableUpdate, bottomSheetDataList = bottomSheetDataList, onClickSeeTrainingMenu = { launcher.launch(TrainingMenuListActivity.createIntent(this)) @@ -247,11 +251,23 @@ class TopActivity : AppCompatActivity() { LocalDate.now() ) ) + }, + onClickStore = { + openPlayStore() } ) } } + private fun openPlayStore() { + startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse("market://details?id=$packageName") + ) + ) + } + companion object { fun createIntent( context: Context diff --git a/app/src/main/java/com/app/body_manage/ui/top/TopScreen.kt b/app/src/main/java/com/app/body_manage/ui/top/TopScreen.kt index 129c2c7f..f74fc98a 100644 --- a/app/src/main/java/com/app/body_manage/ui/top/TopScreen.kt +++ b/app/src/main/java/com/app/body_manage/ui/top/TopScreen.kt @@ -54,7 +54,9 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.colorResource +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @@ -73,6 +75,7 @@ import com.app.body_manage.extension.toCentiMeter import com.app.body_manage.extension.toMMDDEE import com.app.body_manage.extension.toWeight import com.app.body_manage.extension.withPercent +import com.app.body_manage.style.Colors.Companion.accentColor import com.app.body_manage.style.Colors.Companion.background import com.app.body_manage.style.Colors.Companion.theme import com.app.body_manage.ui.common.ColumTextWithLabelAndIcon @@ -88,6 +91,7 @@ fun TopScreen( lastMeasure: BodyMeasure?, initialMeasure: BodyMeasure?, todayMeasure: TodayMeasure, + enableUpdate: Boolean, bottomSheetDataList: List, onClickSeeTrainingMenu: () -> Unit = {}, onClickCompare: () -> Unit = {}, @@ -98,6 +102,7 @@ fun TopScreen( onClickAddTraining: () -> Unit = {}, onClickSetGoal: () -> Unit = {}, onClickSetting: () -> Unit = {}, + onClickStore: () -> Unit = {}, ) { val scope = rememberCoroutineScope() var openMultiFb by remember { @@ -197,7 +202,10 @@ fun TopScreen( .fillMaxHeight() ) { item { - Row(verticalAlignment = Alignment.Bottom) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Start, + ) { if (lastMeasure?.weight != null) { Text( text = lastMeasure.weight.toString(), @@ -212,29 +220,37 @@ fun TopScreen( ) } Spacer(modifier = Modifier.size(10.dp)) - lastMeasure?.time?.toLocalDate()?.toMMDDEE()?.let { mmdd -> - val label = stringResource(id = R.string.label_registered_date) - Text( - text = "$label: $mmdd", - fontSize = 14.sp, - color = Color.Gray, - ) + Column { + (lastMeasure?.tall)?.let { tall -> + Text( + text = tall.toCentiMeter(), + fontSize = 11.sp, + color = Color.Gray, + ) + } + lastMeasure?.time?.toLocalDate()?.toMMDDEE()?.let { mmdd -> + val label = stringResource(id = R.string.label_registered_date) + Text( + text = "$label: $mmdd", + fontSize = 11.sp, + color = Color.Gray, + ) + } } Spacer(modifier = Modifier.weight(1F)) - (lastMeasure?.tall)?.let { tall -> - Text( - text = tall.toCentiMeter(), - fontSize = 14.sp, - color = Color.Gray, - ) - } - Spacer(modifier = Modifier.size(10.dp)) + UpdateIcon( + enableUpdate = enableUpdate, + onClickStore = onClickStore, + ) + Spacer(modifier = Modifier.size(5.dp)) Icon( imageVector = Icons.Default.Settings, contentDescription = null, - modifier = Modifier.clickable { - onClickSetting() - } + modifier = Modifier + .clickable { + onClickSetting() + } + .size(20.dp) ) } Spacer(modifier = Modifier.size(10.dp)) @@ -315,6 +331,50 @@ fun TopScreen( } } +@Composable +private fun UpdateIcon( + enableUpdate: Boolean, + onClickStore: () -> Unit, +) { + if (enableUpdate) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .clickable { + onClickStore() + } + .background(accentColor, RoundedCornerShape(5.dp)) + .border(1.dp, Color.Blue, RoundedCornerShape(5.dp)) + .padding(vertical = 3.dp, horizontal = 6.dp), + ) { + Text( + text = stringResource(id = R.string.enable_update), + fontSize = 11.sp, + color = Color.White, + fontWeight = FontWeight.Bold, + ) + Spacer(modifier = Modifier.size(3.dp)) + Icon( + painter = painterResource(id = R.drawable.icons8_google_play_store), + contentDescription = null, + modifier = Modifier.size(20.dp), + tint = Color.Unspecified + ) + } + } else { + Icon( + painter = painterResource(id = R.drawable.icons8_google_play_store), + contentDescription = null, + modifier = Modifier + .clickable { + onClickStore() + } + .size(20.dp), + tint = Color.Unspecified + ) + } +} + @Composable private fun FabItem( @StringRes textRes: Int, diff --git a/app/src/main/java/com/app/body_manage/ui/top/TopViewModel.kt b/app/src/main/java/com/app/body_manage/ui/top/TopViewModel.kt index d6808a4d..c896b791 100644 --- a/app/src/main/java/com/app/body_manage/ui/top/TopViewModel.kt +++ b/app/src/main/java/com/app/body_manage/ui/top/TopViewModel.kt @@ -49,6 +49,9 @@ class TopViewModel( private val _initialMeasure: MutableStateFlow = MutableStateFlow(null) val initialMeasure = _initialMeasure.stateIn(viewModelScope, SharingStarted.Eagerly, null) + private val _enableUpdate: MutableStateFlow = MutableStateFlow(false) + val enableUpdate = _enableUpdate.asSharedFlow() + // 当日の測定 private val _todayMeasure: MutableStateFlow = MutableStateFlow( TodayMeasure( diff --git a/app/src/main/java/com/app/body_manage/ui/top/UserPreferenceSettingViewModel.kt b/app/src/main/java/com/app/body_manage/ui/top/UserPreferenceSettingViewModel.kt index 701084bb..d52925de 100644 --- a/app/src/main/java/com/app/body_manage/ui/top/UserPreferenceSettingViewModel.kt +++ b/app/src/main/java/com/app/body_manage/ui/top/UserPreferenceSettingViewModel.kt @@ -46,8 +46,8 @@ data class UserPreferenceSettingViewModelState( val name: String? = null, val gender: Gender = Gender.MALE, val birth: TextFieldValue = TextFieldValue(), - val hasMealFeature: Boolean = false, - val hasTrainingFeature: Boolean = false, + val hasMealFeature: Boolean = true, + val hasTrainingFeature: Boolean = true, ) { fun toUiState(): UiState { val setBirth = try { diff --git a/app/src/main/res/drawable/icons8_google_play_store.xml b/app/src/main/res/drawable/icons8_google_play_store.xml new file mode 100644 index 00000000..58893f74 --- /dev/null +++ b/app/src/main/res/drawable/icons8_google_play_store.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-b+en/strings.xml b/app/src/main/res/values-b+en/strings.xml index 93ec0a9b..7e6c598d 100644 --- a/app/src/main/res/values-b+en/strings.xml +++ b/app/src/main/res/values-b+en/strings.xml @@ -36,6 +36,7 @@ S increase decrease + Update User Name diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 488fc373..c3b44eed 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -36,6 +36,7 @@ 増加 減少 + アップデート可能 ▪️ユーザ名