From 4520f2a690dbca2569d7e22527e17c0440a356bf Mon Sep 17 00:00:00 2001 From: wingio Date: Mon, 20 Mar 2023 14:56:04 -0400 Subject: [PATCH] Feat: Listen for package installs and bump version --- app/build.gradle.kts | 4 ++-- app/src/main/AndroidManifest.xml | 9 +++++++++ .../domain/receiver/InstallReceiver.kt | 20 +++++++++++++++++++ .../installer/service/InstallService.kt | 12 ++--------- .../manager/network/utils/ApiResponse.kt | 2 +- .../manager/ui/screen/home/HomeScreen.kt | 18 ++++++++--------- .../ui/viewmodel/home/HomeViewModel.kt | 4 ++-- 7 files changed, 45 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/dev/beefers/vendetta/manager/domain/receiver/InstallReceiver.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 13b02ff..ece5cac 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,8 +14,8 @@ android { applicationId = "dev.beefers.vendetta.manager" minSdk = 24 targetSdk = 33 - versionCode = 1020 - versionName = "1.0.2" + versionCode = 1030 + versionName = "1.0.3" buildConfigField("String", "GIT_BRANCH", "\"${getCurrentBranch()}\"") buildConfigField("String", "GIT_COMMIT", "\"${getLatestCommit()}\"") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 33988b5..bee16a0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -47,6 +47,15 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/dev/beefers/vendetta/manager/domain/receiver/InstallReceiver.kt b/app/src/main/java/dev/beefers/vendetta/manager/domain/receiver/InstallReceiver.kt new file mode 100644 index 0000000..9831c50 --- /dev/null +++ b/app/src/main/java/dev/beefers/vendetta/manager/domain/receiver/InstallReceiver.kt @@ -0,0 +1,20 @@ +package dev.beefers.vendetta.manager.domain.receiver + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import dev.beefers.vendetta.manager.domain.manager.InstallManager +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +class InstallReceiver : BroadcastReceiver(), KoinComponent { + + private val installManager: InstallManager by inject() + + @SuppressLint("UnsafeProtectedBroadcastReceiver") + override fun onReceive(context: Context?, intent: Intent?) { + installManager.getInstalled() + } + +} \ No newline at end of file diff --git a/app/src/main/java/dev/beefers/vendetta/manager/installer/service/InstallService.kt b/app/src/main/java/dev/beefers/vendetta/manager/installer/service/InstallService.kt index 7207548..aea4bd9 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/installer/service/InstallService.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/installer/service/InstallService.kt @@ -5,14 +5,9 @@ import android.content.Intent import android.content.pm.PackageInstaller import android.os.IBinder import dev.beefers.vendetta.manager.R -import dev.beefers.vendetta.manager.domain.manager.InstallManager import dev.beefers.vendetta.manager.utils.showToast -import org.koin.core.component.KoinComponent -import org.koin.core.component.inject -class InstallService : Service(), KoinComponent { - - private val installManager: InstallManager by inject() +class InstallService : Service() { override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { val isInstall = intent.action == "vendetta.actions.ACTION_INSTALL" @@ -25,10 +20,7 @@ class InstallService : Service(), KoinComponent { startActivity(confirmationIntent) } - PackageInstaller.STATUS_SUCCESS -> { - if (isInstall) showToast(R.string.installer_success) - installManager.getInstalled() - } + PackageInstaller.STATUS_SUCCESS -> if (isInstall) showToast(R.string.installer_success) PackageInstaller.STATUS_FAILURE_ABORTED -> if (isInstall) showToast(R.string.installer_aborted) diff --git a/app/src/main/java/dev/beefers/vendetta/manager/network/utils/ApiResponse.kt b/app/src/main/java/dev/beefers/vendetta/manager/network/utils/ApiResponse.kt index efdf6f7..baf3e1a 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/network/utils/ApiResponse.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/network/utils/ApiResponse.kt @@ -29,7 +29,7 @@ fun ApiResponse.fold( onSuccess: (D) -> Unit = {}, onError: () -> Unit = {} ) { - when(this) { + when (this) { is ApiResponse.Success -> onSuccess(data) is ApiResponse.Error, is ApiResponse.Failure -> onError() diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/home/HomeScreen.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/home/HomeScreen.kt index c882df2..a353658 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/home/HomeScreen.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/home/HomeScreen.kt @@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons @@ -39,7 +38,6 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.paging.LoadState import androidx.paging.compose.collectAsLazyPagingItems -import androidx.paging.compose.items import androidx.paging.compose.itemsIndexed import cafe.adriel.voyager.koin.getScreenModel import cafe.adriel.voyager.navigator.LocalNavigator @@ -103,7 +101,7 @@ class HomeScreen : ManagerTab { ) { AnimatedVisibility(visible = viewModel.discordVersions != null) { Text( - text = "Latest: ${viewModel.discordVersions!![prefs.channel]!!}", + text = "Latest: ${viewModel.discordVersions?.get(prefs.channel)}", style = MaterialTheme.typography.labelLarge, color = LocalContentColor.current.copy(alpha = 0.5f), textAlign = TextAlign.Center @@ -112,7 +110,7 @@ class HomeScreen : ManagerTab { AnimatedVisibility(visible = viewModel.installManager.current != null) { Text( - text = "Current: ${viewModel.installManager.current!!.versionName}", + text = "Current: ${viewModel.installManager.current?.versionName}", style = MaterialTheme.typography.labelLarge, color = LocalContentColor.current.copy(alpha = 0.5f), textAlign = TextAlign.Center @@ -167,8 +165,10 @@ class HomeScreen : ManagerTab { .fillMaxSize() ) { val commits = viewModel.commits.collectAsLazyPagingItems() - val loading = commits.loadState.append is LoadState.Loading || commits.loadState.refresh is LoadState.Loading - val failed = commits.loadState.append is LoadState.Error || commits.loadState.refresh is LoadState.Error + val loading = + commits.loadState.append is LoadState.Loading || commits.loadState.refresh is LoadState.Loading + val failed = + commits.loadState.append is LoadState.Error || commits.loadState.refresh is LoadState.Error LazyColumn { itemsIndexed( @@ -178,7 +178,7 @@ class HomeScreen : ManagerTab { if (commit != null) { Column { Commit(commit = commit) - if(i < commits.itemSnapshotList.lastIndex) { + if (i < commits.itemSnapshotList.lastIndex) { Divider( thickness = 0.5.dp, color = MaterialTheme.colorScheme.outline.copy(alpha = 0.3f), @@ -190,7 +190,7 @@ class HomeScreen : ManagerTab { } } - if(loading) { + if (loading) { item { Box( contentAlignment = Alignment.TopCenter, @@ -206,7 +206,7 @@ class HomeScreen : ManagerTab { } } - if(failed) { + if (failed) { item { Column( verticalArrangement = Arrangement.spacedBy(12.dp), diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/home/HomeViewModel.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/home/HomeViewModel.kt index 6ea2d23..97ebd9d 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/home/HomeViewModel.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/home/HomeViewModel.kt @@ -20,7 +20,6 @@ import dev.beefers.vendetta.manager.domain.repository.RestRepository import dev.beefers.vendetta.manager.network.dto.Commit import dev.beefers.vendetta.manager.network.utils.ApiResponse import dev.beefers.vendetta.manager.network.utils.dataOrNull -import dev.beefers.vendetta.manager.network.utils.fold import dev.beefers.vendetta.manager.utils.DiscordVersion import kotlinx.coroutines.launch @@ -44,12 +43,13 @@ class HomeViewModel( override suspend fun load(params: LoadParams): LoadResult { val page = params.key ?: 0 - return when(val response = repo.getCommits("Vendetta", page)) { + return when (val response = repo.getCommits("Vendetta", page)) { is ApiResponse.Success -> LoadResult.Page( data = response.data, prevKey = if (page > 0) page - 1 else null, nextKey = if (response.data.isNotEmpty()) page + 1 else null ) + is ApiResponse.Failure -> LoadResult.Error(response.error) is ApiResponse.Error -> LoadResult.Error(response.error) }