Skip to content

Commit 4c7ef8d

Browse files
Feature/new navigation pager (#23)
* New navigation --------- Co-authored-by: Volodymyr Chekyrta <[email protected]>
1 parent f4957c2 commit 4c7ef8d

File tree

68 files changed

+1339
-1575
lines changed

Some content is hidden

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

68 files changed

+1339
-1575
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ dependencies {
7676

7777
kapt "androidx.room:room-compiler:$room_version"
7878

79-
implementation 'androidx.core:core-splashscreen:1.0.0'
79+
implementation 'androidx.core:core-splashscreen:1.0.1'
8080
testImplementation 'junit:junit:4.13.2'
8181

8282
androidTestImplementation 'androidx.test.ext:junit:1.1.3'

app/src/main/java/com/raccoongang/newedx/AppRouter.kt

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.raccoongang.newedx
22

33
import androidx.fragment.app.Fragment
44
import androidx.fragment.app.FragmentManager
5+
import androidx.fragment.app.FragmentTransaction
56
import com.raccoongang.auth.presentation.AuthRouter
67
import com.raccoongang.auth.presentation.restore.RestorePasswordFragment
78
import com.raccoongang.auth.presentation.signin.SignInFragment
@@ -21,7 +22,6 @@ import com.raccoongang.course.presentation.section.CourseSectionFragment
2122
import com.raccoongang.course.presentation.unit.container.CourseUnitContainerFragment
2223
import com.raccoongang.course.presentation.unit.video.VideoFullScreenFragment
2324
import com.raccoongang.course.presentation.unit.video.YoutubeVideoFullScreenFragment
24-
import com.raccoongang.course.presentation.units.CourseUnitsFragment
2525
import com.raccoongang.dashboard.presentation.DashboardRouter
2626
import com.raccoongang.discovery.presentation.DiscoveryRouter
2727
import com.raccoongang.discussion.domain.model.DiscussionComment
@@ -93,42 +93,44 @@ class AppRouter : AuthRouter, DiscoveryRouter, DashboardRouter, CourseRouter, Di
9393
//endregion
9494

9595
//region CourseRouter
96-
override fun navigateToCourseUnits(
96+
97+
override fun navigateToCourseSubsections(
9798
fm: FragmentManager,
9899
courseId: String,
99100
blockId: String,
100-
courseName: String,
101+
title: String,
101102
mode: CourseViewMode,
102103
) {
103104
replaceFragmentWithBackStack(
104105
fm,
105-
CourseUnitsFragment.newInstance(courseId, blockId, courseName, mode)
106+
CourseSectionFragment.newInstance(courseId, blockId, title, mode)
106107
)
107108
}
108109

109-
override fun navigateToCourseSubsections(
110+
override fun navigateToCourseContainer(
110111
fm: FragmentManager,
111-
courseId: String,
112112
blockId: String,
113-
title: String,
114-
mode: CourseViewMode,
113+
courseId: String,
114+
courseName: String,
115+
mode: CourseViewMode
115116
) {
116117
replaceFragmentWithBackStack(
117118
fm,
118-
CourseSectionFragment.newInstance(courseId, blockId, title, mode)
119+
CourseUnitContainerFragment.newInstance(blockId, courseId, courseName, mode)
119120
)
120121
}
121122

122-
override fun navigateToCourseContainer(
123+
override fun replaceCourseContainer(
123124
fm: FragmentManager,
124125
blockId: String,
125126
courseId: String,
126127
courseName: String,
127128
mode: CourseViewMode
128129
) {
129-
replaceFragmentWithBackStack(
130+
replaceFragment(
130131
fm,
131-
CourseUnitContainerFragment.newInstance(blockId, courseId, courseName, mode)
132+
CourseUnitContainerFragment.newInstance(blockId, courseId, courseName, mode),
133+
FragmentTransaction.TRANSIT_FRAGMENT_FADE
132134
)
133135
}
134136

@@ -259,8 +261,9 @@ class AppRouter : AuthRouter, DiscoveryRouter, DashboardRouter, CourseRouter, Di
259261
.commit()
260262
}
261263

262-
private fun replaceFragment(fm: FragmentManager, fragment: Fragment) {
264+
private fun replaceFragment(fm: FragmentManager, fragment: Fragment, transaction: Int = FragmentTransaction.TRANSIT_NONE) {
263265
fm.beginTransaction()
266+
.setTransition(transaction)
264267
.replace(R.id.container, fragment, fragment.javaClass.simpleName)
265268
.commit()
266269
}

app/src/main/java/com/raccoongang/newedx/di/ScreenModule.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import com.raccoongang.course.presentation.section.CourseSectionViewModel
1919
import com.raccoongang.course.presentation.unit.container.CourseUnitContainerViewModel
2020
import com.raccoongang.course.presentation.unit.video.VideoUnitViewModel
2121
import com.raccoongang.course.presentation.unit.video.VideoViewModel
22-
import com.raccoongang.course.presentation.units.CourseUnitsViewModel
2322
import com.raccoongang.course.presentation.videos.CourseVideoViewModel
2423
import com.raccoongang.dashboard.data.repository.DashboardRepository
2524
import com.raccoongang.dashboard.domain.interactor.DashboardInteractor
@@ -80,20 +79,19 @@ val screenModule = module {
8079
viewModel { (courseId: String) -> CourseDetailsViewModel(courseId, get(), get(), get(), get()) }
8180
viewModel { (courseId: String) -> CourseContainerViewModel(courseId, get(), get(), get(), get()) }
8281
viewModel { (courseId: String) -> CourseOutlineViewModel(courseId, get(), get(), get(), get(), get(), get(), get()) }
83-
viewModel { CourseUnitsViewModel(get(), get(),get(), get(), get()) }
84-
viewModel { (courseId: String) -> CourseSectionViewModel(get(), get(), get(), get(), get(), get(), courseId) }
82+
viewModel { (courseId: String) -> CourseSectionViewModel(get(), get(), get(), get(), get(), get(), get(), courseId) }
8583
viewModel { (courseId: String) -> CourseUnitContainerViewModel(get(), get(), courseId) }
8684
viewModel { (courseId: String) -> CourseVideoViewModel(courseId, get(), get(), get(), get(), get(), get(), get()) }
8785
viewModel { (courseId: String) -> VideoViewModel(courseId, get(), get(), get()) }
88-
viewModel { (courseId: String) -> VideoUnitViewModel(courseId, get(), get(), get(), get(), get()) }
86+
viewModel { (courseId: String) -> VideoUnitViewModel(courseId, get(), get(), get(), get()) }
8987
viewModel { (courseId:String, handoutsType: String) -> HandoutsViewModel(courseId, handoutsType, get()) }
9088
viewModel { CourseSearchViewModel(get(), get()) }
9189
viewModel { SelectDialogViewModel(get()) }
9290

93-
single { DiscussionRepository(get()) }
91+
single { DiscussionRepository(get(), get()) }
9492
factory { DiscussionInteractor(get()) }
9593
viewModel { (courseId: String) -> DiscussionTopicsViewModel(get(), get(), courseId) }
96-
viewModel { (courseId: String, threadType: String) -> DiscussionThreadsViewModel(get(), get(), get(), courseId, threadType) }
94+
viewModel { (courseId: String, topicId: String, threadType: String) -> DiscussionThreadsViewModel(get(), get(), get(), courseId, topicId, threadType) }
9795
viewModel { (thread: com.raccoongang.discussion.domain.model.Thread) -> DiscussionCommentsViewModel(get(), get(), get(), get(), thread) }
9896
viewModel { (comment: DiscussionComment) -> DiscussionResponsesViewModel(get(), get(), get(), get(), comment) }
9997
viewModel { (courseId: String) -> DiscussionAddThreadViewModel(get(), get(), get(), courseId) }

build.gradle

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
buildscript {
22
ext {
33
kotlin_version = '1.8.10'
4-
coroutines_version = '1.6.4'
5-
compose_version = '1.3.1'
6-
compose_compiler_version = '1.4.2'
4+
coroutines_version = '1.7.1'
5+
compose_version = '1.4.3'
6+
compose_compiler_version = '1.4.4'
77
}
88
}
99

@@ -18,30 +18,30 @@ task clean(type: Delete) {
1818
}
1919

2020
ext {
21-
core_version = "1.9.0"
22-
appcompat_version = "1.5.1"
23-
material_version = "1.7.0"
24-
lifecycle_version = "2.5.1"
25-
fragment_version = "1.5.5"
21+
core_version = "1.10.1"
22+
appcompat_version = "1.6.1"
23+
material_version = "1.9.0"
24+
lifecycle_version = "2.6.1"
25+
fragment_version = "1.6.0"
2626
constraintlayout_version = "2.1.4"
2727
viewpager2_version = "1.0.0"
28-
exoplayer_version = "2.18.2"
28+
exoplayer_version = "2.18.7"
2929
youtubeplayer_version = "11.1.0"
3030

3131
retrofit_version = '2.9.0'
3232
logginginterceptor_version = '4.9.1'
3333

3434
koin_version = '3.2.0'
3535

36-
coil_version = '2.1.0'
36+
coil_version = '2.3.0'
3737

38-
jsoup_version = '1.11.2'
38+
jsoup_version = '1.13.1'
3939

40-
room_version = '2.5.0'
40+
room_version = '2.5.1'
4141

42-
work_version = '2.8.0'
42+
work_version = '2.8.1'
4343

44-
window_version = '1.0.0'
44+
window_version = '1.1.0'
4545

4646
//testing
4747
mockk_version = '1.13.3'

config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ environments:
2424
FEEDBACK_EMAIL_ADDRESS: "[email protected]"
2525
OAUTH_CLIENT_ID: "PROD_OAUTH_CLIENT_ID"
2626
platformName: "New Open edX"
27-
platformFullName: "New Open edX"
27+
platformFullName: "New Open edX"

core/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,11 @@ dependencies {
129129
api "androidx.compose.runtime:runtime-livedata:$compose_version"
130130
api "androidx.compose.ui:ui:$compose_version"
131131
api "androidx.compose.material:material:$compose_version"
132+
api "androidx.compose.foundation:foundation:$compose_version"
132133
debugApi "androidx.compose.ui:ui-tooling:$compose_version"
133134
api "androidx.compose.ui:ui-tooling-preview:$compose_version"
134135
api "androidx.compose.material:material-icons-extended:$compose_version"
135-
debugApi "androidx.customview:customview:1.2.0-alpha01"
136+
debugApi "androidx.customview:customview:1.2.0-alpha02"
136137
debugApi "androidx.customview:customview-poolingcontainer:1.0.0"
137138

138139
//Networking
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.raccoongang.core.extension
2+
3+
inline fun <T> List<T>.indexOfFirstFromIndex(startIndex: Int, predicate: (T) -> Boolean): Int {
4+
var index = 0
5+
for ((i, item) in this.withIndex()) {
6+
if (i > startIndex) {
7+
if (predicate(item))
8+
return index
9+
}
10+
index++
11+
}
12+
return -1
13+
}
14+
15+
fun <T> ArrayList<T>.clearAndAddAll(collection: Collection<T>): ArrayList<T> {
16+
this.clear()
17+
this.addAll(collection)
18+
return this
19+
}
20+
21+
fun <T> MutableList<T>.clearAndAddAll(collection: Collection<T>): MutableList<T> {
22+
this.clear()
23+
this.addAll(collection)
24+
return this
25+
}

core/src/main/java/com/raccoongang/core/module/download/AbstractDownloader.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ abstract class AbstractDownloader {
2525
var isCanceled = false
2626

2727
private var input: InputStream? = null
28+
private var fos: FileOutputStream? = null
2829

2930
open suspend fun download(
3031
url: String,
@@ -41,14 +42,14 @@ abstract class AbstractDownloader {
4142
file.createNewFile()
4243
input = response.byteStream()
4344
currentDownloadingFilePath = path
44-
val fos = FileOutputStream(file)
45+
fos = FileOutputStream(file)
4546
fos.use { output ->
4647
val buffer = ByteArray(4 * 1024)
4748
var read: Int
4849
while (input!!.read(buffer).also { read = it } != -1) {
49-
output.write(buffer, 0, read)
50+
output?.write(buffer, 0, read)
5051
}
51-
output.flush()
52+
output?.flush()
5253
}
5354
true
5455
} else {
@@ -58,6 +59,7 @@ abstract class AbstractDownloader {
5859
e.printStackTrace()
5960
false
6061
} finally {
62+
fos?.close()
6163
input?.close()
6264
}
6365
}
@@ -66,7 +68,12 @@ abstract class AbstractDownloader {
6668
suspend fun cancelDownloading() {
6769
isCanceled = true
6870
withContext(Dispatchers.IO) {
69-
input?.close()
71+
try {
72+
fos?.close()
73+
input?.close()
74+
} catch (e: Exception) {
75+
e.printStackTrace()
76+
}
7077
}
7178
currentDownloadingFilePath?.let {
7279
val file = File(it)

core/src/main/java/com/raccoongang/core/system/notifier/CourseNotifier.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class CourseNotifier {
1313
suspend fun send(event: CourseVideoPositionChanged) = channel.emit(event)
1414
suspend fun send(event: CourseStructureUpdated) = channel.emit(event)
1515
suspend fun send(event: CourseDashboardUpdate) = channel.emit(event)
16-
suspend fun send(event: CoursePauseVideo) = channel.emit(event)
1716
suspend fun send(event: CourseSubtitleLanguageChanged) = channel.emit(event)
17+
suspend fun send(event: CourseSectionChanged) = channel.emit(event)
1818

1919
}

core/src/main/java/com/raccoongang/core/system/notifier/CoursePauseVideo.kt

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

0 commit comments

Comments
 (0)