diff --git a/app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivity.kt b/app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivity.kt index 2a1efcc2f49..4f6ecac1ecc 100644 --- a/app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivity.kt +++ b/app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivity.kt @@ -33,11 +33,6 @@ class ProfileEditActivity : InjectableAppCompatActivity() { profileEditActivityPresenter.handleOnCreate() } - override fun onRestoreInstanceState(savedInstanceState: Bundle?) { - super.onRestoreInstanceState(savedInstanceState) - profileEditActivityPresenter.handleOnRestoreSavedInstanceState() - } - override fun onSupportNavigateUp(): Boolean { val isMultipane = intent.extras!!.getBoolean(KEY_IS_MULTIPANE, false) if (isMultipane) { diff --git a/app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivityPresenter.kt index 1a2ac8409a6..441efce3084 100644 --- a/app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivityPresenter.kt +++ b/app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivityPresenter.kt @@ -1,7 +1,6 @@ package org.oppia.android.app.settings.profile import android.content.Intent -import android.widget.Switch import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil @@ -9,7 +8,6 @@ import androidx.lifecycle.Observer import org.oppia.android.R import org.oppia.android.app.activity.ActivityScope import org.oppia.android.app.model.ProfileId -import org.oppia.android.app.viewmodel.ViewModelProvider import org.oppia.android.databinding.ProfileEditActivityBinding import org.oppia.android.domain.profile.ProfileManagementController import org.oppia.android.util.data.DataProviders.Companion.toLiveData @@ -21,12 +19,11 @@ import javax.inject.Inject class ProfileEditActivityPresenter @Inject constructor( private val activity: AppCompatActivity, private val logger: ConsoleLogger, - private val profileManagementController: ProfileManagementController, - private val viewModelProvider: ViewModelProvider + private val profileManagementController: ProfileManagementController ) { - private val editViewModel: ProfileEditViewModel by lazy { - getProfileEditViewModel() - } + + @Inject + lateinit var profileEditViewModel: ProfileEditViewModel fun handleOnCreate() { activity.supportActionBar?.setDisplayHomeAsUpEnabled(true) @@ -37,12 +34,10 @@ class ProfileEditActivityPresenter @Inject constructor( R.layout.profile_edit_activity ) val profileId = activity.intent.getIntExtra(KEY_PROFILE_EDIT_PROFILE_ID, 0) - editViewModel.setProfileId( - profileId, - activity.findViewById(R.id.profile_edit_allow_download_switch) - ) + profileEditViewModel.setProfileId(profileId) + binding.apply { - viewModel = editViewModel + viewModel = profileEditViewModel lifecycleOwner = activity } @@ -55,7 +50,7 @@ class ProfileEditActivityPresenter @Inject constructor( ProfileResetPinActivity.createProfileResetPinActivity( activity, profileId, - editViewModel.isAdmin + profileEditViewModel.isAdmin ) ) } @@ -64,6 +59,20 @@ class ProfileEditActivityPresenter @Inject constructor( showDeletionDialog(profileId) } + profileEditViewModel.profile.observe( + activity, + Observer { + activity.title = it.name + } + ) + + profileEditViewModel.isAllowedDownloadAccess.observe( + activity, + Observer { + binding.profileEditAllowDownloadSwitch.isChecked = it + } + ) + binding.profileEditAllowDownloadSwitch.setOnCheckedChangeListener { compoundButton, checked -> if (compoundButton.isPressed) { profileManagementController.updateAllowDownloadAccess( @@ -85,10 +94,6 @@ class ProfileEditActivityPresenter @Inject constructor( } } - fun handleOnRestoreSavedInstanceState() { - activity.title = editViewModel.profileName - } - private fun showDeletionDialog(profileId: Int) { AlertDialog.Builder(activity, R.style.AlertDialogTheme) .setTitle(R.string.profile_edit_delete_dialog_title) @@ -111,8 +116,4 @@ class ProfileEditActivityPresenter @Inject constructor( ) }.create().show() } - - private fun getProfileEditViewModel(): ProfileEditViewModel { - return viewModelProvider.getForActivity(activity, ProfileEditViewModel::class.java) - } } diff --git a/app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditViewModel.kt b/app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditViewModel.kt index c796add4cb0..afceab2b050 100644 --- a/app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditViewModel.kt +++ b/app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditViewModel.kt @@ -1,8 +1,7 @@ package org.oppia.android.app.settings.profile -import android.widget.Switch -import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations import org.oppia.android.app.activity.ActivityScope import org.oppia.android.app.model.Profile @@ -14,18 +13,18 @@ import org.oppia.android.util.data.DataProviders.Companion.toLiveData import org.oppia.android.util.logging.ConsoleLogger import javax.inject.Inject -// TODO(#1633): Fix ViewModel to not depend on View /** The ViewModel for [ProfileEditActivity]. */ @ActivityScope class ProfileEditViewModel @Inject constructor( - private val activity: AppCompatActivity, private val logger: ConsoleLogger, private val profileManagementController: ProfileManagementController ) : ObservableViewModel() { private lateinit var profileId: ProfileId - private lateinit var switch: Switch - lateinit var profileName: String + private val isAllowedDownloadAccessMutableLiveData = MutableLiveData() + + /** Specifies whether download access has been enabled by the user. */ + val isAllowedDownloadAccess: LiveData = isAllowedDownloadAccessMutableLiveData val profile: LiveData by lazy { Transformations.map( @@ -36,9 +35,8 @@ class ProfileEditViewModel @Inject constructor( var isAdmin = false - fun setProfileId(id: Int, switch: Switch) { + fun setProfileId(id: Int) { profileId = ProfileId.newBuilder().setInternalId(id).build() - this.switch = switch } private fun processGetProfileResult(profileResult: AsyncResult): Profile { @@ -50,9 +48,7 @@ class ProfileEditViewModel @Inject constructor( ) } val profile = profileResult.getOrDefault(Profile.getDefaultInstance()) - switch.isChecked = profile.allowDownloadAccess - activity.title = profile.name - profileName = profile.name + isAllowedDownloadAccessMutableLiveData.value = profile.allowDownloadAccess isAdmin = profile.isAdmin return profile } diff --git a/app/src/main/res/layout/profile_edit_activity.xml b/app/src/main/res/layout/profile_edit_activity.xml index 432318c5dcd..c8503fb7981 100644 --- a/app/src/main/res/layout/profile_edit_activity.xml +++ b/app/src/main/res/layout/profile_edit_activity.xml @@ -12,228 +12,234 @@ type="org.oppia.android.app.settings.profile.ProfileEditViewModel" /> - + android:fillViewport="true"> - - - - -