Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions app-sandbox/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,15 @@ dependencies {
implementation(projects.feature.caseeditor)

implementation(projects.core.appnav)
implementation(projects.core.common)
implementation(projects.core.commoncase)
implementation(projects.core.data)
implementation(projects.core.designsystem)
implementation(projects.core.mapmarker)
implementation(projects.core.network)
implementation(projects.core.ui)

implementation(libs.kotlinx.serialization.json)

implementation(libs.accompanist.systemuicontroller)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.appcompat)
implementation(libs.androidx.core.ktx)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class SandboxActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge()
super.onCreate(savedInstanceState)
MapsInitializer.initialize(this, MapsInitializer.Renderer.LATEST) {}

Expand All @@ -24,6 +23,8 @@ class SandboxActivity : ComponentActivity() {
WindowCompat.setDecorFitsSystemWindows(window, false)

setContent {
enableEdgeToEdge()

CrisisCleanupTheme {
SandboxApp(
windowSizeClass = calculateWindowSizeClass(this),
Expand Down
37 changes: 25 additions & 12 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ plugins {

android {
defaultConfig {
val buildVersion = 254
val buildVersion = 256
applicationId = "com.crisiscleanup"
versionCode = buildVersion
versionName = "0.9.${buildVersion - 168}"
Expand Down Expand Up @@ -144,19 +144,8 @@ dependencies {

implementation(projects.sync.work)

androidTestImplementation(projects.core.testing)
androidTestImplementation(projects.core.dataTest)
androidTestImplementation(projects.core.datastoreTest)
androidTestImplementation(projects.core.network)
androidTestImplementation(libs.androidx.navigation.testing)
androidTestImplementation(libs.accompanist.testharness)
androidTestImplementation(kotlin("test"))
debugImplementation(libs.androidx.compose.ui.testManifest)
debugImplementation(projects.uiTestHiltManifest)

implementation(libs.kotlinx.serialization.json)

implementation(libs.accompanist.systemuicontroller)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.appcompat)
implementation(libs.androidx.core.ktx)
Expand Down Expand Up @@ -184,6 +173,30 @@ dependencies {

implementation(libs.kotlinx.coroutines.playservices)
implementation(libs.playservices.maps)

ksp(libs.hilt.compiler)

debugImplementation(libs.androidx.compose.ui.testManifest)
debugImplementation(projects.uiTestHiltManifest)

kspTest(libs.hilt.compiler)

testImplementation(projects.core.dataTest)
testImplementation(projects.core.datastoreTest)
testImplementation(libs.hilt.android.testing)
testImplementation(projects.sync.syncTest)
testImplementation(libs.kotlin.test)

testDemoImplementation(libs.androidx.navigation.testing)
testDemoImplementation(projects.core.testing)

androidTestImplementation(projects.core.testing)
androidTestImplementation(projects.core.dataTest)
androidTestImplementation(projects.core.datastoreTest)
androidTestImplementation(libs.androidx.test.espresso.core)
androidTestImplementation(libs.androidx.compose.ui.test)
androidTestImplementation(libs.hilt.android.testing)
androidTestImplementation(libs.kotlin.test)
}

dependencyGuard {
Expand Down
49 changes: 22 additions & 27 deletions app/src/main/java/com/crisiscleanup/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,20 @@ package com.crisiscleanup
import android.content.Intent
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.SystemBarStyle
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.toArgb
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.view.WindowCompat
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
Expand All @@ -28,7 +29,6 @@ import com.crisiscleanup.core.common.NetworkMonitor
import com.crisiscleanup.core.common.PermissionManager
import com.crisiscleanup.core.common.PhoneNumberPicker
import com.crisiscleanup.core.common.VisualAlertManager
import com.crisiscleanup.core.common.event.AccountEventBus
import com.crisiscleanup.core.common.event.TrimMemoryEventManager
import com.crisiscleanup.core.common.log.AppLogger
import com.crisiscleanup.core.common.log.CrisisCleanupLoggers
Expand All @@ -42,7 +42,7 @@ import com.crisiscleanup.core.designsystem.theme.navigationContainerColor
import com.crisiscleanup.core.model.data.DarkThemeConfig
import com.crisiscleanup.sync.initializers.scheduleSyncWorksites
import com.crisiscleanup.ui.CrisisCleanupApp
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.crisiscleanup.ui.rememberCrisisCleanupAppState
import com.google.android.gms.maps.MapsInitializer
import com.google.android.gms.maps.MapsInitializer.Renderer
import dagger.hilt.android.AndroidEntryPoint
Expand All @@ -67,9 +67,6 @@ class MainActivity : ComponentActivity() {

private val viewModel: MainActivityViewModel by viewModels()

@Inject
internal lateinit var accountEventBus: AccountEventBus

@Inject
internal lateinit var syncPuller: SyncPuller

Expand Down Expand Up @@ -101,7 +98,6 @@ class MainActivity : ComponentActivity() {
private val lifecycleObservers = mutableListOf<LifecycleObserver>()

override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge()
val splashScreen = installSplashScreen()
super.onCreate(savedInstanceState)
MapsInitializer.initialize(this, Renderer.LATEST) {}
Expand All @@ -122,28 +118,27 @@ class MainActivity : ComponentActivity() {
viewState is Loading || authState is AuthState.Loading
}

// Turn off the decor fitting system windows, which allows us to handle insets,
// including IME animations
WindowCompat.setDecorFitsSystemWindows(window, false)

setContent {
val systemUiController = rememberSystemUiController()
val darkTheme = shouldUseDarkTheme(viewState)

// Update the dark content of the system bars to match the theme
DisposableEffect(systemUiController, darkTheme) {
systemUiController.systemBarsDarkContentEnabled = !darkTheme
systemUiController.setSystemBarsColor(navigationContainerColor)
onDispose {}
}

CrisisCleanupTheme(
darkTheme = darkTheme,
) {
CrisisCleanupApp(
windowSizeClass = calculateWindowSizeClass(this),
networkMonitor = networkMonitor,
)
val windowSizeClass = calculateWindowSizeClass(this)
val appState = rememberCrisisCleanupAppState(
networkMonitor = networkMonitor,
windowSizeClass = windowSizeClass,
)

val barColor = navigationContainerColor.toArgb()
enableEdgeToEdge(
statusBarStyle = SystemBarStyle.dark(barColor),
navigationBarStyle = SystemBarStyle.dark(barColor),
)

CompositionLocalProvider {
CrisisCleanupTheme(
darkTheme = darkTheme,
) {
CrisisCleanupApp(appState)
}
}
}

Expand Down
17 changes: 1 addition & 16 deletions app/src/main/java/com/crisiscleanup/ui/CrisisCleanupApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.SnackbarResult
import androidx.compose.material3.windowsizeclass.WindowSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect
Expand All @@ -37,7 +36,6 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshots.SnapshotStateMap
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.onGloballyPositioned
Expand All @@ -51,7 +49,6 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.crisiscleanup.AuthState
import com.crisiscleanup.MainActivityViewModel
import com.crisiscleanup.MainActivityViewState
import com.crisiscleanup.core.common.NetworkMonitor
import com.crisiscleanup.core.common.TutorialStep
import com.crisiscleanup.core.designsystem.LayoutProvider
import com.crisiscleanup.core.designsystem.LocalAppTranslator
Expand All @@ -77,12 +74,7 @@ import com.crisiscleanup.feature.authentication.R as authenticationR

@Composable
fun CrisisCleanupApp(
windowSizeClass: WindowSizeClass,
networkMonitor: NetworkMonitor,
appState: CrisisCleanupAppState = rememberCrisisCleanupAppState(
networkMonitor = networkMonitor,
windowSizeClass = windowSizeClass,
),
appState: CrisisCleanupAppState,
viewModel: MainActivityViewModel = hiltViewModel(),
) {
CrisisCleanupBackground {
Expand Down Expand Up @@ -248,9 +240,6 @@ private fun BoxScope.LoadedContent(
}
}

@OptIn(
ExperimentalComposeUiApi::class,
)
@Composable
private fun AuthenticateContent(
snackbarHostState: SnackbarHostState,
Expand Down Expand Up @@ -283,7 +272,6 @@ private fun AuthenticateContent(
}
}

@OptIn(ExperimentalComposeUiApi::class)
@Composable
private fun AcceptTermsContent(
snackbarHostState: SnackbarHostState,
Expand Down Expand Up @@ -325,9 +313,6 @@ private fun AcceptTermsContent(
}
}

@OptIn(
ExperimentalComposeUiApi::class,
)
@Composable
private fun NavigableContent(
snackbarHostState: SnackbarHostState,
Expand Down
31 changes: 16 additions & 15 deletions build-logic/convention/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
*/

import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
`kotlin-dsl`
alias(libs.plugins.android.lint)
}

group = "com.google.samples.apps.nowinandroid.buildlogic"
Expand Down Expand Up @@ -46,6 +46,7 @@ dependencies {
compileOnly(libs.ksp.gradlePlugin)
compileOnly(libs.room.gradlePlugin)
implementation(libs.truth)
lintChecks(libs.androidx.lint.gradle)
}

tasks {
Expand All @@ -58,59 +59,59 @@ tasks {
gradlePlugin {
plugins {
register("androidApplicationCompose") {
id = "nowinandroid.android.application.compose"
id = libs.plugins.nowinandroid.android.application.compose.get().pluginId
implementationClass = "AndroidApplicationComposeConventionPlugin"
}
register("androidApplication") {
id = "nowinandroid.android.application"
id = libs.plugins.nowinandroid.android.application.asProvider().get().pluginId
implementationClass = "AndroidApplicationConventionPlugin"
}
register("androidApplicationJacoco") {
id = "nowinandroid.android.application.jacoco"
id = libs.plugins.nowinandroid.android.application.jacoco.get().pluginId
implementationClass = "AndroidApplicationJacocoConventionPlugin"
}
register("androidLibraryCompose") {
id = "nowinandroid.android.library.compose"
id = libs.plugins.nowinandroid.android.library.compose.get().pluginId
implementationClass = "AndroidLibraryComposeConventionPlugin"
}
register("androidLibrary") {
id = "nowinandroid.android.library"
id = libs.plugins.nowinandroid.android.library.asProvider().get().pluginId
implementationClass = "AndroidLibraryConventionPlugin"
}
register("androidFeature") {
id = "nowinandroid.android.feature"
id = libs.plugins.nowinandroid.android.feature.get().pluginId
implementationClass = "AndroidFeatureConventionPlugin"
}
register("androidLibraryJacoco") {
id = "nowinandroid.android.library.jacoco"
id = libs.plugins.nowinandroid.android.library.jacoco.get().pluginId
implementationClass = "AndroidLibraryJacocoConventionPlugin"
}
register("androidTest") {
id = "nowinandroid.android.test"
id = libs.plugins.nowinandroid.android.test.get().pluginId
implementationClass = "AndroidTestConventionPlugin"
}
register("hilt") {
id = "nowinandroid.hilt"
id = libs.plugins.nowinandroid.hilt.get().pluginId
implementationClass = "HiltConventionPlugin"
}
register("androidRoom") {
id = "nowinandroid.android.room"
id = libs.plugins.nowinandroid.android.room.get().pluginId
implementationClass = "AndroidRoomConventionPlugin"
}
register("androidFirebase") {
id = "nowinandroid.android.application.firebase"
id = libs.plugins.nowinandroid.android.application.firebase.get().pluginId
implementationClass = "AndroidApplicationFirebaseConventionPlugin"
}
register("androidFlavors") {
id = "nowinandroid.android.application.flavors"
id = libs.plugins.nowinandroid.android.application.flavors.get().pluginId
implementationClass = "AndroidApplicationFlavorsConventionPlugin"
}
register("androidLint") {
id = "nowinandroid.android.lint"
id = libs.plugins.nowinandroid.android.lint.get().pluginId
implementationClass = "AndroidLintConventionPlugin"
}
register("jvmLibrary") {
id = "nowinandroid.jvm.library"
id = libs.plugins.nowinandroid.jvm.library.get().pluginId
implementationClass = "JvmLibraryConventionPlugin"
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,17 @@ import com.google.samples.apps.nowinandroid.configureKotlinAndroid
import com.google.samples.apps.nowinandroid.configurePrintApksTask
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.getByType

class AndroidApplicationConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.android.application")
apply("org.jetbrains.kotlin.android")
apply("nowinandroid.android.lint")
apply("com.dropbox.dependency-guard")
}
apply(plugin = "com.android.application")
apply(plugin = "org.jetbrains.kotlin.android")
apply(plugin = "nowinandroid.android.lint")
apply(plugin = "com.dropbox.dependency-guard")

extensions.configure<ApplicationExtension> {
configureKotlinAndroid(this)
Expand All @@ -50,5 +49,4 @@ class AndroidApplicationConventionPlugin : Plugin<Project> {
}
}
}

}
Loading
Loading