Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor admin control to use profile #5619

Open
wants to merge 5 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import org.oppia.android.app.translation.AppLanguageResourceHandler
import org.oppia.android.util.extensions.getProto
import org.oppia.android.util.logging.CurrentAppScreenNameIntentDecorator.decorateWithScreenName
import org.oppia.android.util.profile.CurrentUserProfileIdIntentDecorator.decorateWithUserProfileId
import org.oppia.android.util.profile.CurrentUserProfileIdIntentDecorator.extractCurrentUserProfileId
import javax.inject.Inject

/** Argument key used to identify [ProfileListFragment] in the backstack. */
Expand Down Expand Up @@ -75,7 +76,7 @@ class AdministratorControlsActivity :
// TODO(#661): Change the default fragment in the right hand side to be EditAccount fragment in the case of multipane controls.
PROFILE_LIST_FRAGMENT
}
val selectedProfileId = args?.selectedProfileId ?: -1
val selectedProfileId = intent?.extractCurrentUserProfileId() ?: ProfileId.getDefaultInstance()

administratorControlsActivityPresenter.handleOnCreate(
extraControlsTitle,
Expand Down Expand Up @@ -107,7 +108,7 @@ class AdministratorControlsActivity :
startActivity(ProfileAndDeviceIdActivity.createIntent(this))
}

