Skip to content

Fix part of #6203: Migrate exploration and progress controllers to use ProfileId#6294

Open
Kishan8548 wants to merge 20 commits into
oppia:developfrom
Kishan8548:fix-6203-migrate-exploration-controllers-v2
Open

Fix part of #6203: Migrate exploration and progress controllers to use ProfileId#6294
Kishan8548 wants to merge 20 commits into
oppia:developfrom
Kishan8548:fix-6203-migrate-exploration-controllers-v2

Conversation

@Kishan8548

@Kishan8548 Kishan8548 commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Explanation

Fixes part of #6203.

This PR completes the migration for the domain-layer exploration and progress controllers. It migrates these controllers from using LegacyProfileId (and raw Int internal IDs) to the new ProfileId schema.

1. Domain Layer Controllers Migrated to ProfileId

  • ExplorationProgressController.kt & ExplorationDataController.kt: Updated all internal state maps, data classes, and method signatures to utilize ProfileId instead of legacy types.
  • StoryProgressController.kt, ExplorationCheckpointController.kt, and ExplorationActiveTimeController.kt: Signatures and internal progress tracking methods were migrated to ProfileId.
  • Note on Analytics: The explicit boundary at LearnerAnalyticsLogger.beginExploration is maintained intentionally using toLegacyProfileId() since the logging infrastructure is not yet fully migrated.

2. arguments.proto Schema Migration

  • Migrated the profile_id field in:

    • ExplorationActivityParams
    • ExplorationFragmentArguments
    • ResumeLessonActivityParams
    • ResumeLessonFragmentArguments

    from LegacyProfileIdProfileId as required by Task 3.

  • Added toProfileIdPreservingZero() at write boundaries (Activity/Fragment createIntent()/newInstance() functions) and toLegacyProfileId() at read boundaries (onCreate()/onCreateView()) in:

    • ExplorationActivity
    • ExplorationFragment
    • ResumeLessonActivity
    • ResumeLessonFragment

    to preserve app-layer compatibility until a follow-up migration.

  • Removed the now-redundant toProfileIdPreservingZero() call in ExplorationFragmentPresenter since profileId is already ProfileId.

3. Domain Layer Tests Fully Migrated

  • ExplorationDataControllerTest.kt
  • ExplorationProgressControllerTest.kt
  • ExplorationActiveTimeControllerTest.kt
  • ExplorationCheckpointControllerTest.kt
  • StoryProgressControllerTest.kt

Changes:

  • Removed all instances of .internalId and legacy types.

  • Updated all test helpers to instantiate and pass ProfileId objects natively.

  • ResumeLessonFragmentTest.kt: Updated assertion to compare against ProfileId instead of LegacyProfileId to reflect the proto field migration.

4. App-Layer Boundary Isolation (Temporary Compatibility)

Because the App Layer is slated for migration in a future task, strict type-safe boundaries were introduced at presenter call-sites:

  • TopicLessonsFragmentPresenter.kt

  • RecentlyPlayedFragmentPresenter.kt

  • StoryFragmentPresenter.kt

  • ResumeLessonFragmentPresenter.kt

    Added toProfileIdPreservingZero() to calls accessing ExplorationDataController.

  • ExplorationActivityPresenter.kt & StateViewModel.kt

    Refactored:

    • deleteExplorationProgressById
    • getOldestExplorationDetailsDataProvider
    • updateWrittenTranslationContentLanguageMidLesson

    to convert the internally held LegacyProfileId at the boundary.

  • StateFragmentTestActivityPresenter.kt

    Wrapped raw Int profile values in ProfileId.newBuilder().setInternalId(..).build().

  • App Tests

    • ExplorationActivityTest.kt
    • ExplorationActivityLocalTest.kt

    Safely wrapped injected test properties (internalProfileId) in ProfileId prior to domain controller interaction.

