diff --git a/build-logic/convention/src/main/kotlin/com/mshdabiola/app/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/mshdabiola/app/AndroidCompose.kt index b6fa1e82..e7525db8 100644 --- a/build-logic/convention/src/main/kotlin/com/mshdabiola/app/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/mshdabiola/app/AndroidCompose.kt @@ -51,7 +51,9 @@ internal fun Project.configureAndroidCompose( .relativeToRootProject("compose-reports") .let(reportsDestination::set) - stabilityConfigurationFiles - .add(isolated.rootProject.projectDirectory.file("compose_compiler_config.conf")) + stabilityConfigurationFiles.add( + isolated.rootProject.projectDirectory.file("compose_compiler_config.conf")) +// stabilityConfigurationFiles +// .add(isolated.rootProject.projectDirectory.file("compose_compiler_config.conf")) } } \ No newline at end of file diff --git a/compose_compiler_config.conf b/compose_compiler_config.conf index c957f3d8..9e70e8da 100644 --- a/compose_compiler_config.conf +++ b/compose_compiler_config.conf @@ -4,8 +4,9 @@ // We always use immutable classes for our data model, to avoid running the Compose compiler // in the module we declare it to be stable here. -com.mshdabiola.modules.model.data.* +com.mshdabiola.model.* // Java standard library classes java.time.ZoneId java.time.ZoneOffset +kotlin.collections.* diff --git a/feature/main/src/main/kotlin/com/mshdabiola/main/MainScreen.kt b/feature/main/src/main/kotlin/com/mshdabiola/main/MainScreen.kt index c6b98ae9..7e4b5ec9 100644 --- a/feature/main/src/main/kotlin/com/mshdabiola/main/MainScreen.kt +++ b/feature/main/src/main/kotlin/com/mshdabiola/main/MainScreen.kt @@ -156,12 +156,10 @@ internal fun MainRoute( setAllAlarm = { showDialog = true }, setAllColor = { showColor = true }, setAllLabel = { - val selectId = - (mainState.value as MainState.Success).notePads.filter { it.selected }.map { it.id } - navigateToSelectLevel(selectId.toSet()) + navigateToSelectLevel((mainState.value as MainState.Success).setOfSelected) }, onCopy = mainViewModel::copyNote, - onDelete = mainViewModel::setAllDelete, + onDelete = mainViewModel::setAllToTrash, onArchive = mainViewModel::setAllArchive, onSend = { mainViewModel.clearSelected() @@ -383,11 +381,11 @@ fun MainContent( } } - val noOfSelected = remember(success.notePads) { - success.notePads.count { it.selected } + val noOfSelected = remember(success.setOfSelected) { + success.setOfSelected.size } val isAllPin = remember(success.notePads) { - success.notePads.filter { it.selected } + success.notePads.filter { success.setOfSelected.contains(it.id) } .all { it.isPin } } var isGrid by rememberSaveable { mutableStateOf(true) } @@ -557,6 +555,7 @@ fun MainContent( items = pinNotePad.first.toImmutableList(), onNoteClick = onNoteClick, onSelectedCard = onSelectedCard, + setOfSelected = success.setOfSelected, ) if (pinNotePad.first.isNotEmpty() && pinNotePad.second.isNotEmpty()) { @@ -574,6 +573,7 @@ fun MainContent( items = pinNotePad.second.toImmutableList(), onNoteClick = onNoteClick, onSelectedCard = onSelectedCard, + setOfSelected = success.setOfSelected, ) } } @@ -585,6 +585,7 @@ fun LazyStaggeredGridScope.noteItems( sharedTransitionScope: SharedTransitionScope, animatedContentScope: AnimatedVisibilityScope, items: List, + setOfSelected: Set, onNoteClick: (Long) -> Unit, onSelectedCard: (Long) -> Unit, ) = items( @@ -600,6 +601,7 @@ fun LazyStaggeredGridScope.noteItems( animatedVisibilityScope = animatedContentScope, ), + isSelect = setOfSelected.contains(note.id), notePad = note, onCardClick = onNoteClick, onLongClick = onSelectedCard, diff --git a/feature/main/src/main/kotlin/com/mshdabiola/main/MainState.kt b/feature/main/src/main/kotlin/com/mshdabiola/main/MainState.kt index 432d7bd8..d6f078fd 100644 --- a/feature/main/src/main/kotlin/com/mshdabiola/main/MainState.kt +++ b/feature/main/src/main/kotlin/com/mshdabiola/main/MainState.kt @@ -15,6 +15,7 @@ sealed class MainState { val label: List = emptyList(), val searchSort: SearchSort? = null, val mainData: MainData = MainData.Note, + val setOfSelected: Set = emptySet(), ) : MainState() diff --git a/feature/main/src/main/kotlin/com/mshdabiola/main/MainViewModel.kt b/feature/main/src/main/kotlin/com/mshdabiola/main/MainViewModel.kt index 71a18f34..b2e45382 100644 --- a/feature/main/src/main/kotlin/com/mshdabiola/main/MainViewModel.kt +++ b/feature/main/src/main/kotlin/com/mshdabiola/main/MainViewModel.kt @@ -173,20 +173,16 @@ internal class MainViewModel * @param id The ID of the notepad card that was selected or deselected. */ fun onSelectCard(id: Long) { - val listNOtePad = getSuccess().notePads.toMutableList() - val index = listNOtePad.indexOfFirst { it.id == id } - val notepad = listNOtePad[index] - val newNotepad = notepad.copy(selected = !notepad.selected) - - listNOtePad[index] = newNotepad - - _mainState.value = getSuccess().copy(notePads = listNOtePad.toImmutableList()) + val selected = getSuccess().setOfSelected + if (selected.contains(id)) { + _mainState.value = getSuccess().copy(setOfSelected = selected - id) + } else { + _mainState.value = getSuccess().copy(setOfSelected = selected + id) + } } fun clearSelected() { - val listNOtePad = - getSuccess().notePads.map { it.copy(selected = false) } - _mainState.value = getSuccess().copy(notePads = listNOtePad.toImmutableList()) + _mainState.value = getSuccess().copy(setOfSelected = emptySet()) } fun setNoteType(noteType: NoteType) { @@ -194,8 +190,9 @@ internal class MainViewModel } fun setPin() { + val selected = getSuccess().setOfSelected val selectedNotepad = - getSuccess().notePads.filter { it.selected } + getSuccess().notePads.filter { selected.contains(it.id) } clearSelected() @@ -215,8 +212,9 @@ internal class MainViewModel } private fun setAlarm(time: Long, interval: Long?) { + val setOfSelected = getSuccess().setOfSelected val selectedNotes = - getSuccess().notePads.filter { it.selected } + getSuccess().notePads.filter { setOfSelected.contains(it.id) } clearSelected() val notes = selectedNotes.map { it.copy(reminder = time, interval = interval ?: -1) } @@ -240,8 +238,9 @@ internal class MainViewModel } fun deleteAlarm() { + val selected = getSuccess().setOfSelected val selectedNotes = - getSuccess().notePads.filter { it.selected } + getSuccess().notePads.filter { selected.contains(it.id) } clearSelected() val notes = selectedNotes.map { it.copy(reminder = -1, interval = -1) } @@ -258,8 +257,9 @@ internal class MainViewModel } fun setAllColor(colorId: Int) { + val selected = getSuccess().setOfSelected val selectedNotes = - getSuccess().notePads.filter { it.selected } + getSuccess().notePads.filter { selected.contains(it.id) } clearSelected() val notes = selectedNotes.map { it.copy(color = colorId) } @@ -270,8 +270,9 @@ internal class MainViewModel } fun setAllArchive() { + val selected = getSuccess().setOfSelected val selectedNotes = - getSuccess().notePads.filter { it.selected } + getSuccess().notePads.filter { selected.contains(it.id) } clearSelected() val notes = selectedNotes.map { it.copy(noteType = NoteType.ARCHIVE) } @@ -281,9 +282,10 @@ internal class MainViewModel } } - fun setAllDelete() { + fun setAllToTrash() { + val selected = getSuccess().setOfSelected val selectedNotes = - getSuccess().notePads.filter { it.selected } + getSuccess().notePads.filter { selected.contains(it.id) } clearSelected() val notes = selectedNotes.map { it.copy(noteType = NoteType.TRASH) } @@ -295,7 +297,7 @@ internal class MainViewModel fun copyNote() { viewModelScope.launch(Dispatchers.IO) { - val id = getSuccess().notePads.single { it.selected }.id + val id = getSuccess().setOfSelected.first() val notepads = notepadRepository.getOneNotePad(id).first() if (notepads != null) { diff --git a/feature/main/src/main/kotlin/com/mshdabiola/main/TopbarAndDialog.kt b/feature/main/src/main/kotlin/com/mshdabiola/main/TopbarAndDialog.kt index f4f02553..098499d6 100644 --- a/feature/main/src/main/kotlin/com/mshdabiola/main/TopbarAndDialog.kt +++ b/feature/main/src/main/kotlin/com/mshdabiola/main/TopbarAndDialog.kt @@ -596,6 +596,7 @@ fun NoteBottomBar(modifier: Modifier = Modifier) { fun NoteCard( modifier: Modifier = Modifier, notePad: NotePad, + isSelect: Boolean = false, onCardClick: (Long) -> Unit = {}, onLongClick: (Long) -> Unit = {}, ) { @@ -638,7 +639,7 @@ fun NoteCard( onClick = { notePad.id.let { onCardClick(it) } }, onLongClick = { notePad.id.let { onLongClick(it) } }, ), - border = if (notePad.selected) { + border = if (isSelect) { BorderStroke(3.dp, Color.Blue) } else { BorderStroke( @@ -789,7 +790,7 @@ fun NoteCardPreview() { color = 2, isPin = false, background = 3, - selected = true, +// selected = true, // labels = listOf( // "ade", diff --git a/instuctions b/instuctions index 2bd6fc9f..2c71f60b 100644 --- a/instuctions +++ b/instuctions @@ -20,4 +20,8 @@ sed -i -e '/androidx.dev/d' settings.gradle.kts sed -i -e '/with(target) {/,/^ }/d' -e '/CrashlyticsExtension/d' build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt - sed -i -e '/libs.firebase/d' build-logic/convention/build.gradle.kts \ No newline at end of file + sed -i -e '/libs.firebase/d' build-logic/convention/build.gradle.kts + + + + ./gradlew --rerun-tasks assembleFossReliantDebug -PenableComposeCompilerMetrics=true -PenableComposeCompilerReports=true diff --git a/modules/model/src/main/java/com/mshdabiola/model/NotePad.kt b/modules/model/src/main/java/com/mshdabiola/model/NotePad.kt index 1e43c1ec..632940f0 100644 --- a/modules/model/src/main/java/com/mshdabiola/model/NotePad.kt +++ b/modules/model/src/main/java/com/mshdabiola/model/NotePad.kt @@ -15,7 +15,6 @@ data class NotePad( val editDateString: String = "Jul 3", val reminderString: String = "feb 1", val noteType: NoteType = NoteType.NOTE, - val selected: Boolean = false, val images: List = emptyList(), val voices: List = emptyList(), val checks: List = emptyList(),