Skip to content

Commit 4b32169

Browse files
authored
Merge pull request #151 from YAPP-Github/release/1.1.0
[release] v10 (1.1.0)
2 parents a36a1cd + ec9e8be commit 4b32169

38 files changed

Lines changed: 995 additions & 484 deletions

File tree

build-logic/src/main/java/com/neki/android/buildlogic/const/BuildConst.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import org.gradle.api.JavaVersion
55
object BuildConst {
66
const val APPLICATION_ID = "com.neki.android"
77

8-
const val VERSION_CODE = 8
9-
const val VERSION_NAME = "1.0.0"
8+
const val VERSION_CODE = 10
9+
const val VERSION_NAME = "1.1.0"
1010

1111
const val MIN_SDK = 29
1212
const val TARGET_SDK = 36

core/data-api/src/main/java/com/neki/android/core/dataapi/repository/PhotoRepository.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.neki.android.core.dataapi.repository
33
import androidx.paging.PagingData
44
import com.neki.android.core.model.AlbumPreview
55
import com.neki.android.core.model.Photo
6+
import com.neki.android.core.model.PhotoPage
67
import com.neki.android.core.model.SortOrder
78
import kotlinx.coroutines.flow.Flow
89

@@ -24,11 +25,18 @@ interface PhotoRepository {
2425

2526
suspend fun updateFavorite(photoId: Long, favorite: Boolean): Result<Unit>
2627

27-
suspend fun getFavoritePhotos(
28+
suspend fun getPhotosPage(
29+
folderId: Long? = null,
2830
page: Int = 0,
2931
size: Int = 20,
3032
sortOrder: SortOrder = SortOrder.DESC,
31-
): Result<List<Photo>>
33+
): Result<PhotoPage>
34+
35+
suspend fun getFavoritePhotosPage(
36+
page: Int = 0,
37+
size: Int = 20,
38+
sortOrder: SortOrder = SortOrder.DESC,
39+
): Result<PhotoPage>
3240

3341
suspend fun getFavoriteSummary(): Result<AlbumPreview>
3442

core/data/src/main/java/com/neki/android/core/data/repository/impl/PhotoRepositoryImpl.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.neki.android.core.data.util.runSuspendCatching
1212
import com.neki.android.core.dataapi.repository.PhotoRepository
1313
import com.neki.android.core.model.AlbumPreview
1414
import com.neki.android.core.model.Photo
15+
import com.neki.android.core.model.PhotoPage
1516
import com.neki.android.core.model.SortOrder
1617
import kotlinx.coroutines.flow.Flow
1718
import javax.inject.Inject
@@ -64,12 +65,23 @@ class PhotoRepositoryImpl @Inject constructor(
6465
photoService.updateFavorite(photoId, favorite)
6566
}
6667

67-
override suspend fun getFavoritePhotos(
68+
override suspend fun getPhotosPage(
69+
folderId: Long?,
6870
page: Int,
6971
size: Int,
7072
sortOrder: SortOrder,
71-
): Result<List<Photo>> = runSuspendCatching {
72-
photoService.getFavoritePhotos(page, size, sortOrder.name).data.toModels()
73+
): Result<PhotoPage> = runSuspendCatching {
74+
val response = photoService.getPhotos(folderId, page, size, sortOrder.name).data
75+
PhotoPage(photos = response.toModels(), hasNext = response.hasNext)
76+
}
77+
78+
override suspend fun getFavoritePhotosPage(
79+
page: Int,
80+
size: Int,
81+
sortOrder: SortOrder,
82+
): Result<PhotoPage> = runSuspendCatching {
83+
val response = photoService.getFavoritePhotos(page, size, sortOrder.name).data
84+
PhotoPage(photos = response.toModels(), hasNext = response.hasNext)
7385
}
7486

7587
override suspend fun getFavoriteSummary(): Result<AlbumPreview> = runSuspendCatching {

core/designsystem/src/main/java/com/neki/android/core/designsystem/ui/theme/Theme.kt

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ fun ProvideTypographyAndColor(
2121
CompositionLocalProvider(
2222
LocalTypography provides typography,
2323
LocalColorScheme provides colors,
24+
LocalDensity provides Density(
25+
density = LocalDensity.current.density,
26+
fontScale = 1f,
27+
),
2428
content = content,
2529
)
2630
}
@@ -37,23 +41,16 @@ fun NekiTheme(
3741
}
3842
}
3943

40-
CompositionLocalProvider(
41-
LocalDensity provides Density(
42-
density = LocalDensity.current.density,
43-
fontScale = 1f,
44-
),
44+
ProvideTypographyAndColor(
45+
typography = defaultNekiTypography,
46+
colors = defaultNekiColors,
4547
) {
46-
ProvideTypographyAndColor(
47-
typography = defaultNekiTypography,
48-
colors = defaultNekiColors,
49-
) {
50-
MaterialTheme(
51-
colorScheme = lightColorScheme(
52-
background = NekiTheme.colorScheme.white,
53-
),
54-
content = content,
55-
)
56-
}
48+
MaterialTheme(
49+
colorScheme = lightColorScheme(
50+
background = NekiTheme.colorScheme.white,
51+
),
52+
content = content,
53+
)
5754
}
5855
}
5956

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.neki.android.core.model
2+
3+
data class PhotoPage(
4+
val photos: List<Photo>,
5+
val hasNext: Boolean,
6+
)

core/model/src/main/java/com/neki/android/core/model/SortOrder.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.neki.android.core.model
22

3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
36
enum class SortOrder {
47
ASC,
58
DESC,

detekt-config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
complexity:
22
LongMethod:
3-
threshold: 100
3+
threshold: 150
44
ignoreAnnotated: [ 'Composable' ]
55
CyclomaticComplexMethod:
66
threshold: 40

feature/archive/api/src/main/kotlin/com/neki/android/feature/archive/api/ArchiveNavKey.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.neki.android.feature.archive.api
22

33
import androidx.navigation3.runtime.NavKey
44
import com.neki.android.core.model.Photo
5+
import com.neki.android.core.model.SortOrder
56
import com.neki.android.core.navigation.main.MainNavigator
67
import kotlinx.serialization.Serializable
78

@@ -24,7 +25,14 @@ sealed interface ArchiveNavKey : NavKey {
2425
) : ArchiveNavKey
2526

2627
@Serializable
27-
data class PhotoDetail(val photo: Photo) : ArchiveNavKey
28+
data class PhotoDetail(
29+
val photos: List<Photo>,
30+
val initialIndex: Int,
31+
val hasNext: Boolean = false,
32+
val folderId: Long? = null,
33+
val sortOrder: SortOrder = SortOrder.DESC,
34+
val isFavoriteOnly: Boolean = false,
35+
) : ArchiveNavKey
2836
}
2937

3038
fun MainNavigator.navigateToArchive() {
@@ -43,6 +51,8 @@ fun MainNavigator.navigateToAlbumDetail(id: Long, title: String = "", isFavorite
4351
navigate(ArchiveNavKey.AlbumDetail(isFavorite, title, id))
4452
}
4553

46-
fun MainNavigator.navigateToPhotoDetail(photo: Photo) {
47-
navigate(ArchiveNavKey.PhotoDetail(photo))
54+
fun MainNavigator.navigateToPhotoDetail(
55+
photoDetail: ArchiveNavKey.PhotoDetail,
56+
) {
57+
navigate(photoDetail)
4858
}

feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/album_detail/AlbumDetailContract.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ sealed interface AlbumDetailIntent {
4545
data object DismissOptionPopup : AlbumDetailIntent
4646

4747
// Photo Intent
48-
data class ClickPhotoItem(val photo: Photo) : AlbumDetailIntent
48+
data class ClickPhotoItem(val photo: Photo, val index: Int) : AlbumDetailIntent
4949

5050
// ActionBar Intent
5151
data object ClickDownloadIcon : AlbumDetailIntent
@@ -78,7 +78,7 @@ sealed interface AlbumDetailIntent {
7878

7979
sealed interface AlbumDetailSideEffect {
8080
data object NavigateBack : AlbumDetailSideEffect
81-
data class NavigateToPhotoDetail(val photo: Photo) : AlbumDetailSideEffect
81+
data class NavigateToPhotoDetail(val photo: Photo, val index: Int) : AlbumDetailSideEffect
8282
data class ShowToastMessage(val message: String) : AlbumDetailSideEffect
8383
data class DownloadImages(val imageUrls: List<String>) : AlbumDetailSideEffect
8484
data object OpenGallery : AlbumDetailSideEffect

feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/album_detail/AlbumDetailScreen.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ import androidx.paging.compose.collectAsLazyPagingItems
3535
import androidx.paging.compose.itemKey
3636
import com.neki.android.core.designsystem.ui.theme.NekiTheme
3737
import com.neki.android.core.model.Photo
38+
import com.neki.android.core.model.SortOrder
3839
import com.neki.android.core.ui.component.DoubleButtonOptionBottomSheet
40+
import com.neki.android.feature.archive.api.ArchiveNavKey
3941
import com.neki.android.core.ui.component.LoadingDialog
4042
import com.neki.android.core.ui.compose.collectWithLifecycle
4143
import com.neki.android.core.ui.toast.NekiToast
@@ -61,7 +63,7 @@ import timber.log.Timber
6163
internal fun AlbumDetailRoute(
6264
viewModel: AlbumDetailViewModel,
6365
navigateBack: () -> Unit,
64-
navigateToPhotoDetail: (Photo) -> Unit,
66+
navigateToPhotoDetail: (ArchiveNavKey.PhotoDetail) -> Unit,
6567
) {
6668
val uiState by viewModel.store.uiState.collectAsStateWithLifecycle()
6769
val pagingItems = viewModel.photoPagingData.collectAsLazyPagingItems()
@@ -78,7 +80,18 @@ internal fun AlbumDetailRoute(
7880
viewModel.store.sideEffects.collectWithLifecycle { sideEffect ->
7981
when (sideEffect) {
8082
AlbumDetailSideEffect.NavigateBack -> navigateBack()
81-
is AlbumDetailSideEffect.NavigateToPhotoDetail -> navigateToPhotoDetail(sideEffect.photo)
83+
is AlbumDetailSideEffect.NavigateToPhotoDetail -> {
84+
navigateToPhotoDetail(
85+
ArchiveNavKey.PhotoDetail(
86+
photos = pagingItems.itemSnapshotList.items,
87+
initialIndex = sideEffect.index,
88+
hasNext = !pagingItems.loadState.append.endOfPaginationReached,
89+
folderId = if (uiState.isFavoriteAlbum) null else viewModel.albumId,
90+
sortOrder = SortOrder.DESC,
91+
isFavoriteOnly = uiState.isFavoriteAlbum,
92+
),
93+
)
94+
}
8295
is AlbumDetailSideEffect.ShowToastMessage -> {
8396
nekiToast.showToast(text = sideEffect.message)
8497
}
@@ -251,8 +264,8 @@ internal fun AlbumDetailContent(
251264
photo = photo,
252265
isSelected = isSelected,
253266
isSelectMode = uiState.selectMode == SelectMode.SELECTING,
254-
onClickItem = { onIntent(AlbumDetailIntent.ClickPhotoItem(photo)) },
255-
onClickSelect = { onIntent(AlbumDetailIntent.ClickPhotoItem(photo)) },
267+
onClickItem = { onIntent(AlbumDetailIntent.ClickPhotoItem(photo, index)) },
268+
onClickSelect = { onIntent(AlbumDetailIntent.ClickPhotoItem(photo, index)) },
256269
onClickFavorite = { onIntent(AlbumDetailIntent.ClickFavoriteIcon(photo)) },
257270
)
258271
}

0 commit comments

Comments
 (0)