Essential Checklist

  • The PR title starts with "Fix #bugnum: " (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".)
  • The explanation section above starts with "Fixes #bugnum: " (If this PR fixes part of an issue, use instead: "Fixes part of #bugnum: ...".)
  • Any changes to scripts/assets files have their rationale included in the PR explanation.
  • The PR follows the style guide.
  • The PR does not contain any unnecessary code changes from Android Studio (reference).
  • The PR is made from a branch that's not called "develop" and is up-to-date with "develop".
  • The PR is assigned to the appropriate reviewers (reference).

@Kishan8548
Kishan8548 requested review from a team as code owners June 28, 2026 17:59
@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 77547f11-59fa-4759-9259-d57a4d6a056f

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

@Kishan8548 this PR is being marked as draft because the PR description must contain 'Fixes #' or 'Fixes part of #' for each issue the PR is changing, and each one on its own line with no other text.

@github-actions
github-actions Bot marked this pull request as draft June 28, 2026 17:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates the domain-layer exploration/progress controllers from LegacyProfileId (and raw Int internal IDs) to the newer ProfileId schema, while keeping temporary compatibility conversions at app-layer call sites and maintaining the legacy analytics boundary.

Changes:

  • Updated domain controllers (exploration data/progress, checkpointing, active time tracking, story progress) to accept/store per-profile state keyed by ProfileId.
  • Migrated domain + app tests and app presenters to pass ProfileId (using boundary conversions where the app layer still holds LegacyProfileId/Int).
  • Updated exploration progress listener APIs and implementations to use ProfileId.

Reviewed changes

Copilot reviewed 22 out of 22 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
domain/src/main/java/org/oppia/android/domain/exploration/ExplorationDataController.kt Migrates exploration start/resume/restart/replay APIs to take ProfileId instead of raw internal IDs.
domain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressController.kt Migrates exploration session/progress flow to ProfileId; keeps analytics boundary via toLegacyProfileId().
domain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgress.kt Updates stored session progress fields to use ProfileId.
domain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressListener.kt Updates listener signature to accept ProfileId.
domain/src/main/java/org/oppia/android/domain/exploration/ExplorationActiveTimeController.kt Migrates active time aggregation/cache to ProfileId and updates listener override.
domain/src/main/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointController.kt Migrates checkpoint persistence/retrieval APIs and cache map key to ProfileId.
domain/src/main/java/org/oppia/android/domain/topic/StoryProgressController.kt Migrates story progress tracking/cache to ProfileId.
domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt Updates tests to pass ProfileId into the controller APIs.
domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt Updates tests for ProfileId usage across play/replay/resume flows.
domain/src/test/java/org/oppia/android/domain/exploration/ExplorationActiveTimeControllerTest.kt Updates tests to use ProfileId when recording and reading active time.
domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt Updates checkpoint tests to ProfileId for controller calls (but still bridges to legacy in helper usage).
domain/src/test/java/org/oppia/android/domain/topic/StoryProgressControllerTest.kt Updates story progress tests to use ProfileId.
app/src/main/java/org/oppia/android/app/player/exploration/ExplorationActivityPresenter.kt Adds boundary conversion to pass ProfileId into domain exploration data APIs.
app/src/main/java/org/oppia/android/app/player/state/StateViewModel.kt Converts legacy-held profile ID to ProfileId before calling domain progress controller.
app/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentPresenter.kt Converts profile IDs at boundary for replay/restart/start calls.
app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedFragmentPresenter.kt Converts profile IDs at boundary for restart/replay calls.
app/src/main/java/org/oppia/android/app/story/StoryFragmentPresenter.kt Converts profile IDs at boundary for start/replay calls.
app/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentPresenter.kt Converts profile IDs at boundary for restart/resume calls.
app/src/main/java/org/oppia/android/app/testing/ExplorationTestActivityPresenter.kt Wraps raw internal ID into ProfileId for replay.
app/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestActivityPresenter.kt Wraps raw internal ID into ProfileId for start/replay/delete APIs.
app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt Wraps test-injected internal IDs into ProfileId before calling domain.
app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt Wraps test internal IDs into ProfileId for domain controller calls.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 162 to 166
fun testController_saveCheckpoint_retrieveSavedCheckpoint_isSuccessful() {
explorationCheckpointTestHelper.saveCheckpointForFractionsStory0Exploration0(
profileId = firstTestProfile,
profileId = firstTestProfile.toLegacyProfileId(),
version = FRACTIONS_STORY_0_EXPLORATION_0_CURRENT_VERSION
)
Comment on lines 178 to 182
AsyncResult.Failure(
ExplorationCheckpointNotFoundException(
"Checkpoint with the explorationId $explorationId was not found " +
"for profileId ${profileId.internalId}."
"for profileId $profileId."
)
Comment on lines 259 to 263
AsyncResult.Failure(
ExplorationCheckpointNotFoundException(
"No saved checkpoint with explorationId ${explorationId!!} found for " +
"the profileId ${profileId!!.internalId}."
"the profileId ${profileId!!}."
)
Comment on lines 77 to 83
fun startPlayingNewExploration(
internalProfileId: Int,
profileId: ProfileId,
classroomId: String,
topicId: String,
storyId: String,
explorationId: String
): DataProvider<Any?> {
Comment on lines 109 to 115
fun resumeExploration(
internalProfileId: Int,
profileId: ProfileId,
classroomId: String,
topicId: String,
storyId: String,
explorationId: String,
explorationCheckpoint: ExplorationCheckpoint

private fun logIntoAnalyticsReadyAdminProfile() {
val rootProfileId = LegacyProfileId.getDefaultInstance()
val rootProfileId = ProfileId.getDefaultInstance()
@Kishan8548

Copy link
Copy Markdown
Contributor Author

Thanks for the thorough review! All these suggestions are valid and have been addressed in the latest commit:

  1. Test Helper Migration: Added ProfileId overloads to ExplorationCheckpointTestHelper and updated ExplorationCheckpointControllerTest to pass ProfileId directly, removing the toLegacyProfileId() workaround. This fixes the compilation error while keeping the UI tests intact.
  2. Exception Messages: Updated the error messages in ExplorationCheckpointController to explicitly print ${profileId.internalId} instead of interpolating the raw protobuf object to prevent noisy log outputs.
  3. KDoc Fixes: Updated all KDocs in ExplorationDataController to correctly reference [profileId] instead of the old [internalProfileId].
  4. Admin Profile Mocking: Updated logIntoAnalyticsReadyAdminProfile() in ExplorationProgressControllerTest to explicitly use ProfileId.newBuilder().setInternalId(0).build() instead of getDefaultInstance() to guarantee proto equality in map keys.

@Kishan8548
Kishan8548 marked this pull request as ready for review June 30, 2026 11:43
@Kishan8548

Kishan8548 commented Jun 30, 2026

Copy link
Copy Markdown
Contributor Author

@adhiamboperes The generic-shard10 failure is a pre-existing D8 desugaring issue: RecyclerView$LayoutParams not found while desugaring FlexboxLayoutManager$LayoutParams. This error occurs at the instrumentation APK packaging step (action 9752/9755) — all Kotlin compilation for this PR succeeds. Could you please re-run this job?

@Neer-rn

Neer-rn commented Jun 30, 2026

Copy link
Copy Markdown
Collaborator

@ShankhanilSaha Would you mind taking a first pass on this? PTAL.

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

APK & AAB differences analysis

Note that this is a summarized snapshot. See the CI artifacts for detailed differences.

Dev

Expand to see flavor specifics

Universal APK

APK file size: 19 MiB (old), 19 MiB (new), 47 KiB (Removed)

APK download size (estimated): 18 MiB (old), 18 MiB (new), 41 KiB (Removed)

Method count: 266903 (old), 266006 (new), 897 (Removed)

Features: 1 (old), 1 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 7149 (old), 7119 (new), 30 (Removed)

  • Anim: 43 (old), 43 (new), 0 (No change)
  • Animator: 26 (old), 26 (new), 0 (No change)
  • Array: 15 (old), 15 (new), 0 (No change)
  • Attr: 922 (old), 922 (new), 0 (No change)
  • Bool: 9 (old), 9 (new), 0 (No change)
  • Color: 1012 (old), 1005 (new), 7 (Removed):
    • color/color_def_silver_grey (removed)
    • color/color_palette_lesson_progress_indicator_node_background_color (removed)
    • color/color_palette_lesson_progress_indicator_reached_color (removed)
    • color/color_palette_lesson_progress_indicator_upcoming_color (removed)
    • color/component_color_lesson_progress_indicator_node_background_color (removed)
    • And 2 others
  • Dimen: 1094 (old), 1093 (new), 1 (Removed):
    • dimen/study_guide_fragment_padding_bottom (removed)
  • Drawable: 393 (old), 393 (new), 0 (No change)
  • Id: 1378 (old), 1363 (new), 15 (Removed):
    • id/lesson_progress_indicator (removed)
    • id/study_guide_continue_studying_text_view (removed)
    • id/study_guide_fragment_placeholder (removed)
    • id/study_guide_navigation_card_container (removed)
    • id/study_guide_next_navigation_card (removed)
    • And 10 others
  • Integer: 37 (old), 37 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 406 (old), 401 (new), 5 (Removed):
    • layout/lesson_progress_indicator_item (removed)
    • layout/study_guide_activity (removed)
    • layout/study_guide_fragment (removed)
    • layout/study_guide_section_content (removed)
    • layout/study_guide_section_heading (removed)
  • Menu: 3 (old), 3 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • Raw: 2 (old), 2 (new), 0 (No change)
  • String: 940 (old), 938 (new), 2 (Removed):
    • string/lesson_progress_indicator_content_description (removed)
    • string/study_guide_activity_title (removed)
  • Style: 840 (old), 840 (new), 0 (No change)
  • Xml: 7 (old), 7 (new), 0 (No change)

Lesson assets: 69 (old), 69 (new), 0 (No change)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 19 MiB (old), 19 MiB (new), 47 KiB (Removed)
APK download size (estimated): 18 MiB (old), 18 MiB (new), 44 KiB (Removed)
Method count: 266903 (old), 266006 (new), 897 (Removed)
Resources: 7099 (old), 7069 (new), 30 (Removed)

  • Color: 1012 (old), 1005 (new), 7 (Removed)
  • Dimen: 1090 (old), 1089 (new), 1 (Removed)
  • Id: 1378 (old), 1363 (new), 15 (Removed)
  • Layout: 406 (old), 401 (new), 5 (Removed)
  • String: 940 (old), 938 (new), 2 (Removed)

Configuration hdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 18 KiB (old), 18 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 49 KiB (old), 49 KiB (new), 0 bytes (No change)
APK download size (estimated): 14 KiB (old), 14 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 46 KiB (old), 46 KiB (new), 0 bytes (No change)
APK download size (estimated): 14 KiB (old), 14 KiB (new), 2 bytes (Added)

Configuration tvdpi

APK file size: 86 KiB (old), 86 KiB (new), 0 bytes (No change)
APK download size (estimated): 29 KiB (old), 29 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 57 KiB (old), 57 KiB (new), 0 bytes (No change)
APK download size (estimated): 21 KiB (old), 21 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 63 KiB (old), 63 KiB (new), 0 bytes (No change)
APK download size (estimated): 29 KiB (old), 29 KiB (new), 3 bytes (Removed)

Configuration xxxhdpi

APK file size: 64 KiB (old), 64 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 1 bytes (Added)

Alpha

Expand to see flavor specifics

Universal APK

APK file size: 11 MiB (old), 11 MiB (new), 32 KiB (Removed)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 28 KiB (Removed)

Method count: 119174 (old), 118720 (new), 454 (Removed)

Features: 1 (old), 1 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 6084 (old), 6054 (new), 30 (Removed)

  • Anim: 33 (old), 33 (new), 0 (No change)
  • Animator: 24 (old), 24 (new), 0 (No change)
  • Array: 14 (old), 14 (new), 0 (No change)
  • Attr: 888 (old), 888 (new), 0 (No change)
  • Bool: 8 (old), 8 (new), 0 (No change)
  • Color: 860 (old), 853 (new), 7 (Removed):
    • color/color_def_silver_grey (removed)
    • color/color_palette_lesson_progress_indicator_node_background_color (removed)
    • color/color_palette_lesson_progress_indicator_reached_color (removed)
    • color/color_palette_lesson_progress_indicator_upcoming_color (removed)
    • color/component_color_lesson_progress_indicator_node_background_color (removed)
    • And 2 others
  • Dimen: 816 (old), 815 (new), 1 (Removed):
    • dimen/study_guide_fragment_padding_bottom (removed)
  • Drawable: 355 (old), 355 (new), 0 (No change)
  • Id: 1319 (old), 1304 (new), 15 (Removed):
    • id/lesson_progress_indicator (removed)
    • id/study_guide_continue_studying_text_view (removed)
    • id/study_guide_fragment_placeholder (removed)
    • id/study_guide_navigation_card_container (removed)
    • id/study_guide_next_navigation_card (removed)
    • And 10 others
  • Integer: 32 (old), 32 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 364 (old), 359 (new), 5 (Removed):
    • layout/lesson_progress_indicator_item (removed)
    • layout/study_guide_activity (removed)
    • layout/study_guide_fragment (removed)
    • layout/study_guide_section_content (removed)
    • layout/study_guide_section_heading (removed)
  • Menu: 1 (old), 1 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • String: 861 (old), 859 (new), 2 (Removed):
    • string/lesson_progress_indicator_content_description (removed)
    • string/study_guide_activity_title (removed)
  • Style: 486 (old), 486 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 70 (old), 70 (new), 0 (No change)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 11 MiB (old), 11 MiB (new), 32 KiB (Removed)
APK download size (estimated): 10 MiB (old), 10 MiB (new), 28 KiB (Removed)
Method count: 119174 (old), 118720 (new), 454 (Removed)
Resources: 6041 (old), 6011 (new), 30 (Removed)

  • Color: 860 (old), 853 (new), 7 (Removed)
  • Dimen: 814 (old), 813 (new), 1 (Removed)
  • Id: 1319 (old), 1304 (new), 15 (Removed)
  • Layout: 364 (old), 359 (new), 5 (Removed)
  • String: 861 (old), 859 (new), 2 (Removed)

Configuration hdpi

APK file size: 43 KiB (old), 43 KiB (new), 0 bytes (No change)
APK download size (estimated): 17 KiB (old), 17 KiB (new), 2 bytes (Added)

Configuration ldpi

APK file size: 45 KiB (old), 45 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 1 bytes (Added)

Configuration mdpi

APK file size: 38 KiB (old), 38 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 73 KiB (old), 73 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 3 bytes (Removed)

Configuration xhdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 20 KiB (old), 20 KiB (new), 1 bytes (Added)

Configuration xxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 5 bytes (Removed)

Configuration xxxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 4 bytes (Removed)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 4 bytes (Removed)

Beta

Expand to see flavor specifics

Universal APK

APK file size: 11 MiB (old), 11 MiB (new), 32 KiB (Removed)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 25 KiB (Removed)

Method count: 119181 (old), 118727 (new), 454 (Removed)

Features: 1 (old), 1 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 6084 (old), 6054 (new), 30 (Removed)

  • Anim: 33 (old), 33 (new), 0 (No change)
  • Animator: 24 (old), 24 (new), 0 (No change)
  • Array: 14 (old), 14 (new), 0 (No change)
  • Attr: 888 (old), 888 (new), 0 (No change)
  • Bool: 8 (old), 8 (new), 0 (No change)
  • Color: 860 (old), 853 (new), 7 (Removed):
    • color/color_def_silver_grey (removed)
    • color/color_palette_lesson_progress_indicator_node_background_color (removed)
    • color/color_palette_lesson_progress_indicator_reached_color (removed)
    • color/color_palette_lesson_progress_indicator_upcoming_color (removed)
    • color/component_color_lesson_progress_indicator_node_background_color (removed)
    • And 2 others
  • Dimen: 816 (old), 815 (new), 1 (Removed):
    • dimen/study_guide_fragment_padding_bottom (removed)
  • Drawable: 355 (old), 355 (new), 0 (No change)
  • Id: 1319 (old), 1304 (new), 15 (Removed):
    • id/lesson_progress_indicator (removed)
    • id/study_guide_continue_studying_text_view (removed)
    • id/study_guide_fragment_placeholder (removed)
    • id/study_guide_navigation_card_container (removed)
    • id/study_guide_next_navigation_card (removed)
    • And 10 others
  • Integer: 32 (old), 32 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 364 (old), 359 (new), 5 (Removed):
    • layout/lesson_progress_indicator_item (removed)
    • layout/study_guide_activity (removed)
    • layout/study_guide_fragment (removed)
    • layout/study_guide_section_content (removed)
    • layout/study_guide_section_heading (removed)
  • Menu: 1 (old), 1 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • String: 861 (old), 859 (new), 2 (Removed):
    • string/lesson_progress_indicator_content_description (removed)
    • string/study_guide_activity_title (removed)
  • Style: 486 (old), 486 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 70 (old), 70 (new), 0 (No change)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 11 MiB (old), 11 MiB (new), 32 KiB (Removed)
APK download size (estimated): 10 MiB (old), 10 MiB (new), 28 KiB (Removed)
Method count: 119181 (old), 118727 (new), 454 (Removed)
Resources: 6041 (old), 6011 (new), 30 (Removed)

  • Color: 860 (old), 853 (new), 7 (Removed)
  • Dimen: 814 (old), 813 (new), 1 (Removed)
  • Id: 1319 (old), 1304 (new), 15 (Removed)
  • Layout: 364 (old), 359 (new), 5 (Removed)
  • String: 861 (old), 859 (new), 2 (Removed)

Configuration hdpi

APK file size: 43 KiB (old), 43 KiB (new), 0 bytes (No change)
APK download size (estimated): 17 KiB (old), 17 KiB (new), 2 bytes (Added)

Configuration ldpi

APK file size: 45 KiB (old), 45 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 1 bytes (Removed)

Configuration mdpi

APK file size: 38 KiB (old), 38 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 1 bytes (Added)

Configuration tvdpi

APK file size: 73 KiB (old), 73 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 2 bytes (Removed)

Configuration xhdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 20 KiB (old), 20 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 5 bytes (Removed)

Configuration xxxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 4 bytes (Removed)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 3 bytes (Removed)

Ga

Expand to see flavor specifics

Universal APK

APK file size: 11 MiB (old), 11 MiB (new), 32 KiB (Removed)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 27 KiB (Removed)

Method count: 119181 (old), 118727 (new), 454 (Removed)

Features: 1 (old), 1 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 6084 (old), 6054 (new), 30 (Removed)

  • Anim: 33 (old), 33 (new), 0 (No change)
  • Animator: 24 (old), 24 (new), 0 (No change)
  • Array: 14 (old), 14 (new), 0 (No change)
  • Attr: 888 (old), 888 (new), 0 (No change)
  • Bool: 8 (old), 8 (new), 0 (No change)
  • Color: 860 (old), 853 (new), 7 (Removed):
    • color/color_def_silver_grey (removed)
    • color/color_palette_lesson_progress_indicator_node_background_color (removed)
    • color/color_palette_lesson_progress_indicator_reached_color (removed)
    • color/color_palette_lesson_progress_indicator_upcoming_color (removed)
    • color/component_color_lesson_progress_indicator_node_background_color (removed)
    • And 2 others
  • Dimen: 816 (old), 815 (new), 1 (Removed):
    • dimen/study_guide_fragment_padding_bottom (removed)
  • Drawable: 355 (old), 355 (new), 0 (No change)
  • Id: 1319 (old), 1304 (new), 15 (Removed):
    • id/lesson_progress_indicator (removed)
    • id/study_guide_continue_studying_text_view (removed)
    • id/study_guide_fragment_placeholder (removed)
    • id/study_guide_navigation_card_container (removed)
    • id/study_guide_next_navigation_card (removed)
    • And 10 others
  • Integer: 32 (old), 32 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 364 (old), 359 (new), 5 (Removed):
    • layout/lesson_progress_indicator_item (removed)
    • layout/study_guide_activity (removed)
    • layout/study_guide_fragment (removed)
    • layout/study_guide_section_content (removed)
    • layout/study_guide_section_heading (removed)
  • Menu: 1 (old), 1 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • String: 861 (old), 859 (new), 2 (Removed):
    • string/lesson_progress_indicator_content_description (removed)
    • string/study_guide_activity_title (removed)
  • Style: 486 (old), 486 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 70 (old), 70 (new), 0 (No change)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 11 MiB (old), 11 MiB (new), 32 KiB (Removed)
APK download size (estimated): 10 MiB (old), 10 MiB (new), 29 KiB (Removed)
Method count: 119181 (old), 118727 (new), 454 (Removed)
Resources: 6041 (old), 6011 (new), 30 (Removed)

  • Color: 860 (old), 853 (new), 7 (Removed)
  • Dimen: 814 (old), 813 (new), 1 (Removed)
  • Id: 1319 (old), 1304 (new), 15 (Removed)
  • Layout: 364 (old), 359 (new), 5 (Removed)
  • String: 861 (old), 859 (new), 2 (Removed)

Configuration hdpi

APK file size: 43 KiB (old), 43 KiB (new), 0 bytes (No change)
APK download size (estimated): 17 KiB (old), 17 KiB (new), 3 bytes (Added)

Configuration ldpi

APK file size: 45 KiB (old), 45 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 1 bytes (Removed)

Configuration mdpi

APK file size: 38 KiB (old), 38 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 1 bytes (Added)

Configuration tvdpi

APK file size: 73 KiB (old), 73 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 4 bytes (Removed)

Configuration xhdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 20 KiB (old), 20 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 5 bytes (Added)

Configuration xxxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 4 bytes (Removed)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 2 bytes (Removed)

@Neer-rn Neer-rn left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @Kishan8548, the migration work looks solid to me. I checked your changes and they mostly look good. A few things I wouldd like you to look into:

  1. Please go through all the Copilot comments and try to resolve each of them. Once you have addressed a Copilot comment, you can mark it as resolved. However, please only resolve Copilot comments yourself don’t resolve reviewer comments.
  2. I re-ran the CI, but it’s still failing. I haven’t got chance to closely yet, but it doesn’t seem like a flaky CI failure to me. It looks like there may be an issue with the code, so please run the tests locally and push again only once the build passes.
  3. I can see that Task 3 in the issue also mentions arguments.proto changes, but I don’t see any proto changes in this PR. Is there a reason for that?

@oppiabot

oppiabot Bot commented Jul 7, 2026

Copy link
Copy Markdown

Hi @Kishan8548, it looks like some changes were requested on this pull request by @Neer-rn. PTAL. Thanks!

…ofileId

- Change ExplorationActivityParams, ExplorationFragmentArguments,
  ResumeLessonActivityParams, and ResumeLessonFragmentArguments
  profile_id fields from LegacyProfileId to ProfileId as required
  by oppia#6203 Task 3.
- Add toProfileIdPreservingZero() at write boundaries (Activity/Fragment
  createIntent/newInstance functions) and toLegacyProfileId() at read
  boundaries (onCreate/onCreateView) to preserve app-layer compatibility
  while the full internal migration proceeds in follow-up work.
- Remove now-redundant toProfileIdPreservingZero() call in
  ExplorationFragmentPresenter since profileId is already ProfileId.
- Update ResumeLessonFragmentTest assertion to compare against ProfileId
  (not LegacyProfileId) since args.profileId is now natively ProfileId.
@Kishan8548

Copy link
Copy Markdown
Contributor Author

@Neer-rn These two CI failures are caused by pre-existing AAPT2/DataBinding errors in the develop branch itself (40 errors in XML test layouts like activity_text_input_interaction_view_test.xml and add_profile_activity.xmlcustomBackgroundColor attribute not found, View.VISIBLE incompatible with visibility enum, etc.). These failures exist on every PR that touches app-layer code and are unrelated to this migration. I've verified this by running bazel build //app:binding_adapters on a clean checkout of origin/develop and getting the same 40 errors.

@Neer-rn

Neer-rn commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator

@Neer-rn These two CI failures are caused by pre-existing AAPT2/DataBinding errors in the develop branch itself (40 errors in XML test layouts like activity_text_input_interaction_view_test.xml and add_profile_activity.xmlcustomBackgroundColor attribute not found, View.VISIBLE incompatible with visibility enum, etc.). These failures exist on every PR that touches app-layer code and are unrelated to this migration. I've verified this by running bazel build //app:binding_adapters on a clean checkout of origin/develop and getting the same 40 errors.

Got it, thanks! I will take a closer look during another review pass. Feel free to assign it back to me when you think it’s ready for review.

@oppiabot

oppiabot Bot commented Jul 10, 2026

Copy link
Copy Markdown

Unassigning @Kishan8548 since a re-review was requested. @Kishan8548, please make sure you have addressed all review comments. Thanks!

@Kishan8548

Copy link
Copy Markdown
Contributor Author

@Neer-rn PTAL, I think it's ready for review as the whole migration for this task is done.

@Neer-rn Neer-rn self-assigned this Jul 10, 2026

@Neer-rn Neer-rn left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the changes. Mostly this PR looks great. I had few small comments. PTAL!!

@oppiabot oppiabot Bot unassigned Neer-rn Jul 11, 2026
@oppiabot

oppiabot Bot commented Jul 11, 2026

Copy link
Copy Markdown

Unassigning @Neer-rn since the review is done.

@oppiabot

oppiabot Bot commented Jul 11, 2026

Copy link
Copy Markdown

Hi @Kishan8548, it looks like some changes were requested on this pull request by @Neer-rn. PTAL. Thanks!

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report

Results

Number of files assessed: 80
Overall Coverage: 87.29%
Coverage Analysis: PASS

Passing coverage

Files with passing code coverage
File Coverage Lines Hit Status Min Required
EventBundleCreator.ktutility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt
76.29% 341 / 447 70%
SurveyGatingController.ktdomain/src/main/java/org/oppia/android/domain/survey/SurveyGatingController.kt
96.97% 32 / 33 70%
VersionInversionChecker.ktscripts/src/java/org/oppia/android/scripts/release/VersionInversionChecker.kt
100.00% 39 / 39 70%
UploadBinaryToPlayConsole.ktscripts/src/java/org/oppia/android/scripts/release/UploadBinaryToPlayConsole.kt
99.00% 99 / 100 70%
UploadChangelogToPlayConsole.ktscripts/src/java/org/oppia/android/scripts/release/UploadChangelogToPlayConsole.kt
80.90% 72 / 89 70%
ChangelogExistenceChecker.ktscripts/src/java/org/oppia/android/scripts/release/ChangelogExistenceChecker.kt
100.00% 17 / 17 70%
GooglePlayConsoleClient.ktscripts/src/java/org/oppia/android/scripts/release/GooglePlayConsoleClient.kt
96.55% 84 / 87 70%
PlayConsoleService.ktscripts/src/java/org/oppia/android/scripts/release/remote/PlayConsoleService.kt
100.00% 2 / 2 70%
UpdateRolloutFraction.ktscripts/src/java/org/oppia/android/scripts/release/UpdateRolloutFraction.kt
86.36% 57 / 66 70%
PendingReleaseChecker.ktscripts/src/java/org/oppia/android/scripts/release/PendingReleaseChecker.kt
100.00% 13 / 13 70%
FakePlayConsoleClient.ktscripts/src/java/org/oppia/android/scripts/release/FakePlayConsoleClient.kt
100.00% 50 / 50 70%
SignReleaseBinary.ktscripts/src/java/org/oppia/android/scripts/release/SignReleaseBinary.kt
93.33% 42 / 45 70%
AppFlavor.ktscripts/src/java/org/oppia/android/scripts/release/AppFlavor.kt
100.00% 5 / 5 70%
TrackResponse.ktscripts/src/java/org/oppia/android/scripts/release/model/TrackResponse.kt
100.00% 9 / 9 70%
InsertEditRequest.ktscripts/src/java/org/oppia/android/scripts/release/model/InsertEditRequest.kt
100.00% 9 / 9 70%
TrackUpdateRequest.ktscripts/src/java/org/oppia/android/scripts/release/model/TrackUpdateRequest.kt
100.00% 15 / 15 70%
BundleResponse.ktscripts/src/java/org/oppia/android/scripts/release/model/BundleResponse.kt
100.00% 2 / 2 70%
EditResponse.ktscripts/src/java/org/oppia/android/scripts/release/model/EditResponse.kt
100.00% 2 / 2 70%
CloudKmsSigner.ktscripts/src/java/org/oppia/android/scripts/release/CloudKmsSigner.kt
98.33% 59 / 60 70%
FakeCloudSigner.ktscripts/src/java/org/oppia/android/scripts/release/FakeCloudSigner.kt
100.00% 19 / 19 70%

Exempted coverage

Files exempted from coverage
File Exemption Reason
ExplorationProgress.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgress.kt
This file is exempted from having a test file; skipping coverage check.
ExplorationProgressListener.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressListener.kt
This file is exempted from having a test file; skipping coverage check.
TimerSessionState.ktdomain/src/main/java/org/oppia/android/domain/exploration/TimerSessionState.kt
This file is exempted from having a test file; skipping coverage check.
ExplorationActiveTimeController.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationActiveTimeController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationProgressController.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationCheckpointController.ktdomain/src/main/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationDataController.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationDataController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LearnerAnalyticsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AudioPlayerController.ktdomain/src/main/java/org/oppia/android/domain/audio/AudioPlayerController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ModifyLessonProgressController.ktdomain/src/main/java/org/oppia/android/domain/devoptions/ModifyLessonProgressController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StoryProgressController.ktdomain/src/main/java/org/oppia/android/domain/topic/StoryProgressController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicListController.ktdomain/src/main/java/org/oppia/android/domain/topic/TopicListController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicController.ktdomain/src/main/java/org/oppia/android/domain/topic/TopicController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CloudSigner.ktscripts/src/java/org/oppia/android/scripts/release/CloudSigner.kt
This file is exempted from having a test file; skipping coverage check.
PlayConsoleClient.ktscripts/src/java/org/oppia/android/scripts/release/PlayConsoleClient.kt
This file is exempted from having a test file; skipping coverage check.
StoryProgressTestHelper.kttesting/src/main/java/org/oppia/android/testing/story/StoryProgressTestHelper.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationCheckpointTestHelper.kttesting/src/main/java/org/oppia/android/testing/lightweightcheckpointing/ExplorationCheckpointTestHelper.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LessonProgressIndicatorView.ktapp/src/main/java/org/oppia/android/app/customview/LessonProgressIndicatorView.kt
This file is exempted from having a test file; skipping coverage check.
RecentlyPlayedFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
RecentlyPlayedActivity.ktapp/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FragmentComponentImpl.ktapp/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt
This file is exempted from having a test file; skipping coverage check.
MarkChaptersCompletedFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StudyGuideFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideViewModel.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideItemViewModel.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideItemViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideActivityPresenter.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideActivity.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StudyGuideSectionContentViewModel.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideSectionContentViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideFragment.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StudyGuideSectionHeadingViewModel.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideSectionHeadingViewModel.kt
This file is exempted from having a test file; skipping coverage check.
TopicActivity.ktapp/src/main/java/org/oppia/android/app/topic/TopicActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RouteToStudyGuideListener.ktapp/src/main/java/org/oppia/android/app/topic/RouteToStudyGuideListener.kt
This file is exempted from having a test file; skipping coverage check.
TopicLessonsFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TopicLessonsFragment.ktapp/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicRevisionFragment.ktapp/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicRevisionFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TopicFragment.ktapp/src/main/java/org/oppia/android/app/topic/TopicFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
QuestionPlayerActivity.ktapp/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ResumeLessonFragment.ktapp/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ResumeLessonActivity.ktapp/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ResumeLessonFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TopicRevisionTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/TopicRevisionTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
ExplorationTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/ExplorationTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TopicTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/TopicTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
TopicTestActivityForStory.ktapp/src/main/java/org/oppia/android/app/testing/TopicTestActivityForStory.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ActivityComponentImpl.ktapp/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt
This file is exempted from having a test file; skipping coverage check.
StoryChapterSummaryViewModel.ktapp/src/main/java/org/oppia/android/app/story/storyitemviewmodel/StoryChapterSummaryViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StoryActivity.ktapp/src/main/java/org/oppia/android/app/story/StoryActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StoryFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/story/StoryFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ExplorationActivityPresenter.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ExplorationFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ExplorationActivity.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationFragment.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationFragment.kt
This file is exempted from having a test file; skipping coverage check.
StateFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/player/state/StateFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
StatePlayerRecyclerViewAssembler.ktapp/src/main/java/org/oppia/android/app/player/state/StatePlayerRecyclerViewAssembler.kt
This file is exempted from having a test file; skipping coverage check.
StateItemViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/StateItemViewModel.kt
This file is exempted from having a test file; skipping coverage check.
LessonProgressViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/LessonProgressViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StateViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/StateViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StateFragmentTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
StateFragment.ktapp/src/main/java/org/oppia/android/app/player/state/StateFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.

Refer test_file_exemptions.textproto for the comprehensive list of file exemptions and their required coverage percentages.

To learn more, visit the Oppia Android Code Coverage wiki page

@Kishan8548

Copy link
Copy Markdown
Contributor Author

@Neer-rn PTAL. I've addressed all the review comments and this pr is ready for review.

@oppiabot

oppiabot Bot commented Jul 16, 2026

Copy link
Copy Markdown

Unassigning @Kishan8548 since a re-review was requested. @Kishan8548, please make sure you have addressed all review comments. Thanks!

@Neer-rn Neer-rn self-assigned this Jul 16, 2026

@Neer-rn Neer-rn left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!! Great work kishan. @adhiamboperes PTAL

@oppiabot oppiabot Bot unassigned Neer-rn Jul 16, 2026
@oppiabot

oppiabot Bot commented Jul 16, 2026

Copy link
Copy Markdown

Unassigning @Neer-rn since they have already approved the PR.

@oppiabot

oppiabot Bot commented Jul 16, 2026

Copy link
Copy Markdown

Assigning @adhiamboperes for code owner reviews. Thanks!

@oppia oppia deleted a comment from coderabbitai Bot Jul 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants