mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-13 05:37:48 +02:00
compose test
This commit is contained in:
@ -8,21 +8,25 @@ plugins {
|
|||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = "me.rhunk.snapenhance"
|
namespace = "me.rhunk.snapenhance"
|
||||||
compileSdk = 33
|
compileSdk = 34
|
||||||
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
aidl = true
|
aidl = true
|
||||||
|
compose = true
|
||||||
|
}
|
||||||
|
|
||||||
|
composeOptions {
|
||||||
|
kotlinCompilerExtensionVersion = "1.4.8"
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "me.rhunk.snapenhance"
|
applicationId = rootProject.ext["applicationId"].toString()
|
||||||
minSdk = 28
|
minSdk = 28
|
||||||
//noinspection OldTargetApi
|
//noinspection OldTargetApi
|
||||||
targetSdk = 33
|
targetSdk = 33
|
||||||
multiDexEnabled = true
|
multiDexEnabled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
isMinifyEnabled = false
|
isMinifyEnabled = false
|
||||||
@ -76,7 +80,11 @@ android {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(":core"))
|
implementation(project(":core"))
|
||||||
|
implementation(libs.androidx.material.icons.extended)
|
||||||
|
implementation(libs.androidx.navigation.compose)
|
||||||
implementation(libs.androidx.activity.ktx)
|
implementation(libs.androidx.activity.ktx)
|
||||||
|
implementation(libs.androidx.material3)
|
||||||
|
implementation(libs.androidx.material)
|
||||||
}
|
}
|
||||||
|
|
||||||
afterEvaluate {
|
afterEvaluate {
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
</service>
|
</service>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.download.DownloadManagerActivity"
|
android:name=".manager.MainActivity"
|
||||||
android:theme="@style/AppTheme"
|
android:theme="@style/AppTheme"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
@ -1,10 +1,65 @@
|
|||||||
package me.rhunk.snapenhance.manager
|
package me.rhunk.snapenhance.manager
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
|
import androidx.activity.compose.setContent
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.material3.Icon
|
||||||
|
import androidx.compose.material3.IconButton
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.filled.Settings
|
||||||
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
|
import androidx.compose.material3.TopAppBar
|
||||||
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.Scaffold
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.navigation.compose.NavHost
|
||||||
|
import androidx.navigation.compose.composable
|
||||||
|
import androidx.navigation.compose.navigation
|
||||||
|
import androidx.navigation.compose.rememberNavController
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
@SuppressLint("UnusedMaterialScaffoldPaddingParameter")
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
setContent {
|
||||||
|
App()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
@Composable
|
||||||
|
fun App() {
|
||||||
|
val navController = rememberNavController()
|
||||||
|
AppMaterialTheme {
|
||||||
|
Scaffold(
|
||||||
|
topBar = {
|
||||||
|
TopAppBar(
|
||||||
|
title = { Text(text = "SnapEnhance") },
|
||||||
|
actions = {
|
||||||
|
IconButton(onClick = { /*TODO*/ }) {
|
||||||
|
Icon(Icons.Filled.Settings, contentDescription = "Settings")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
},
|
||||||
|
containerColor = MaterialTheme.colorScheme.background,
|
||||||
|
bottomBar = { NavBar(navController = navController) }
|
||||||
|
) { innerPadding ->
|
||||||
|
NavHost(navController, startDestination = "main", Modifier.padding(innerPadding)) {
|
||||||
|
navigation(MainSections.HOME.route, "main") {
|
||||||
|
MainSections.values().toList().forEach { section ->
|
||||||
|
composable(section.route) {
|
||||||
|
section.content()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
113
app/src/main/kotlin/me/rhunk/snapenhance/manager/Navigation.kt
Normal file
113
app/src/main/kotlin/me/rhunk/snapenhance/manager/Navigation.kt
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
package me.rhunk.snapenhance.manager
|
||||||
|
|
||||||
|
import androidx.compose.animation.core.animateDpAsState
|
||||||
|
import androidx.compose.foundation.layout.fillMaxHeight
|
||||||
|
import androidx.compose.foundation.layout.offset
|
||||||
|
import androidx.compose.foundation.layout.requiredWidth
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.filled.BugReport
|
||||||
|
import androidx.compose.material.icons.filled.Download
|
||||||
|
import androidx.compose.material.icons.filled.Group
|
||||||
|
import androidx.compose.material.icons.filled.Home
|
||||||
|
import androidx.compose.material.icons.filled.Stars
|
||||||
|
import androidx.compose.material3.Icon
|
||||||
|
import androidx.compose.material3.NavigationBar
|
||||||
|
import androidx.compose.material3.NavigationBarItem
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.navigation.NavController
|
||||||
|
import androidx.navigation.NavDestination.Companion.hierarchy
|
||||||
|
import androidx.navigation.NavGraph.Companion.findStartDestination
|
||||||
|
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||||
|
import me.rhunk.snapenhance.manager.sections.NotImplemented
|
||||||
|
|
||||||
|
|
||||||
|
enum class MainSections(
|
||||||
|
val route: String,
|
||||||
|
val title: String,
|
||||||
|
val icon: ImageVector,
|
||||||
|
val content: @Composable () -> Unit
|
||||||
|
) {
|
||||||
|
DOWNLOADS(
|
||||||
|
route = "downloads",
|
||||||
|
title = "Downloads",
|
||||||
|
icon = Icons.Filled.Download,
|
||||||
|
content = { NotImplemented() }
|
||||||
|
),
|
||||||
|
FEATURES(
|
||||||
|
route = "features",
|
||||||
|
title = "Features",
|
||||||
|
icon = Icons.Filled.Stars,
|
||||||
|
content = { NotImplemented() }
|
||||||
|
),
|
||||||
|
HOME(
|
||||||
|
route = "home",
|
||||||
|
title = "Home",
|
||||||
|
icon = Icons.Filled.Home,
|
||||||
|
content = { NotImplemented() }
|
||||||
|
),
|
||||||
|
FRIENDS(
|
||||||
|
route = "friends",
|
||||||
|
title = "Friends",
|
||||||
|
icon = Icons.Filled.Group,
|
||||||
|
content = { NotImplemented() }
|
||||||
|
),
|
||||||
|
DEBUG(
|
||||||
|
route = "debug",
|
||||||
|
title = "Debug",
|
||||||
|
icon = Icons.Filled.BugReport,
|
||||||
|
content = { NotImplemented() }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun NavBar(
|
||||||
|
navController: NavController
|
||||||
|
) {
|
||||||
|
NavigationBar {
|
||||||
|
val navBackStackEntry by navController.currentBackStackEntryAsState()
|
||||||
|
val currentDestination = navBackStackEntry?.destination
|
||||||
|
MainSections.values().toList().forEach { section ->
|
||||||
|
fun selected() = currentDestination?.hierarchy?.any { it.route == section.route } == true
|
||||||
|
|
||||||
|
NavigationBarItem(
|
||||||
|
modifier = Modifier
|
||||||
|
.requiredWidth(120.dp)
|
||||||
|
.fillMaxHeight(),
|
||||||
|
icon = {
|
||||||
|
val iconOffset by animateDpAsState(
|
||||||
|
if (selected()) 0.dp else 10.dp,
|
||||||
|
label = ""
|
||||||
|
)
|
||||||
|
Icon(
|
||||||
|
imageVector = section.icon,
|
||||||
|
contentDescription = null,
|
||||||
|
modifier = Modifier.offset(y = iconOffset)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
|
||||||
|
label = {
|
||||||
|
val labelOffset by animateDpAsState(
|
||||||
|
if (selected()) 0.dp else (-5).dp,
|
||||||
|
label = ""
|
||||||
|
)
|
||||||
|
Text(text = if (selected()) section.title else "", modifier = Modifier.offset(y = labelOffset))
|
||||||
|
},
|
||||||
|
selected = selected(),
|
||||||
|
onClick = {
|
||||||
|
navController.navigate(section.route) {
|
||||||
|
popUpTo(navController.graph.findStartDestination().id) {
|
||||||
|
saveState = true
|
||||||
|
}
|
||||||
|
launchSingleTop = true
|
||||||
|
restoreState = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
164
app/src/main/kotlin/me/rhunk/snapenhance/manager/Theme.kt
Normal file
164
app/src/main/kotlin/me/rhunk/snapenhance/manager/Theme.kt
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
package me.rhunk.snapenhance.manager
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
|
import androidx.compose.foundation.isSystemInDarkTheme
|
||||||
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.dynamicDarkColorScheme
|
||||||
|
import androidx.compose.material3.dynamicLightColorScheme
|
||||||
|
import androidx.compose.material3.lightColorScheme
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
|
||||||
|
val md_theme_light_primary = Color(0xFF6750A4)
|
||||||
|
val md_theme_light_onPrimary = Color(0xFFFFFFFF)
|
||||||
|
val md_theme_light_primaryContainer = Color(0xFFE9DDFF)
|
||||||
|
val md_theme_light_onPrimaryContainer = Color(0xFF22005D)
|
||||||
|
val md_theme_light_secondary = Color(0xFF625B71)
|
||||||
|
val md_theme_light_onSecondary = Color(0xFFFFFFFF)
|
||||||
|
val md_theme_light_secondaryContainer = Color(0xFFE8DEF8)
|
||||||
|
val md_theme_light_onSecondaryContainer = Color(0xFF1E192B)
|
||||||
|
val md_theme_light_tertiary = Color(0xFF3C5BA9)
|
||||||
|
val md_theme_light_onTertiary = Color(0xFFFFFFFF)
|
||||||
|
val md_theme_light_tertiaryContainer = Color(0xFFDBE1FF)
|
||||||
|
val md_theme_light_onTertiaryContainer = Color(0xFF001849)
|
||||||
|
val md_theme_light_error = Color(0xFFBA1A1A)
|
||||||
|
val md_theme_light_errorContainer = Color(0xFFFFDAD6)
|
||||||
|
val md_theme_light_onError = Color(0xFFFFFFFF)
|
||||||
|
val md_theme_light_onErrorContainer = Color(0xFF410002)
|
||||||
|
val md_theme_light_background = Color(0xFFFFFBFF)
|
||||||
|
val md_theme_light_onBackground = Color(0xFF1C1B1E)
|
||||||
|
val md_theme_light_surface = Color(0xFFFFFBFF)
|
||||||
|
val md_theme_light_onSurface = Color(0xFF1C1B1E)
|
||||||
|
val md_theme_light_surfaceVariant = Color(0xFFE7E0EB)
|
||||||
|
val md_theme_light_onSurfaceVariant = Color(0xFF49454E)
|
||||||
|
val md_theme_light_outline = Color(0xFF7A757F)
|
||||||
|
val md_theme_light_inverseOnSurface = Color(0xFFF4EFF4)
|
||||||
|
val md_theme_light_inverseSurface = Color(0xFF313033)
|
||||||
|
val md_theme_light_inversePrimary = Color(0xFFCFBCFF)
|
||||||
|
val md_theme_light_surfaceTint = Color(0xFF6750A4)
|
||||||
|
val md_theme_light_outlineVariant = Color(0xFFCAC4CF)
|
||||||
|
val md_theme_light_scrim = Color(0xFF000000)
|
||||||
|
|
||||||
|
val md_theme_dark_primary = Color(0xFFCFBCFF)
|
||||||
|
val md_theme_dark_onPrimary = Color(0xFF381E72)
|
||||||
|
val md_theme_dark_primaryContainer = Color(0xFF4F378A)
|
||||||
|
val md_theme_dark_onPrimaryContainer = Color(0xFFE9DDFF)
|
||||||
|
val md_theme_dark_secondary = Color(0xFFCBC2DB)
|
||||||
|
val md_theme_dark_onSecondary = Color(0xFF332D41)
|
||||||
|
val md_theme_dark_secondaryContainer = Color(0xFF4A4458)
|
||||||
|
val md_theme_dark_onSecondaryContainer = Color(0xFFE8DEF8)
|
||||||
|
val md_theme_dark_tertiary = Color(0xFFB3C5FF)
|
||||||
|
val md_theme_dark_onTertiary = Color(0xFF002B75)
|
||||||
|
val md_theme_dark_tertiaryContainer = Color(0xFF21428F)
|
||||||
|
val md_theme_dark_onTertiaryContainer = Color(0xFFDBE1FF)
|
||||||
|
val md_theme_dark_error = Color(0xFFFFB4AB)
|
||||||
|
val md_theme_dark_errorContainer = Color(0xFF93000A)
|
||||||
|
val md_theme_dark_onError = Color(0xFF690005)
|
||||||
|
val md_theme_dark_onErrorContainer = Color(0xFFFFDAD6)
|
||||||
|
val md_theme_dark_background = Color(0xFF1C1B1E)
|
||||||
|
val md_theme_dark_onBackground = Color(0xFFE6E1E6)
|
||||||
|
val md_theme_dark_surface = Color(0xFF1C1B1E)
|
||||||
|
val md_theme_dark_onSurface = Color(0xFFE6E1E6)
|
||||||
|
val md_theme_dark_surfaceVariant = Color(0xFF49454E)
|
||||||
|
val md_theme_dark_onSurfaceVariant = Color(0xFFCAC4CF)
|
||||||
|
val md_theme_dark_outline = Color(0xFF948F99)
|
||||||
|
val md_theme_dark_inverseOnSurface = Color(0xFF1C1B1E)
|
||||||
|
val md_theme_dark_inverseSurface = Color(0xFFE6E1E6)
|
||||||
|
val md_theme_dark_inversePrimary = Color(0xFF6750A4)
|
||||||
|
val md_theme_dark_surfaceTint = Color(0xFFCFBCFF)
|
||||||
|
val md_theme_dark_outlineVariant = Color(0xFF49454E)
|
||||||
|
val md_theme_dark_scrim = Color(0xFF000000)
|
||||||
|
|
||||||
|
|
||||||
|
val seed = Color(0xFF6750A4)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private val LightThemeColors = lightColorScheme(
|
||||||
|
primary = md_theme_light_primary,
|
||||||
|
onPrimary = md_theme_light_onPrimary,
|
||||||
|
primaryContainer = md_theme_light_primaryContainer,
|
||||||
|
onPrimaryContainer = md_theme_light_onPrimaryContainer,
|
||||||
|
secondary = md_theme_light_secondary,
|
||||||
|
onSecondary = md_theme_light_onSecondary,
|
||||||
|
secondaryContainer = md_theme_light_secondaryContainer,
|
||||||
|
onSecondaryContainer = md_theme_light_onSecondaryContainer,
|
||||||
|
tertiary = md_theme_light_tertiary,
|
||||||
|
onTertiary = md_theme_light_onTertiary,
|
||||||
|
tertiaryContainer = md_theme_light_tertiaryContainer,
|
||||||
|
onTertiaryContainer = md_theme_light_onTertiaryContainer,
|
||||||
|
error = md_theme_light_error,
|
||||||
|
onError = md_theme_light_onError,
|
||||||
|
errorContainer = md_theme_light_errorContainer,
|
||||||
|
onErrorContainer = md_theme_light_onErrorContainer,
|
||||||
|
background = md_theme_light_background,
|
||||||
|
onBackground = md_theme_light_onBackground,
|
||||||
|
surface = md_theme_light_surface,
|
||||||
|
onSurface = md_theme_light_onSurface,
|
||||||
|
surfaceVariant = md_theme_light_surfaceVariant,
|
||||||
|
onSurfaceVariant = md_theme_light_onSurfaceVariant,
|
||||||
|
outline = md_theme_light_outline,
|
||||||
|
inverseOnSurface = md_theme_light_inverseOnSurface,
|
||||||
|
inverseSurface = md_theme_light_inverseSurface,
|
||||||
|
inversePrimary = md_theme_light_inversePrimary,
|
||||||
|
surfaceTint = md_theme_light_surfaceTint,
|
||||||
|
outlineVariant = md_theme_light_outlineVariant,
|
||||||
|
scrim = md_theme_light_scrim
|
||||||
|
)
|
||||||
|
|
||||||
|
private val DarkThemeColors = lightColorScheme(
|
||||||
|
primary = md_theme_dark_primary,
|
||||||
|
onPrimary = md_theme_dark_onPrimary,
|
||||||
|
primaryContainer = md_theme_dark_primaryContainer,
|
||||||
|
onPrimaryContainer = md_theme_dark_onPrimaryContainer,
|
||||||
|
secondary = md_theme_dark_secondary,
|
||||||
|
onSecondary = md_theme_dark_onSecondary,
|
||||||
|
secondaryContainer = md_theme_dark_secondaryContainer,
|
||||||
|
onSecondaryContainer = md_theme_dark_onSecondaryContainer,
|
||||||
|
tertiary = md_theme_dark_tertiary,
|
||||||
|
onTertiary = md_theme_dark_onTertiary,
|
||||||
|
tertiaryContainer = md_theme_dark_tertiaryContainer,
|
||||||
|
onTertiaryContainer = md_theme_dark_onTertiaryContainer,
|
||||||
|
error = md_theme_dark_error,
|
||||||
|
onError = md_theme_dark_onError,
|
||||||
|
errorContainer = md_theme_dark_errorContainer,
|
||||||
|
onErrorContainer = md_theme_dark_onErrorContainer,
|
||||||
|
background = md_theme_dark_background,
|
||||||
|
onBackground = md_theme_dark_onBackground,
|
||||||
|
surface = md_theme_dark_surface,
|
||||||
|
onSurface = md_theme_dark_onSurface,
|
||||||
|
surfaceVariant = md_theme_dark_surfaceVariant,
|
||||||
|
onSurfaceVariant = md_theme_dark_onSurfaceVariant,
|
||||||
|
outline = md_theme_dark_outline,
|
||||||
|
inverseOnSurface = md_theme_dark_inverseOnSurface,
|
||||||
|
inverseSurface = md_theme_dark_inverseSurface,
|
||||||
|
inversePrimary = md_theme_dark_inversePrimary,
|
||||||
|
surfaceTint = md_theme_dark_surfaceTint,
|
||||||
|
outlineVariant = md_theme_dark_outlineVariant,
|
||||||
|
scrim = md_theme_dark_scrim
|
||||||
|
)
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun AppMaterialTheme(
|
||||||
|
isDarkTheme: Boolean = isSystemInDarkTheme(),
|
||||||
|
content: @Composable () -> Unit
|
||||||
|
) {
|
||||||
|
val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
|
||||||
|
val colorScheme = when {
|
||||||
|
dynamicColor && isDarkTheme -> {
|
||||||
|
dynamicDarkColorScheme(LocalContext.current)
|
||||||
|
}
|
||||||
|
dynamicColor && !isDarkTheme -> {
|
||||||
|
dynamicLightColorScheme(LocalContext.current)
|
||||||
|
}
|
||||||
|
!isDarkTheme -> LightThemeColors
|
||||||
|
else -> DarkThemeColors
|
||||||
|
}
|
||||||
|
|
||||||
|
MaterialTheme(
|
||||||
|
colorScheme = colorScheme,
|
||||||
|
content = content
|
||||||
|
)
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package me.rhunk.snapenhance.manager.sections
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun NotImplemented() {
|
||||||
|
Column(
|
||||||
|
modifier = Modifier.fillMaxSize(),
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
|
) {
|
||||||
|
Text(text = "Not Implemented")
|
||||||
|
}
|
||||||
|
}
|
@ -7,5 +7,6 @@ plugins {
|
|||||||
|
|
||||||
rootProject.ext.set("appVersionName", "1.1.0")
|
rootProject.ext.set("appVersionName", "1.1.0")
|
||||||
rootProject.ext.set("appVersionCode", 7)
|
rootProject.ext.set("appVersionCode", 7)
|
||||||
|
rootProject.ext.set("applicationId", "me.rhunk.snapenhance")
|
||||||
|
|
||||||
true // Needed to make the Suppress annotation work for the plugins block
|
true // Needed to make the Suppress annotation work for the plugins block
|
@ -5,16 +5,18 @@ plugins {
|
|||||||
}
|
}
|
||||||
android {
|
android {
|
||||||
namespace = "me.rhunk.snapenhance.core"
|
namespace = "me.rhunk.snapenhance.core"
|
||||||
compileSdk = 33
|
compileSdk = 34
|
||||||
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
aidl = true
|
aidl = true
|
||||||
|
buildConfig = true
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdk = 28
|
minSdk = 28
|
||||||
buildConfigField("String", "VERSION_NAME", "\"${rootProject.ext["appVersionName"]}\"")
|
buildConfigField("String", "VERSION_NAME", "\"${rootProject.ext["appVersionName"]}\"")
|
||||||
buildConfigField("int", "VERSION_CODE", "${rootProject.ext["appVersionCode"]}")
|
buildConfigField("int", "VERSION_CODE", "${rootProject.ext["appVersionCode"]}")
|
||||||
|
buildConfigField("String", "APPLICATION_ID", "\"${rootProject.ext["applicationId"]}\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
|
@ -35,7 +35,7 @@ class SnapEnhance {
|
|||||||
|
|
||||||
//for lspatch builds, we need to check if the service is correctly installed
|
//for lspatch builds, we need to check if the service is correctly installed
|
||||||
runCatching {
|
runCatching {
|
||||||
appContext.androidContext.packageManager.getApplicationInfoCompat(BuildConfig.LIBRARY_PACKAGE_NAME, PackageManager.GET_META_DATA)
|
appContext.androidContext.packageManager.getApplicationInfoCompat(BuildConfig.APPLICATION_ID, PackageManager.GET_META_DATA)
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
appContext.crash("SnapEnhance bridge service is not installed. Please download stable version from https://github.com/rhunk/SnapEnhance/releases")
|
appContext.crash("SnapEnhance bridge service is not installed. Please download stable version from https://github.com/rhunk/SnapEnhance/releases")
|
||||||
return@hook
|
return@hook
|
||||||
|
@ -11,7 +11,7 @@ class OpenMap: AbstractAction("action.open_map", dependsOnProperty = ConfigPrope
|
|||||||
override fun run() {
|
override fun run() {
|
||||||
context.runOnUiThread {
|
context.runOnUiThread {
|
||||||
val mapActivityIntent = Intent()
|
val mapActivityIntent = Intent()
|
||||||
mapActivityIntent.setClassName(BuildConfig.LIBRARY_PACKAGE_NAME, MapActivity::class.java.name)
|
mapActivityIntent.setClassName(BuildConfig.APPLICATION_ID, MapActivity::class.java.name)
|
||||||
mapActivityIntent.putExtra("location", Bundle().apply {
|
mapActivityIntent.putExtra("location", Bundle().apply {
|
||||||
putDouble("latitude", context.config.string(ConfigProperty.LATITUDE).toDouble())
|
putDouble("latitude", context.config.string(ConfigProperty.LATITUDE).toDouble())
|
||||||
putDouble("longitude", context.config.string(ConfigProperty.LONGITUDE).toDouble())
|
putDouble("longitude", context.config.string(ConfigProperty.LONGITUDE).toDouble())
|
||||||
|
@ -32,12 +32,12 @@ class BridgeClient(
|
|||||||
with(context.androidContext) {
|
with(context.androidContext) {
|
||||||
//ensure the remote process is running
|
//ensure the remote process is running
|
||||||
startActivity(Intent()
|
startActivity(Intent()
|
||||||
.setClassName(BuildConfig.LIBRARY_PACKAGE_NAME, ForceStartActivity::class.java.name)
|
.setClassName(BuildConfig.APPLICATION_ID, ForceStartActivity::class.java.name)
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
|
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
|
||||||
)
|
)
|
||||||
|
|
||||||
val intent = Intent()
|
val intent = Intent()
|
||||||
.setClassName(BuildConfig.LIBRARY_PACKAGE_NAME, BridgeService::class.java.name)
|
.setClassName(BuildConfig.APPLICATION_ID, BridgeService::class.java.name)
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
bindService(
|
bindService(
|
||||||
intent,
|
intent,
|
||||||
|
@ -48,7 +48,7 @@ class SettingsGearInjector : AbstractMenu() {
|
|||||||
|
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
val intent = Intent().apply {
|
val intent = Intent().apply {
|
||||||
setClassName(BuildConfig.LIBRARY_PACKAGE_NAME, ConfigActivity::class.java.name)
|
setClassName(BuildConfig.APPLICATION_ID, ConfigActivity::class.java.name)
|
||||||
}
|
}
|
||||||
intent.putExtra("lspatched", File(context.cacheDir, "lspatch/origin").exists())
|
intent.putExtra("lspatched", File(context.cacheDir, "lspatch/origin").exists())
|
||||||
context.startActivity(intent)
|
context.startActivity(intent)
|
||||||
|
@ -191,7 +191,7 @@ class MessageExporter(
|
|||||||
|
|
||||||
runCatching {
|
runCatching {
|
||||||
ZipFile(
|
ZipFile(
|
||||||
context.androidContext.packageManager.getApplicationInfoCompat(BuildConfig.LIBRARY_PACKAGE_NAME, PackageManager.GET_META_DATA).publicSourceDir
|
context.androidContext.packageManager.getApplicationInfoCompat(BuildConfig.APPLICATION_ID, PackageManager.GET_META_DATA).publicSourceDir
|
||||||
).use { apkFile ->
|
).use { apkFile ->
|
||||||
//export rawinflate.js
|
//export rawinflate.js
|
||||||
apkFile.getEntry("assets/web/rawinflate.js").let { entry ->
|
apkFile.getEntry("assets/web/rawinflate.js").let { entry ->
|
||||||
|
@ -21,5 +21,4 @@ kotlin.code.style=official
|
|||||||
# resources declared in the library itself and none from the library's dependencies,
|
# resources declared in the library itself and none from the library's dependencies,
|
||||||
# thereby reducing the size of the R class for that library
|
# thereby reducing the size of the R class for that library
|
||||||
android.nonTransitiveRClass=true
|
android.nonTransitiveRClass=true
|
||||||
android.defaults.buildfeatures.buildconfig=true
|
|
||||||
android.nonFinalResIds=false
|
android.nonFinalResIds=false
|
@ -1,10 +1,13 @@
|
|||||||
[versions]
|
[versions]
|
||||||
agp = "8.1.0"
|
agp = "8.2.0-alpha13"
|
||||||
|
androidx-material = "1.6.0-alpha02"
|
||||||
junit = "4.13.2"
|
junit = "4.13.2"
|
||||||
kotlin = "1.8.21"
|
kotlin = "1.8.22"
|
||||||
kotlinx-coroutines-android = "1.7.2"
|
kotlinx-coroutines-android = "1.7.2"
|
||||||
kotlin-reflect = "1.8.21"
|
kotlin-reflect = "1.8.21"
|
||||||
recyclerview = "1.3.0"
|
material-icons-extended = "1.6.0-alpha03"
|
||||||
|
navigation-compose = "2.6.0"
|
||||||
|
recyclerview = "1.3.1"
|
||||||
gson = "2.10.1"
|
gson = "2.10.1"
|
||||||
ffmpeg-kit = "5.1.LTS"
|
ffmpeg-kit = "5.1.LTS"
|
||||||
osmdroid-android = "6.1.16"
|
osmdroid-android = "6.1.16"
|
||||||
@ -12,9 +15,13 @@ okhttp = "5.0.0-alpha.11"
|
|||||||
dexlib2 = "2.5.2"
|
dexlib2 = "2.5.2"
|
||||||
androidx-documentfile = "1.1.0-alpha01"
|
androidx-documentfile = "1.1.0-alpha01"
|
||||||
activity-ktx = "1.7.2"
|
activity-ktx = "1.7.2"
|
||||||
|
material3 = "1.1.1"
|
||||||
|
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
|
androidx-material = { module = "androidx.compose.material:material", version.ref = "androidx-material" }
|
||||||
|
androidx-material-icons-extended = { module = "androidx.compose.material:material-icons-extended", version.ref = "material-icons-extended" }
|
||||||
|
androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigation-compose" }
|
||||||
coroutines = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinx-coroutines-android" }
|
coroutines = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinx-coroutines-android" }
|
||||||
junit = { module = "junit:junit", version.ref = "junit" }
|
junit = { module = "junit:junit", version.ref = "junit" }
|
||||||
kotlin-reflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "kotlin-reflect" }
|
kotlin-reflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "kotlin-reflect" }
|
||||||
@ -26,6 +33,7 @@ okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhtt
|
|||||||
dexlib2 = { group = "org.smali", name = "dexlib2", version.ref = "dexlib2" }
|
dexlib2 = { group = "org.smali", name = "dexlib2", version.ref = "dexlib2" }
|
||||||
androidx-documentfile = { group = "androidx.documentfile", name = "documentfile", version.ref = "androidx-documentfile" }
|
androidx-documentfile = { group = "androidx.documentfile", name = "documentfile", version.ref = "androidx-documentfile" }
|
||||||
androidx-activity-ktx = { group = "androidx.activity", name = "activity-ktx", version.ref = "activity-ktx" }
|
androidx-activity-ktx = { group = "androidx.activity", name = "activity-ktx", version.ref = "activity-ktx" }
|
||||||
|
androidx-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "material3" }
|
||||||
|
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
|||||||
#Fri May 12 21:23:16 CEST 2023
|
#Fri May 12 21:23:16 CEST 2023
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
Reference in New Issue
Block a user