diff --git a/app/src/main/java/app/revanced/manager/ui/component/ExceptionViewerDialog.kt b/app/src/main/java/app/revanced/manager/ui/component/ExceptionViewerDialog.kt index 1ceb9cef..bea8846f 100644 --- a/app/src/main/java/app/revanced/manager/ui/component/ExceptionViewerDialog.kt +++ b/app/src/main/java/app/revanced/manager/ui/component/ExceptionViewerDialog.kt @@ -16,8 +16,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties import app.revanced.manager.R import app.revanced.manager.ui.component.bundle.BundleTopBar @@ -26,12 +24,8 @@ import app.revanced.manager.ui.component.bundle.BundleTopBar fun ExceptionViewerDialog(text: String, onDismiss: () -> Unit) { val context = LocalContext.current - Dialog( + FullscreenDialog( onDismissRequest = onDismiss, - properties = DialogProperties( - usePlatformDefaultWidth = false, - dismissOnBackPress = true - ) ) { Scaffold( topBar = { diff --git a/app/src/main/java/app/revanced/manager/ui/component/FullscreenDialog.kt b/app/src/main/java/app/revanced/manager/ui/component/FullscreenDialog.kt new file mode 100644 index 00000000..97fb98d9 --- /dev/null +++ b/app/src/main/java/app/revanced/manager/ui/component/FullscreenDialog.kt @@ -0,0 +1,34 @@ +package app.revanced.manager.ui.component + +import android.view.WindowManager +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.platform.LocalView +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties +import androidx.compose.ui.window.DialogWindowProvider + +private val properties = DialogProperties( + usePlatformDefaultWidth = false, + dismissOnBackPress = true, + decorFitsSystemWindows = false, +) + +@Composable +fun FullscreenDialog(onDismissRequest: () -> Unit, content: @Composable () -> Unit) { + Dialog( + onDismissRequest = onDismissRequest, + properties = properties + ) { + val window = (LocalView.current.parent as DialogWindowProvider).window + LaunchedEffect(Unit) { + window.statusBarColor = Color.Transparent.toArgb() + window.navigationBarColor = Color.Transparent.toArgb() + window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS) + } + + content() + } +} \ No newline at end of file diff --git a/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleInformationDialog.kt b/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleInformationDialog.kt index aa6b4b15..400bdd40 100644 --- a/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleInformationDialog.kt +++ b/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleInformationDialog.kt @@ -12,8 +12,6 @@ import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.revanced.manager.R import app.revanced.manager.data.platform.NetworkInfo @@ -23,6 +21,7 @@ import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.asRemote import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.isDefault import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.nameState import app.revanced.manager.ui.component.ExceptionViewerDialog +import app.revanced.manager.ui.component.FullscreenDialog import kotlinx.coroutines.launch import org.koin.compose.koinInject @@ -56,12 +55,8 @@ fun BundleInformationDialog( ) } - Dialog( + FullscreenDialog( onDismissRequest = onDismissRequest, - properties = DialogProperties( - usePlatformDefaultWidth = false, - dismissOnBackPress = true - ) ) { val bundleName by bundle.nameState diff --git a/app/src/main/java/app/revanced/manager/ui/component/bundle/BundlePatchesDialog.kt b/app/src/main/java/app/revanced/manager/ui/component/bundle/BundlePatchesDialog.kt index 99201949..30446b9d 100644 --- a/app/src/main/java/app/revanced/manager/ui/component/bundle/BundlePatchesDialog.kt +++ b/app/src/main/java/app/revanced/manager/ui/component/bundle/BundlePatchesDialog.kt @@ -22,13 +22,12 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.revanced.manager.R import app.revanced.manager.domain.bundles.PatchBundleSource import app.revanced.manager.patcher.patch.PatchInfo import app.revanced.manager.ui.component.ArrowButton +import app.revanced.manager.ui.component.FullscreenDialog import app.revanced.manager.ui.component.LazyColumnWithScrollbar @OptIn(ExperimentalMaterial3Api::class) @@ -41,12 +40,8 @@ fun BundlePatchesDialog( var showOptions by rememberSaveable { mutableStateOf(false) } val state by bundle.state.collectAsStateWithLifecycle() - Dialog( + FullscreenDialog( onDismissRequest = onDismissRequest, - properties = DialogProperties( - usePlatformDefaultWidth = false, - dismissOnBackPress = true - ) ) { Scaffold( topBar = { diff --git a/app/src/main/java/app/revanced/manager/ui/component/patches/OptionFields.kt b/app/src/main/java/app/revanced/manager/ui/component/patches/OptionFields.kt index 7c57de1f..eaacc38c 100644 --- a/app/src/main/java/app/revanced/manager/ui/component/patches/OptionFields.kt +++ b/app/src/main/java/app/revanced/manager/ui/component/patches/OptionFields.kt @@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyListItemInfo import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState @@ -55,13 +56,13 @@ import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.DialogProperties import app.revanced.manager.R import app.revanced.manager.data.platform.Filesystem import app.revanced.manager.patcher.patch.Option import app.revanced.manager.ui.component.AlertDialogExtended import app.revanced.manager.ui.component.AppTopBar import app.revanced.manager.ui.component.FloatInputDialog +import app.revanced.manager.ui.component.FullscreenDialog import app.revanced.manager.ui.component.IntInputDialog import app.revanced.manager.ui.component.LongInputDialog import app.revanced.manager.ui.component.haptics.HapticExtendedFloatingActionButton @@ -73,16 +74,17 @@ import app.revanced.manager.util.saver.snapshotStateListSaver import app.revanced.manager.util.saver.snapshotStateSetSaver import app.revanced.manager.util.toast import app.revanced.manager.util.transparentListItemColors +import kotlinx.coroutines.CoroutineScope import kotlinx.parcelize.Parcelize import org.koin.compose.koinInject import org.koin.core.component.KoinComponent import org.koin.core.component.get import sh.calvin.reorderable.ReorderableItem import sh.calvin.reorderable.rememberReorderableLazyColumnState +import sh.calvin.reorderable.rememberReorderableLazyListState import java.io.Serializable import kotlin.random.Random import kotlin.reflect.typeOf -import androidx.compose.ui.window.Dialog as ComposeDialog private class OptionEditorScope( private val editor: OptionEditor, @@ -497,7 +499,8 @@ private class ListOptionEditor(private val elementEditor: Opti val lazyListState = rememberLazyListState() val reorderableLazyColumnState = - rememberReorderableLazyColumnState(lazyListState) { from, to -> + // Update the list + rememberReorderableLazyListState(lazyListState) { from, to -> // Update the list items.add(to.index, items.removeAt(from.index)) } @@ -524,12 +527,8 @@ private class ListOptionEditor(private val elementEditor: Opti scope.submitDialog(items.mapNotNull { it.value }) } - ComposeDialog( + FullscreenDialog( onDismissRequest = back, - properties = DialogProperties( - usePlatformDefaultWidth = false, - dismissOnBackPress = true - ), ) { Scaffold( topBar = { diff --git a/app/src/main/java/app/revanced/manager/ui/component/patches/PathSelectorDialog.kt b/app/src/main/java/app/revanced/manager/ui/component/patches/PathSelectorDialog.kt index c0bad8f9..a2b5ba59 100644 --- a/app/src/main/java/app/revanced/manager/ui/component/patches/PathSelectorDialog.kt +++ b/app/src/main/java/app/revanced/manager/ui/component/patches/PathSelectorDialog.kt @@ -23,10 +23,9 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource -import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties import app.revanced.manager.R import app.revanced.manager.ui.component.AppTopBar +import app.revanced.manager.ui.component.FullscreenDialog import app.revanced.manager.ui.component.GroupHeader import app.revanced.manager.ui.component.LazyColumnWithScrollbar import app.revanced.manager.util.saver.PathSaver @@ -48,12 +47,8 @@ fun PathSelectorDialog(root: Path, onSelect: (Path?) -> Unit) { currentDirectory.listDirectoryEntries().filter(Path::isReadable).partition(Path::isDirectory) } - Dialog( + FullscreenDialog( onDismissRequest = { onSelect(null) }, - properties = DialogProperties( - usePlatformDefaultWidth = false, - dismissOnBackPress = true - ) ) { Scaffold( topBar = { diff --git a/app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt index 7548b8ad..8daf718f 100644 --- a/app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt +++ b/app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt @@ -60,14 +60,13 @@ import androidx.compose.ui.draw.rotate import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.revanced.manager.R import app.revanced.manager.patcher.patch.Option import app.revanced.manager.patcher.patch.PatchInfo import app.revanced.manager.ui.component.AppTopBar import app.revanced.manager.ui.component.CheckedFilterChip +import app.revanced.manager.ui.component.FullscreenDialog import app.revanced.manager.ui.component.LazyColumnWithScrollbar import app.revanced.manager.ui.component.SafeguardDialog import app.revanced.manager.ui.component.SearchBar @@ -369,14 +368,22 @@ fun PatchesSelectorScreen( Icon(Icons.Outlined.Restore, stringResource(R.string.reset)) } HapticExtendedFloatingActionButton( - text = { Text(stringResource(R.string.save_with_count, selectedPatchCount)) }, + text = { + Text( + stringResource( + R.string.save_with_count, + selectedPatchCount + ) + ) + }, icon = { Icon( imageVector = Icons.Outlined.Save, contentDescription = stringResource(R.string.save) ) }, - expanded = patchLazyListStates.getOrNull(pagerState.currentPage)?.isScrollingUp ?: true, + expanded = patchLazyListStates.getOrNull(pagerState.currentPage)?.isScrollingUp + ?: true, onClick = { onSave(vm.getCustomSelection(), vm.getOptions()) } @@ -630,13 +637,7 @@ private fun OptionsDialog( reset: () -> Unit, set: (String, Any?) -> Unit, onDismissRequest: () -> Unit, -) = Dialog( - onDismissRequest = onDismissRequest, - properties = DialogProperties( - usePlatformDefaultWidth = false, - dismissOnBackPress = true - ) -) { +) = FullscreenDialog(onDismissRequest = onDismissRequest) { Scaffold( topBar = { AppTopBar( diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ffc6f295..dae1b2ef 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,22 +1,22 @@ [versions] -ktx = "1.15.0" -material3 = "1.3.1" -ui-tooling = "1.7.7" -viewmodel-lifecycle = "2.8.7" +ktx = "1.16.0" +material3 = "1.3.2" +ui-tooling = "1.8.1" +viewmodel-lifecycle = "2.9.0" splash-screen = "1.0.1" -activity = "1.10.0" +activity = "1.10.1" appcompat = "1.7.0" preferences-datastore = "1.1.2" -work-runtime = "2.10.0" -compose-bom = "2025.01.01" -navigation = "2.8.6" +work-runtime = "2.10.1" +compose-bom = "2025.05.00" +navigation = "2.9.0" accompanist = "0.37.0" placeholder = "1.1.2" reorderable = "2.4.3" serialization = "1.8.0" collection = "0.3.8" datetime = "0.6.1" -room-version = "2.6.1" +room-version = "2.7.1" revanced-patcher = "21.0.0" revanced-library = "3.0.2" plugin-api = "1.0.0" @@ -25,7 +25,7 @@ ktor = "2.3.9" markdown-renderer = "0.30.0" fading-edges = "1.0.4" kotlin = "2.1.10" -android-gradle-plugin = "8.8.0" +android-gradle-plugin = "8.9.1" dev-tools-gradle-plugin = "2.1.10-1.0.29" about-libraries-gradle-plugin = "11.5.0" coil = "2.7.0"