Skip to content

Commit 20d5805

Browse files
Merge pull request #954 from StepicOrg/release/1.211
Release/1.211
2 parents d1c1c96 + 2edf664 commit 20d5805

File tree

57 files changed

+572
-110
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+572
-110
lines changed

app/src/main/java/org/stepic/droid/storage/dao/CourseDaoImpl.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ constructor(
6161
isFavorite = cursor.getBoolean(DbStructureCourse.Columns.IS_FAVORITE),
6262
isProctored = cursor.getBoolean(DbStructureCourse.Columns.IS_PROCTORED),
6363
isInWishlist = cursor.getBoolean(DbStructureCourse.Columns.IS_IN_WISHLIST),
64+
isEnabled = cursor.getBoolean(DbStructureCourse.Columns.IS_ENABLED),
6465
certificateDistinctionThreshold = cursor.getLong(DbStructureCourse.Columns.CERTIFICATE_DISTINCTION_THRESHOLD),
6566
certificateRegularThreshold = cursor.getLong(DbStructureCourse.Columns.CERTIFICATE_REGULAR_THRESHOLD),
6667
certificateLink = cursor.getString(DbStructureCourse.Columns.CERTIFICATE_LINK),
@@ -132,6 +133,7 @@ constructor(
132133
values.put(DbStructureCourse.Columns.IS_FAVORITE, course.isFavorite)
133134
values.put(DbStructureCourse.Columns.IS_PROCTORED, course.isProctored)
134135
values.put(DbStructureCourse.Columns.IS_IN_WISHLIST, course.isInWishlist)
136+
values.put(DbStructureCourse.Columns.IS_ENABLED, course.isEnabled)
135137
values.put(DbStructureCourse.Columns.CERTIFICATE_DISTINCTION_THRESHOLD, course.certificateDistinctionThreshold)
136138
values.put(DbStructureCourse.Columns.CERTIFICATE_REGULAR_THRESHOLD, course.certificateRegularThreshold)
137139
values.put(DbStructureCourse.Columns.CERTIFICATE_LINK, course.certificateLink)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.stepic.droid.storage.migration
2+
3+
import androidx.room.migration.Migration
4+
import androidx.sqlite.db.SupportSQLiteDatabase
5+
import org.stepic.droid.storage.structure.DbStructureCourse
6+
7+
object MigrationFrom80To81 : Migration(80, 81) {
8+
override fun migrate(db: SupportSQLiteDatabase) {
9+
db.execSQL("ALTER TABLE ${DbStructureCourse.TABLE_NAME} ADD COLUMN ${DbStructureCourse.Columns.IS_ENABLED} INTEGER")
10+
}
11+
}

app/src/main/java/org/stepic/droid/storage/migration/Migrations.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ object Migrations {
211211
MigrationFrom76To77,
212212
MigrationFrom77To78,
213213
MigrationFrom78To79,
214-
MigrationFrom79To80
214+
MigrationFrom79To80,
215+
MigrationFrom80To81
215216
)
216217
}

app/src/main/java/org/stepic/droid/storage/structure/DbStructureCourse.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ object DbStructureCourse {
4646
const val IS_ARCHIVED = "is_archived"
4747
const val IS_FAVORITE = "is_favorite"
4848
const val IS_IN_WISHLIST = "is_in_wishlist"
49+
const val IS_ENABLED = "is_enabled"
4950

5051
const val CERTIFICATE_DISTINCTION_THRESHOLD = "certificate_distinction_threshold"
5152
const val CERTIFICATE_REGULAR_THRESHOLD = "certificate_regular_threshold"

app/src/main/java/org/stepic/droid/util/CourseExtensions.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ import org.stepik.android.model.Course
55
val Course.canContinue: Boolean
66
get() = totalUnits != 0L
77
&& scheduleType != Course.SCHEDULE_TYPE_UPCOMMING
8-
&& scheduleType != Course.SCHEDULE_TYPE_ENDED
8+
&& scheduleType != Course.SCHEDULE_TYPE_ENDED
9+
&& (isEnabled || actions?.editCourse == null)

app/src/main/java/org/stepic/droid/util/DateTimeHelper.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ object DateTimeHelper {
1414

1515
const val DISPLAY_MONTH_YEAR_NOMINAL_PATTERN = "LLLL yyyy"
1616
const val DISPLAY_MONTH_YEAR_GENITIVE_PATTERN = "MMMM yyyy"
17+
const val DISPLAY_DAY_MONTH_YEAR_GENITIVE_PATTERN = "dd MMMM yyyy"
1718

1819
const val ISO_PATTERN = "yyyy-MM-dd'T'HH:mm:ssZ"
1920
private val millisecondsInHour = 1000 * 60 * 60

app/src/main/java/org/stepik/android/cache/base/database/AppDatabase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ import org.stepik.android.domain.wishlist.model.WishlistEntry
6868
)
6969
abstract class AppDatabase : RoomDatabase() {
7070
companion object {
71-
const val VERSION = 80
71+
const val VERSION = 81
7272
const val NAME = "stepic_database.db"
7373
}
7474

app/src/main/java/org/stepik/android/domain/course/interactor/CourseInteractor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ constructor(
120120
?.let { CoursePurchaseDataResult.Result(it) }
121121
?: CoursePurchaseDataResult.Empty
122122

123-
is EnrollmentState.NotEnrolledUnavailable ->
123+
is EnrollmentState.NotEnrolledUnavailableIAP ->
124124
CoursePurchaseDataResult.NotAvailable
125125

126126
else ->

app/src/main/java/org/stepik/android/domain/course/interactor/CourseStatsInteractor.kt

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ constructor(
114114
course.enrollment > 0 ->
115115
profileRepository.getProfile().map { profile -> course.id to resolveEnrolledEnrollmentState(course, profile.id) }
116116

117+
course.scheduleType == Course.SCHEDULE_TYPE_ENDED ->
118+
Single.just(course.id to EnrollmentState.NotEnrolledEnded)
119+
117120
!course.isPaid ->
118121
Single.just(course.id to EnrollmentState.NotEnrolledFree)
119122

@@ -122,7 +125,11 @@ constructor(
122125
.getCoursePaymentsByCourseId(course.id, coursePaymentStatus = CoursePayment.Status.SUCCESS, sourceType = sourceType)
123126
.flatMap { payments ->
124127
if (payments.isEmpty()) {
125-
Single.just(course.id to EnrollmentState.NotEnrolledWeb)
128+
if (course.actions?.courseBuyAction?.enabled == true) {
129+
Single.just(course.id to EnrollmentState.NotEnrolledWeb) // web
130+
} else {
131+
Single.just(course.id to EnrollmentState.NotEnrolledCantBeBought)
132+
}
126133
} else {
127134
Single.just(course.id to EnrollmentState.NotEnrolledFree)
128135
}
@@ -193,6 +200,9 @@ constructor(
193200
!course.isPaid ->
194201
Single.just(EnrollmentState.NotEnrolledFree)
195202

203+
course.scheduleType == Course.SCHEDULE_TYPE_ENDED ->
204+
Single.just(EnrollmentState.NotEnrolledEnded)
205+
196206
course.isPaid -> {
197207
val (standardLightSku, promoLightSku) = course.let {
198208
val currentMobileTier = mobileTiersByCourseId[it.id]
@@ -203,7 +213,11 @@ constructor(
203213
.getCoursePaymentsByCourseId(course.id, coursePaymentStatus = CoursePayment.Status.SUCCESS, sourceType = sourceType)
204214
.flatMap { payments ->
205215
if (payments.isEmpty()) {
206-
Single.just(resolvePaidEnrollmentState(standardLightSku, promoLightSku))
216+
if (course.actions?.courseBuyAction?.enabled == true) {
217+
Single.just(resolvePaidEnrollmentState(standardLightSku, promoLightSku))
218+
} else {
219+
Single.just(EnrollmentState.NotEnrolledCantBeBought)
220+
}
207221
} else {
208222
Single.just(EnrollmentState.NotEnrolledFree)
209223
}
@@ -242,7 +256,7 @@ constructor(
242256
* through the application
243257
*/
244258
if (currentFlow == CoursePurchaseFlow.IAP) {
245-
EnrollmentState.NotEnrolledUnavailable
259+
EnrollmentState.NotEnrolledUnavailableIAP
246260
} else {
247261
EnrollmentState.NotEnrolledWeb
248262
}

app/src/main/java/org/stepik/android/domain/course/model/EnrollmentState.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,17 @@ sealed class EnrollmentState : Parcelable {
1818
@Parcelize
1919
object NotEnrolledWeb : EnrollmentState()
2020

21+
/**
22+
* Course cannot be purchased via IAP
23+
*/
2124
@Parcelize
22-
object NotEnrolledUnavailable : EnrollmentState()
25+
object NotEnrolledUnavailableIAP : EnrollmentState()
26+
27+
@Parcelize
28+
object NotEnrolledEnded : EnrollmentState()
29+
30+
@Parcelize
31+
object NotEnrolledCantBeBought : EnrollmentState()
2332

2433
@Parcelize
2534
object Pending : EnrollmentState()

0 commit comments

Comments
 (0)