3486: Rename stuff
This commit is contained in:
parent
84915e6af5
commit
f09f464667
|
@ -100,6 +100,14 @@ class EditProfileActivity : BaseActivity(), Injectable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val currentProfileData
|
||||||
|
get() = ProfileData(
|
||||||
|
displayName = binding.displayNameEditText.text.toString(),
|
||||||
|
note = binding.noteEditText.text.toString(),
|
||||||
|
locked = binding.lockedCheckBox.isChecked,
|
||||||
|
fields = accountFieldEditAdapter.getFieldData()
|
||||||
|
)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
@ -206,35 +214,25 @@ class EditProfileActivity : BaseActivity(), Injectable {
|
||||||
}
|
}
|
||||||
|
|
||||||
val onBackCallback = object : OnBackPressedCallback(enabled = true) {
|
val onBackCallback = object : OnBackPressedCallback(enabled = true) {
|
||||||
override fun handleOnBackPressed() = checkForPotentialUnsavedChanges()
|
override fun handleOnBackPressed() {
|
||||||
}
|
if (viewModel.hasUnsavedChanges(currentProfileData)) {
|
||||||
|
|
||||||
onBackPressedDispatcher.addCallback(this, onBackCallback)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun checkForPotentialUnsavedChanges() {
|
|
||||||
if (hasUnsavedChanges()) {
|
|
||||||
showUnsavedChangesDialog()
|
showUnsavedChangesDialog()
|
||||||
} else {
|
} else {
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onBackPressedDispatcher.addCallback(this, onBackCallback)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
super.onStop()
|
super.onStop()
|
||||||
if (!isFinishing) {
|
if (!isFinishing) {
|
||||||
viewModel.updateProfile(profileData)
|
viewModel.updateProfile(currentProfileData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val profileData
|
|
||||||
get() = ProfileData(
|
|
||||||
displayName = binding.displayNameEditText.text.toString(),
|
|
||||||
note = binding.noteEditText.text.toString(),
|
|
||||||
locked = binding.lockedCheckBox.isChecked,
|
|
||||||
fields = accountFieldEditAdapter.getFieldData()
|
|
||||||
)
|
|
||||||
|
|
||||||
private fun observeImage(
|
private fun observeImage(
|
||||||
liveData: LiveData<Uri>,
|
liveData: LiveData<Uri>,
|
||||||
imageView: ImageView,
|
imageView: ImageView,
|
||||||
|
@ -308,7 +306,7 @@ class EditProfileActivity : BaseActivity(), Injectable {
|
||||||
return super.onOptionsItemSelected(item)
|
return super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun save() = viewModel.save(profileData)
|
private fun save() = viewModel.save(currentProfileData)
|
||||||
|
|
||||||
private fun onSaveFailure(msg: String?) {
|
private fun onSaveFailure(msg: String?) {
|
||||||
val errorMsg = msg ?: getString(R.string.error_media_upload_sending)
|
val errorMsg = msg ?: getString(R.string.error_media_upload_sending)
|
||||||
|
@ -328,8 +326,6 @@ class EditProfileActivity : BaseActivity(), Injectable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun hasUnsavedChanges() = viewModel.hasUnsavedChanges(profileData)
|
|
||||||
|
|
||||||
private suspend fun launchAlertDialog() = AlertDialog.Builder(this)
|
private suspend fun launchAlertDialog() = AlertDialog.Builder(this)
|
||||||
.setTitle(getString(R.string.title_edit_profile_save_changes_prompt))
|
.setTitle(getString(R.string.title_edit_profile_save_changes_prompt))
|
||||||
.setMessage(getString(R.string.message_edit_profile_save_changes_prompt))
|
.setMessage(getString(R.string.message_edit_profile_save_changes_prompt))
|
||||||
|
|
|
@ -76,7 +76,7 @@ class EditProfileViewModel @Inject constructor(
|
||||||
val instanceData: Flow<InstanceInfo> = instanceInfoRepo::getInstanceInfo.asFlow()
|
val instanceData: Flow<InstanceInfo> = instanceInfoRepo::getInstanceInfo.asFlow()
|
||||||
.shareIn(viewModelScope, SharingStarted.Eagerly, replay = 1)
|
.shareIn(viewModelScope, SharingStarted.Eagerly, replay = 1)
|
||||||
|
|
||||||
private var oldProfileData: Account? = null
|
private var apiProfileAccount: Account? = null
|
||||||
|
|
||||||
fun obtainProfile() = viewModelScope.launch {
|
fun obtainProfile() = viewModelScope.launch {
|
||||||
if (profileData.value == null || profileData.value is Error) {
|
if (profileData.value == null || profileData.value is Error) {
|
||||||
|
@ -84,7 +84,7 @@ class EditProfileViewModel @Inject constructor(
|
||||||
|
|
||||||
mastodonApi.accountVerifyCredentials().fold(
|
mastodonApi.accountVerifyCredentials().fold(
|
||||||
{ profile ->
|
{ profile ->
|
||||||
oldProfileData = profile
|
apiProfileAccount = profile
|
||||||
profileData.postValue(Success(profile))
|
profileData.postValue(Success(profile))
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -113,21 +113,21 @@ class EditProfileViewModel @Inject constructor(
|
||||||
|
|
||||||
saveData.value = Loading()
|
saveData.value = Loading()
|
||||||
|
|
||||||
val encoded = encodeChangedProfileFields(newProfileData)
|
val diff = getProfileDiff(apiProfileAccount, newProfileData)
|
||||||
if (encoded.allFieldsAreNull()) {
|
if (diff.hasNoChanges()) {
|
||||||
// if nothing has changed, there is no need to make a network request
|
// if nothing has changed, there is no need to make an api call
|
||||||
saveData.postValue(Success())
|
saveData.postValue(Success())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
mastodonApi.accountUpdateCredentials(
|
mastodonApi.accountUpdateCredentials(
|
||||||
encoded.displayName, encoded.note, encoded.locked, encoded.avatar, encoded.header,
|
diff.displayName, diff.note, diff.locked, diff.avatar, diff.header,
|
||||||
encoded.field1?.first, encoded.field1?.second, encoded.field2?.first, encoded.field2?.second, encoded.field3?.first, encoded.field3?.second, encoded.field4?.first, encoded.field4?.second
|
diff.field1?.first, diff.field1?.second, diff.field2?.first, diff.field2?.second, diff.field3?.first, diff.field3?.second, diff.field4?.first, diff.field4?.second
|
||||||
).fold(
|
).fold(
|
||||||
{ newProfileData ->
|
{ newAccountData ->
|
||||||
saveData.postValue(Success())
|
saveData.postValue(Success())
|
||||||
eventHub.dispatch(ProfileEditedEvent(newProfileData))
|
eventHub.dispatch(ProfileEditedEvent(newAccountData))
|
||||||
},
|
},
|
||||||
{ throwable ->
|
{ throwable ->
|
||||||
saveData.postValue(Error(errorMessage = throwable.getServerErrorMessage()))
|
saveData.postValue(Error(errorMessage = throwable.getServerErrorMessage()))
|
||||||
|
@ -151,25 +151,25 @@ class EditProfileViewModel @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun hasUnsavedChanges(newProfileData: ProfileData): Boolean {
|
internal fun hasUnsavedChanges(newProfileData: ProfileData): Boolean {
|
||||||
val encoded = encodeChangedProfileFields(newProfileData)
|
val diff = getProfileDiff(apiProfileAccount, newProfileData)
|
||||||
// If all fields are null, there are no changes.
|
// If all fields are null, there are no changes.
|
||||||
return !encoded.allFieldsAreNull()
|
return !diff.hasNoChanges()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun encodeChangedProfileFields(newProfileData: ProfileData): EncodedProfileData {
|
private fun getProfileDiff(oldProfileAccount: Account?, newProfileData: ProfileData): DiffProfileData {
|
||||||
val displayName = if (oldProfileData?.displayName == newProfileData.displayName) {
|
val displayName = if (oldProfileAccount?.displayName == newProfileData.displayName) {
|
||||||
null
|
null
|
||||||
} else {
|
} else {
|
||||||
newProfileData.displayName.toRequestBody(MultipartBody.FORM)
|
newProfileData.displayName.toRequestBody(MultipartBody.FORM)
|
||||||
}
|
}
|
||||||
|
|
||||||
val note = if (oldProfileData?.source?.note == newProfileData.note) {
|
val note = if (oldProfileAccount?.source?.note == newProfileData.note) {
|
||||||
null
|
null
|
||||||
} else {
|
} else {
|
||||||
newProfileData.note.toRequestBody(MultipartBody.FORM)
|
newProfileData.note.toRequestBody(MultipartBody.FORM)
|
||||||
}
|
}
|
||||||
|
|
||||||
val locked = if (oldProfileData?.locked == newProfileData.locked) {
|
val locked = if (oldProfileAccount?.locked == newProfileData.locked) {
|
||||||
null
|
null
|
||||||
} else {
|
} else {
|
||||||
newProfileData.locked.toString().toRequestBody(MultipartBody.FORM)
|
newProfileData.locked.toString().toRequestBody(MultipartBody.FORM)
|
||||||
|
@ -190,13 +190,13 @@ class EditProfileViewModel @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
// when one field changed, all have to be sent or they unchanged ones would get overridden
|
// when one field changed, all have to be sent or they unchanged ones would get overridden
|
||||||
val fieldsUnchanged = oldProfileData?.source?.fields == newProfileData.fields
|
val fieldsUnchanged = oldProfileAccount?.source?.fields == newProfileData.fields
|
||||||
val field1 = calculateFieldToUpdate(newProfileData.fields.getOrNull(0), fieldsUnchanged)
|
val field1 = calculateFieldToUpdate(newProfileData.fields.getOrNull(0), fieldsUnchanged)
|
||||||
val field2 = calculateFieldToUpdate(newProfileData.fields.getOrNull(1), fieldsUnchanged)
|
val field2 = calculateFieldToUpdate(newProfileData.fields.getOrNull(1), fieldsUnchanged)
|
||||||
val field3 = calculateFieldToUpdate(newProfileData.fields.getOrNull(2), fieldsUnchanged)
|
val field3 = calculateFieldToUpdate(newProfileData.fields.getOrNull(2), fieldsUnchanged)
|
||||||
val field4 = calculateFieldToUpdate(newProfileData.fields.getOrNull(3), fieldsUnchanged)
|
val field4 = calculateFieldToUpdate(newProfileData.fields.getOrNull(3), fieldsUnchanged)
|
||||||
|
|
||||||
return EncodedProfileData(
|
return DiffProfileData(
|
||||||
displayName, note, locked, field1, field2, field3, field4, header, avatar
|
displayName, note, locked, field1, field2, field3, field4, header, avatar
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,7 @@ class EditProfileViewModel @Inject constructor(
|
||||||
return File(application.cacheDir, filename)
|
return File(application.cacheDir, filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
private data class EncodedProfileData(
|
private data class DiffProfileData(
|
||||||
val displayName: RequestBody?,
|
val displayName: RequestBody?,
|
||||||
val note: RequestBody?,
|
val note: RequestBody?,
|
||||||
val locked: RequestBody?,
|
val locked: RequestBody?,
|
||||||
|
@ -226,7 +226,7 @@ class EditProfileViewModel @Inject constructor(
|
||||||
val header: MultipartBody.Part?,
|
val header: MultipartBody.Part?,
|
||||||
val avatar: MultipartBody.Part?
|
val avatar: MultipartBody.Part?
|
||||||
) {
|
) {
|
||||||
fun allFieldsAreNull() = displayName == null && note == null && locked == null &&
|
fun hasNoChanges() = displayName == null && note == null && locked == null &&
|
||||||
avatar == null && header == null && field1 == null && field2 == null &&
|
avatar == null && header == null && field1 == null && field2 == null &&
|
||||||
field3 == null && field4 == null
|
field3 == null && field4 == null
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue