refactor: move compose view factory to common

This commit is contained in:
rhunk
2023-12-16 00:26:38 +01:00
parent cadcbc958e
commit 06d57ab83c
7 changed files with 52 additions and 20 deletions

View File

@ -12,7 +12,7 @@ import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import me.rhunk.snapenhance.RemoteSideContext import me.rhunk.snapenhance.RemoteSideContext
import me.rhunk.snapenhance.SharedContextHolder import me.rhunk.snapenhance.SharedContextHolder
import me.rhunk.snapenhance.ui.AppMaterialTheme import me.rhunk.snapenhance.common.ui.AppMaterialTheme
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
private lateinit var sections: Map<EnumSection, Section> private lateinit var sections: Map<EnumSection, Section>

View File

@ -24,7 +24,7 @@ import androidx.navigation.compose.rememberNavController
import com.arthenica.ffmpegkit.Packages.getPackageName import com.arthenica.ffmpegkit.Packages.getPackageName
import me.rhunk.snapenhance.R import me.rhunk.snapenhance.R
import me.rhunk.snapenhance.RemoteSideContext import me.rhunk.snapenhance.RemoteSideContext
import me.rhunk.snapenhance.ui.AppMaterialTheme import me.rhunk.snapenhance.common.ui.createComposeView
import me.rhunk.snapenhance.ui.manager.EnumSection import me.rhunk.snapenhance.ui.manager.EnumSection
import me.rhunk.snapenhance.ui.manager.Navigation import me.rhunk.snapenhance.ui.manager.Navigation
import me.rhunk.snapenhance.ui.manager.sections.features.FeaturesSection import me.rhunk.snapenhance.ui.manager.sections.features.FeaturesSection
@ -117,20 +117,16 @@ class SettingsOverlay(
} }
dialog.setContentView( dialog.setContentView(
overlayComposeView(context.androidContext).apply { createComposeView(context.androidContext) {
setContent { Column(
Column( modifier = Modifier
modifier = Modifier .fillMaxSize()
.fillMaxSize() .padding(start = 15.dp, end = 15.dp, top = 25.dp, bottom = 25.dp)
.padding(start = 15.dp, end = 15.dp, top = 25.dp, bottom = 25.dp) .clip(shape = MaterialTheme.shapes.large),
.clip(shape = MaterialTheme.shapes.large), horizontalAlignment = Alignment.CenterHorizontally,
horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center
verticalArrangement = Arrangement.Center ) {
) { OverlayContent()
AppMaterialTheme {
OverlayContent()
}
}
} }
} }
) )

View File

@ -27,7 +27,7 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import me.rhunk.snapenhance.SharedContextHolder import me.rhunk.snapenhance.SharedContextHolder
import me.rhunk.snapenhance.ui.AppMaterialTheme import me.rhunk.snapenhance.common.ui.AppMaterialTheme
import me.rhunk.snapenhance.ui.setup.screens.SetupScreen import me.rhunk.snapenhance.ui.setup.screens.SetupScreen
import me.rhunk.snapenhance.ui.setup.screens.impl.MappingsScreen import me.rhunk.snapenhance.ui.setup.screens.impl.MappingsScreen
import me.rhunk.snapenhance.ui.setup.screens.impl.PermissionsScreen import me.rhunk.snapenhance.ui.setup.screens.impl.PermissionsScreen

View File

@ -10,6 +10,11 @@ android {
buildFeatures { buildFeatures {
aidl = true aidl = true
buildConfig = true buildConfig = true
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get()
} }
defaultConfig { defaultConfig {
@ -38,5 +43,13 @@ dependencies {
implementation(libs.androidx.documentfile) implementation(libs.androidx.documentfile)
implementation(libs.rhino) implementation(libs.rhino)
compileOnly(libs.androidx.activity.ktx)
compileOnly(platform(libs.androidx.compose.bom))
compileOnly(libs.androidx.navigation.compose)
compileOnly(libs.androidx.material.icons.core)
compileOnly(libs.androidx.material.ripple)
compileOnly(libs.androidx.material.icons.extended)
compileOnly(libs.androidx.material3)
implementation(project(":mapper")) implementation(project(":mapper"))
} }

View File

@ -1,10 +1,11 @@
package me.rhunk.snapenhance.ui.overlay package me.rhunk.snapenhance.common.ui
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import androidx.activity.OnBackPressedDispatcher import androidx.activity.OnBackPressedDispatcher
import androidx.activity.OnBackPressedDispatcherOwner import androidx.activity.OnBackPressedDispatcherOwner
import androidx.activity.setViewTreeOnBackPressedDispatcherOwner import androidx.activity.setViewTreeOnBackPressedDispatcherOwner
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Recomposer import androidx.compose.runtime.Recomposer
import androidx.compose.ui.platform.AndroidUiDispatcher import androidx.compose.ui.platform.AndroidUiDispatcher
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
@ -19,7 +20,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
// https://github.com/tberghuis/FloatingCountdownTimer/blob/master/app/src/main/java/xyz/tberghuis/floatingtimer/service/overlayViewFactory.kt // https://github.com/tberghuis/FloatingCountdownTimer/blob/master/app/src/main/java/xyz/tberghuis/floatingtimer/service/overlayViewFactory.kt
fun overlayComposeView(service: Context) = ComposeView(service).apply { fun createComposeView(context: Context, content: @Composable () -> Unit) = ComposeView(context).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
val lifecycleOwner = OverlayLifecycleOwner().apply { val lifecycleOwner = OverlayLifecycleOwner().apply {
performRestore(null) performRestore(null)
@ -49,6 +50,12 @@ fun overlayComposeView(service: Context) = ComposeView(service).apply {
runRecomposeScope.launch { runRecomposeScope.launch {
recomposer.runRecomposeAndApplyChanges() recomposer.runRecomposeAndApplyChanges()
} }
setContent {
AppMaterialTheme {
content()
}
}
} }
private class OverlayLifecycleOwner : SavedStateRegistryOwner { private class OverlayLifecycleOwner : SavedStateRegistryOwner {

View File

@ -1,4 +1,4 @@
package me.rhunk.snapenhance.ui package me.rhunk.snapenhance.common.ui
import android.os.Build import android.os.Build
import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.isSystemInDarkTheme

View File

@ -11,6 +11,14 @@ android {
minSdk = 28 minSdk = 28
} }
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get()
}
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17
@ -33,4 +41,12 @@ dependencies {
implementation(project(":common")) implementation(project(":common"))
implementation(project(":mapper")) implementation(project(":mapper"))
implementation(project(":native")) implementation(project(":native"))
compileOnly(libs.androidx.activity.ktx)
compileOnly(platform(libs.androidx.compose.bom))
compileOnly(libs.androidx.navigation.compose)
compileOnly(libs.androidx.material.icons.core)
compileOnly(libs.androidx.material.ripple)
compileOnly(libs.androidx.material.icons.extended)
compileOnly(libs.androidx.material3)
} }