From bd2424611dfbf7eac59eb9da6eb2e9174348036f Mon Sep 17 00:00:00 2001 From: Ushie Date: Sun, 2 Oct 2022 16:45:59 +0300 Subject: [PATCH] feat: opensource licenses screen --- .gitignore | 1 + app/build.gradle.kts | 3 + .../java/app/revanced/manager/MainActivity.kt | 2 + .../manager/ui/navigation/AppDestination.kt | 3 + .../manager/ui/screen/MainDashboardScreen.kt | 4 +- .../manager/ui/screen/SettingsScreen.kt | 19 +++++-- .../ui/screen/subscreens/LicensesSubscreen.kt | 57 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 8 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/app/revanced/manager/ui/screen/subscreens/LicensesSubscreen.kt diff --git a/.gitignore b/.gitignore index 786af17..59ec009 100644 --- a/.gitignore +++ b/.gitignore @@ -79,3 +79,4 @@ lint/outputs/ lint/tmp/ *.hprof /.idea/deploymentTargetDropDown.xml +.idea/discord.xml \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7c790da..f484228 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -3,6 +3,7 @@ plugins { id("org.jetbrains.kotlin.android") id("com.google.devtools.ksp") id("kotlin-parcelize") + id("com.mikepenz.aboutlibraries.plugin") version "10.4.0" kotlin("plugin.serialization") version "1.7.10" } @@ -127,4 +128,6 @@ dependencies { implementation("org.bouncycastle:bcpkix-jdk15on:1.70") implementation("com.android.tools.build:apksig:7.2.2") + // Licenses + implementation("com.mikepenz:aboutlibraries-compose:10.4.0") } diff --git a/app/src/main/java/app/revanced/manager/MainActivity.kt b/app/src/main/java/app/revanced/manager/MainActivity.kt index c8a6e04..8e4b1bf 100644 --- a/app/src/main/java/app/revanced/manager/MainActivity.kt +++ b/app/src/main/java/app/revanced/manager/MainActivity.kt @@ -17,6 +17,7 @@ import app.revanced.manager.ui.navigation.AppDestination import app.revanced.manager.ui.screen.MainDashboardScreen import app.revanced.manager.ui.screen.PatchingScreen import app.revanced.manager.ui.screen.subscreens.AppSelectorSubscreen +import app.revanced.manager.ui.screen.subscreens.LicensesSubscreen import app.revanced.manager.ui.screen.subscreens.PatchesSelectorSubscreen import app.revanced.manager.ui.theme.ReVancedManagerTheme import app.revanced.manager.ui.theme.Theme @@ -51,6 +52,7 @@ class MainActivity : ComponentActivity() { is AppDestination.Dashboard -> MainDashboardScreen(navigator = navigator) is AppDestination.AppSelector -> AppSelectorSubscreen(navigator = navigator) is AppDestination.PatchSelector -> PatchesSelectorSubscreen(navigator = navigator) + is AppDestination.Licenses -> LicensesSubscreen(navigator = navigator) is AppDestination.Patcher -> PatchingScreen(navigator = navigator) } } diff --git a/app/src/main/java/app/revanced/manager/ui/navigation/AppDestination.kt b/app/src/main/java/app/revanced/manager/ui/navigation/AppDestination.kt index 97a7298..0c06a4f 100644 --- a/app/src/main/java/app/revanced/manager/ui/navigation/AppDestination.kt +++ b/app/src/main/java/app/revanced/manager/ui/navigation/AppDestination.kt @@ -24,6 +24,9 @@ sealed interface AppDestination : Destination { @Parcelize object Patcher : AppDestination + + @Parcelize + object Licenses : AppDestination } @Parcelize diff --git a/app/src/main/java/app/revanced/manager/ui/screen/MainDashboardScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/MainDashboardScreen.kt index d82fb29..83f4222 100644 --- a/app/src/main/java/app/revanced/manager/ui/screen/MainDashboardScreen.kt +++ b/app/src/main/java/app/revanced/manager/ui/screen/MainDashboardScreen.kt @@ -72,7 +72,9 @@ fun MainDashboardScreen(navigator: BackstackNavigator) { onClickPatchSelector = { navigator.push(AppDestination.PatchSelector) }, onClickPatch = { navigator.push(AppDestination.Patcher) }, ) - DashboardDestination.SETTINGS -> SettingsScreen() + DashboardDestination.SETTINGS -> SettingsScreen( + onClickLicenses = { navigator.push(AppDestination.Licenses) } + ) } } } diff --git a/app/src/main/java/app/revanced/manager/ui/screen/SettingsScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/SettingsScreen.kt index e331c43..1d59744 100644 --- a/app/src/main/java/app/revanced/manager/ui/screen/SettingsScreen.kt +++ b/app/src/main/java/app/revanced/manager/ui/screen/SettingsScreen.kt @@ -7,6 +7,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Code +import androidx.compose.material.icons.filled.LibraryBooks import androidx.compose.material.icons.filled.Palette import androidx.compose.material.icons.filled.Style import androidx.compose.material3.* @@ -26,7 +27,10 @@ import org.koin.androidx.compose.getViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable -fun SettingsScreen(viewModel: SettingsViewModel = getViewModel()) { +fun SettingsScreen( + onClickLicenses: () -> Unit, + viewModel: SettingsViewModel = getViewModel() +) { val prefs = viewModel.prefs Column( @@ -47,9 +51,11 @@ fun SettingsScreen(viewModel: SettingsViewModel = getViewModel()) { modifier = Modifier.clickable { viewModel.showThemePicker() }, headlineText = { Text(stringResource(R.string.theme)) }, leadingContent = { Icon(Icons.Default.Style, contentDescription = null) }, - trailingContent = { FilledTonalButton(onClick = { viewModel.showThemePicker() }) { - Text(text = prefs.theme.displayName) - } } + trailingContent = { + FilledTonalButton(onClick = { viewModel.showThemePicker() }) { + Text(text = prefs.theme.displayName) + } + } ) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { ListItem( @@ -66,6 +72,11 @@ fun SettingsScreen(viewModel: SettingsViewModel = getViewModel()) { } Divider() + ListItem( + modifier = Modifier.clickable(onClick = onClickLicenses), + headlineText = { Text(stringResource(R.string.opensource_licenses)) }, + leadingContent = { Icon(Icons.Default.LibraryBooks, contentDescription = null) }, + ) SocialItem(R.string.github, Icons.Default.Code, viewModel::openGitHub) } } diff --git a/app/src/main/java/app/revanced/manager/ui/screen/subscreens/LicensesSubscreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/subscreens/LicensesSubscreen.kt new file mode 100644 index 0000000..09cf3db --- /dev/null +++ b/app/src/main/java/app/revanced/manager/ui/screen/subscreens/LicensesSubscreen.kt @@ -0,0 +1,57 @@ +package app.revanced.manager.ui.screen.subscreens + +import androidx.compose.foundation.layout.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.res.stringResource +import app.revanced.manager.R +import app.revanced.manager.ui.navigation.AppDestination +import com.mikepenz.aboutlibraries.ui.compose.LibrariesContainer +import com.mikepenz.aboutlibraries.ui.compose.LibraryDefaults +import com.xinto.taxi.BackstackNavigator + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun LicensesSubscreen( + navigator: BackstackNavigator, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior( + state = rememberTopAppBarState(), + canScroll = { true } + ) + Scaffold( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topBar = { + LargeTopAppBar( + title = { Text(stringResource(R.string.opensource_licenses)) }, + navigationIcon = { + IconButton(onClick = navigator::pop) { + Icon( + imageVector = Icons.Default.ArrowBack, + contentDescription = null + ) + } + }, + scrollBehavior = scrollBehavior + ) + } + ) { paddingValues -> + Column(modifier = Modifier.padding(paddingValues)) { + LibrariesContainer( + modifier = Modifier + .fillMaxSize(), + colors = LibraryDefaults.libraryColors( + backgroundColor = MaterialTheme.colorScheme.background, + contentColor = MaterialTheme.colorScheme.onBackground, + badgeBackgroundColor = MaterialTheme.colorScheme.primary, + badgeContentColor = MaterialTheme.colorScheme.onPrimary, + ), + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b5ad59a..1d506e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -78,4 +78,5 @@ Apply Warning You have selected a resource patch and a split APK installation was detected so patching errors can occur.\nAre you sure you want to proceed with patching a split base APK? + Open source licenses \ No newline at end of file