Skip to content

Commit 8a7fe0a

Browse files
Fixes #3641 Use finish() instead of intent for smoother navigation (#5557)
## Description: - Fixes #3641 This PR simplifies the navigation logic in `AddProfileActivity` and documents the reasoning behind not using `finish()` in `ExitProfileDialogFragment`. ### Changes Made: - **AddProfileActivity:** - Replaced the use of `Intent` with `FLAG_ACTIVITY_CLEAR_TOP` by calling `finish()`. - With the live data bug resolved, the activity stack can now be managed more cleanly without requiring a new intent. **Benefits:** - Avoids unnecessary activity recreation. - Improves navigation efficiency and reduces overhead. - **ExitProfileDialogFragment:** - Retained the use of an `Intent` to navigate to `ProfileChooserActivity` instead of switching to `finish()`. - **Reason:** - `ProfileChooserActivity` is not directly below the current activity in the stack. - If `finish()` were used, the app would incorrectly navigate to `PinPasswordActivity`, resulting in undesirable behavior. ### Testing: 1. Verified that `AddProfileActivity` correctly navigates back to `ProfileChooserActivity` using `finish()` without activity recreation. 2. Confirmed that `ExitProfileDialogFragment` behaves as expected, retaining the correct navigation path through `Intent` to `ProfileChooserActivity`. ### Summary: This PR ensures cleaner navigation for `AddProfileActivity` by using `finish()`, while maintaining correct behavior in `ExitProfileDialogFragment` by continuing to use an intent-based approach. This makes the app more efficient while preserving user experience. ### Video Demo as everything is working fine. https://github.com/user-attachments/assets/fb383845-5672-4236-8618-a87583cbbba0 ## Essential Checklist - [x] The PR title and explanation each start with "Fix #bugnum: " (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".) - [x] Any changes to [scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets) files have their rationale included in the PR explanation. - [x] The PR follows the [style guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide). - [x] The PR does not contain any unnecessary code changes from Android Studio ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)). - [x] The PR is made from a branch that's **not** called "develop" and is up-to-date with "develop". - [x] The PR is **assigned** to the appropriate reviewers ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).
1 parent a125e51 commit 8a7fe0a

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

app/src/main/java/org/oppia/android/app/drawer/ExitProfileDialogFragment.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ class ExitProfileDialogFragment : InjectableDialogFragment() {
7070
dialog.dismiss()
7171
}
7272
.setPositiveButton(R.string.home_activity_back_dialog_exit) { _, _ ->
73-
// TODO(#3641): Investigate on using finish instead of intent.
7473
val intent = ProfileChooserActivity.createProfileChooserActivity(activity!!)
7574
if (!restoreLastCheckedItem) {
7675
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

app/src/main/java/org/oppia/android/app/profile/AddProfileActivity.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,7 @@ class AddProfileActivity : InjectableAutoLocalizedAppCompatActivity() {
4444
}
4545

4646
override fun onSupportNavigateUp(): Boolean {
47-
// TODO(#3641): Investigate on using finish instead of intent.
48-
val intent = Intent(this, ProfileChooserActivity::class.java)
49-
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
50-
startActivity(intent)
47+
finish()
5148
return false
5249
}
5350

app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import androidx.appcompat.app.AppCompatActivity
1313
import androidx.test.core.app.ActivityScenario.launch
1414
import androidx.test.core.app.ApplicationProvider
1515
import androidx.test.espresso.Espresso.onView
16+
import androidx.test.espresso.action.ViewActions
1617
import androidx.test.espresso.action.ViewActions.click
1718
import androidx.test.espresso.action.ViewActions.closeSoftKeyboard
1819
import androidx.test.espresso.action.ViewActions.pressImeActionButton
@@ -1748,6 +1749,15 @@ class AddProfileActivityTest {
17481749
assertThat(currentScreenName).isEqualTo(ScreenName.ADD_PROFILE_ACTIVITY)
17491750
}
17501751

1752+
@Test
1753+
fun testAddProfileActivity_onBackPressed_finishActivity() {
1754+
val scenario = launch(AddProfileActivity::class.java)
1755+
onView(isRoot()).perform(ViewActions.pressBack())
1756+
testCoroutineDispatchers.runCurrent()
1757+
scenario.onActivity { activity ->
1758+
assertThat(activity.isFinishing).isTrue()
1759+
}
1760+
}
17511761
private fun createAddProfileActivityIntent(): Intent {
17521762
return AddProfileActivity.createAddProfileActivityIntent(
17531763
ApplicationProvider.getApplicationContext(),

0 commit comments

Comments
 (0)