Skip to content

Commit 7488a51

Browse files
committed
Fix reading bookmarks in ayah bookmark dialog
Reading bookmarks may be page bookmarks or ayah bookmarks. Previously, the dialog assumed ayah bookmarks only. This patch fixes this.
1 parent 9c32513 commit 7488a51

6 files changed

Lines changed: 47 additions & 13 deletions

File tree

app/src/main/java/com/quran/labs/androidquran/data/QuranDisplayData.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ class QuranDisplayData @Inject constructor(private val quranInfo: QuranInfo): Qu
9898
return getSuraAyahString(context, sura, ayah, R.string.sura_ayah_notification_str)
9999
}
100100

101+
override fun getSuraPageString(context: Context, page: Int): String {
102+
val suraName = getSuraNameFromPage(context, page, wantTitle = true)
103+
val pageText = context.getString(R.string.quran_page) + ' ' + QuranUtils.getLocalizedNumber(page)
104+
return if (suraName.isEmpty()) pageText else "$suraName ($pageText)"
105+
}
106+
101107
fun getSuraAyahString(context: Context, sura: Int, ayah: Int, @StringRes resource: Int): String {
102108
val suraName = getSuraName(context, sura, wantPrefix = false, wantTranslation = false)
103109
return context.getString(resource, suraName, ayah)
@@ -179,7 +185,7 @@ class QuranDisplayData @Inject constructor(private val quranInfo: QuranInfo): Qu
179185
}
180186

181187
// do not remove the nullable return type
182-
fun getSuraNameString(context: Context, page: Int): String? {
188+
fun getSuraNameString(context: Context, page: Int): String {
183189
return context.getString(R.string.quran_sura_title, getSuraNameFromPage(context, page))
184190
}
185191

common/pages/src/main/java/com/quran/page/common/data/QuranNaming.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ interface QuranNaming {
66
fun getSuraName(context: Context, sura: Int, wantPrefix: Boolean = true): String
77
fun getSuraNameWithNumber(context: Context, sura: Int, wantPrefix: Boolean): String
88
fun getSuraAyahString(context: Context, sura: Int, ayah: Int): String
9+
fun getSuraPageString(context: Context, page: Int): String
910
}

feature/ayahbookmark/src/main/kotlin/com/quran/mobile/feature/ayahbookmark/presenter/AyahBookmarkPresenter.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.quran.mobile.feature.ayahbookmark.presenter
22

3+
import android.content.Context
34
import androidx.compose.runtime.Composable
45
import androidx.compose.runtime.LaunchedEffect
56
import androidx.compose.runtime.collectAsState
@@ -11,6 +12,7 @@ import com.quran.data.dao.ReadingBookmarksDao
1112
import com.quran.data.di.AppCoroutineScope
1213
import com.quran.data.model.SuraAyah
1314
import com.quran.data.model.bookmark.AyahReadingBookmark
15+
import com.quran.data.model.bookmark.PageReadingBookmark
1416
import com.quran.data.model.bookmark.ReadingBookmark
1517
import com.quran.mobile.feature.ayahbookmark.state.AyahBookmarkCollectionCreationState
1618
import com.quran.mobile.feature.ayahbookmark.state.AyahBookmarkCollectionItem
@@ -189,14 +191,15 @@ class AyahBookmarkPresenter(
189191
return AyahBookmarkState(
190192
ayah = currentAyah,
191193
isReadingBookmarkEnabled = isReadingBookmarkEnabledState.value,
192-
currentReadingBookmark = readingBookmark.value.asSuraAyah(),
194+
currentReadingBookmark = readingBookmark.value,
193195
collections = collections,
194196
collectionCreation = collectionCreationState.value,
195197
showLastPlaceWarning = showLastPlaceWarningState.value,
196198
isBookmarkRemoved = isBookmarkRemovedState.value,
197199
isDismissed = isDismissed.value,
198200
showRemoveBookmarkButton = hasPersistedBookmark,
199201
suraAyahNameResolver = { context, ayah -> quranNaming.getSuraAyahString(context, ayah.sura, ayah.ayah) },
202+
readingBookmarkNameResolver = { context, bookmark -> quranNaming.getReadingBookmarkString(context, bookmark) },
200203
eventSink = eventSink
201204
)
202205
}
@@ -209,6 +212,13 @@ class AyahBookmarkPresenter(
209212
}
210213
}
211214

