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 me.rhunk.snapenhance.RemoteSideContext
import me.rhunk.snapenhance.SharedContextHolder
import me.rhunk.snapenhance.ui.AppMaterialTheme
import me.rhunk.snapenhance.common.ui.AppMaterialTheme
class MainActivity : ComponentActivity() {
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 me.rhunk.snapenhance.R
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.Navigation
import me.rhunk.snapenhance.ui.manager.sections.features.FeaturesSection
@ -117,8 +117,7 @@ class SettingsOverlay(
}
dialog.setContentView(
overlayComposeView(context.androidContext).apply {
setContent {
createComposeView(context.androidContext) {
Column(
modifier = Modifier
.fillMaxSize()
@ -127,12 +126,9 @@ class SettingsOverlay(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
AppMaterialTheme {
OverlayContent()
}
}
}
}
)
dialog.setCancelable(true)

View File

@ -27,7 +27,7 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
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.impl.MappingsScreen
import me.rhunk.snapenhance.ui.setup.screens.impl.PermissionsScreen

View File

@ -10,6 +10,11 @@ android {
buildFeatures {
aidl = true
buildConfig = true
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get()
}
defaultConfig {
@ -38,5 +43,13 @@ dependencies {
implementation(libs.androidx.documentfile)
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"))
}

View File

@ -1,10 +1,11 @@
package me.rhunk.snapenhance.ui.overlay
package me.rhunk.snapenhance.common.ui
import android.content.Context
import android.os.Bundle
import androidx.activity.OnBackPressedDispatcher
import androidx.activity.OnBackPressedDispatcherOwner
import androidx.activity.setViewTreeOnBackPressedDispatcherOwner
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Recomposer
import androidx.compose.ui.platform.AndroidUiDispatcher
import androidx.compose.ui.platform.ComposeView
@ -19,7 +20,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
// 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)
val lifecycleOwner = OverlayLifecycleOwner().apply {
performRestore(null)
@ -49,6 +50,12 @@ fun overlayComposeView(service: Context) = ComposeView(service).apply {
runRecomposeScope.launch {
recomposer.runRecomposeAndApplyChanges()
}
setContent {
AppMaterialTheme {
content()
}
}
}
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 androidx.compose.foundation.isSystemInDarkTheme

View File

@ -11,6 +11,14 @@ android {
minSdk = 28
}
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get()
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
@ -33,4 +41,12 @@ dependencies {
implementation(project(":common"))
implementation(project(":mapper"))
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)
}