mirror of
https://github.com/Myzel394/NumberHub.git
synced 2025-06-18 16:25:27 +02:00
feat: Add new app announcement
This commit is contained in:
parent
84da393e0d
commit
fe73d7dfbb
@ -322,6 +322,9 @@ Maybe this can be labeled better? Let me know. It should be something that can d
|
||||
<string name="settings_view_source_code">View source code</string>
|
||||
<string name="time_zone_add_title">Add time zone</string>
|
||||
|
||||
<string name="settings_numberhub_newApp">Unitto is now NumberHub!</string>
|
||||
<string name="settings_numberhub_newApp_message">Unitto has been discontinued. You\'re one of the first users to try NumberHub! Please spread the word and share the app with your friends. Thank you for your support!</string>
|
||||
|
||||
<!-- https://s3.eu-west-1.amazonaws.com/po-pub/i/UCrz06kaEYxCGAE73ZLl9EtX.png -->
|
||||
<string name="time_zone_no_results_button">Read the article</string>
|
||||
|
||||
|
@ -99,4 +99,6 @@ interface UserPreferencesRepository {
|
||||
suspend fun updateAdditionalButtons(enabled: Boolean)
|
||||
|
||||
suspend fun updateInverseMode(enabled: Boolean)
|
||||
|
||||
suspend fun updateHasSeenNewAppAnnouncement(value: Boolean)
|
||||
}
|
||||
|
@ -21,4 +21,5 @@ package app.myzel394.numberhub.data.model.userprefs
|
||||
interface GeneralPreferences {
|
||||
val lastReadChangelog: String
|
||||
val enableVibrations: Boolean
|
||||
val hasSeenNewAppAnnouncement: Boolean
|
||||
}
|
||||
|
@ -77,6 +77,10 @@ internal fun Preferences.getRadianMode(): Boolean {
|
||||
return this[PrefsKeys.RADIAN_MODE] ?: true
|
||||
}
|
||||
|
||||
internal fun Preferences.getHasSeenNewAppAnnouncement(): Boolean {
|
||||
return this[PrefsKeys.HAS_SEEN_NEW_APP_ANNOUNCEMENT] ?: false
|
||||
}
|
||||
|
||||
internal fun Preferences.getFormatterSymbols(): FormatterSymbols {
|
||||
val grouping = this[PrefsKeys.FORMATTER_GROUPING]
|
||||
val fractional = this[PrefsKeys.FORMATTER_FRACTIONAL]
|
||||
|
@ -50,6 +50,7 @@ data class AppPreferencesImpl(
|
||||
data class GeneralPreferencesImpl(
|
||||
override val lastReadChangelog: String,
|
||||
override val enableVibrations: Boolean,
|
||||
override val hasSeenNewAppAnnouncement: Boolean,
|
||||
) : GeneralPreferences
|
||||
|
||||
data class CalculatorPreferencesImpl(
|
||||
|
@ -37,6 +37,7 @@ object PrefsKeys {
|
||||
val ENABLE_VIBRATIONS = booleanPreferencesKey("ENABLE_VIBRATIONS_PREF_KEY")
|
||||
val MIDDLE_ZERO = booleanPreferencesKey("MIDDLE_ZERO_PREF_KEY")
|
||||
val AC_BUTTON = booleanPreferencesKey("AC_BUTTON_PREF_KEY")
|
||||
val HAS_SEEN_NEW_APP_ANNOUNCEMENT = booleanPreferencesKey("HAS_SEEN_NEW_APP_ANNOUNCEMENT_PREF_KEY")
|
||||
// val RPN_MODE = booleanPreferencesKey("RPN_MODE_PREF_KEY")
|
||||
|
||||
// FORMATTER
|
||||
|
@ -70,6 +70,7 @@ class UserPreferencesRepositoryImpl @Inject constructor(
|
||||
GeneralPreferencesImpl(
|
||||
lastReadChangelog = preferences.getLastReadChangelog(),
|
||||
enableVibrations = preferences.getEnableVibrations(),
|
||||
hasSeenNewAppAnnouncement = preferences.getHasSeenNewAppAnnouncement(),
|
||||
)
|
||||
}
|
||||
|
||||
@ -325,4 +326,10 @@ class UserPreferencesRepositoryImpl @Inject constructor(
|
||||
preferences[PrefsKeys.INVERSE_MODE] = enabled
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun updateHasSeenNewAppAnnouncement(value: Boolean) {
|
||||
dataStore.edit { preferences ->
|
||||
preferences[PrefsKeys.HAS_SEEN_NEW_APP_ANNOUNCEMENT] = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -50,6 +50,7 @@ import androidx.compose.material.icons.filled.RateReview
|
||||
import androidx.compose.material.icons.filled.SwapHoriz
|
||||
import androidx.compose.material.icons.filled.Vibration
|
||||
import androidx.compose.material.icons.filled._123
|
||||
import androidx.compose.material.icons.outlined.CheckCircle
|
||||
import androidx.compose.material.icons.outlined.NewReleases
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
@ -119,6 +120,7 @@ internal fun SettingsRoute(
|
||||
uiState = uiState,
|
||||
openDrawer = openDrawer,
|
||||
navControllerAction = navControllerAction,
|
||||
onHasSeenNewAppAnnouncement = viewModel::updateHasSeenNewAppAnnouncement,
|
||||
updateLastReadChangelog = viewModel::updateLastReadChangelog,
|
||||
updateVibrations = viewModel::updateVibrations,
|
||||
clearCache = viewModel::clearCache,
|
||||
@ -135,6 +137,7 @@ private fun SettingsScreen(
|
||||
navControllerAction: (String) -> Unit,
|
||||
updateLastReadChangelog: (String) -> Unit,
|
||||
updateVibrations: (Boolean) -> Unit,
|
||||
onHasSeenNewAppAnnouncement: (Boolean) -> Unit,
|
||||
clearCache: () -> Unit,
|
||||
backup: (Context, Uri) -> Unit,
|
||||
restore: (Context, Uri) -> Unit,
|
||||
@ -197,6 +200,25 @@ private fun SettingsScreen(
|
||||
.verticalScroll(rememberScrollState())
|
||||
.padding(padding),
|
||||
) {
|
||||
AnimatedVisibility(
|
||||
visible = !uiState.hasSeenNewAppAnnouncement,
|
||||
enter = expandVertically() + fadeIn(),
|
||||
exit = shrinkVertically() + fadeOut(),
|
||||
) {
|
||||
val title = stringResource(R.string.settings_numberhub_newApp)
|
||||
AnnoyingBox(
|
||||
modifier = Modifier
|
||||
.padding(16.dp, 8.dp)
|
||||
.fillMaxWidth(),
|
||||
imageVector = Icons.Outlined.CheckCircle,
|
||||
imageVectorContentDescription = title,
|
||||
title = title,
|
||||
support = stringResource(R.string.settings_numberhub_newApp_message),
|
||||
) {
|
||||
//onHasSeenNewAppAnnouncement(true)
|
||||
}
|
||||
}
|
||||
|
||||
AnimatedVisibility(
|
||||
visible = uiState.showUpdateChangelog,
|
||||
enter = expandVertically() + fadeIn(),
|
||||
@ -339,6 +361,7 @@ private fun PreviewSettingsScreen() {
|
||||
cacheSize = 2,
|
||||
backupInProgress = false,
|
||||
showUpdateChangelog = true,
|
||||
hasSeenNewAppAnnouncement = false,
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -347,6 +370,9 @@ private fun PreviewSettingsScreen() {
|
||||
uiState = uiState,
|
||||
openDrawer = {},
|
||||
navControllerAction = {},
|
||||
onHasSeenNewAppAnnouncement = {
|
||||
uiState = uiState.copy(hasSeenNewAppAnnouncement = true)
|
||||
},
|
||||
updateLastReadChangelog = {
|
||||
uiState = uiState.copy(showUpdateChangelog = false)
|
||||
},
|
||||
|
@ -26,5 +26,6 @@ internal sealed class SettingsUIState {
|
||||
val cacheSize: Int,
|
||||
val backupInProgress: Boolean,
|
||||
val showUpdateChangelog: Boolean,
|
||||
val hasSeenNewAppAnnouncement: Boolean,
|
||||
) : SettingsUIState()
|
||||
}
|
||||
|
@ -62,6 +62,7 @@ internal class SettingsViewModel @Inject constructor(
|
||||
cacheSize = cacheSize,
|
||||
backupInProgress = backupInProgress,
|
||||
showUpdateChangelog = prefs.lastReadChangelog != BuildConfig.VERSION_CODE,
|
||||
hasSeenNewAppAnnouncement = prefs.hasSeenNewAppAnnouncement,
|
||||
)
|
||||
}
|
||||
.stateIn(viewModelScope, SettingsUIState.Loading)
|
||||
@ -100,6 +101,10 @@ internal class SettingsViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun updateHasSeenNewAppAnnouncement(value: Boolean) = viewModelScope.launch {
|
||||
userPrefsRepository.updateHasSeenNewAppAnnouncement(value)
|
||||
}
|
||||
|
||||
/**
|
||||
* @see UserPreferencesRepository.updateLastReadChangelog
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user