Skip to content

Commit 3ebb555

Browse files
committed
- adds reset logic
- updates widgets size - adds unit test for ReadingChallengeWidgetRepository resolveState and recalculateStreakIfNeeded function - code fixes
1 parent 002d6e6 commit 3ebb555

File tree

8 files changed

+363
-16
lines changed

8 files changed

+363
-16
lines changed

app/src/main/java/org/wikipedia/settings/Prefs.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -900,4 +900,8 @@ object Prefs {
900900
var hasReadToday
901901
get() = PrefsIoUtil.getBoolean(R.string.preference_key_has_read_today, false)
902902
set(value) = PrefsIoUtil.setBoolean(R.string.preference_key_has_read_today, value)
903+
904+
var lastReadDate: String
905+
get() = PrefsIoUtil.getString(R.string.preference_key_last_read_date, "").orEmpty()
906+
set(value) = PrefsIoUtil.setString(R.string.preference_key_last_read_date, value)
903907
}

app/src/main/java/org/wikipedia/widgets/readingchallenge/ReadingChallengeWidgetRepository.kt

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,25 @@ import org.wikipedia.settings.Prefs
1111
import java.time.LocalDate
1212

1313
class ReadingChallengeWidgetRepository(private val context: Context) {
14-
private val START_DATE = LocalDate.of(2026, 3, 1)
14+
private val START_DATE = LocalDate.of(2026, 5, 1)
1515
private val END_DATE = LocalDate.of(2026, 5, 31)
1616
private val REMOVE_DATE = LocalDate.of(2026, 7, 10)
1717

1818
fun observeState(): Flow<ReadingChallengeState> {
1919
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
2020
return callbackFlow {
21-
fun emit() = trySend(resolveState(
22-
ReadingChallengeUserData(
23-
currentDate = LocalDate.now(),
24-
isEnrolled = Prefs.isEnrolled,
25-
currentStreak = Prefs.currentStreak,
26-
hasReadToday = Prefs.hasReadToday
27-
)
28-
))
21+
fun emit() {
22+
val currentDate = LocalDate.now()
23+
recalculateStreakIfNeeded(currentDate)
24+
trySend(resolveState(
25+
ReadingChallengeUserData(
26+
currentDate = currentDate,
27+
isEnrolled = Prefs.isEnrolled,
28+
currentStreak = Prefs.currentStreak,
29+
hasReadToday = Prefs.hasReadToday
30+
)
31+
))
32+
}
2933

3034
val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, _ -> emit() }
3135
prefs.registerOnSharedPreferenceChangeListener(listener)
@@ -79,4 +83,17 @@ class ReadingChallengeWidgetRepository(private val context: Context) {
7983
ReadingChallengeState.StreakOngoingNeedsReading(userData.currentStreak)
8084
}
8185
}
86+
87+
fun recalculateStreakIfNeeded(currentDate: LocalDate) {
88+
val lastReadDateStr = Prefs.lastReadDate
89+
if (lastReadDateStr.isNotEmpty()) {
90+
val lastReadDate = LocalDate.parse(lastReadDateStr)
91+
val daysBetween = java.time.temporal.ChronoUnit.DAYS.between(lastReadDate,
92+
currentDate)
93+
if (daysBetween > 1) {
94+
Prefs.hasReadToday = false
95+
Prefs.currentStreak = 0
96+
}
97+
}
98+
}
8299
}

app/src/main/java/org/wikipedia/widgets/readingchallenge/largewidget/ReadingChallengeLargeWidget.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import org.wikipedia.widgets.readingchallenge.ReadingChallengeWidgetRepository
1414

1515
class ReadingChallengeLargeWidget : GlanceAppWidget() {
1616

17-
override val sizeMode: SizeMode = SizeMode.Exact
17+
override val sizeMode: SizeMode = SizeMode.Single
1818

1919
override suspend fun provideGlance(
2020
context: Context,

app/src/main/java/org/wikipedia/widgets/readingchallenge/smallwidget/ReadingChallengeSmallWidget.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import org.wikipedia.widgets.readingchallenge.ReadingChallengeWidgetRepository
1414

1515
class ReadingChallengeSmallWidget : GlanceAppWidget() {
1616

17-
override val sizeMode: SizeMode = SizeMode.Exact
17+
override val sizeMode: SizeMode = SizeMode.Single
1818

1919
override suspend fun provideGlance(
2020
context: Context,

app/src/main/res/values/preference_keys.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,4 +213,5 @@
213213
<string name="preference_key_streak">streak</string>
214214
<string name="preference_key_is_enrolled">isEnrolled</string>
215215
<string name="preference_key_has_read_today">hasReadToday</string>
216+
<string name="preference_key_last_read_date">lastReadDate</string>
216217
</resources>

app/src/main/res/xml/reading_challenge_small_widget_info.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
android:initialLayout="@layout/reading_challenge_widget_loading"
66
android:minWidth="110dp"
77
android:minHeight="110dp"
8+
android:maxResizeHeight="110dp"
9+
android:maxResizeWidth="110dp"
810
android:resizeMode="none"
9-
android:targetCellHeight="1"
11+
android:targetCellHeight="2"
1012
android:targetCellWidth="2"
1113
android:updatePeriodMillis="86400000"
1214
android:widgetCategory="home_screen"

app/src/main/res/xml/reading_challenge_widget_info.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
44
xmlns:tools="http://schemas.android.com/tools"
55
android:initialLayout="@layout/reading_challenge_widget_loading"
6-
android:minWidth="200dp"
7-
android:minHeight="130dp"
6+
android:minWidth="320dp"
7+
android:minHeight="132dp"
88
android:resizeMode="none"
9-
android:targetCellHeight="2"
10-
android:targetCellWidth="4"
9+
android:targetCellWidth="5"
10+
android:targetCellHeight="1"
1111
android:updatePeriodMillis="86400000"
1212
android:widgetCategory="home_screen"
1313
tools:targetApi="31">

0 commit comments

Comments
 (0)