diff --git a/readme.md b/readme.md index 0b1f68c..0c9523f 100755 --- a/readme.md +++ b/readme.md @@ -35,7 +35,7 @@ Then add the following to the () @@ -63,11 +52,10 @@ class FunctionalTests { fun resetData() { } - @OptIn(ExperimentalMaterialApi::class) @Test fun testApplicationWorkflow() { - var resources = launchLoginScreenWithNavGraph() + val resources = getResources() composeTestRule.waitForIdle() //authenticate as testUser1 @@ -116,10 +104,15 @@ class FunctionalTests { //authenticate as testUser1 testAuthentication(testUsername1, testPassword, resources) + composeTestRule.onNodeWithContentDescription(resources[keyAppBarMenu].toString()) + .performClick() + + composeTestRule.onNodeWithText("Update User Profile") + .performClick() + assertUserProfile(testFirstName1, testLastName1, testJobTitle1, testUsername1, resources) } - @OptIn(ExperimentalMaterialApi::class) private fun testAuthentication( username: String, password: String, @@ -140,22 +133,32 @@ class FunctionalTests { composeTestRule.waitForIdle() } - @OptIn(ExperimentalMaterialApi::class) private fun testUserProfileForm( firstName: String, lastName: String, jobTitle: String, resources: Map ) { - composeTestRule.onNodeWithContentDescription(resources[keyTfFirstName].toString()) - .performTextInput(firstName) - composeTestRule.onNodeWithContentDescription(resources[keyTfLastName].toString()) - .performTextInput(lastName) - composeTestRule.onNodeWithContentDescription(resources[keyTfJobTitle].toString()) - .performTextInput(jobTitle) + composeTestRule.onNodeWithContentDescription(resources[keyAppBarMenu].toString()) + .performClick() + + composeTestRule.onNodeWithText("Update User Profile") + .performClick() + + composeTestRule.onNodeWithContentDescription(resources[keyTfFirstName].toString()).apply { + performTextClearance() + performTextInput(firstName) + } + composeTestRule.onNodeWithContentDescription(resources[keyTfLastName].toString()).apply { + performTextClearance() + performTextInput(lastName) + } + composeTestRule.onNodeWithContentDescription(resources[keyTfJobTitle].toString()).apply { + performTextClearance() + performTextInput(jobTitle) + } } - @OptIn(ExperimentalMaterialApi::class) private fun assertUserProfile( firstName: String, lastName: String, @@ -176,7 +179,6 @@ class FunctionalTests { .assert(hasText(jobTitle, ignoreCase = true)) } - @OptIn(ExperimentalMaterialApi::class) private fun logout(resources: Map) { composeTestRule.onNodeWithContentDescription(resources[keyAppBarMenu].toString()) .performClick() @@ -185,101 +187,26 @@ class FunctionalTests { .performClick() } - @OptIn(ExperimentalMaterialApi::class) - private fun launchLoginScreenWithNavGraph(): Map { - var resources = HashMap() - composeTestRule.setContent { - + private fun getResources(): Map { + val resources = HashMap() + with(composeTestRule.activity.resources) { // ** get resources for testing ** // ** LoginView - resources[keyTfUsername] = stringResource(id = R.string.tfUsername) - resources[keyTfPassword] = stringResource(id = R.string.tfPassword) - resources[keyBtnLogin] = stringResource(id = R.string.btnLogin) + resources[keyTfUsername] = getString(R.string.tfUsername) + resources[keyTfPassword] = getString(R.string.tfPassword) + resources[keyBtnLogin] = getString(R.string.btnLogin) //** UserProfileView - resources[keyLblEmail] = stringResource(id = R.string.lblEmail) - resources[keyTfFirstName] = stringResource(id = R.string.tfGivenName) - resources[keyTfLastName] = stringResource(id = R.string.tfSurname) - resources[keyTfJobTitle] = stringResource(id = R.string.tfJobTitle) - resources[keyBtnSave] = stringResource(id = R.string.btnSave) + resources[keyLblEmail] = getString(R.string.lblEmail) + resources[keyTfFirstName] = getString(R.string.tfGivenName) + resources[keyTfLastName] = getString(R.string.tfSurname) + resources[keyTfJobTitle] = getString(R.string.tfJobTitle) + resources[keyBtnSave] = getString(R.string.btnSave) //* Overflow Menu - resources[keyAppBarMenu] = stringResource(id = R.string.btnAppBarMenu) - resources[keyBtnMenu] = stringResource(id = R.string.btnMenu) - resources[keyBtnLogout] = stringResource(id = R.string.btnLogout) - - ProvideWindowInsets { - - val context = LocalContext.current - - val scope = rememberCoroutineScope() - val navController = rememberNavController() - val scaffoldState = rememberScaffoldState() - val authService = MockAuthenticationService() - - //we need a drawer overflow menu on multiple screens - //so we need top level scaffold. An event to open the drawer is passed - //to each screen that needs it. - val drawerState = rememberDrawerState(DrawerValue.Closed) - val openDrawer = { - scope.launch { - drawerState.open() - } - } - - LearningPathTheme() { - Scaffold(scaffoldState = scaffoldState, - snackbarHost = { - scaffoldState.snackbarHostState - }) { - ModalDrawer( - modifier = Modifier.semantics { contentDescription = "overflowMenu" }, - drawerState = drawerState, - gesturesEnabled = drawerState.isOpen, - drawerContent = { - Drawer( - modifier = Modifier.semantics { - contentDescription = "overflowMenu1" - }, - firstName = "", - lastName = "", - email = "", - team = "", - profilePicture = null, - onClicked = { route -> - scope.launch { - drawerState.close() - } - when (route) { - MainDestinations.LOGOUT_ROUTE -> { - authService.logout() - navController.navigate(MainDestinations.LOGIN_ROUTE) { - popUpTo(navController.graph.findStartDestination().id) { - inclusive = true - } - } - } - else -> { - navController.navigate(route) { - popUpTo(navController.graph.startDestinationId) - launchSingleTop = true - } - } - } - } - ) - } - ) { - InventoryNavGraph( - openDrawer = { openDrawer() }, - navController = navController, - scaffoldState = scaffoldState, - scope = scope - ) - } - } - } - } + resources[keyAppBarMenu] = getString(R.string.btnAppBarMenu) + resources[keyBtnMenu] = getString(R.string.btnMenu) + resources[keyBtnLogout] = getString(R.string.btnLogout) } return resources } diff --git a/src/app/src/main/java/com/couchbase/learningpath/InventoryNavGraph.kt b/src/app/src/main/java/com/couchbase/learningpath/InventoryNavGraph.kt index 3da381e..06d74c1 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/InventoryNavGraph.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/InventoryNavGraph.kt @@ -134,8 +134,8 @@ fun InventoryNavGraph( auditId = it } val viewModel = getViewModel() - viewModel.getAudit(projectId = projectId, auditId = auditId) - viewModel.navigateToListSelection = actions.navigateToStockItemListSelector + viewModel.getAudit(projectId = projectId, auditId = auditId) + viewModel.navigateToListSelection = actions.navigateToStockItemListSelector AuditEditorView( viewModel = viewModel, diff --git a/src/app/src/main/java/com/couchbase/learningpath/data/audits/AuditRepositoryDb.kt b/src/app/src/main/java/com/couchbase/learningpath/data/audits/AuditRepositoryDb.kt index 4a7fd36..702fbfb 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/data/audits/AuditRepositoryDb.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/data/audits/AuditRepositoryDb.kt @@ -7,12 +7,10 @@ import android.util.Log import com.couchbase.learningpath.data.DatabaseManager import com.couchbase.learningpath.models.Audit import com.couchbase.learningpath.models.AuditDao -import com.couchbase.learningpath.models.Project import com.couchbase.learningpath.models.StockItem import com.couchbase.learningpath.services.AuthenticationService import com.couchbase.lite.* import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.* import kotlinx.coroutines.withContext import kotlinx.serialization.ExperimentalSerializationApi @@ -21,7 +19,6 @@ import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import java.util.* -@OptIn(ExperimentalCoroutinesApi::class) class AuditRepositoryDb( var context: Context, private val authenticationService: AuthenticationService diff --git a/src/app/src/main/java/com/couchbase/learningpath/data/stockItem/StockItemRepositoryDb.kt b/src/app/src/main/java/com/couchbase/learningpath/data/stockItem/StockItemRepositoryDb.kt index ec7c19c..a92fa49 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/data/stockItem/StockItemRepositoryDb.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/data/stockItem/StockItemRepositoryDb.kt @@ -4,7 +4,6 @@ package com.couchbase.learningpath.data.stockItem import android.content.Context import android.util.Log -import androidx.compose.ui.text.toLowerCase import com.couchbase.learningpath.data.DatabaseManager import com.couchbase.learningpath.models.StockItem import com.couchbase.learningpath.models.StockItemDao @@ -34,7 +33,7 @@ class StockItemRepositoryDb( db?.let { database -> val query = database.createQuery("SELECT * FROM _ AS item WHERE documentType=\"$documentType\"") - var results = query.execute().allResults() + val results = query.execute().allResults() results.forEach { result -> val stockItem = Json.decodeFromString(result.toJSON()).item stockItems.add(stockItem) @@ -76,7 +75,7 @@ class StockItemRepositoryDb( db?.let { database -> var queryString = "SELECT * FROM _ as item WHERE documentType=\"item\" AND lower(name) LIKE ('%' || \$parameterName || '%')" // 1 - var parameters = Parameters() // 2 + val parameters = Parameters() // 2 parameters.setString("parameterName", searchName.lowercase()) // 3 searchDescription?.let { description -> if (description.isNotEmpty()) { // 4 @@ -88,9 +87,9 @@ class StockItemRepositoryDb( ) // 6 } } - var query = database.createQuery(queryString) // 7 + val query = database.createQuery(queryString) // 7 query.parameters = parameters // 8 - var results = query.execute().allResults() // 9 + val results = query.execute().allResults() // 9 results.forEach { result -> // 10 val stockItem = Json.decodeFromString(result.toJSON()).item // 11 diff --git a/src/app/src/main/java/com/couchbase/learningpath/services/ReplicatorServiceDb.kt b/src/app/src/main/java/com/couchbase/learningpath/services/ReplicatorServiceDb.kt index c7d9b49..7427cf2 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/services/ReplicatorServiceDb.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/services/ReplicatorServiceDb.kt @@ -7,13 +7,11 @@ import com.couchbase.learningpath.data.DatabaseManager import com.couchbase.learningpath.data.replicator.ReplicatorConfig import com.couchbase.learningpath.data.replicator.ReplicatorManager import com.couchbase.lite.* -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.InternalCoroutinesApi import kotlinx.coroutines.flow.Flow import java.net.URI @InternalCoroutinesApi -@OptIn( ExperimentalCoroutinesApi::class) class ReplicatorServiceDb ( private val authenticationService: AuthenticationService, val context: Context) : ReplicatorService @@ -28,16 +26,16 @@ class ReplicatorServiceDb ( //if your sync gateway server is running on a different IP change it here override var replicationConfig = mutableStateOf( ReplicatorConfig( - username = loggedInUser.username, - password = loggedInUser.password, + username = loggedInUser.username, + password = loggedInUser.password, endpointUrl = "ws://10.0.2.2:4984/projects", - replicatorType = "PUSH AND PULL", - heartBeat = 60L, - continuous = true, - selfSignedCert = true) + replicatorType = "PUSH AND PULL", + heartBeat = 60L, + continuous = true, + selfSignedCert = true + ) ) - override val replicationStatus = mutableStateOf("") override val replicationTypes = listOf("PUSH AND PULL", "PUSH", "PULL") override val canStartReplication = mutableStateOf(false) diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/MainActivity.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/MainActivity.kt index 791efb0..86348d8 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/MainActivity.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/MainActivity.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.compose.foundation.layout.padding import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier @@ -81,9 +82,11 @@ class MainActivity : ComponentActivity() { Scaffold(scaffoldState = scaffoldState, snackbarHost = { scaffoldState.snackbarHostState - }) { + } + ) { padding -> ModalDrawer( - modifier = Modifier.semantics { contentDescription = menuResource }, + modifier = Modifier.semantics { contentDescription = menuResource } + .padding(padding), drawerState = drawerState, gesturesEnabled = drawerState.isOpen, drawerContent = { diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditCard.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditCard.kt index 955254e..60c6779 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditCard.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditCard.kt @@ -187,13 +187,13 @@ fun AuditCardPreview() { InventoryAppBar(title = "Audit", navigationIcon = Icons.Filled.ArrowBack, navigationOnClick = { }) - }) - { + } + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ) - { + .padding(padding) + ) { AuditCard( audit = audit, onEditChange = onEditChange, diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditEditorView.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditEditorView.kt index e4b9842..ebcf3f4 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditEditorView.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditEditorView.kt @@ -39,11 +39,12 @@ fun AuditEditorView( title = "Audit Editor", navigationIcon = Icons.Filled.ArrowBack, navigationOnClick = { navigateUp() }) - }) - { + } + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() + .padding(padding) ) { viewModel.navigateUpCallback = navigateUp AuditEditor( diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditEditorViewModel.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditEditorViewModel.kt index d4186a2..d8888c7 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditEditorViewModel.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditEditorViewModel.kt @@ -134,7 +134,7 @@ class AuditEditorViewModel( it.projectId = projectId.value auditRepository.save(it) withContext(Dispatchers.Main) { - navigateUpCallback() + navigateUpCallback() } } } diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditListView.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditListView.kt index 3056119..2a9fb0a 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditListView.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditListView.kt @@ -49,13 +49,12 @@ fun AuditListView( } ) } - ) - { + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ) - { + .padding(padding) + ) { val audits = viewModel.audits.observeAsState() AuditList( items = audits.value, diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditListViewModel.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditListViewModel.kt index 387e964..17ddf86 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditListViewModel.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/AuditListViewModel.kt @@ -11,7 +11,6 @@ import com.couchbase.learningpath.models.Project import kotlinx.coroutines.Dispatchers import kotlinx.serialization.decodeFromString import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/StockItemCard.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/StockItemCard.kt index 9cfc897..86de0ef 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/StockItemCard.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/StockItemCard.kt @@ -88,13 +88,13 @@ fun StockItemCardPreview() { InventoryAppBar(title = "Stock Item Selection", navigationIcon = Icons.Filled.Menu, navigationOnClick = { }) - }) - { + } + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ) - { + .padding(padding) + ) { StockItemCard( stockItem = stockItem, onStockItemSelected = onStockItemSelected diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/StockItemSelectionView.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/StockItemSelectionView.kt index f4b8d7b..65c2211 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/audit/StockItemSelectionView.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/audit/StockItemSelectionView.kt @@ -13,10 +13,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.couchbase.learningpath.models.StockItem -import com.couchbase.learningpath.models.Warehouse import com.couchbase.learningpath.ui.components.InventoryAppBar -import com.couchbase.learningpath.ui.project.WarehouseCard -import com.couchbase.learningpath.ui.project.WarehouseSelector import com.couchbase.learningpath.ui.theme.LearningPathTheme import com.couchbase.learningpath.ui.theme.Red500 @@ -37,12 +34,12 @@ fun StockItemSelectionView( navigationIcon = Icons.Filled.ArrowBack, navigationOnClick = { navigateUp() }) } - ) - { + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ){ + .padding(padding) + ) { val onStockItemSelected: (StockItem) -> Unit = { stockItem -> viewModel.onStockItemSelected(stockItem) diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/developer/DevDatabaseInfoView.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/developer/DevDatabaseInfoView.kt index e6e91a8..8c4b213 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/developer/DevDatabaseInfoView.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/developer/DevDatabaseInfoView.kt @@ -28,13 +28,13 @@ fun DevDatabaseInfoView( InventoryAppBar(title = "Developer - Database Information", navigationIcon = Icons.Filled.ArrowBack, navigationOnClick = { navigateUp() }) - }) - { + } + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ) - { + .padding(padding) + ) { DeveloperInfoWidget( viewModel.inventoryDatabaseName.value, viewModel.inventoryDatabaseLocation.value, diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/developer/DeveloperView.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/developer/DeveloperView.kt index 1c1fded..a22651d 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/developer/DeveloperView.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/developer/DeveloperView.kt @@ -36,14 +36,13 @@ fun DeveloperView( InventoryAppBar(title = "Developer", navigationIcon = Icons.Filled.Menu, navigationOnClick = { openDrawer() }) - }) - - { + } + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ) - { + .padding(padding) + ) { DeveloperWidget( toastMessage = viewModel.toastMessage.value, onLoadSampleData = viewModel.onLoadSampleData, diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/developer/ReplicatorConfigView.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/developer/ReplicatorConfigView.kt index 45dca73..672d26a 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/developer/ReplicatorConfigView.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/developer/ReplicatorConfigView.kt @@ -33,12 +33,12 @@ fun ReplicatorConfigView( navigationIcon = Icons.Filled.ArrowBack, navigationOnClick = { navigateUp() } ) - }) - - { + } + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() + .padding(padding) ) { ReplicatorConfigOptions( serverUrl = viewModel.serverUrlState.value, diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/developer/ReplicatorView.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/developer/ReplicatorView.kt index 80ab585..ba8c0dc 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/developer/ReplicatorView.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/developer/ReplicatorView.kt @@ -43,14 +43,13 @@ fun ReplicatorView( } } ) - }) - - { + } + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ) - { + .padding(padding) + ) { ReplicatorWidget( replicationStatus = viewModel.replicationStatus.value, replicationProgress = viewModel.replicationProgress.value, diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/developer/ReplicatorViewModel.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/developer/ReplicatorViewModel.kt index 2449094..0aeb230 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/developer/ReplicatorViewModel.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/developer/ReplicatorViewModel.kt @@ -11,8 +11,6 @@ import com.couchbase.lite.ReplicatorChange import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.launch -import kotlinx.coroutines.flow.collect -import kotlin.math.log class ReplicatorViewModel(private val replicatorService: ReplicatorService) : ViewModel() { diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/profile/UserProfileView.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/profile/UserProfileView.kt index ddb9813..758cac7 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/profile/UserProfileView.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/profile/UserProfileView.kt @@ -51,13 +51,13 @@ fun UserProfileView( InventoryAppBar(title = "User Profile", navigationIcon = Icons.Filled.Menu, navigationOnClick = { openDrawer() }) - }) - { + } + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ) - { + .padding(padding) + ) { UserProfileFormWidget( viewModel.givenName.value, viewModel.onGivenNameChanged, diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectCard.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectCard.kt index 11b01ce..bb8a58d 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectCard.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectCard.kt @@ -185,13 +185,13 @@ fun ProjectCardPreview() { InventoryAppBar(title = "User Profile", navigationIcon = Icons.Filled.Menu, navigationOnClick = { }) - }) - { + } + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ) - { + .padding(padding) + ) { ProjectCard( project = project, onProjectSelected = onProjectSelected, diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectEditorView.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectEditorView.kt index a9344f0..42cda91 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectEditorView.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectEditorView.kt @@ -41,12 +41,12 @@ fun ProjectEditorView( navigationIcon = Icons.Filled.ArrowBack, navigationOnClick = { navigateUp() }) } - ) - { + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ){ + .padding(padding) + ) { viewModel.navigateUpCallback = navigateUp viewModel.navigateToListSelection = navigateToListSelection diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectEditorViewModel.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectEditorViewModel.kt index 6128289..56e108c 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectEditorViewModel.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectEditorViewModel.kt @@ -21,7 +21,9 @@ class ProjectEditorViewModel( ) : ViewModel() { private val defaultWarehouseText: String = "No Warehouse Selected" - var projectState = mutableStateOf(null) + + @OptIn(ExperimentalSerializationApi::class) + val projectState = mutableStateOf(null) val dueDateState = mutableStateOf("Select Due Date") val warehouseSelectionState = mutableStateOf(defaultWarehouseText) diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectListView.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectListView.kt index 2d03f32..26e3561 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectListView.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/project/ProjectListView.kt @@ -45,13 +45,13 @@ fun ProjectListView( InventoryAppBar(title = stringResource(id = R.string.projects), navigationIcon = Icons.Filled.Menu, navigationOnClick = { openDrawer() }) - }, floatingActionButton = { AddButton(navigateToProjectEditor) }) - { + }, floatingActionButton = { AddButton(navigateToProjectEditor) } + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ) - { + .padding(padding) + ) { // collecting the flow and turning it into state // https://developer.android.com/jetpack/compose/libraries#streams val projectList by viewModel.repositoryFlow.collectAsState(initial = listOf()) diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/project/WarehouseCard.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/project/WarehouseCard.kt index 0190c1a..157d59d 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/project/WarehouseCard.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/project/WarehouseCard.kt @@ -119,13 +119,13 @@ fun WarehouseCardPreview() { InventoryAppBar(title = "Warehouse Selection", navigationIcon = Icons.Filled.Menu, navigationOnClick = { }) - }) - { + } + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ) - { + .padding(padding) + ) { WarehouseCard( warehouse = warehouse, onWarehouseSelected = onWarehouseSelected diff --git a/src/app/src/main/java/com/couchbase/learningpath/ui/project/WarehouseSelectionView.kt b/src/app/src/main/java/com/couchbase/learningpath/ui/project/WarehouseSelectionView.kt index 7544b0a..6e0d83e 100644 --- a/src/app/src/main/java/com/couchbase/learningpath/ui/project/WarehouseSelectionView.kt +++ b/src/app/src/main/java/com/couchbase/learningpath/ui/project/WarehouseSelectionView.kt @@ -34,12 +34,12 @@ fun WarehouseSelectionView( navigationIcon = Icons.Filled.ArrowBack, navigationOnClick = { navigateUp() }) } - ) - { + ) { padding -> Surface( color = MaterialTheme.colors.background, modifier = Modifier.fillMaxSize() - ){ + .padding(padding) + ) { val onWarehouseSelected: (Warehouse) -> Unit = { warehouse -> viewModel.onWarehouseSelected(warehouse) diff --git a/src/app/src/main/res/values-night/themes.xml b/src/app/src/main/res/values-night/themes.xml index ec802c2..27cc7f6 100755 --- a/src/app/src/main/res/values-night/themes.xml +++ b/src/app/src/main/res/values-night/themes.xml @@ -10,6 +10,6 @@ @color/teal_200 @color/black - ?attr/colorPrimaryVariant + ?attr/colorPrimaryVariant \ No newline at end of file diff --git a/src/app/src/main/res/values/themes.xml b/src/app/src/main/res/values/themes.xml index 0f16f91..56c5cec 100644 --- a/src/app/src/main/res/values/themes.xml +++ b/src/app/src/main/res/values/themes.xml @@ -10,7 +10,7 @@ @color/teal_200 @color/black - ?attr/colorPrimaryVariant + ?attr/colorPrimaryVariant diff --git a/src/build.gradle b/src/build.gradle index 7292899..3c88110 100644 --- a/src/build.gradle +++ b/src/build.gradle @@ -1,42 +1,30 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + buildscript { ext { - kotlin_version = '1.7.10' core_ktx = '1.9.0' compose_version = '1.3.1' - compose_ui_version = '1.2.1' - activity_compose_version = '1.5.1' + compose_ui_version = '1.3.1' + activity_compose_version = '1.6.1' lifecyle_runtime_ktx_version = '2.5.1' - koin_version = '3.2.1' - koin_version_compose = '3.2.0' - android_materialdesign_version = '1.6.1' - androidx_navigation_compose_version = '2.5.2' + koin_version = '3.2.2' + koin_version_compose = '3.3.0' + android_materialdesign_version = '1.7.0' + androidx_navigation_compose_version = '2.5.3' google_accompanist_version = '0.23.1' kotlinx_serialization_json = '1.4.0' constraints_compose_version = '1.0.1' annotation_experimental_version = '1.3.0' - coroutines_tests_version = '1.6.3' + coroutines_tests_version = '1.6.4' //couchbase - couchbase_lite_version = '3.0.2' - } - - repositories { - maven { - url "https://mobile.maven.couchbase.com/maven2/dev/" - } - google() - mavenCentral() + couchbase_lite_version = '3.0.5' } - dependencies { - classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" - } -}// Top-level build file where you can add configuration options common to all sub-projects/modules. +} plugins { - id "com.android.application" version '7.3.0' apply false - id "com.android.library" version '7.3.0' apply false + id "com.android.application" version "7.3.1" apply false id "org.jetbrains.kotlin.android" version "1.7.10" apply false - id "org.jetbrains.kotlin.jvm" version "1.7.10" apply false id "org.jetbrains.kotlin.plugin.serialization" version "1.7.10" id "com.github.johnrengelman.shadow" version "7.1.2" apply false } diff --git a/src/gradle/wrapper/gradle-wrapper.properties b/src/gradle/wrapper/gradle-wrapper.properties index 2be66ca..f26fd69 100644 --- a/src/gradle/wrapper/gradle-wrapper.properties +++ b/src/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Apr 15 09:52:37 EDT 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/src/settings.gradle b/src/settings.gradle index 3efc061..0f56056 100644 --- a/src/settings.gradle +++ b/src/settings.gradle @@ -8,6 +8,9 @@ pluginManagement { dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { + maven { + url "https://mobile.maven.couchbase.com/maven2/dev/" + } google() mavenCentral() }