Skip to content

Commit 7d0b3d6

Browse files
authored
Merge pull request #7 from VladShurakov/fix-issue-4
Fix issue #4
2 parents a5e9e87 + dad6677 commit 7d0b3d6

File tree

19 files changed

+230
-275
lines changed

19 files changed

+230
-275
lines changed

.idea/deploymentTargetDropDown.xml

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/androidTest/java/com/vladshurakov/jetnotesapp/ExampleInstrumentedTest.kt

Lines changed: 0 additions & 24 deletions
This file was deleted.

app/src/main/java/com/vladshurakov/jetnotesapp/feature_notes/data/data_source/NoteDao.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ interface NoteDao {
2626
@Query("UPDATE Note SET pinned = :pinned WHERE id = :id")
2727
suspend fun updatePinned(id: Long, pinned: Boolean)
2828

29-
@Query("SELECT * FROM note ORDER BY pinned DESC, timestamp DESC")
30-
fun getDesc(): Flow<List<NoteEntity>>
29+
@Query("SELECT * FROM note WHERE folder = :folder ORDER BY pinned DESC, timestamp DESC")
30+
fun getDesc(folder: Folder): Flow<List<NoteEntity>>
3131

32-
@Query("SELECT * FROM note ORDER BY pinned ASC, timestamp ASC")
33-
fun getAsc(): Flow<List<NoteEntity>>
32+
@Query("SELECT * FROM note WHERE folder = :folder ORDER BY pinned ASC, timestamp ASC")
33+
fun getAsc(folder: Folder): Flow<List<NoteEntity>>
3434

3535
@Query("SELECT * FROM note WHERE (title LIKE '%' || :query || '%' OR content LIKE '%' || :query || '%') ORDER BY pinned DESC, timestamp DESC")
3636
fun getDesc(query: String): Flow<List<NoteEntity>>

app/src/main/java/com/vladshurakov/jetnotesapp/feature_notes/data/repository/NotesRepositoryImpl.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ class NotesRepositoryImpl(private val noteDao: NoteDao) : NotesRepository {
3131
noteDao.updatePinned(id, pinned)
3232
}
3333

34-
override fun getDesc(): Flow<List<Note>> {
35-
return noteDao.getDesc().map { listOfNoteEntity ->
34+
override fun getDesc(folder: Folder): Flow<List<Note>> {
35+
return noteDao.getDesc(folder).map { listOfNoteEntity ->
3636
listOfNoteEntity.map { noteEntity ->
3737
noteEntity.toNote()
3838
}
3939
}
4040
}
4141

42-
override fun getAsc(): Flow<List<Note>> {
43-
return noteDao.getAsc().map { listOfNoteEntity ->
42+
override fun getAsc(folder: Folder): Flow<List<Note>> {
43+
return noteDao.getAsc(folder).map { listOfNoteEntity ->
4444
listOfNoteEntity.map { noteEntity ->
4545
noteEntity.toNote()
4646
}

app/src/main/java/com/vladshurakov/jetnotesapp/feature_notes/domain/repository/NotesRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ interface NotesRepository {
1010
suspend fun delete(note: Note)
1111
suspend fun moveTo(id: Long, folder: Folder)
1212
suspend fun updatePinned(id: Long, pinned: Boolean)
13-
fun getDesc(): Flow<List<Note>>
14-
fun getAsc(): Flow<List<Note>>
13+
fun getDesc(folder: Folder): Flow<List<Note>>
14+
fun getAsc(folder: Folder): Flow<List<Note>>
1515
fun getDesc(query: String): Flow<List<Note>>
1616
fun getAsc(query: String): Flow<List<Note>>
1717
}

app/src/main/java/com/vladshurakov/jetnotesapp/feature_notes/domain/usecase/GetNotes.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
package com.vladshurakov.jetnotesapp.feature_notes.domain.usecase
22

3+
import com.vladshurakov.jetnotesapp.feature_notes.domain.models.Folder
34
import com.vladshurakov.jetnotesapp.feature_notes.domain.models.Note
45
import com.vladshurakov.jetnotesapp.feature_notes.domain.repository.NotesRepository
56
import com.vladshurakov.jetnotesapp.util.OrderType
67
import kotlinx.coroutines.flow.Flow
78

89
class GetNotes(private val repository: NotesRepository) {
9-
operator fun invoke(orderType: OrderType): Flow<List<Note>> {
10+
operator fun invoke(orderType: OrderType, folder: Folder): Flow<List<Note>> {
1011
return when (orderType) {
1112
OrderType.Ascending -> {
12-
repository.getAsc()
13+
repository.getAsc(folder)
1314
}
1415

1516
OrderType.Descending -> {
16-
repository.getDesc()
17+
repository.getDesc(folder)
1718
}
1819
}
1920
}

app/src/main/java/com/vladshurakov/jetnotesapp/feature_notes/presenter/components/NoteView.kt

Lines changed: 9 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.vladshurakov.jetnotesapp.feature_notes.presenter.components
22

3-
import androidx.compose.foundation.layout.Arrangement
43
import androidx.compose.foundation.layout.Column
54
import androidx.compose.foundation.layout.PaddingValues
65
import androidx.compose.foundation.layout.Row
@@ -10,13 +9,10 @@ import androidx.compose.foundation.layout.height
109
import androidx.compose.foundation.layout.padding
1110
import androidx.compose.material3.Button
1211
import androidx.compose.material3.ButtonDefaults
13-
import androidx.compose.material3.Icon
14-
import androidx.compose.material3.IconButton
1512
import androidx.compose.material3.Text
1613
import androidx.compose.runtime.Composable
17-
import androidx.compose.ui.Alignment
1814
import androidx.compose.ui.Modifier
19-
import androidx.compose.ui.res.painterResource
15+
import androidx.compose.ui.graphics.Color
2016
import androidx.compose.ui.res.stringResource
2117
import androidx.compose.ui.text.style.TextOverflow
2218
import androidx.compose.ui.unit.dp
@@ -27,23 +23,21 @@ import java.util.Date
2723

2824
@Composable
2925
fun NoteView(
30-
title: String, content: String, timestamp: Long,
31-
onClick: () -> Unit, onRecover: (() -> Unit)? = null,
32-
onArchive: (() -> Unit)? = null, onUnarchive: (() -> Unit)? = null,
33-
onDelete: () -> Unit
26+
title: String = "ㅤ", content: String = "ㅤ", timestamp: Long = 0,
27+
onClick: () -> Unit = {}, color: Color = MainTheme.colors.secondaryBackground
3428
) {
3529
fun isContentBlank(content: String): Boolean = content.isBlank() || content.isEmpty()
3630

3731
Button(
3832
onClick = (onClick),
3933
colors = ButtonDefaults.buttonColors(
40-
containerColor = MainTheme.colors.secondaryBackground
34+
containerColor = color
4135
),
4236
shape = MainTheme.shapes.cornersStyle,
43-
contentPadding = PaddingValues(start = 12.dp, top = 12.dp),
37+
contentPadding = PaddingValues(12.dp),
4438
modifier = Modifier
4539
.fillMaxWidth()
46-
.padding(top = 8.dp)
40+
.padding(vertical = 8.dp)
4741
) {
4842
Row {
4943
Column(
@@ -69,77 +63,16 @@ fun NoteView(
6963
content,
7064
maxLines = 1,
7165
style = MainTheme.typography.body,
72-
color = MainTheme.colors.secondaryTextColor,
73-
modifier = Modifier
74-
.fillMaxWidth()
66+
color = MainTheme.colors.secondaryTextColor
7567
)
7668

7769
Spacer(modifier = Modifier.height(6.dp))
7870

7971
Text(
80-
text = PrettyTime().format(Date(timestamp)),
72+
text = if (timestamp == 0.toLong()) " " else PrettyTime().format(Date(timestamp)),
8173
style = MainTheme.typography.caption,
82-
color = MainTheme.colors.secondaryTextColor,
83-
modifier = Modifier
84-
.fillMaxWidth()
85-
.padding(bottom = 12.dp)
74+
color = MainTheme.colors.secondaryTextColor
8675
)
87-
}
88-
89-
Row(
90-
verticalAlignment = Alignment.Bottom,
91-
horizontalArrangement = Arrangement.End,
92-
modifier = Modifier.align(Alignment.Bottom)
93-
) {
94-
if (onRecover != null) {
95-
IconButton(
96-
onClick = (onRecover),
97-
) {
98-
Icon(
99-
painter = painterResource(id = R.drawable.ic_restore),
100-
contentDescription = stringResource(id = R.string.btn_recover),
101-
tint = MainTheme.colors.invertColor
102-
)
103-
}
104-
}
105-
106-
if (onArchive != null) {
107-
IconButton(
108-
onClick = (onArchive),
109-
) {
110-
Icon(
111-
painter = painterResource(
112-
id = R.drawable.ic_archive
113-
),
114-
contentDescription = stringResource(id = R.string.archived_notes),
115-
tint = MainTheme.colors.invertColor
116-
)
117-
}
118-
}
119-
120-
if (onUnarchive != null) {
121-
IconButton(
122-
onClick = (onUnarchive),
123-
) {
124-
Icon(
125-
painter = painterResource(
126-
id = R.drawable.ic_unarchive
127-
),
128-
contentDescription = stringResource(id = R.string.archived_notes),
129-
tint = MainTheme.colors.invertColor
130-
)
131-
}
132-
}
133-
134-
IconButton(
135-
onClick = (onDelete),
136-
) {
137-
Icon(
138-
painter = painterResource(id = R.drawable.ic_delete),
139-
contentDescription = stringResource(id = R.string.btn_delete),
140-
tint = MainTheme.colors.invertColor
141-
)
142-
}
14376

14477
}
14578
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.vladshurakov.jetnotesapp.feature_notes.presenter.components
2+
3+
import androidx.annotation.DrawableRes
4+
import androidx.compose.foundation.layout.Box
5+
import androidx.compose.foundation.layout.padding
6+
import androidx.compose.foundation.layout.size
7+
import androidx.compose.material3.DismissDirection
8+
import androidx.compose.material3.DismissState
9+
import androidx.compose.material3.ExperimentalMaterial3Api
10+
import androidx.compose.material3.Icon
11+
import androidx.compose.material3.SwipeToDismiss
12+
import androidx.compose.runtime.Composable
13+
import androidx.compose.ui.Alignment
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.graphics.Color
16+
import androidx.compose.ui.res.painterResource
17+
import androidx.compose.ui.unit.dp
18+
import androidx.navigation.NavController
19+
import com.vladshurakov.jetnotesapp.R
20+
import com.vladshurakov.jetnotesapp.feature_notes.domain.models.Note
21+
import com.vladshurakov.jetnotesapp.theme.MainTheme
22+
import com.vladshurakov.jetnotesapp.util.Screen
23+
24+
@OptIn(ExperimentalMaterial3Api::class)
25+
@Composable
26+
fun SwipeToDismissNote(
27+
dismissState: DismissState,
28+
@DrawableRes starDrawable: Int,
29+
note: Note,
30+
navController: NavController
31+
) {
32+
SwipeToDismiss(
33+
state = dismissState,
34+
background = {
35+
val color = when (dismissState.dismissDirection) {
36+
null -> Color.Transparent
37+
38+
else -> MainTheme.colors.tintColor
39+
}
40+
41+
Box {
42+
NoteView(color = color)
43+
if (dismissState.dismissDirection != null){
44+
Icon(
45+
painter = painterResource(
46+
id = when (dismissState.dismissDirection){
47+
DismissDirection.StartToEnd -> starDrawable
48+
else -> R.drawable.ic_delete
49+
}
50+
),
51+
contentDescription = null,
52+
tint = MainTheme.colors.primaryBackground,
53+
modifier = Modifier
54+
.let {
55+
if (dismissState.dismissDirection == DismissDirection.StartToEnd){
56+
it.align(Alignment.CenterStart)
57+
} else{
58+
it.align(Alignment.CenterEnd)
59+
}
60+
}
61+
.padding(horizontal = 24.dp)
62+
.size(42.dp)
63+
)
64+
}
65+
}
66+
},
67+
dismissContent = {
68+
NoteView(
69+
title = note.title,
70+
content = note.content,
71+
timestamp = note.timestamp,
72+
onClick = {
73+
navController.navigate(
74+
Screen.AddEditNote.route + "?id=${note.id}"
75+
)
76+
}
77+
)
78+
}
79+
)
80+
}

0 commit comments

Comments
 (0)