Skip to content

Commit

Permalink
Rewrite AvatarView InternalState class
Browse files Browse the repository at this point in the history
  • Loading branch information
KevinBoulongne committed Jul 2, 2024
1 parent 5055ea7 commit c5bc909
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions app/src/main/java/com/infomaniak/mail/views/AvatarView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class AvatarView @JvmOverloads constructor(

private val binding by lazy { ViewAvatarBinding.inflate(LayoutInflater.from(context), this, true) }

private var internalState = InternalState(null, null)
private var state = State()

// We use waitInitMediator over MediatorLiveData because we know both live data will be initialized very quickly anyway
private val avatarMediatorLiveData = Utils.waitInitMediator(
Expand All @@ -67,7 +67,7 @@ class AvatarView @JvmOverloads constructor(
)

private val avatarUpdateObserver = Observer<Pair<MergedContactDictionary, Boolean>> { (contacts, isBimiEnabled) ->
val (correspondent, bimi) = internalState
val (correspondent, bimi) = state
val displayType = getAvatarDisplayType(correspondent, bimi, isBimiEnabled)

if (displayType == AvatarDisplayType.UNKNOWN_CORRESPONDENT) return@Observer
Expand Down Expand Up @@ -159,12 +159,12 @@ class AvatarView @JvmOverloads constructor(
}

fun loadUnknownUserAvatar() {
internalState.setInternalState(null, null)
state.update(correspondent = null, bimi = null)
binding.avatarImage.load(R.drawable.ic_unknown_user_avatar)
}

private fun loadBimiAvatar(bimi: Bimi, correspondent: Correspondent) = with(binding.avatarImage) {
internalState.setInternalState(correspondent, bimi)
state.update(correspondent, bimi)
contentDescription = correspondent.email
loadAvatar(
backgroundColor = context.getBackgroundColorBasedOnId(
Expand Down Expand Up @@ -213,7 +213,7 @@ class AvatarView @JvmOverloads constructor(
}

private fun loadAvatarUsingDictionary(correspondent: Correspondent, contacts: MergedContactDictionary, bimi: Bimi?) {
internalState.setInternalState(correspondent, bimi)
state.update(correspondent, bimi)
val mergedContact = searchInMergedContact(correspondent, contacts)
binding.avatarImage.baseLoadAvatar(correspondent = mergedContact ?: correspondent)
}
Expand All @@ -234,8 +234,11 @@ class AvatarView @JvmOverloads constructor(
}
}

private data class InternalState(var correspondent: Correspondent?, var bimi: Bimi?) {
fun setInternalState(correspondent: Correspondent?, bimi: Bimi?) {
private data class State(
var correspondent: Correspondent? = null,
var bimi: Bimi? = null,
) {
fun update(correspondent: Correspondent?, bimi: Bimi?) {
this.correspondent = correspondent
this.bimi = bimi
}
Expand Down

0 comments on commit c5bc909

Please sign in to comment.