override fun loadProfileEdit(profileId: Int, profileName: String) {
override fun loadProfileEdit(profileId: ProfileId, profileName: String) {
lastLoadedFragment = PROFILE_EDIT_FRAGMENT
administratorControlsActivityPresenter.loadProfileEdit(profileId, profileName)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ import org.oppia.android.app.administratorcontrols.appversion.AppVersionFragment
import org.oppia.android.app.administratorcontrols.learneranalytics.ProfileAndDeviceIdFragment
import org.oppia.android.app.drawer.NavigationDrawerFragment
import org.oppia.android.app.model.AdministratorControlActivityStateBundle
import org.oppia.android.app.model.ProfileId
import org.oppia.android.app.settings.profile.LoadProfileEditDeletionDialogListener
import org.oppia.android.app.settings.profile.ProfileEditFragment
import org.oppia.android.app.settings.profile.ProfileListFragment
import org.oppia.android.app.translation.AppLanguageResourceHandler
import org.oppia.android.databinding.AdministratorControlsActivityBinding
import org.oppia.android.util.extensions.putProto
import org.oppia.android.util.profile.CurrentUserProfileIdIntentDecorator.decorateWithUserProfileId
import javax.inject.Inject

/** The presenter for [AdministratorControlsActivity]. */
Expand All @@ -29,15 +31,15 @@ class AdministratorControlsActivityPresenter @Inject constructor(
private lateinit var binding: AdministratorControlsActivityBinding

private lateinit var lastLoadedFragment: String
private var selectedProfileId: Int = -1
private var selectedProfileId: ProfileId = ProfileId.getDefaultInstance()
private lateinit var extraControlsTitle: String
private var isProfileDeletionDialogVisible: Boolean = false

/** Initializes the [AdministratorControlsActivity] and sets the navigation drawer. */
fun handleOnCreate(
extraControlsTitle: String?,
lastLoadedFragment: String,
selectedProfileId: Int,
selectedProfileId: ProfileId,
isProfileDeletionDialogVisible: Boolean
) {
binding = DataBindingUtil.setContentView(
Expand Down Expand Up @@ -68,7 +70,7 @@ class AdministratorControlsActivityPresenter @Inject constructor(
PROFILE_EDIT_FRAGMENT -> selectedProfileId.let { profileId ->
if (extraControlsTitle != null) {
activity.loadProfileEdit(profileId = profileId, profileName = extraControlsTitle)
if (isProfileDeletionDialogVisible && profileId != 0) {
if (isProfileDeletionDialogVisible) {
tobioyelekan marked this conversation as resolved.
Show resolved Hide resolved
val fragment = activity.supportFragmentManager.findFragmentById(
R.id.administrator_controls_fragment_multipane_placeholder
)
Expand Down Expand Up @@ -142,13 +144,13 @@ class AdministratorControlsActivityPresenter @Inject constructor(
}

/** Loads the [ProfileEditFragment] when the user clicks on a profile in tablet multipane mode. */
fun loadProfileEdit(profileId: Int, profileName: String) {
fun loadProfileEdit(profileId: ProfileId, profileName: String) {
lastLoadedFragment = PROFILE_EDIT_FRAGMENT
selectedProfileId = profileId
extraControlsTitle = profileName
setExtraControlsTitle(extraControlsTitle)
setMultipaneBackButtonVisibility(View.VISIBLE)
val fragment = ProfileEditFragment.newInstance(profileId, isMultipane)
val fragment = ProfileEditFragment.newInstance(profileId.internalId, isMultipane)
activity.supportFragmentManager.beginTransaction().replace(
R.id.administrator_controls_fragment_multipane_placeholder,
fragment
Expand Down Expand Up @@ -209,9 +211,11 @@ class AdministratorControlsActivityPresenter @Inject constructor(
this@AdministratorControlsActivityPresenter.isProfileDeletionDialogVisible.let {
isProfileDeletionDialogVisible = it
}
selectedProfileId = this@AdministratorControlsActivityPresenter.selectedProfileId
}
.build()
outState.decorateWithUserProfileId(
this@AdministratorControlsActivityPresenter.selectedProfileId
)
outState.putProto(ADMINISTRATOR_CONTROLS_ACTIVITY_STATE_KEY, args)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ class AdministratorControlsFragmentPresenter @Inject constructor(
) {
private lateinit var binding: AdministratorControlsFragmentBinding
private lateinit var linearLayoutManager: LinearLayoutManager
private var internalProfileId: Int = -1
private lateinit var profileId: ProfileId

@Inject
Expand All @@ -56,8 +55,7 @@ class AdministratorControlsFragmentPresenter @Inject constructor(
/* attachToRoot= */ false
)

internalProfileId = activity.intent.extractCurrentUserProfileId().internalId
profileId = ProfileId.newBuilder().setInternalId(internalProfileId).build()
profileId = activity.intent.extractCurrentUserProfileId()
administratorControlsViewModel.setProfileId(profileId)

linearLayoutManager = LinearLayoutManager(activity.applicationContext)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.oppia.android.app.administratorcontrols

import org.oppia.android.app.model.ProfileId

/** Listener for when an activity should load [ProfileEditFragment]. */
interface LoadProfileEditListener {
/** Inflates [ProfileEditFragment] as part of a tablet mode a multipane fragment. */
fun loadProfileEdit(profileId: Int, profileName: String)
fun loadProfileEdit(profileId: ProfileId, profileName: String)
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package org.oppia.android.app.settings.profile

import org.oppia.android.app.model.ProfileId

/** Listener for when the activity should inflate [ProfileEditDeletionDialogFragment]. */
interface LoadProfileEditDeletionDialogListener {
/**
* Inflates [ProfileEditDeletionDialogFragment] for the configuration changes, i.e. rotating the device
* from landscape to portrait, and saves the state of the dialog.
*/
fun loadProfileEditDeletionDialog(internalProfileId: Int)
fun loadProfileEditDeletionDialog(profileId: ProfileId)
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import android.view.ViewGroup
import org.oppia.android.app.fragment.FragmentComponentImpl
import org.oppia.android.app.fragment.InjectableFragment
import org.oppia.android.app.model.ProfileEditFragmentArguments
import org.oppia.android.app.model.ProfileId
import org.oppia.android.util.extensions.getProto
import org.oppia.android.util.extensions.putProto
import javax.inject.Inject
Expand Down Expand Up @@ -74,7 +75,7 @@ class ProfileEditFragment :
profileEditFragmentPresenter.deleteProfile(internalProfileId)
}

override fun loadProfileEditDeletionDialog(internalProfileId: Int) {
profileEditFragmentPresenter.handleLoadProfileDeletionDialog(internalProfileId)
override fun loadProfileEditDeletionDialog(profileId: ProfileId) {
profileEditFragmentPresenter.handleLoadProfileDeletionDialog(profileId.internalId)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class ProfileListFragmentPresenter @Inject constructor(
routeToProfileEditListener.routeToProfileEditActivity(profile.id.internalId)
} else {
val loadProfileEditListener = (activity as LoadProfileEditListener)
loadProfileEditListener.loadProfileEdit(profile.id.internalId, profile.name)
loadProfileEditListener.loadProfileEdit(profile.id, profile.name)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class AdministratorControlsFragmentTestActivity :

override fun loadAppVersion() {}

override fun loadProfileEdit(profileId: Int, profileName: String) {}
override fun loadProfileEdit(profileId: ProfileId, profileName: String) {}

override fun showLogoutDialog() {}

Expand Down
Loading