backend implementation
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
package ru.shadowsparky.updater.domain
|
||||
|
||||
interface UpdateFetcher {
|
||||
suspend fun fetch(): UpdateInfo
|
||||
}
|
||||
@@ -12,6 +12,7 @@ kotlin {
|
||||
dependencies {
|
||||
implementation(project(":libs:ui"))
|
||||
implementation(project(":libs:base"))
|
||||
api(project(":libs:updater:updater-common"))
|
||||
implementation(libs.ui.tooling.preview)
|
||||
}
|
||||
}
|
||||
+3
@@ -1,5 +1,8 @@
|
||||
<resources>
|
||||
<string name="updater_title_available">Доступно обновление</string>
|
||||
<string name="updater_title_not_found">Обновления не найдены</string>
|
||||
<string name="updater_btn_close">Закрыть</string>
|
||||
|
||||
<string name="updater_btn_download">Скачать</string>
|
||||
<string name="updater_changelog_title">Что нового:</string>
|
||||
<string name="updater_changelog_empty">Улучшения производительности и исправления ошибок.</string>
|
||||
+2
-2
@@ -22,9 +22,9 @@ class UpdateInteractor(
|
||||
}
|
||||
emit(UpdateState.Checking)
|
||||
try {
|
||||
val updateInfo = fetcher.fetch()
|
||||
val serverVersion = updateInfo.versionCode ?: 0L
|
||||
val currentVersion = appConfig.versionCode ?: 0L
|
||||
val updateInfo = fetcher.fetch(currentVersion)
|
||||
val serverVersion = updateInfo.versionCode ?: 0L
|
||||
|
||||
if (serverVersion <= currentVersion) {
|
||||
emit(UpdateState.UpToDate)
|
||||
+38
-17
@@ -1,24 +1,25 @@
|
||||
package ru.shadowsparky.updater.presentation
|
||||
|
||||
import androiddev.libs.updater.generated.resources.Res
|
||||
import androiddev.libs.updater.generated.resources.updater_btn_download
|
||||
import androiddev.libs.updater.generated.resources.updater_btn_grant
|
||||
import androiddev.libs.updater.generated.resources.updater_btn_install
|
||||
import androiddev.libs.updater.generated.resources.updater_btn_retry
|
||||
import androiddev.libs.updater.generated.resources.updater_changelog_empty
|
||||
import androiddev.libs.updater.generated.resources.updater_changelog_title
|
||||
import androiddev.libs.updater.generated.resources.updater_desc_permission
|
||||
import androiddev.libs.updater.generated.resources.updater_download_progress
|
||||
import androiddev.libs.updater.generated.resources.updater_title_available
|
||||
import androiddev.libs.updater.generated.resources.updater_title_downloading
|
||||
import androiddev.libs.updater.generated.resources.updater_title_error
|
||||
import androiddev.libs.updater.generated.resources.updater_title_permission
|
||||
import androiddev.libs.updater.generated.resources.updater_title_ready
|
||||
import androiddev.libs.updater.updater_client.generated.resources.Res
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_btn_close
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_btn_download
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_btn_grant
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_btn_install
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_btn_retry
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_changelog_empty
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_changelog_title
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_desc_permission
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_download_progress
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_title_available
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_title_downloading
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_title_error
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_title_not_found
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_title_permission
|
||||
import androiddev.libs.updater.updater_client.generated.resources.updater_title_ready
|
||||
import androidx.compose.animation.AnimatedContent
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
@@ -52,7 +53,7 @@ fun UpdateBottomSheet(
|
||||
confirmValueChange = { state !is UpdateState.UpdateAvailable || !(state as UpdateState.UpdateAvailable).isForceUpdate }
|
||||
)
|
||||
|
||||
val isVisible = remember(state) { state !is UpdateState.Idle && state !is UpdateState.UpToDate }
|
||||
val isVisible = remember(state) { state !is UpdateState.Idle }
|
||||
|
||||
if (isVisible) {
|
||||
ModalBottomSheet(
|
||||
@@ -87,6 +88,9 @@ fun UpdateBottomSheet(
|
||||
message = currentState.message,
|
||||
onRetryClick = { component.checkUpdates() }
|
||||
)
|
||||
is UpdateState.UpToDate -> {
|
||||
UpdateNotFoundContent(onSkip = { component.reset() })
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
@@ -96,7 +100,7 @@ fun UpdateBottomSheet(
|
||||
|
||||
@Composable
|
||||
private fun UpdateCheckingContent() {
|
||||
Loading(Modifier.fillMaxSize())
|
||||
Loading(Modifier.fillMaxWidth())
|
||||
}
|
||||
|
||||
@Composable
|
||||
@@ -192,6 +196,23 @@ private fun UpdateReadyContent(
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun UpdateNotFoundContent(
|
||||
onSkip: () -> Unit,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
Column(
|
||||
modifier = modifier.fillMaxWidth(),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.spacedBy(16.dp)
|
||||
) {
|
||||
Text(text = stringResource(Res.string.updater_title_not_found), style = MaterialTheme.typography.titleLarge)
|
||||
Button(onClick = onSkip, modifier = Modifier.fillMaxWidth()) {
|
||||
Text(stringResource(Res.string.updater_btn_close), style = MaterialTheme.typography.labelLarge)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun UpdateErrorContent(
|
||||
message: String,
|
||||
@@ -0,0 +1,2 @@
|
||||
/build
|
||||
/bin
|
||||
@@ -0,0 +1,16 @@
|
||||
plugins {
|
||||
alias(libs.plugins.convention.kmp)
|
||||
alias(libs.plugins.convention.android.lib)
|
||||
alias(libs.plugins.convention.serialization)
|
||||
}
|
||||
|
||||
kotlin {
|
||||
sourceSets {
|
||||
val commonMain by getting {
|
||||
dependencies {
|
||||
implementation(project(":libs:base"))
|
||||
}
|
||||
}
|
||||
}
|
||||
android { namespace = "ru.shadowsparky.updater.common" }
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package ru.shadowsparky.updater.domain
|
||||
|
||||
interface UpdateFetcher {
|
||||
suspend fun fetch(versionCode: Long): UpdateInfo
|
||||
|
||||
companion object {
|
||||
const val ARG_VERSION_CODE = "versionCode"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user