@@ -6,43 +6,17 @@ import android.net.Uri
66import android.provider.Settings
77import androidx.activity.compose.BackHandler
88import androidx.compose.foundation.ExperimentalFoundationApi
9- import androidx.compose.foundation.layout.Arrangement
10- import androidx.compose.foundation.layout.Column
11- import androidx.compose.foundation.layout.fillMaxSize
12- import androidx.compose.foundation.layout.padding
9+ import androidx.compose.foundation.layout.*
1310import androidx.compose.foundation.pager.HorizontalPager
1411import androidx.compose.foundation.pager.rememberPagerState
1512import androidx.compose.material.icons.Icons
1613import androidx.compose.material.icons.filled.Add
1714import androidx.compose.material.icons.filled.BatteryAlert
1815import androidx.compose.material.icons.filled.Close
19- import androidx.compose.material.icons.outlined.Apps
20- import androidx.compose.material.icons.outlined.DeleteOutline
21- import androidx.compose.material.icons.outlined.Refresh
22- import androidx.compose.material.icons.outlined.Settings
23- import androidx.compose.material.icons.outlined.Source
24- import androidx.compose.material.icons.outlined.Update
25- import androidx.compose.material.icons.outlined.WarningAmber
26- import androidx.compose.material3.ExperimentalMaterial3Api
27- import androidx.compose.material3.FloatingActionButton
28- import androidx.compose.material3.Icon
29- import androidx.compose.material3.IconButton
30- import androidx.compose.material3.MaterialTheme
31- import androidx.compose.material3.Scaffold
32- import androidx.compose.material3.Tab
33- import androidx.compose.material3.TabRow
34- import androidx.compose.material3.Text
35- import androidx.compose.material3.TextButton
36- import androidx.compose.material3.surfaceColorAtElevation
37- import androidx.compose.runtime.Composable
38- import androidx.compose.runtime.LaunchedEffect
39- import androidx.compose.runtime.derivedStateOf
40- import androidx.compose.runtime.getValue
41- import androidx.compose.runtime.mutableStateOf
42- import androidx.compose.runtime.remember
43- import androidx.compose.runtime.rememberCoroutineScope
16+ import androidx.compose.material.icons.outlined.*
17+ import androidx.compose.material3.*
18+ import androidx.compose.runtime.*
4419import androidx.compose.runtime.saveable.rememberSaveable
45- import androidx.compose.runtime.setValue
4620import androidx.compose.ui.Modifier
4721import androidx.compose.ui.graphics.vector.ImageVector
4822import androidx.compose.ui.platform.LocalContext
@@ -55,6 +29,7 @@ import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.isDefaul
5529import app.revanced.manager.patcher.aapt.Aapt
5630import app.revanced.manager.ui.component.AppTopBar
5731import app.revanced.manager.ui.component.AutoUpdatesDialog
32+ import app.revanced.manager.ui.component.AvailableUpdateDialog
5833import app.revanced.manager.ui.component.NotificationCard
5934import app.revanced.manager.ui.component.bundle.BundleItem
6035import app.revanced.manager.ui.component.bundle.BundleTopBar
@@ -113,6 +88,20 @@ fun DashboardScreen(
11388 )
11489 }
11590
91+ var showDialog by rememberSaveable { mutableStateOf(vm.prefs.showManagerUpdateDialogOnLaunch.getBlocking()) }
92+ val availableUpdate by remember {
93+ derivedStateOf { vm.updatedManagerVersion.takeIf { showDialog } }
94+ }
95+
96+ availableUpdate?.let { version ->
97+ AvailableUpdateDialog (
98+ onDismiss = { showDialog = false },
99+ setShowManagerUpdateDialogOnLaunch = vm::setShowManagerUpdateDialogOnLaunch,
100+ onConfirm = onUpdateClick,
101+ newVersion = version
102+ )
103+ }
104+
116105 Scaffold (
117106 topBar = {
118107 if (bundlesSelectable) {
@@ -154,6 +143,23 @@ fun DashboardScreen(
154143 AppTopBar (
155144 title = stringResource(R .string.app_name),
156145 actions = {
146+ if (! vm.updatedManagerVersion.isNullOrEmpty()) {
147+ IconButton (
148+ onClick = onUpdateClick,
149+ ) {
150+ BadgedBox (
151+ badge = {
152+ Badge (
153+ // A size value above 6.dp forces the Badge icon to be closer to the center, fixing a clipping issue
154+ modifier = Modifier .size(7 .dp),
155+ containerColor = MaterialTheme .colorScheme.primary,
156+ )
157+ }
158+ ) {
159+ Icon (Icons .Outlined .Update , stringResource(R .string.update))
160+ }
161+ }
162+ }
157163 IconButton (onClick = onSettingsClick) {
158164 Icon (Icons .Outlined .Settings , stringResource(R .string.settings))
159165 }
@@ -230,23 +236,7 @@ fun DashboardScreen(
230236 }
231237 )
232238 }
233- } else null ,
234- vm.updatedManagerVersion?.let {
235- {
236- NotificationCard (
237- text = stringResource(R .string.update_available_dialog_description, it),
238- icon = Icons .Outlined .Update ,
239- actions = {
240- TextButton (onClick = vm::dismissUpdateDialog) {
241- Text (stringResource(R .string.dismiss))
242- }
243- TextButton (onClick = onUpdateClick) {
244- Text (stringResource(R .string.show))
245- }
246- }
247- )
248- }
249- }
239+ } else null
250240 )
251241
252242 HorizontalPager (
0 commit comments