215+
private fun QuranNaming.getReadingBookmarkString(context: Context, bookmark: ReadingBookmark): String {
216+
return when (bookmark) {
217+
is AyahReadingBookmark -> getSuraAyahString(context, bookmark.sura, bookmark.ayah)
218+
is PageReadingBookmark -> getSuraPageString(context, bookmark.page)
219+
}
220+
}
221+
212222
companion object {
213223
val undoDefaultTimeout = 4.seconds
214224
val remainingItemWarningTimeout = 3.seconds

feature/ayahbookmark/src/main/kotlin/com/quran/mobile/feature/ayahbookmark/state/AyahBookmarkState.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,23 @@ package com.quran.mobile.feature.ayahbookmark.state
33
import android.content.Context
44
import androidx.compose.runtime.Immutable
55
import com.quran.data.model.SuraAyah
6+
import com.quran.data.model.bookmark.ReadingBookmark
67
import kotlinx.collections.immutable.ImmutableList
78
import kotlinx.collections.immutable.persistentListOf
89

910
@Immutable
1011
data class AyahBookmarkState(
1112
val ayah: SuraAyah,
1213
val isReadingBookmarkEnabled: Boolean,
13-
val currentReadingBookmark: SuraAyah? = null,
14+
val currentReadingBookmark: ReadingBookmark? = null,
1415
val collections: ImmutableList<AyahBookmarkCollectionItem> = persistentListOf(),
1516
val collectionCreation: AyahBookmarkCollectionCreationState = AyahBookmarkCollectionCreationState.Inactive,
1617
val showLastPlaceWarning: Boolean = false,
1718
val showRemoveBookmarkButton: Boolean = true,
1819
val isBookmarkRemoved: Boolean = false,
1920
val isDismissed: Boolean = false,
2021
val suraAyahNameResolver: (Context, SuraAyah) -> String,
22+
val readingBookmarkNameResolver: (Context, ReadingBookmark) -> String,
2123
val eventSink: (AyahBookmarkEvent) -> Unit = {}
2224
)
2325

feature/ayahbookmark/src/main/kotlin/com/quran/mobile/feature/ayahbookmark/ui/AyahBookmark.kt

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ import androidx.compose.ui.Modifier
1313
import androidx.compose.ui.tooling.preview.Preview
1414
import androidx.compose.ui.unit.dp
1515
import com.quran.data.model.SuraAyah
16+
import com.quran.data.model.bookmark.AyahReadingBookmark
17+
import com.quran.data.model.bookmark.PageReadingBookmark
18+
import com.quran.data.model.bookmark.ReadingBookmark
1619
import com.quran.labs.androidquran.common.ui.core.QuranTheme
1720
import com.quran.mobile.feature.ayahbookmark.state.AyahBookmarkCollectionCreationState
1821
import com.quran.mobile.feature.ayahbookmark.state.AyahBookmarkCollectionItem
@@ -50,6 +53,13 @@ private val previewSuraAyahNameResolver: (Context, SuraAyah) -> String = { _, su
5053
"An-Nisāʾ ${suraAyah.ayah}"
5154
}
5255

56+
private val previewReadingBookmarkNameResolver: (Context, ReadingBookmark) -> String = { _, bookmark ->
57+
when (bookmark) {
58+
is AyahReadingBookmark -> "An-Nisāʾ ${bookmark.ayah}"
59+
is PageReadingBookmark -> "An-Nisāʾ (Page ${bookmark.page})"
60+
}
61+
}
62+
5363
private val previewCollections = persistentListOf(
5464
AyahBookmarkCollectionItem(id = "family", name = "Family", countLabel = 12, isChecked = true),
5565
AyahBookmarkCollectionItem(id = "favorites", name = "Favorites", countLabel = 34, isChecked = false),
@@ -79,9 +89,10 @@ private fun AyahBookmarkDefaultPreview() {
7989
state = AyahBookmarkState(
8090
ayah = SuraAyah(4, 1),
8191
isReadingBookmarkEnabled = true,
82-
currentReadingBookmark = SuraAyah(4, 34),
92+
currentReadingBookmark = AyahReadingBookmark(sura = 4, ayah = 34, timestamp = 0),
8393
collections = previewCollections,
84-
suraAyahNameResolver = previewSuraAyahNameResolver
94+
suraAyahNameResolver = previewSuraAyahNameResolver,
95+
readingBookmarkNameResolver = previewReadingBookmarkNameResolver
8596
)
8697
)
8798
}
@@ -93,10 +104,11 @@ private fun AyahBookmarkWarningPreview() {
93104
state = AyahBookmarkState(
94105
ayah = SuraAyah(4, 1),
95106
isReadingBookmarkEnabled = false,
96-
currentReadingBookmark = SuraAyah(4, 34),
107+
currentReadingBookmark = PageReadingBookmark(page = 83, timestamp = 0),
97108
collections = previewCollections.replacingAt(0, previewCollections[0].copy(isChecked = false)),
98109
showLastPlaceWarning = true,
99-
suraAyahNameResolver = previewSuraAyahNameResolver
110+
suraAyahNameResolver = previewSuraAyahNameResolver,
111+
readingBookmarkNameResolver = previewReadingBookmarkNameResolver
100112
)
101113
)
102114
}
@@ -110,7 +122,8 @@ private fun AyahBookmarkCreatingCollectionPreview() {
110122
isReadingBookmarkEnabled = true,
111123
collections = previewCollections,
112124
collectionCreation = AyahBookmarkCollectionCreationState.Active(name = "Qiyam"),
113-
suraAyahNameResolver = previewSuraAyahNameResolver
125+
suraAyahNameResolver = previewSuraAyahNameResolver,
126+
readingBookmarkNameResolver = previewReadingBookmarkNameResolver
114127
)
115128
)
116129
}
@@ -124,7 +137,8 @@ private fun AyahBookmarkCreatingCollectionSubmittingPreview() {
124137
isReadingBookmarkEnabled = true,
125138
collections = previewCollections,
126139
collectionCreation = AyahBookmarkCollectionCreationState.Active(name = "Qiyam", isSubmitting = true),
127-
suraAyahNameResolver = previewSuraAyahNameResolver
140+
suraAyahNameResolver = previewSuraAyahNameResolver,
141+
readingBookmarkNameResolver = previewReadingBookmarkNameResolver
128142
)
129143
)
130144
}
@@ -138,7 +152,8 @@ private fun AyahBookmarkRemovedPreview() {
138152
isReadingBookmarkEnabled = false,
139153
collections = previewCollections,
140154
isBookmarkRemoved = true,
141-
suraAyahNameResolver = previewSuraAyahNameResolver
155+
suraAyahNameResolver = previewSuraAyahNameResolver,
156+
readingBookmarkNameResolver = previewReadingBookmarkNameResolver
142157
)
143158
)
144159
}

feature/ayahbookmark/src/main/kotlin/com/quran/mobile/feature/ayahbookmark/ui/AyahBookmarkSheet.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ internal fun AyahBookmarkSheet(
3636
val eventSink = state.eventSink
3737

3838
val context = LocalContext.current
39-
val suraAyahName = remember(state.ayah) {
39+
val suraAyahName = remember(context, state.ayah) {
4040
state.suraAyahNameResolver(context, state.ayah)
4141
}
42-
val currentReadingBookmarkName = remember(state.currentReadingBookmark) {
43-
state.currentReadingBookmark?.let { state.suraAyahNameResolver(context, it) }
42+
val currentReadingBookmarkName = remember(context, state.currentReadingBookmark) {
43+
state.currentReadingBookmark?.let { state.readingBookmarkNameResolver(context, it) }
4444
}
4545

4646
Column(

0 commit comments

Comments
 (0)