mirror of
https://github.com/revanced/revanced-manager-compose-old.git
synced 2025-04-29 22:14:28 +02:00
feat: opensource licenses screen
This commit is contained in:
parent
d4443d309e
commit
bd2424611d
1
.gitignore
vendored
1
.gitignore
vendored
@ -79,3 +79,4 @@ lint/outputs/
|
|||||||
lint/tmp/
|
lint/tmp/
|
||||||
*.hprof
|
*.hprof
|
||||||
/.idea/deploymentTargetDropDown.xml
|
/.idea/deploymentTargetDropDown.xml
|
||||||
|
.idea/discord.xml
|
@ -3,6 +3,7 @@ plugins {
|
|||||||
id("org.jetbrains.kotlin.android")
|
id("org.jetbrains.kotlin.android")
|
||||||
id("com.google.devtools.ksp")
|
id("com.google.devtools.ksp")
|
||||||
id("kotlin-parcelize")
|
id("kotlin-parcelize")
|
||||||
|
id("com.mikepenz.aboutlibraries.plugin") version "10.4.0"
|
||||||
kotlin("plugin.serialization") version "1.7.10"
|
kotlin("plugin.serialization") version "1.7.10"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,4 +128,6 @@ dependencies {
|
|||||||
implementation("org.bouncycastle:bcpkix-jdk15on:1.70")
|
implementation("org.bouncycastle:bcpkix-jdk15on:1.70")
|
||||||
implementation("com.android.tools.build:apksig:7.2.2")
|
implementation("com.android.tools.build:apksig:7.2.2")
|
||||||
|
|
||||||
|
// Licenses
|
||||||
|
implementation("com.mikepenz:aboutlibraries-compose:10.4.0")
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ import app.revanced.manager.ui.navigation.AppDestination
|
|||||||
import app.revanced.manager.ui.screen.MainDashboardScreen
|
import app.revanced.manager.ui.screen.MainDashboardScreen
|
||||||
import app.revanced.manager.ui.screen.PatchingScreen
|
import app.revanced.manager.ui.screen.PatchingScreen
|
||||||
import app.revanced.manager.ui.screen.subscreens.AppSelectorSubscreen
|
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.screen.subscreens.PatchesSelectorSubscreen
|
||||||
import app.revanced.manager.ui.theme.ReVancedManagerTheme
|
import app.revanced.manager.ui.theme.ReVancedManagerTheme
|
||||||
import app.revanced.manager.ui.theme.Theme
|
import app.revanced.manager.ui.theme.Theme
|
||||||
@ -51,6 +52,7 @@ class MainActivity : ComponentActivity() {
|
|||||||
is AppDestination.Dashboard -> MainDashboardScreen(navigator = navigator)
|
is AppDestination.Dashboard -> MainDashboardScreen(navigator = navigator)
|
||||||
is AppDestination.AppSelector -> AppSelectorSubscreen(navigator = navigator)
|
is AppDestination.AppSelector -> AppSelectorSubscreen(navigator = navigator)
|
||||||
is AppDestination.PatchSelector -> PatchesSelectorSubscreen(navigator = navigator)
|
is AppDestination.PatchSelector -> PatchesSelectorSubscreen(navigator = navigator)
|
||||||
|
is AppDestination.Licenses -> LicensesSubscreen(navigator = navigator)
|
||||||
is AppDestination.Patcher -> PatchingScreen(navigator = navigator)
|
is AppDestination.Patcher -> PatchingScreen(navigator = navigator)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,9 @@ sealed interface AppDestination : Destination {
|
|||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
object Patcher : AppDestination
|
object Patcher : AppDestination
|
||||||
|
|
||||||
|
@Parcelize
|
||||||
|
object Licenses : AppDestination
|
||||||
}
|
}
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
|
@ -72,7 +72,9 @@ fun MainDashboardScreen(navigator: BackstackNavigator<AppDestination>) {
|
|||||||
onClickPatchSelector = { navigator.push(AppDestination.PatchSelector) },
|
onClickPatchSelector = { navigator.push(AppDestination.PatchSelector) },
|
||||||
onClickPatch = { navigator.push(AppDestination.Patcher) },
|
onClickPatch = { navigator.push(AppDestination.Patcher) },
|
||||||
)
|
)
|
||||||
DashboardDestination.SETTINGS -> SettingsScreen()
|
DashboardDestination.SETTINGS -> SettingsScreen(
|
||||||
|
onClickLicenses = { navigator.push(AppDestination.Licenses) }
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import androidx.compose.foundation.rememberScrollState
|
|||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Code
|
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.Palette
|
||||||
import androidx.compose.material.icons.filled.Style
|
import androidx.compose.material.icons.filled.Style
|
||||||
import androidx.compose.material3.*
|
import androidx.compose.material3.*
|
||||||
@ -26,7 +27,10 @@ import org.koin.androidx.compose.getViewModel
|
|||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun SettingsScreen(viewModel: SettingsViewModel = getViewModel()) {
|
fun SettingsScreen(
|
||||||
|
onClickLicenses: () -> Unit,
|
||||||
|
viewModel: SettingsViewModel = getViewModel()
|
||||||
|
) {
|
||||||
val prefs = viewModel.prefs
|
val prefs = viewModel.prefs
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
@ -47,9 +51,11 @@ fun SettingsScreen(viewModel: SettingsViewModel = getViewModel()) {
|
|||||||
modifier = Modifier.clickable { viewModel.showThemePicker() },
|
modifier = Modifier.clickable { viewModel.showThemePicker() },
|
||||||
headlineText = { Text(stringResource(R.string.theme)) },
|
headlineText = { Text(stringResource(R.string.theme)) },
|
||||||
leadingContent = { Icon(Icons.Default.Style, contentDescription = null) },
|
leadingContent = { Icon(Icons.Default.Style, contentDescription = null) },
|
||||||
trailingContent = { FilledTonalButton(onClick = { viewModel.showThemePicker() }) {
|
trailingContent = {
|
||||||
Text(text = prefs.theme.displayName)
|
FilledTonalButton(onClick = { viewModel.showThemePicker() }) {
|
||||||
} }
|
Text(text = prefs.theme.displayName)
|
||||||
|
}
|
||||||
|
}
|
||||||
)
|
)
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
ListItem(
|
ListItem(
|
||||||
@ -66,6 +72,11 @@ fun SettingsScreen(viewModel: SettingsViewModel = getViewModel()) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Divider()
|
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)
|
SocialItem(R.string.github, Icons.Default.Code, viewModel::openGitHub)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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<AppDestination>,
|
||||||
|
) {
|
||||||
|
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,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -78,4 +78,5 @@
|
|||||||
<string name="apply">Apply</string>
|
<string name="apply">Apply</string>
|
||||||
<string name="warning">Warning</string>
|
<string name="warning">Warning</string>
|
||||||
<string name="split_apk_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?</string>
|
<string name="split_apk_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?</string>
|
||||||
|
<string name="opensource_licenses">Open source licenses</string>
|
||||||
</resources>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user