diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 00313a4..edc963d 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -4,6 +4,7 @@ plugins {
id("com.google.devtools.ksp")
id("kotlin-parcelize")
kotlin("plugin.serialization") version "1.8.21"
+ id("com.mikepenz.aboutlibraries.plugin") version "10.8.0"
}
android {
@@ -116,6 +117,9 @@ dependencies {
// Compose Navigation
implementation("dev.olshevski.navigation:reimagined:1.4.0")
+ // Licenses
+ implementation("com.mikepenz:aboutlibraries-compose:10.8.0")
+
// Ktor
val ktorVersion = "2.3.0"
implementation("io.ktor:ktor-client-core:$ktorVersion")
diff --git a/app/src/main/java/app/revanced/manager/ui/destination/SettingsDestination.kt b/app/src/main/java/app/revanced/manager/ui/destination/SettingsDestination.kt
index df18a2e..2b83fcf 100644
--- a/app/src/main/java/app/revanced/manager/ui/destination/SettingsDestination.kt
+++ b/app/src/main/java/app/revanced/manager/ui/destination/SettingsDestination.kt
@@ -29,4 +29,7 @@ sealed interface SettingsDestination : Parcelable {
@Parcelize
object Contributors: SettingsDestination
+ @Parcelize
+ object Licenses: SettingsDestination
+
}
\ No newline at end of file
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 3701052..52207dd 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
@@ -111,7 +111,8 @@ fun SettingsScreen(
is SettingsDestination.About -> AboutSettingsScreen(
onBackClick = { navController.pop() },
- onContributorsClick = { navController.navigate(SettingsDestination.Contributors) }
+ onContributorsClick = { navController.navigate(SettingsDestination.Contributors) },
+ onLicensesClick = { navController.navigate(SettingsDestination.Licenses) }
)
is SettingsDestination.UpdateProgress -> UpdateProgressScreen(
@@ -122,6 +123,10 @@ fun SettingsScreen(
onBackClick = { navController.pop() },
)
+ is SettingsDestination.Licenses -> LicensesScreen(
+ onBackClick = { navController.pop() },
+ )
+
is SettingsDestination.Settings -> {
Scaffold(
topBar = {
diff --git a/app/src/main/java/app/revanced/manager/ui/screen/settings/AboutSettingsScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/settings/AboutSettingsScreen.kt
index e89fe1b..b47e8fd 100644
--- a/app/src/main/java/app/revanced/manager/ui/screen/settings/AboutSettingsScreen.kt
+++ b/app/src/main/java/app/revanced/manager/ui/screen/settings/AboutSettingsScreen.kt
@@ -33,6 +33,7 @@ import dev.olshevski.navigation.reimagined.navigate
fun AboutSettingsScreen(
onBackClick: () -> Unit,
onContributorsClick: () -> Unit,
+ onLicensesClick: () -> Unit,
) {
val context = LocalContext.current
val icon = rememberDrawablePainter(context.packageManager.getApplicationIcon(context.packageName))
@@ -62,6 +63,8 @@ fun AboutSettingsScreen(
third = onContributorsClick),
Triple(stringResource(R.string.developer_options), stringResource(R.string.developer_options_description),
third = { /*TODO*/ }),
+ Triple(stringResource(R.string.opensource_licenses), stringResource(R.string.opensource_licenses_description),
+ third = onLicensesClick)
)
Scaffold(
@@ -79,7 +82,9 @@ fun AboutSettingsScreen(
.verticalScroll(rememberScrollState())
) {
Column(
- modifier = Modifier.fillMaxWidth().padding(vertical = 16.dp),
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(vertical = 16.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(4.dp)
) {
diff --git a/app/src/main/java/app/revanced/manager/ui/screen/settings/LicensesScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/settings/LicensesScreen.kt
new file mode 100644
index 0000000..70d433d
--- /dev/null
+++ b/app/src/main/java/app/revanced/manager/ui/screen/settings/LicensesScreen.kt
@@ -0,0 +1,41 @@
+package app.revanced.manager.ui.screen.settings
+
+import androidx.compose.foundation.layout.*
+import androidx.compose.material3.*
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import app.revanced.manager.R
+import app.revanced.manager.ui.component.AppScaffold
+import app.revanced.manager.ui.component.AppTopBar
+import com.mikepenz.aboutlibraries.ui.compose.LibrariesContainer
+import com.mikepenz.aboutlibraries.ui.compose.LibraryDefaults
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun LicensesScreen(
+ onBackClick: () -> Unit,
+) {
+ AppScaffold(
+ topBar = { scrollBehavior ->
+ AppTopBar(
+ title = stringResource(R.string.opensource_licenses),
+ scrollBehavior = scrollBehavior,
+ onBackClick = onBackClick
+ )
+ }
+ ) { 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 16bc080..bd015d7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -15,6 +15,8 @@
General settings
Updates
Updates for ReVanced Manager
+ Open source licenses
+ View all the libraries used to make this application
Downloads
Manage downloaded content
Import & export