From f76d852f3197060bab86da75eb2dae666bf4b5f2 Mon Sep 17 00:00:00 2001 From: Wing <44992537+wingio@users.noreply.github.com> Date: Sat, 17 Feb 2024 15:03:08 -0500 Subject: [PATCH] Add library credits and bump version --- app/build.gradle.kts | 8 +- .../vendetta/manager/di/ViewModelModule.kt | 2 + .../vendetta/manager/ui/components/Label.kt | 65 +++++++++ .../manager/ui/components/ThinDivider.kt | 12 ++ .../manager/ui/screen/about/AboutScreen.kt | 19 ++- .../ui/screen/libraries/LibrariesScreen.kt | 88 ++++++++++++ .../viewmodel/libraries/LibrariesViewModel.kt | 14 ++ .../ui/widgets/libraries/LibraryItem.kt | 129 ++++++++++++++++++ .../widgets/libraries/LicenseBottomSheet.kt | 75 ++++++++++ .../vendetta/manager/utils/ModifierUtils.kt | 2 +- app/src/main/res/values/strings.xml | 6 +- build.gradle.kts | 1 + gradle/libs.versions.toml | 3 + 13 files changed, 415 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/dev/beefers/vendetta/manager/ui/components/Label.kt create mode 100644 app/src/main/java/dev/beefers/vendetta/manager/ui/components/ThinDivider.kt create mode 100644 app/src/main/java/dev/beefers/vendetta/manager/ui/screen/libraries/LibrariesScreen.kt create mode 100644 app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/libraries/LibrariesViewModel.kt create mode 100644 app/src/main/java/dev/beefers/vendetta/manager/ui/widgets/libraries/LibraryItem.kt create mode 100644 app/src/main/java/dev/beefers/vendetta/manager/ui/widgets/libraries/LicenseBottomSheet.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f1b1ad6..fdd4324 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,8 @@ +import org.gradle.internal.impldep.org.junit.experimental.categories.Categories.CategoryFilter.exclude import java.io.ByteArrayOutputStream plugins { + alias(libs.plugins.aboutlibraries) alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.serialization) @@ -14,8 +16,8 @@ android { applicationId = "dev.beefers.vendetta.manager" minSdk = 28 targetSdk = 34 - versionCode = 1121 - versionName = "1.1.21" + versionCode = 1122 + versionName = "1.1.22" buildConfigField("String", "GIT_BRANCH", "\"${getCurrentBranch()}\"") buildConfigField("String", "GIT_COMMIT", "\"${getLatestCommit()}\"") @@ -85,6 +87,7 @@ android { configurations { all { exclude(module = "listenablefuture") + exclude(module = "error_prone_annotations") } } } @@ -102,6 +105,7 @@ dependencies { implementation(libs.bundles.voyager) implementation(files("libs/lspatch.aar")) + implementation(libs.aboutlibraries.core) implementation(libs.kotlinx.datetime) implementation(libs.kotlinx.collections) implementation(libs.zip.android) { diff --git a/app/src/main/java/dev/beefers/vendetta/manager/di/ViewModelModule.kt b/app/src/main/java/dev/beefers/vendetta/manager/di/ViewModelModule.kt index f220b94..5920b58 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/di/ViewModelModule.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/di/ViewModelModule.kt @@ -3,6 +3,7 @@ package dev.beefers.vendetta.manager.di import dev.beefers.vendetta.manager.ui.viewmodel.home.HomeViewModel import dev.beefers.vendetta.manager.ui.viewmodel.installer.InstallerViewModel import dev.beefers.vendetta.manager.ui.viewmodel.installer.LogViewerViewModel +import dev.beefers.vendetta.manager.ui.viewmodel.libraries.LibrariesViewModel import dev.beefers.vendetta.manager.ui.viewmodel.settings.AdvancedSettingsViewModel import org.koin.core.module.dsl.factoryOf import org.koin.dsl.module @@ -12,4 +13,5 @@ val viewModelModule = module { factoryOf(::AdvancedSettingsViewModel) factoryOf(::HomeViewModel) factoryOf(::LogViewerViewModel) + factoryOf(::LibrariesViewModel) } \ No newline at end of file diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/components/Label.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/components/Label.kt new file mode 100644 index 0000000..565f8a5 --- /dev/null +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/components/Label.kt @@ -0,0 +1,65 @@ +package dev.beefers.vendetta.manager.ui.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +@Composable +fun Label( + modifier: Modifier = Modifier, + text: String? = null, + icon: ImageVector? = null, + textColor: Color, + borderColor: Color = textColor, + fillColor: Color = Color.Transparent, + iconColor: Color = textColor +) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(4.dp), + modifier = Modifier + .then(modifier) + .clip(CircleShape) + .background(fillColor) + .border(1.dp, borderColor, CircleShape) + .then( + if (text == null) + Modifier.padding(5.dp) + else + Modifier.padding(vertical = 5.dp, horizontal = 7.dp) + ) + ) { + icon?.let { + Icon( + imageVector = it, + contentDescription = null, + tint = iconColor, + modifier = Modifier.size(12.dp) + ) + } + text?.let { + Text( + text = text, + style = MaterialTheme.typography.labelSmall, + fontSize = 10.sp, + color = textColor, + maxLines = 1 + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/components/ThinDivider.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/components/ThinDivider.kt new file mode 100644 index 0000000..8ea5fe9 --- /dev/null +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/components/ThinDivider.kt @@ -0,0 +1,12 @@ +package dev.beefers.vendetta.manager.ui.components + +import androidx.compose.material3.Divider +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.unit.dp + +@Composable +fun ThinDivider() = Divider( + color = MaterialTheme.colorScheme.onSurface.copy(0.1f), + thickness = 0.5.dp, +) \ No newline at end of file diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/about/AboutScreen.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/about/AboutScreen.kt index 50a4429..79a9e2c 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/about/AboutScreen.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/about/AboutScreen.kt @@ -6,14 +6,10 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.verticalScroll @@ -33,6 +29,7 @@ import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -51,6 +48,7 @@ import cafe.adriel.voyager.navigator.currentOrThrow import dev.beefers.vendetta.manager.BuildConfig import dev.beefers.vendetta.manager.R import dev.beefers.vendetta.manager.domain.manager.PreferenceManager +import dev.beefers.vendetta.manager.ui.screen.libraries.LibrariesScreen import dev.beefers.vendetta.manager.ui.widgets.about.LinkItem import dev.beefers.vendetta.manager.ui.widgets.about.ListItem import dev.beefers.vendetta.manager.ui.widgets.about.UserEntry @@ -73,7 +71,7 @@ class AboutScreen : Screen { ctx.getBitmap(R.drawable.ic_launcher, 60).asImageBitmap() } var tapCount by remember { - mutableStateOf(0) + mutableIntStateOf(0) } Scaffold( @@ -227,10 +225,21 @@ class AboutScreen : Screen { modifier = Modifier.padding(16.dp) ) { ElevatedCard { + val navigator = LocalNavigator.currentOrThrow + ListItem( text = stringResource(R.string.label_translate), onClick = { uriHandler.openUri("https://crowdin.com/project/vendetta-manager") } ) + Divider( + thickness = 0.5.dp, + color = MaterialTheme.colorScheme.outline.copy(alpha = 0.3f), + modifier = Modifier.padding(horizontal = 16.dp) + ) + ListItem( + text = stringResource(R.string.title_os_libraries), + onClick = { navigator.push(LibrariesScreen()) } + ) } } } diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/libraries/LibrariesScreen.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/libraries/LibrariesScreen.kt new file mode 100644 index 0000000..4e7f88a --- /dev/null +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/screen/libraries/LibrariesScreen.kt @@ -0,0 +1,88 @@ +package dev.beefers.vendetta.manager.ui.screen.libraries + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LargeTopAppBar +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import cafe.adriel.voyager.core.screen.Screen +import cafe.adriel.voyager.koin.getScreenModel +import cafe.adriel.voyager.navigator.LocalNavigator +import cafe.adriel.voyager.navigator.currentOrThrow +import dev.beefers.vendetta.manager.R +import dev.beefers.vendetta.manager.domain.manager.PreferenceManager +import dev.beefers.vendetta.manager.ui.components.ThinDivider +import dev.beefers.vendetta.manager.ui.viewmodel.libraries.LibrariesViewModel +import dev.beefers.vendetta.manager.ui.widgets.libraries.LibraryItem +import org.koin.androidx.compose.get + +class LibrariesScreen: Screen { + + @Composable + @OptIn(ExperimentalMaterial3Api::class) + override fun Content() { + val viewModel: LibrariesViewModel = getScreenModel() + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + + Scaffold( + topBar = { TitleBar(scrollBehavior) }, + contentWindowInsets = WindowInsets(0, 0, 0, 0), + modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection) + ) { pv -> + LazyColumn( + modifier = Modifier.padding(pv) + ) { + itemsIndexed(viewModel.libraries.libraries) { i, library -> + Column { + LibraryItem( + library = library + ) + if(i != viewModel.libraries.libraries.lastIndex) { + ThinDivider() + } + } + } + } + } + } + + @Composable + @OptIn(ExperimentalMaterial3Api::class) + fun TitleBar( + scrollBehavior: TopAppBarScrollBehavior + ) { + val navigator = LocalNavigator.currentOrThrow + + LargeTopAppBar( + title = { + Text(stringResource(R.string.title_libraries)) + }, + navigationIcon = { + IconButton(onClick = { navigator.pop() }) { + Icon( + imageVector = Icons.Filled.ArrowBack, + contentDescription = stringResource(R.string.action_back) + ) + } + }, + scrollBehavior = scrollBehavior + ) + } + +} \ No newline at end of file diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/libraries/LibrariesViewModel.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/libraries/LibrariesViewModel.kt new file mode 100644 index 0000000..901b2d7 --- /dev/null +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/libraries/LibrariesViewModel.kt @@ -0,0 +1,14 @@ +package dev.beefers.vendetta.manager.ui.viewmodel.libraries + +import android.content.Context +import cafe.adriel.voyager.core.model.ScreenModel +import com.mikepenz.aboutlibraries.Libs +import com.mikepenz.aboutlibraries.util.withContext + +class LibrariesViewModel( + context: Context +): ScreenModel { + + val libraries = Libs.Builder().withContext(context).build() + +} \ No newline at end of file diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/widgets/libraries/LibraryItem.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/widgets/libraries/LibraryItem.kt new file mode 100644 index 0000000..0ede3b0 --- /dev/null +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/widgets/libraries/LibraryItem.kt @@ -0,0 +1,129 @@ +package dev.beefers.vendetta.manager.ui.widgets.libraries + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Balance +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Person +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.mikepenz.aboutlibraries.entity.Library +import com.mikepenz.aboutlibraries.util.author +import dev.beefers.vendetta.manager.R +import dev.beefers.vendetta.manager.ui.components.Label +import dev.beefers.vendetta.manager.utils.contentDescription + +@Composable +@OptIn(ExperimentalLayoutApi::class, ExperimentalFoundationApi::class) +fun LibraryItem( + library: Library +) { + val linkHandler = LocalUriHandler.current + var licenseSheetOpened by remember { + mutableStateOf(false) + } + + if (licenseSheetOpened && library.licenses.firstOrNull()?.licenseContent != null) { + LicenseBottomSheet( + license = library.licenses.first(), + libraryName = library.name, + onDismiss = { + licenseSheetOpened = false + } + ) + } + + Column( + verticalArrangement = Arrangement.spacedBy(6.dp), + modifier = Modifier + .combinedClickable( + onClick = { licenseSheetOpened = true }, + onLongClick = { library.website?.let { linkHandler.openUri(it) } } + ) + .fillMaxWidth() + .padding(16.dp) + ) { + Text( + text = library.name, + style = MaterialTheme.typography.bodyMedium, + fontSize = 15.sp, + fontWeight = FontWeight.Bold + ) + + if (!library.description.isNullOrBlank()) { + Text( + text = library.description!!, + style = MaterialTheme.typography.bodyMedium, + fontSize = 15.sp, + color = LocalContentColor.current.copy(alpha = 0.7f) + ) + } + + FlowRow( + horizontalArrangement = Arrangement.spacedBy(6.dp), + verticalArrangement = Arrangement.spacedBy(10.dp), + modifier = Modifier.padding(top = 4.dp) + ) { + val labelColor = MaterialTheme.colorScheme.surfaceColorAtElevation(3.dp) + + library.artifactVersion?.let { + Label( + text = "v$it", + icon = Icons.Outlined.Info, + textColor = MaterialTheme.colorScheme.onSurface, + borderColor = labelColor, + fillColor = labelColor + ) + } + + if (library.author.isNotBlank()) { + Label( + text = library.author, + icon = Icons.Outlined.Person, + textColor = MaterialTheme.colorScheme.onSurface, + borderColor = labelColor, + fillColor = labelColor, + modifier = Modifier.contentDescription( + R.string.cd_library_author, + library.author, + merge = true + ) + ) + } + + library.licenses.forEach { license -> + Label( + text = license.name, + icon = Icons.Outlined.Balance, + textColor = MaterialTheme.colorScheme.onSurface, + borderColor = labelColor, + fillColor = labelColor, + modifier = Modifier.contentDescription( + R.string.cd_library_license, + license.name, + merge = true + ) + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/dev/beefers/vendetta/manager/ui/widgets/libraries/LicenseBottomSheet.kt b/app/src/main/java/dev/beefers/vendetta/manager/ui/widgets/libraries/LicenseBottomSheet.kt new file mode 100644 index 0000000..b657341 --- /dev/null +++ b/app/src/main/java/dev/beefers/vendetta/manager/ui/widgets/libraries/LicenseBottomSheet.kt @@ -0,0 +1,75 @@ +package dev.beefers.vendetta.manager.ui.widgets.libraries + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.selection.SelectionContainer +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.mikepenz.aboutlibraries.entity.License +import dev.beefers.vendetta.manager.utils.DimenUtils + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun LicenseBottomSheet( + license: License, + libraryName: String, + onDismiss: () -> Unit +) { + ModalBottomSheet( + onDismissRequest = onDismiss, + windowInsets = WindowInsets(0, 0, 0, 0) + ) { + Column( + verticalArrangement = Arrangement.spacedBy(12.dp), + modifier = Modifier + .padding(16.dp) + .padding(bottom = DimenUtils.navBarPadding) + ) { + Text( + text = license.name, + style = MaterialTheme.typography.headlineMedium, + textAlign = TextAlign.Center, + modifier = Modifier.fillMaxWidth() + ) + + Text( + text = libraryName, + style = MaterialTheme.typography.titleSmall, + textAlign = TextAlign.Center, + modifier = Modifier.fillMaxWidth() + ) + + Spacer(Modifier) + + SelectionContainer { + Text( + text = license.licenseContent!!, + style = MaterialTheme.typography.bodySmall, + fontFamily = FontFamily.Monospace, + color = MaterialTheme.colorScheme.onSecondaryContainer, + modifier = Modifier + .clip(RoundedCornerShape(12.dp)) + .background(MaterialTheme.colorScheme.secondaryContainer) + .verticalScroll(rememberScrollState()) + .padding(12.dp) + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/dev/beefers/vendetta/manager/utils/ModifierUtils.kt b/app/src/main/java/dev/beefers/vendetta/manager/utils/ModifierUtils.kt index 549b71b..e34e907 100644 --- a/app/src/main/java/dev/beefers/vendetta/manager/utils/ModifierUtils.kt +++ b/app/src/main/java/dev/beefers/vendetta/manager/utils/ModifierUtils.kt @@ -10,7 +10,7 @@ fun Modifier.contentDescription(description: String, merge: Boolean = false): Mo contentDescription = description } -fun Modifier.contentDescription(res: Int, vararg param: Any,merge: Boolean = false): Modifier +fun Modifier.contentDescription(res: Int, vararg param: Any, merge: Boolean = false): Modifier = composed { contentDescription(stringResource(res, *param), merge) } inline fun Modifier.thenIf(predicate: Boolean, block: Modifier.() -> Modifier): Modifier = diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 287ddbf..db44c7b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,9 @@ Vendetta Manager + Author: %1$s + License: %1$s + Cache cleared successfully Failed to load commits Coming soon @@ -98,6 +101,8 @@ Warning Download failed Logs + Open source libraries + Libraries System Light @@ -155,7 +160,6 @@ Discord Team Special thanks - Open source licenses Translate Latest: %1$s diff --git a/build.gradle.kts b/build.gradle.kts index 3ff35e6..15d828e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,6 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { + alias(libs.plugins.aboutlibraries) apply false alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false alias(libs.plugins.kotlin.android) apply false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d973512..7797713 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,6 +15,7 @@ compose-activity = "1.8.2" compose-bom = "2023.10.01" # Misc. +aboutlibraries = "10.10.0" accompanist = "0.33.2-alpha" coil = "2.4.0" koin = "3.4.0" @@ -76,6 +77,7 @@ voyager-transitions = { group = "cafe.adriel.voyager", name = "voyager-transitio voyager-koin = { group = "cafe.adriel.voyager", name = "voyager-koin", version.ref = "voyager" } # Misc. +aboutlibraries-core = { group = "com.mikepenz", name = "aboutlibraries", version.ref = "aboutlibraries" } kotlinx-datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "kotlinx-datetime" } kotlinx-collections = { group = "org.jetbrains.kotlinx", name = "kotlinx-collections-immutable", version.ref = "kotlinx-collections" } zip-android = { group = "io.github.diamondminer88", name = "zip-android", version.ref = "zip-android" } @@ -91,6 +93,7 @@ shizuku = ["shizuku-api", "shizuku-provider"] voyager = ["voyager-koin", "voyager-navigator", "voyager-tab-navigator", "voyager-transitions", "voyager-screenmodel"] [plugins] +aboutlibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlibraries"} android-application = { id = "com.android.application", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }