mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-14 22:17:03 +05:30
feat(android): add libraries attribution page
This commit is contained in:
parent
a187752659
commit
d4a6009b92
7 changed files with 79 additions and 36 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright © 2021-2023 Harsh Shandilya.
|
* Copyright © 2021-2024 Harsh Shandilya.
|
||||||
* Use of this source code is governed by an MIT-style
|
* Use of this source code is governed by an MIT-style
|
||||||
* license that can be found in the LICENSE file or at
|
* license that can be found in the LICENSE file or at
|
||||||
* https://opensource.org/licenses/MIT.
|
* https://opensource.org/licenses/MIT.
|
||||||
|
@ -15,6 +15,7 @@ plugins {
|
||||||
id("dev.msfjarvis.claw.kotlin-kapt")
|
id("dev.msfjarvis.claw.kotlin-kapt")
|
||||||
id("dev.msfjarvis.claw.sentry")
|
id("dev.msfjarvis.claw.sentry")
|
||||||
id("dev.msfjarvis.claw.versioning-plugin")
|
id("dev.msfjarvis.claw.versioning-plugin")
|
||||||
|
alias(libs.plugins.aboutlibraries)
|
||||||
alias(libs.plugins.anvil)
|
alias(libs.plugins.anvil)
|
||||||
alias(libs.plugins.modulegraphassert)
|
alias(libs.plugins.modulegraphassert)
|
||||||
alias(libs.plugins.whetstone)
|
alias(libs.plugins.whetstone)
|
||||||
|
@ -67,6 +68,7 @@ whetstone {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(platform(libs.androidx.compose.bom))
|
implementation(platform(libs.androidx.compose.bom))
|
||||||
implementation(platform(libs.okhttp.bom))
|
implementation(platform(libs.okhttp.bom))
|
||||||
|
implementation(libs.aboutLibraries.m3)
|
||||||
implementation(libs.androidx.activity.compose)
|
implementation(libs.androidx.activity.compose)
|
||||||
implementation(libs.androidx.compose.glance)
|
implementation(libs.androidx.compose.glance)
|
||||||
implementation(libs.androidx.compose.glance.m3)
|
implementation(libs.androidx.compose.glance.m3)
|
||||||
|
|
|
@ -151,7 +151,7 @@ private fun GenericExportOption(
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun SettingsActionItem(
|
fun SettingsActionItem(
|
||||||
title: String,
|
title: String,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
description: String? = null,
|
description: String? = null,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright © 2021-2023 Harsh Shandilya.
|
* Copyright © 2021-2024 Harsh Shandilya.
|
||||||
* Use of this source code is governed by an MIT-style
|
* Use of this source code is governed by an MIT-style
|
||||||
* license that can be found in the LICENSE file or at
|
* license that can be found in the LICENSE file or at
|
||||||
* https://opensource.org/licenses/MIT.
|
* https://opensource.org/licenses/MIT.
|
||||||
|
@ -39,6 +39,14 @@ sealed class Destinations {
|
||||||
override val route = "search"
|
override val route = "search"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data object Settings : Destinations() {
|
||||||
|
override val route = "settings"
|
||||||
|
}
|
||||||
|
|
||||||
|
data object AboutLibraries : Destinations() {
|
||||||
|
override val route = "about_libraries"
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val startDestination
|
val startDestination
|
||||||
get() = Hottest
|
get() = Hottest
|
||||||
|
|
|
@ -13,22 +13,20 @@ import androidx.compose.animation.fadeIn
|
||||||
import androidx.compose.animation.fadeOut
|
import androidx.compose.animation.fadeOut
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||||
import androidx.compose.material.icons.filled.Favorite
|
import androidx.compose.material.icons.filled.Favorite
|
||||||
import androidx.compose.material.icons.filled.ImportExport
|
|
||||||
import androidx.compose.material.icons.filled.MoreVert
|
|
||||||
import androidx.compose.material.icons.filled.NewReleases
|
import androidx.compose.material.icons.filled.NewReleases
|
||||||
import androidx.compose.material.icons.filled.Search
|
import androidx.compose.material.icons.filled.Search
|
||||||
|
import androidx.compose.material.icons.filled.Tune
|
||||||
import androidx.compose.material.icons.filled.Whatshot
|
import androidx.compose.material.icons.filled.Whatshot
|
||||||
import androidx.compose.material.icons.outlined.FavoriteBorder
|
import androidx.compose.material.icons.outlined.FavoriteBorder
|
||||||
import androidx.compose.material.icons.outlined.NewReleases
|
import androidx.compose.material.icons.outlined.NewReleases
|
||||||
import androidx.compose.material.icons.outlined.Whatshot
|
import androidx.compose.material.icons.outlined.Whatshot
|
||||||
import androidx.compose.material3.DropdownMenu
|
|
||||||
import androidx.compose.material3.DropdownMenuItem
|
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
@ -41,10 +39,8 @@ import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
@ -65,6 +61,7 @@ import androidx.navigation.navArgument
|
||||||
import androidx.navigation.navDeepLink
|
import androidx.navigation.navDeepLink
|
||||||
import androidx.paging.compose.collectAsLazyPagingItems
|
import androidx.paging.compose.collectAsLazyPagingItems
|
||||||
import com.deliveryhero.whetstone.compose.injectedViewModel
|
import com.deliveryhero.whetstone.compose.injectedViewModel
|
||||||
|
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
|
||||||
import dev.msfjarvis.claw.android.MainActivity
|
import dev.msfjarvis.claw.android.MainActivity
|
||||||
import dev.msfjarvis.claw.android.R
|
import dev.msfjarvis.claw.android.R
|
||||||
import dev.msfjarvis.claw.android.SearchActivity
|
import dev.msfjarvis.claw.android.SearchActivity
|
||||||
|
@ -185,35 +182,14 @@ fun LobstersPostsScreen(
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions = {
|
actions = {
|
||||||
var expanded by remember { mutableStateOf(false) }
|
|
||||||
if (navItems.any { it.route == currentDestination }) {
|
if (navItems.any { it.route == currentDestination }) {
|
||||||
IconButton(onClick = { expanded = true }) {
|
IconButton(
|
||||||
Icon(Icons.Default.MoreVert, contentDescription = "Extra options")
|
onClick = { context.startActivity(Intent(context, SearchActivity::class.java)) }
|
||||||
|
) {
|
||||||
|
Icon(imageVector = Icons.Filled.Search, contentDescription = "Search posts")
|
||||||
}
|
}
|
||||||
DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
|
IconButton(onClick = { navController.navigate(Destinations.Settings.route) }) {
|
||||||
DropdownMenuItem(
|
Icon(imageVector = Icons.Filled.Tune, contentDescription = "Settings")
|
||||||
text = { Text("Backup and restore") },
|
|
||||||
onClick = {
|
|
||||||
navController.navigate(Destinations.DataTransfer.route)
|
|
||||||
expanded = false
|
|
||||||
},
|
|
||||||
leadingIcon = {
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Filled.ImportExport,
|
|
||||||
contentDescription = "Data transfer options",
|
|
||||||
)
|
|
||||||
},
|
|
||||||
)
|
|
||||||
DropdownMenuItem(
|
|
||||||
text = { Text("Search posts") },
|
|
||||||
onClick = {
|
|
||||||
context.startActivity(Intent(context, SearchActivity::class.java))
|
|
||||||
expanded = false
|
|
||||||
},
|
|
||||||
leadingIcon = {
|
|
||||||
Icon(imageVector = Icons.Filled.Search, contentDescription = "Search posts")
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -315,6 +291,15 @@ fun LobstersPostsScreen(
|
||||||
snackbarHostState = snackbarHostState,
|
snackbarHostState = snackbarHostState,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
composable(route = Destinations.Settings.route) {
|
||||||
|
SettingsScreen(
|
||||||
|
openLibrariesScreen = { navController.navigate(Destinations.AboutLibraries.route) },
|
||||||
|
openDataTransferScreen = { navController.navigate(Destinations.DataTransfer.route) },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
composable(route = Destinations.AboutLibraries.route) {
|
||||||
|
LibrariesContainer(modifier = Modifier.fillMaxSize())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2024 Harsh Shandilya.
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
*/
|
||||||
|
package dev.msfjarvis.claw.android.ui.screens
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.automirrored.filled.LibraryBooks
|
||||||
|
import androidx.compose.material.icons.filled.ImportExport
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import dev.msfjarvis.claw.android.ui.datatransfer.SettingsActionItem
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SettingsScreen(
|
||||||
|
openLibrariesScreen: () -> Unit,
|
||||||
|
openDataTransferScreen: () -> Unit,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
) {
|
||||||
|
Box(modifier = modifier.fillMaxSize()) {
|
||||||
|
Column {
|
||||||
|
SettingsActionItem(
|
||||||
|
title = "Data transfer",
|
||||||
|
description = "Export and import your saved posts",
|
||||||
|
icon = Icons.Filled.ImportExport,
|
||||||
|
onClick = openDataTransferScreen,
|
||||||
|
)
|
||||||
|
SettingsActionItem(
|
||||||
|
title = "Libraries",
|
||||||
|
icon = Icons.AutoMirrored.Filled.LibraryBooks,
|
||||||
|
onClick = openLibrariesScreen,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
[versions]
|
[versions]
|
||||||
|
aboutLibraries = "10.10.0"
|
||||||
agp = "8.3.0-beta02"
|
agp = "8.3.0-beta02"
|
||||||
benchmark = "1.2.2"
|
benchmark = "1.2.2"
|
||||||
coil = "2.5.0"
|
coil = "2.5.0"
|
||||||
|
@ -21,6 +22,7 @@ whetstone = "0.8.0"
|
||||||
workmanager = "2.9.0"
|
workmanager = "2.9.0"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
|
aboutLibraries-m3 = { module = "com.mikepenz:aboutlibraries-compose-m3", version.ref = "aboutLibraries" }
|
||||||
androidx-activity-compose = "androidx.activity:activity-compose:1.8.2"
|
androidx-activity-compose = "androidx.activity:activity-compose:1.8.2"
|
||||||
androidx-benchmark-macro-junit4 = { module = "androidx.benchmark:benchmark-macro-junit4", version.ref = "benchmark" }
|
androidx-benchmark-macro-junit4 = { module = "androidx.benchmark:benchmark-macro-junit4", version.ref = "benchmark" }
|
||||||
androidx-browser = "androidx.browser:browser:1.7.0"
|
androidx-browser = "androidx.browser:browser:1.7.0"
|
||||||
|
@ -106,6 +108,7 @@ truth = "com.google.truth:truth:1.2.0"
|
||||||
unfurl = "me.saket.unfurl:unfurl:1.7.0"
|
unfurl = "me.saket.unfurl:unfurl:1.7.0"
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
|
aboutlibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutLibraries" }
|
||||||
android-test = { id = "com.android.test", version.ref = "agp" }
|
android-test = { id = "com.android.test", version.ref = "agp" }
|
||||||
anvil = "com.squareup.anvil:2.4.9"
|
anvil = "com.squareup.anvil:2.4.9"
|
||||||
baselineprofile = { id = "androidx.baselineprofile", version.ref = "benchmark" }
|
baselineprofile = { id = "androidx.baselineprofile", version.ref = "benchmark" }
|
||||||
|
|
|
@ -21,6 +21,11 @@ pluginManagement {
|
||||||
exclusiveContent {
|
exclusiveContent {
|
||||||
forRepository { gradlePluginPortal() }
|
forRepository { gradlePluginPortal() }
|
||||||
filter {
|
filter {
|
||||||
|
includeModule("com.mikepenz.aboutlibraries.plugin", "aboutlibraries-plugin")
|
||||||
|
includeModule(
|
||||||
|
"com.mikepenz.aboutlibraries.plugin",
|
||||||
|
"com.mikepenz.aboutlibraries.plugin.gradle.plugin",
|
||||||
|
)
|
||||||
includeModule("com.github.ben-manes", "gradle-versions-plugin")
|
includeModule("com.github.ben-manes", "gradle-versions-plugin")
|
||||||
includeModule("org.gradle.android.cache-fix", "org.gradle.android.cache-fix.gradle.plugin")
|
includeModule("org.gradle.android.cache-fix", "org.gradle.android.cache-fix.gradle.plugin")
|
||||||
includeModule("gradle.plugin.org.gradle.android", "android-cache-fix-gradle-plugin")
|
includeModule("gradle.plugin.org.gradle.android", "android-cache-fix-gradle-plugin")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue