Skip to content

Commit

Permalink
fix: Fixes according to PR feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
PavloNetrebchuk committed May 23, 2024
1 parent 9454c60 commit fc95cfc
Show file tree
Hide file tree
Showing 44 changed files with 429 additions and 444 deletions.
6 changes: 3 additions & 3 deletions app/src/main/java/org/openedx/app/AppRouter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -160,16 +160,16 @@ class AppRouter : AuthRouter, DiscoveryRouter, DashboardRouter, CourseRouter, Di
courseTitle: String,
enrollmentMode: String,
openDates: Boolean,
openBlock: String
resumeBlockId: String
) {
replaceFragmentWithBackStack(
fm,
CourseContainerFragment.newInstance(courseId, courseTitle, enrollmentMode, openDates, openBlock)
CourseContainerFragment.newInstance(courseId, courseTitle, enrollmentMode, openDates, resumeBlockId)
)
}

override fun navigateToEnrolledProgramInfo(fm: FragmentManager, pathId: String) {
replaceFragmentWithBackStack(fm, ProgramFragment(true))
replaceFragmentWithBackStack(fm, ProgramFragment.newInstance(pathId))
}

override fun navigateToNoAccess(
Expand Down
10 changes: 4 additions & 6 deletions app/src/main/java/org/openedx/app/MainFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import org.koin.android.ext.android.inject
import org.koin.androidx.viewmodel.ext.android.viewModel
import org.openedx.app.databinding.FragmentMainBinding
import org.openedx.core.adapter.NavigationFragmentAdapter
import org.openedx.core.config.Config
import org.openedx.core.config.DashboardConfig
import org.openedx.core.presentation.global.app_upgrade.UpgradeRequiredFragment
import org.openedx.core.presentation.global.viewBinding
Expand All @@ -28,7 +27,6 @@ class MainFragment : Fragment(R.layout.fragment_main) {
private val binding by viewBinding(FragmentMainBinding::bind)
private val viewModel by viewModel<MainViewModel>()
private val router by inject<DiscoveryRouter>()
private val config by inject<Config>()

private lateinit var adapter: NavigationFragmentAdapter

Expand All @@ -53,7 +51,7 @@ class MainFragment : Fragment(R.layout.fragment_main) {
binding.viewPager.setCurrentItem(0, false)
}

R.id.fragmentHome -> {
R.id.fragmentDiscover -> {
viewModel.logDiscoveryTabClickedEvent()
binding.viewPager.setCurrentItem(1, false)
}
Expand All @@ -75,7 +73,7 @@ class MainFragment : Fragment(R.layout.fragment_main) {
viewLifecycleOwner.lifecycleScope.launch {
viewModel.navigateToDiscovery.collect { shouldNavigateToDiscovery ->
if (shouldNavigateToDiscovery) {
binding.bottomNavView.selectedItemId = R.id.fragmentHome
binding.bottomNavView.selectedItemId = R.id.fragmentDiscover
}
}
}
Expand All @@ -84,7 +82,7 @@ class MainFragment : Fragment(R.layout.fragment_main) {
getString(ARG_COURSE_ID).takeIf { it.isNullOrBlank().not() }?.let { courseId ->
val infoType = getString(ARG_INFO_TYPE)

if (config.getDiscoveryConfig().isViewTypeWebView() && infoType != null) {
if (viewModel.isDiscoveryTypeWebView && infoType != null) {
router.navigateToCourseInfo(parentFragmentManager, courseId, infoType)
} else {
router.navigateToCourseDetail(parentFragmentManager, courseId)
Expand All @@ -102,7 +100,7 @@ class MainFragment : Fragment(R.layout.fragment_main) {
binding.viewPager.offscreenPageLimit = 4

val discoveryFragment = DiscoveryNavigator(viewModel.isDiscoveryTypeWebView).getDiscoveryFragment()
val dashboardFragment = when (config.getDashboardConfig().getType()) {
val dashboardFragment = when (viewModel.dashboardType) {
DashboardConfig.DashboardType.LIST -> ListDashboardFragment()
DashboardConfig.DashboardType.PRIMARY_COURSE -> LearnFragment()
}
Expand Down
7 changes: 1 addition & 6 deletions app/src/main/java/org/openedx/app/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.asSharedFlow
Expand All @@ -31,8 +30,8 @@ class MainViewModel(
get() = _navigateToDiscovery.asSharedFlow()

val isDiscoveryTypeWebView get() = config.getDiscoveryConfig().isViewTypeWebView()
val dashboardType get() = config.getDashboardConfig().getType()

@OptIn(FlowPreview::class)
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
notifier.notifier
Expand All @@ -57,10 +56,6 @@ class MainViewModel(
logEvent(AppAnalyticsEvent.MY_COURSES)
}

fun logMyProgramsTabClickedEvent() {
logEvent(AppAnalyticsEvent.MY_PROGRAMS)
}

fun logProfileTabClickedEvent() {
logEvent(AppAnalyticsEvent.PROFILE)
}
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/java/org/openedx/app/di/ScreenModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import org.openedx.courses.presentation.AllEnrolledCoursesViewModel
import org.openedx.courses.presentation.PrimaryCourseViewModel
import org.openedx.dashboard.data.repository.DashboardRepository
import org.openedx.dashboard.domain.interactor.DashboardInteractor
import org.openedx.dashboard.presentation.ListDashboardViewModel
import org.openedx.dashboard.presentation.DashboardListViewModel
import org.openedx.discovery.data.repository.DiscoveryRepository
import org.openedx.discovery.domain.interactor.DiscoveryInteractor
import org.openedx.discovery.presentation.NativeDiscoveryViewModel
Expand Down Expand Up @@ -119,7 +119,7 @@ val screenModule = module {

factory { DashboardRepository(get(), get(), get(), get()) }
factory { DashboardInteractor(get()) }
viewModel { ListDashboardViewModel(get(), get(), get(), get(), get(), get(), get()) }
viewModel { DashboardListViewModel(get(), get(), get(), get(), get(), get(), get()) }
viewModel { PrimaryCourseViewModel(get(), get(), get(), get(), get(), get(), get()) }
viewModel { AllEnrolledCoursesViewModel(get(), get(), get(), get(), get(), get(), get()) }
viewModel { LearnViewModel(get(), get()) }
Expand Down Expand Up @@ -198,11 +198,11 @@ val screenModule = module {
get()
)
}
viewModel { (courseId: String, courseTitle: String, enrollmentMode: String, openBlock: String) ->
viewModel { (courseId: String, courseTitle: String, enrollmentMode: String, resumeBlockId: String) ->
CourseContainerViewModel(
courseId,
courseTitle,
openBlock,
resumeBlockId,
enrollmentMode,
get(),
get(),
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/res/color/bottom_nav_color.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/checked_tab_item" />
<item android:state_checked="false" android:color="@color/unchecked_tab_item" />
</selector>
<item android:color="@color/checked_tab_item" android:state_checked="true" />
<item android:color="@color/unchecked_tab_item" android:state_checked="false" />
</selector>
8 changes: 4 additions & 4 deletions app/src/main/res/drawable/app_ic_rows.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
android:height="17dp"
android:viewportWidth="20"
android:viewportHeight="17">
<path
android:pathData="M19.81,2.71C19.83,2.77 19.85,2.83 19.85,2.89C19.85,2.93 19.87,3 19.87,3V15.99C19.87,16 19.867,16.007 19.865,16.015C19.862,16.022 19.86,16.03 19.86,16.04C19.86,16.1 19.85,16.15 19.83,16.21C19.824,16.228 19.818,16.247 19.813,16.264C19.802,16.306 19.791,16.345 19.77,16.38C19.75,16.4 19.75,16.41 19.75,16.43L19.75,16.43C19.71,16.49 19.67,16.55 19.62,16.6L19.61,16.61C19.53,16.69 19.45,16.74 19.36,16.78C19.355,16.782 19.35,16.785 19.344,16.788C19.326,16.798 19.305,16.81 19.29,16.81C19.19,16.85 19.09,16.87 18.99,16.87C18.89,16.87 18.79,16.85 18.69,16.81C18.68,16.805 18.667,16.8 18.655,16.795C18.642,16.79 18.63,16.785 18.62,16.78L18.56,16.75C16.1,15.33 12.91,15.33 10.44,16.75C10.426,16.763 10.413,16.768 10.4,16.772C10.393,16.774 10.386,16.777 10.38,16.78C10.374,16.783 10.369,16.786 10.363,16.79C10.348,16.799 10.331,16.81 10.31,16.81C10.12,16.88 9.91,16.88 9.71,16.81C9.7,16.805 9.687,16.8 9.675,16.795C9.662,16.79 9.65,16.785 9.64,16.78L9.58,16.75C7.12,15.33 3.93,15.33 1.46,16.75C1.44,16.77 1.43,16.77 1.41,16.77C1.375,16.791 1.335,16.802 1.294,16.814C1.276,16.819 1.258,16.824 1.24,16.83C1.218,16.834 1.198,16.838 1.178,16.843C1.143,16.852 1.108,16.86 1.07,16.86C1.06,16.87 1.04,16.87 1.02,16.87C1,16.87 0.982,16.865 0.965,16.86C0.947,16.855 0.93,16.85 0.91,16.85C0.85,16.85 0.79,16.84 0.74,16.82C0.68,16.8 0.63,16.77 0.58,16.74L0.58,16.74C0.564,16.729 0.548,16.719 0.531,16.708C0.503,16.692 0.474,16.675 0.45,16.65C0.413,16.621 0.387,16.586 0.36,16.55C0.35,16.537 0.34,16.523 0.33,16.51C0.32,16.495 0.307,16.483 0.295,16.47C0.282,16.458 0.27,16.445 0.26,16.43C0.24,16.41 0.24,16.4 0.24,16.38C0.217,16.343 0.206,16.306 0.194,16.265C0.189,16.25 0.185,16.236 0.18,16.22C0.176,16.199 0.171,16.178 0.167,16.159C0.158,16.123 0.15,16.089 0.15,16.05C0.14,16.03 0.14,16 0.14,16V3C0.14,2.98 0.145,2.962 0.15,2.945C0.155,2.927 0.16,2.91 0.16,2.89C0.17,2.83 0.18,2.77 0.2,2.71C0.22,2.66 0.24,2.61 0.27,2.56C0.278,2.546 0.286,2.532 0.293,2.518C0.313,2.483 0.331,2.449 0.36,2.42C0.402,2.377 0.438,2.349 0.478,2.317C0.485,2.311 0.492,2.306 0.5,2.3C0.515,2.29 0.527,2.277 0.54,2.265C0.552,2.252 0.565,2.24 0.58,2.23C0.595,2.22 0.61,2.212 0.625,2.205C0.64,2.197 0.655,2.19 0.67,2.18C3.51,0.59 7.12,0.51 10.01,1.99C12.91,0.51 16.51,0.59 19.35,2.18C19.365,2.19 19.38,2.197 19.395,2.205C19.41,2.212 19.425,2.22 19.44,2.23C19.455,2.24 19.467,2.252 19.48,2.265C19.492,2.277 19.505,2.29 19.52,2.3C19.535,2.316 19.553,2.33 19.57,2.344C19.597,2.367 19.625,2.39 19.65,2.42C19.665,2.445 19.68,2.467 19.695,2.49C19.71,2.512 19.725,2.535 19.74,2.56C19.77,2.61 19.79,2.66 19.81,2.71L19.81,2.71ZM9.5,4.12C9.5,3.84 9.72,3.62 10,3.62C10.28,3.62 10.5,3.84 10.5,4.12V14.4C10.5,14.68 10.28,14.9 10,14.9C9.72,14.9 9.5,14.68 9.5,14.4V4.12Z"
android:fillColor="#3F68F8"
android:fillType="evenOdd"/>
<path
android:fillColor="#3F68F8"
android:fillType="evenOdd"
android:pathData="M19.81,2.71C19.83,2.77 19.85,2.83 19.85,2.89C19.85,2.93 19.87,3 19.87,3V15.99C19.87,16 19.867,16.007 19.865,16.015C19.862,16.022 19.86,16.03 19.86,16.04C19.86,16.1 19.85,16.15 19.83,16.21C19.824,16.228 19.818,16.247 19.813,16.264C19.802,16.306 19.791,16.345 19.77,16.38C19.75,16.4 19.75,16.41 19.75,16.43L19.75,16.43C19.71,16.49 19.67,16.55 19.62,16.6L19.61,16.61C19.53,16.69 19.45,16.74 19.36,16.78C19.355,16.782 19.35,16.785 19.344,16.788C19.326,16.798 19.305,16.81 19.29,16.81C19.19,16.85 19.09,16.87 18.99,16.87C18.89,16.87 18.79,16.85 18.69,16.81C18.68,16.805 18.667,16.8 18.655,16.795C18.642,16.79 18.63,16.785 18.62,16.78L18.56,16.75C16.1,15.33 12.91,15.33 10.44,16.75C10.426,16.763 10.413,16.768 10.4,16.772C10.393,16.774 10.386,16.777 10.38,16.78C10.374,16.783 10.369,16.786 10.363,16.79C10.348,16.799 10.331,16.81 10.31,16.81C10.12,16.88 9.91,16.88 9.71,16.81C9.7,16.805 9.687,16.8 9.675,16.795C9.662,16.79 9.65,16.785 9.64,16.78L9.58,16.75C7.12,15.33 3.93,15.33 1.46,16.75C1.44,16.77 1.43,16.77 1.41,16.77C1.375,16.791 1.335,16.802 1.294,16.814C1.276,16.819 1.258,16.824 1.24,16.83C1.218,16.834 1.198,16.838 1.178,16.843C1.143,16.852 1.108,16.86 1.07,16.86C1.06,16.87 1.04,16.87 1.02,16.87C1,16.87 0.982,16.865 0.965,16.86C0.947,16.855 0.93,16.85 0.91,16.85C0.85,16.85 0.79,16.84 0.74,16.82C0.68,16.8 0.63,16.77 0.58,16.74L0.58,16.74C0.564,16.729 0.548,16.719 0.531,16.708C0.503,16.692 0.474,16.675 0.45,16.65C0.413,16.621 0.387,16.586 0.36,16.55C0.35,16.537 0.34,16.523 0.33,16.51C0.32,16.495 0.307,16.483 0.295,16.47C0.282,16.458 0.27,16.445 0.26,16.43C0.24,16.41 0.24,16.4 0.24,16.38C0.217,16.343 0.206,16.306 0.194,16.265C0.189,16.25 0.185,16.236 0.18,16.22C0.176,16.199 0.171,16.178 0.167,16.159C0.158,16.123 0.15,16.089 0.15,16.05C0.14,16.03 0.14,16 0.14,16V3C0.14,2.98 0.145,2.962 0.15,2.945C0.155,2.927 0.16,2.91 0.16,2.89C0.17,2.83 0.18,2.77 0.2,2.71C0.22,2.66 0.24,2.61 0.27,2.56C0.278,2.546 0.286,2.532 0.293,2.518C0.313,2.483 0.331,2.449 0.36,2.42C0.402,2.377 0.438,2.349 0.478,2.317C0.485,2.311 0.492,2.306 0.5,2.3C0.515,2.29 0.527,2.277 0.54,2.265C0.552,2.252 0.565,2.24 0.58,2.23C0.595,2.22 0.61,2.212 0.625,2.205C0.64,2.197 0.655,2.19 0.67,2.18C3.51,0.59 7.12,0.51 10.01,1.99C12.91,0.51 16.51,0.59 19.35,2.18C19.365,2.19 19.38,2.197 19.395,2.205C19.41,2.212 19.425,2.22 19.44,2.23C19.455,2.24 19.467,2.252 19.48,2.265C19.492,2.277 19.505,2.29 19.52,2.3C19.535,2.316 19.553,2.33 19.57,2.344C19.597,2.367 19.625,2.39 19.65,2.42C19.665,2.445 19.68,2.467 19.695,2.49C19.71,2.512 19.725,2.535 19.74,2.56C19.77,2.61 19.79,2.66 19.81,2.71L19.81,2.71ZM9.5,4.12C9.5,3.84 9.72,3.62 10,3.62C10.28,3.62 10.5,3.84 10.5,4.12V14.4C10.5,14.68 10.28,14.9 10,14.9C9.72,14.9 9.5,14.68 9.5,14.4V4.12Z" />
</vector>
2 changes: 1 addition & 1 deletion app/src/main/res/layout/fragment_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/bottom_view_menu" />

</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
16 changes: 8 additions & 8 deletions app/src/main/res/menu/bottom_view_menu.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,20 @@

<item
android:id="@+id/fragmentLearn"
android:title="@string/app_navigation_learn"
android:enabled="true"
android:icon="@drawable/app_ic_rows"/>
android:icon="@drawable/app_ic_rows"
android:title="@string/app_navigation_learn" />

<item
android:id="@+id/fragmentHome"
android:title="@string/app_navigation_discovery"
android:id="@+id/fragmentDiscover"
android:enabled="true"
android:icon="@drawable/app_ic_home"/>
android:icon="@drawable/app_ic_home"
android:title="@string/app_navigation_discovery" />

<item
android:id="@+id/fragmentProfile"
android:title="@string/app_navigation_profile"
android:enabled="true"
android:icon="@drawable/app_ic_profile"/>
android:icon="@drawable/app_ic_profile"
android:title="@string/app_navigation_profile" />

</menu>
</menu>
2 changes: 1 addition & 1 deletion app/src/main/res/values-uk/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@
<string name="app_navigation_learn">Мої курси</string>
<string name="app_navigation_programs">Програми</string>
<string name="app_navigation_profile">Профіль</string>
</resources>
</resources>
2 changes: 1 addition & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
<string name="app_navigation_learn">Learn</string>
<string name="app_navigation_programs">Programs</string>
<string name="app_navigation_profile">Profile</string>
</resources>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,19 @@ data class CourseAssignments(
val pastAssignments: List<CourseDateBlock>?
) {
fun mapToDomain() = CourseAssignments(
futureAssignments = futureAssignments?.map {
futureAssignments = futureAssignments?.mapNotNull {
it.mapToDomain()
},
pastAssignments = pastAssignments?.map {
pastAssignments = pastAssignments?.mapNotNull {
it.mapToDomain()
}
)

fun mapToRoomEntity() = CourseAssignmentsDb(
futureAssignments = futureAssignments?.map {
futureAssignments = futureAssignments?.mapNotNull {
it.mapToRoomEntity()
},
pastAssignments = pastAssignments?.map {
pastAssignments = pastAssignments?.mapNotNull {
it.mapToRoomEntity()
}
)
Expand Down
56 changes: 32 additions & 24 deletions core/src/main/java/org/openedx/core/data/model/CourseDateBlock.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import kotlinx.parcelize.Parcelize
import org.openedx.core.data.model.room.discovery.CourseDateBlockDb
import org.openedx.core.domain.model.CourseDateBlock
import org.openedx.core.utils.TimeUtils
import java.util.Date

@Parcelize
data class CourseDateBlock(
Expand All @@ -31,27 +30,36 @@ data class CourseDateBlock(
// component blockId in-case of navigating inside the app for component available in mobile
@SerializedName("first_component_block_id")
val blockId: String = "",
): Parcelable {
fun mapToDomain() = CourseDateBlock(
complete = complete,
date = TimeUtils.iso8601ToDate(date) ?: Date(),
assignmentType = assignmentType,
dateType = dateType,
description = description,
learnerHasAccess = learnerHasAccess,
link = link,
title = title,
blockId = blockId
)
fun mapToRoomEntity() = CourseDateBlockDb(
complete = complete,
date = date,
assignmentType = assignmentType,
dateType = dateType,
description = description,
learnerHasAccess = learnerHasAccess,
link = link,
title = title,
blockId = blockId
)
) : Parcelable {
fun mapToDomain(): CourseDateBlock? {
TimeUtils.iso8601ToDate(date)?.let {
return CourseDateBlock(
complete = complete,
date = it,
assignmentType = assignmentType,
dateType = dateType,
description = description,
learnerHasAccess = learnerHasAccess,
link = link,
title = title,
blockId = blockId
)
} ?: return null
}

fun mapToRoomEntity(): CourseDateBlockDb? {
TimeUtils.iso8601ToDate(date)?.let {
return CourseDateBlockDb(
complete = complete,
date = it,
assignmentType = assignmentType,
dateType = dateType,
description = description,
learnerHasAccess = learnerHasAccess,
link = link,
title = title,
blockId = blockId
)
} ?: return null
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -225,8 +225,8 @@ data class CourseDateBlockDb(
val learnerHasAccess: Boolean = false,
@ColumnInfo("complete")
val complete: Boolean = false,
@ColumnInfo("date")
val date: String,
@Embedded
val date: Date,
@ColumnInfo("dateType")
val dateType: DateType = DateType.NONE,
@ColumnInfo("assignmentType")
Expand All @@ -239,7 +239,7 @@ data class CourseDateBlockDb(
blockId = blockId,
learnerHasAccess = learnerHasAccess,
complete = complete,
date = TimeUtils.iso8601ToDate(date) ?: Date(),
date = date,
dateType = dateType,
assignmentType = assignmentType
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ data class CourseStatus(
val lastVisitedModulePath: List<String>,
val lastVisitedBlockId: String,
val lastVisitedUnitDisplayName: String
): Parcelable
) : Parcelable
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ data class Progress(
val totalAssignmentsCount: Int,
) : Parcelable {
companion object {
val DEFAULT_PROGRESS = Progress(0,0)
val DEFAULT_PROGRESS = Progress(0, 0)
}
}
7 changes: 2 additions & 5 deletions core/src/main/java/org/openedx/core/module/DownloadWorker.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import org.openedx.core.module.download.CurrentProgress
import org.openedx.core.module.download.FileDownloader
import org.openedx.core.system.notifier.DownloadNotifier
import org.openedx.core.system.notifier.DownloadProgressChanged
import org.openedx.core.utils.FileUtil
import java.io.File

class DownloadWorker(
Expand All @@ -41,11 +42,7 @@ class DownloadWorker(

private var downloadEnqueue = listOf<DownloadModel>()

private val folder = File(
context.externalCacheDir.toString() + File.separator +
context.getString(R.string.app_name)
.replace(Regex("\\s"), "_")
)
private val folder = FileUtil(context).getExternalAppDir()

private var currentDownload: DownloadModel? = null
private var lastUpdateTime = 0L
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,5 +125,4 @@ class TranscriptManager(
}
return null
}

}
}
Loading

0 comments on commit fc95cfc

Please sign in to comment.