Skip to content

Commit c9e8897

Browse files
committed
Use the new functions instead of the temporary functions
1 parent 96affb7 commit c9e8897

File tree

1 file changed

+18
-115
lines changed

1 file changed

+18
-115
lines changed

domain/src/main/java/org/oppia/android/domain/topic/TopicListController.kt

Lines changed: 18 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ import org.json.JSONObject
55
import org.oppia.android.app.model.ChapterPlayState
66
import org.oppia.android.app.model.ChapterProgress
77
import org.oppia.android.app.model.ChapterSummary
8-
import org.oppia.android.app.model.ClassroomIdList
98
import org.oppia.android.app.model.ClassroomRecord
10-
import org.oppia.android.app.model.ClassroomRecord.TopicIdList
119
import org.oppia.android.app.model.ComingSoonTopicList
1210
import org.oppia.android.app.model.EphemeralTopicSummary
1311
import org.oppia.android.app.model.LessonThumbnail
@@ -29,7 +27,7 @@ import org.oppia.android.app.model.TopicProgress
2927
import org.oppia.android.app.model.TopicRecord
3028
import org.oppia.android.app.model.TopicSummary
3129
import org.oppia.android.app.model.UpcomingTopic
32-
import org.oppia.android.domain.classroom.TEST_CLASSROOM_ID_0
30+
import org.oppia.android.domain.classroom.ClassroomController
3331
import org.oppia.android.domain.translation.TranslationController
3432
import org.oppia.android.domain.util.JsonAssetRetriever
3533
import org.oppia.android.domain.util.getStringFromObject
@@ -101,6 +99,7 @@ class TopicListController @Inject constructor(
10199
private val oppiaClock: OppiaClock,
102100
private val assetRepository: AssetRepository,
103101
private val translationController: TranslationController,
102+
private val classroomController: ClassroomController,
104103
@LoadLessonProtosFromAssets private val loadLessonProtosFromAssets: Boolean
105104
) {
106105

@@ -137,7 +136,7 @@ class TopicListController @Inject constructor(
137136

138137
private fun createTopicList(contentLocale: OppiaLocale.ContentLocale): TopicList {
139138
return if (loadLessonProtosFromAssets) {
140-
val topicIdList = loadCombinedClassroomsTopicIdList()
139+
val topicIdList = loadCombinedTopicIdList()
141140
return TopicList.newBuilder().apply {
142141
// Only include topics currently playable in the topic list.
143142
addAllTopicSummary(
@@ -152,7 +151,7 @@ class TopicListController @Inject constructor(
152151
}
153152

154153
private fun loadTopicListFromJson(contentLocale: OppiaLocale.ContentLocale): TopicList {
155-
val topicIdList = loadCombinedClassroomsTopicIdList()
154+
val topicIdList = loadCombinedTopicIdList()
156155
val topicListBuilder = TopicList.newBuilder()
157156
for (topicId in topicIdList) {
158157
val ephemeralSummary = createEphemeralTopicSummary(topicId, contentLocale)
@@ -166,7 +165,7 @@ class TopicListController @Inject constructor(
166165
}
167166

168167
private fun computeComingSoonTopicList(): ComingSoonTopicList {
169-
val topicIdList = loadCombinedClassroomsTopicIdList()
168+
val topicIdList = loadCombinedTopicIdList()
170169
val comingSoonTopicListBuilder = ComingSoonTopicList.newBuilder()
171170
for (topicId in topicIdList) {
172171
val upcomingTopicSummary = createUpcomingTopicSummary(topicId)
@@ -185,7 +184,7 @@ class TopicListController @Inject constructor(
185184
contentLocale: OppiaLocale.ContentLocale
186185
): EphemeralTopicSummary {
187186
val topicSummary = createTopicSummary(topicId)
188-
val classroomRecord = loadClassroomById(topicSummary.classroomId)
187+
val classroomRecord = classroomController.getClassroomById(topicSummary.classroomId)
189188
return EphemeralTopicSummary.newBuilder().apply {
190189
this.topicSummary = topicSummary
191190
writtenTranslationContext =
@@ -217,7 +216,7 @@ class TopicListController @Inject constructor(
217216
this.topicId = topicId
218217
putAllWrittenTranslations(topicRecord.writtenTranslationsMap)
219218
title = topicRecord.translatableTitle
220-
classroomId = getClassroomIdByTopicId(topicId)
219+
classroomId = classroomController.getClassroomIdByTopicId(topicId)
221220
totalChapterCount = storyRecords.map { it.chaptersList.size }.sum()
222221
topicThumbnail = topicRecord.topicThumbnail
223222
topicPlayAvailability = if (topicRecord.isPublished) {
@@ -259,7 +258,7 @@ class TopicListController @Inject constructor(
259258
contentId = "title"
260259
html = jsonObject.getStringFromObject("topic_name")
261260
}.build()
262-
val classroomId = getClassroomIdByTopicId(topicId)
261+
val classroomId = classroomController.getClassroomIdByTopicId(topicId)
263262
// No written translations are included since none are retrieved from JSON.
264263
return TopicSummary.newBuilder()
265264
.setTopicId(topicId)
@@ -296,7 +295,7 @@ class TopicListController @Inject constructor(
296295
html = jsonObject.getStringFromObject("topic_name")
297296
}.build()
298297

299-
val classroomId = getClassroomIdByTopicId(topicId)
298+
val classroomId = classroomController.getClassroomIdByTopicId(topicId)
300299

301300
val classroomJsonObject = jsonAssetRetriever.loadJsonFromAsset("$classroomId.json")!!
302301
val classroomTitle = classroomJsonObject.getJSONObject("classroom_title").let {
@@ -369,8 +368,8 @@ class TopicListController @Inject constructor(
369368
sortedTopicProgressList.forEach { topicProgress ->
370369
val topic = topicController.retrieveTopic(topicProgress.topicId)
371370
val classroom = topic?.topicId?.let { topicId ->
372-
val classroomId = getClassroomIdByTopicId(topicId)
373-
loadClassroomById(classroomId)
371+
val classroomId = classroomController.getClassroomIdByTopicId(topicId)
372+
classroomController.getClassroomById(classroomId)
374373
} ?: ClassroomRecord.getDefaultInstance()
375374
// Ignore topics that are no longer on the device, or that have been unpublished.
376375
if (topic?.topicPlayAvailability?.availabilityCase == AVAILABLE_TO_PLAY_NOW) {
@@ -556,7 +555,7 @@ class TopicListController @Inject constructor(
556555
* being suggested.
557556
*/
558557
private fun retrieveTopicDependencies(topicId: String): List<String> {
559-
val classrooms = loadClassrooms()
558+
val classrooms = classroomController.getClassrooms()
560559
for (classroom in classrooms) {
561560
if (classroom.topicPrerequisitesMap.containsKey(topicId)) {
562561
return classroom.topicPrerequisitesMap.getValue(topicId).topicIdsList
@@ -589,7 +588,7 @@ class TopicListController @Inject constructor(
589588
contentLocale: OppiaLocale.ContentLocale
590589
): List<PromotedStory> {
591590
return if (loadLessonProtosFromAssets) {
592-
val topicIdList = loadCombinedClassroomsTopicIdList()
591+
val topicIdList = loadCombinedTopicIdList()
593592
return computeSuggestedStoriesForTopicIds(topicProgressList, topicIdList, contentLocale)
594593
} else computeSuggestedStoriesFromJson(topicProgressList, contentLocale)
595594
}
@@ -599,7 +598,7 @@ class TopicListController @Inject constructor(
599598
contentLocale: OppiaLocale.ContentLocale
600599
): List<PromotedStory> {
601600
// All topics that could potentially be recommended.
602-
val topicIdList = loadCombinedClassroomsTopicIdList()
601+
val topicIdList = loadCombinedTopicIdList()
603602
return computeSuggestedStoriesForTopicIds(topicProgressList, topicIdList, contentLocale)
604603
}
605604

@@ -713,7 +712,7 @@ class TopicListController @Inject constructor(
713712
)
714713
val classroomRecord =
715714
assetRepository.loadProtoFromLocalAssets(
716-
assetName = getClassroomIdByTopicId(topicId),
715+
assetName = classroomController.getClassroomIdByTopicId(topicId),
717716
baseMessage = ClassroomRecord.getDefaultInstance()
718717
)
719718
return PromotedStory.newBuilder().apply {
@@ -783,7 +782,7 @@ class TopicListController @Inject constructor(
783782
}.build()
784783
} ?: SubtitledHtml.getDefaultInstance()
785784

786-
val classroomId = getClassroomIdByTopicId(topicId)
785+
val classroomId = classroomController.getClassroomIdByTopicId(topicId)
787786

788787
val classroomJson = jsonAssetRetriever.loadJsonFromAsset("$classroomId.json")
789788
if (classroomJson!!.optString("classroom_title").isNullOrEmpty()) return null
@@ -867,104 +866,8 @@ class TopicListController @Inject constructor(
867866
.build()
868867
}
869868

870-
private fun getClassroomIdByTopicId(topicId: String): String {
871-
var classroomId = TEST_CLASSROOM_ID_0
872-
loadClassrooms().forEach {
873-
if (it.topicPrerequisitesMap.keys.contains(topicId)) {
874-
classroomId = it.id
875-
}
876-
}
877-
return classroomId
878-
}
879-
880-
// TODO(#5344): Remove this in favor of per-classroom data handling.
881-
private fun loadClassrooms(): List<ClassroomRecord> {
882-
return if (loadLessonProtosFromAssets) {
883-
assetRepository.loadProtoFromLocalAssets(
884-
assetName = "classrooms",
885-
baseMessage = ClassroomIdList.getDefaultInstance()
886-
).classroomIdsList.map { classroomId ->
887-
loadClassroomById(classroomId)
888-
}
889-
} else loadClassroomsFromJson()
890-
}
891-
892-
// TODO(#5344): Remove this in favor of per-classroom data handling.
893-
private fun loadClassroomsFromJson(): List<ClassroomRecord> {
894-
// Load the classrooms.json file.
895-
val classroomIdsObj = jsonAssetRetriever.loadJsonFromAsset("classrooms.json")
896-
checkNotNull(classroomIdsObj) { "Failed to load classrooms.json." }
897-
val classroomIds = classroomIdsObj.optJSONArray("classroom_id_list")
898-
checkNotNull(classroomIds) { "classrooms.json is missing classroom IDs." }
899-
900-
// Initialize a list to store the [ClassroomRecord]s.
901-
val classroomRecords = mutableListOf<ClassroomRecord>()
902-
903-
// Iterate over all classroomIds and load each classroom's JSON.
904-
for (i in 0 until classroomIds.length()) {
905-
val classroomId = checkNotNull(classroomIds.optString(i)) {
906-
"Expected non-null classroom ID at index $i."
907-
}
908-
val classroomRecord = loadClassroomById(classroomId)
909-
classroomRecords.add(classroomRecord)
910-
}
911-
912-
return classroomRecords
913-
}
914-
915-
// TODO(#5344): Move this to classroom controller.
916-
private fun loadClassroomById(classroomId: String): ClassroomRecord {
917-
return if (loadLessonProtosFromAssets) {
918-
assetRepository.tryLoadProtoFromLocalAssets(
919-
assetName = classroomId,
920-
defaultMessage = ClassroomRecord.getDefaultInstance()
921-
) ?: ClassroomRecord.getDefaultInstance()
922-
} else loadClassroomByIdFromJson(classroomId)
923-
}
924-
925-
// TODO(#5344): Remove this in favor of per-classroom data handling.
926-
private fun loadClassroomByIdFromJson(classroomId: String): ClassroomRecord {
927-
// Load the classroom obj.
928-
val classroomObj = jsonAssetRetriever.loadJsonFromAsset("$classroomId.json")
929-
checkNotNull(classroomObj) { "Failed to load $classroomId.json." }
930-
931-
val classroomTitle = classroomObj.getJSONObject("classroom_title")
932-
933-
// Load the topic prerequisite map.
934-
val topicPrereqsObj = checkNotNull(classroomObj.optJSONObject("topic_prerequisites")) {
935-
"Expected classroom to have non-null topic_prerequisites."
936-
}
937-
val topicPrereqs = topicPrereqsObj.keys().asSequence().associateWith { topicId ->
938-
val topicIdArray = checkNotNull(topicPrereqsObj.optJSONArray(topicId)) {
939-
"Expected topic $topicId to have a non-null string list."
940-
}
941-
return@associateWith List(topicIdArray.length()) { index ->
942-
checkNotNull(topicIdArray.optString(index)) {
943-
"Expected topic $topicId to have non-null string at index $index."
944-
}
945-
}
946-
}
947-
return ClassroomRecord.newBuilder().apply {
948-
id = checkNotNull(classroomObj.optString("classroom_id")) {
949-
"Expected classroom to have ID."
950-
}
951-
translatableTitle = SubtitledHtml.newBuilder().apply {
952-
contentId = classroomTitle.getStringFromObject("content_id")
953-
html = classroomTitle.getStringFromObject("html")
954-
}.build()
955-
putAllTopicPrerequisites(
956-
topicPrereqs.mapValues { (_, topicIds) ->
957-
TopicIdList.newBuilder().apply {
958-
addAllTopicIds(topicIds)
959-
}.build()
960-
}
961-
)
962-
}.build()
963-
}
964-
965-
// TODO(#5344): Remove this in favor of per-classroom data handling.
966-
private fun loadCombinedClassroomsTopicIdList(): List<String> =
967-
loadClassrooms().flatMap { it.topicPrerequisitesMap.keys.toList() }
869+
private fun loadCombinedTopicIdList(): List<String> =
870+
classroomController.getClassrooms().flatMap { it.topicPrerequisitesMap.keys.toList() }
968871
}
969872

970873
internal fun createTopicThumbnailFromJson(topicJsonObject: JSONObject): LessonThumbnail {

0 commit comments

Comments
 (0)