Skip to content

Commit d7000c4

Browse files
authored
Merge pull request #2053 from Infomaniak/fix-animated-toolbar-crash
Fix animated toolbar crash
2 parents dc5ff72 + 12fda0e commit d7000c4

File tree

4 files changed

+21
-16
lines changed

4 files changed

+21
-16
lines changed

app/src/main/java/com/infomaniak/mail/ui/login/IntroFragment.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import com.infomaniak.mail.data.LocalSettings.AccentColor
4040
import com.infomaniak.mail.databinding.FragmentIntroBinding
4141
import com.infomaniak.mail.di.IoDispatcher
4242
import com.infomaniak.mail.ui.login.IlluColors.changeIllustrationColors
43-
import com.infomaniak.mail.utils.UiUtils
43+
import com.infomaniak.mail.utils.UiUtils.animateColorChange
4444
import com.infomaniak.mail.utils.extensions.enumValueFrom
4545
import com.infomaniak.mail.utils.extensions.repeatFrame
4646
import dagger.hilt.android.AndroidEntryPoint
@@ -170,7 +170,7 @@ class IntroFragment : Fragment() {
170170
val newColor = newAccentColor.getOnboardingSecondaryBackground(context)
171171
val oldColor = oldAccentColor.getOnboardingSecondaryBackground(context)
172172

173-
colorAnimator = UiUtils.animateColorChange(oldColor, newColor) { color ->
173+
colorAnimator = animateColorChange(oldColor, newColor) { color ->
174174
waveBackground.imageTintList = ColorStateList.valueOf(color)
175175
}
176176
}
@@ -183,7 +183,7 @@ class IntroFragment : Fragment() {
183183
val newPrimary = newAccentColor.getPrimary(context)
184184
val oldPrimary = oldAccentColor.getPrimary(context)
185185

186-
UiUtils.animateColorChange(oldPrimary, newPrimary) { color ->
186+
animateColorChange(oldPrimary, newPrimary) { color ->
187187
pinkBlueTabLayout.setSelectedTabIndicatorColor(color)
188188
}
189189
}

app/src/main/java/com/infomaniak/mail/ui/login/LoginFragment.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import com.infomaniak.mail.databinding.FragmentLoginBinding
3838
import com.infomaniak.mail.di.IoDispatcher
3939
import com.infomaniak.mail.di.MainDispatcher
4040
import com.infomaniak.mail.utils.LoginUtils
41-
import com.infomaniak.mail.utils.UiUtils
41+
import com.infomaniak.mail.utils.UiUtils.animateColorChange
4242
import com.infomaniak.mail.utils.extensions.removeOverScrollForApiBelow31
4343
import dagger.hilt.android.AndroidEntryPoint
4444
import kotlinx.coroutines.CoroutineDispatcher
@@ -152,7 +152,7 @@ class LoginFragment : Fragment() {
152152
val oldPrimary = oldAccentColor.getPrimary(context)
153153
val ripple = newAccentColor.getRipple(context)
154154

155-
UiUtils.animateColorChange(oldPrimary, newPrimary) { color ->
155+
animateColorChange(oldPrimary, newPrimary) { color ->
156156
dotsIndicator.selectedDotColor = color
157157
connectButton.setBackgroundColor(color)
158158
nextButton.backgroundTintList = ColorStateList.valueOf(color)
@@ -165,7 +165,7 @@ class LoginFragment : Fragment() {
165165
val newOnPrimary = newAccentColor.getOnPrimary(context)
166166
val oldOnPrimary = oldAccentColor.getOnPrimary(context)
167167

168-
UiUtils.animateColorChange(oldOnPrimary, newOnPrimary) { color ->
168+
animateColorChange(oldOnPrimary, newOnPrimary) { color ->
169169
connectButton.setTextColor(color)
170170
nextButton.imageTintList = ColorStateList.valueOf(color)
171171
}
@@ -175,7 +175,7 @@ class LoginFragment : Fragment() {
175175
val newSecondaryBackground = newAccentColor.getOnboardingSecondaryBackground(requireContext())
176176
val oldSecondaryBackground = oldAccentColor.getOnboardingSecondaryBackground(requireContext())
177177

178-
UiUtils.animateColorChange(oldSecondaryBackground, newSecondaryBackground) { color ->
178+
animateColorChange(oldSecondaryBackground, newSecondaryBackground) { color ->
179179
requireActivity().window.statusBarColor = color
180180
}
181181
}

app/src/main/java/com/infomaniak/mail/utils/UiUtils.kt

+8-2
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,16 @@ import androidx.appcompat.content.res.AppCompatResources
3333
import androidx.core.graphics.toColor
3434
import androidx.core.graphics.toColorInt
3535
import androidx.core.view.isGone
36+
import androidx.fragment.app.Fragment
3637
import androidx.lifecycle.DefaultLifecycleObserver
3738
import androidx.lifecycle.Lifecycle
3839
import androidx.lifecycle.LifecycleOwner
40+
import androidx.lifecycle.lifecycleScope
3941
import com.infomaniak.mail.R
4042
import com.infomaniak.mail.data.models.correspondent.Correspondent
4143
import com.infomaniak.mail.utils.extensions.updateNavigationBarColor
44+
import kotlinx.coroutines.Dispatchers
45+
import kotlinx.coroutines.launch
4246

4347
object UiUtils {
4448

@@ -143,7 +147,7 @@ object UiUtils {
143147
return isSingleField
144148
}
145149

146-
fun animateColorChange(
150+
fun Fragment.animateColorChange(
147151
@ColorInt oldColor: Int,
148152
@ColorInt newColor: Int,
149153
duration: Long = 150L,
@@ -153,7 +157,9 @@ object UiUtils {
153157
return if (animate) {
154158
ValueAnimator.ofObject(ArgbEvaluator(), oldColor, newColor).apply {
155159
setDuration(duration)
156-
addUpdateListener { animator -> applyColor(animator.animatedValue as Int) }
160+
addUpdateListener { animator ->
161+
viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) { applyColor(animator.animatedValue as Int) }
162+
}
157163
start()
158164
}
159165
} else {

app/src/main/java/com/infomaniak/mail/utils/extensions/Extensions.kt

+6-7
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,15 @@ import com.infomaniak.mail.ui.main.thread.SubjectFormatter.EllipsizeConfiguratio
9595
import com.infomaniak.mail.ui.main.thread.SubjectFormatter.TagColor
9696
import com.infomaniak.mail.ui.main.thread.ThreadFragment.HeaderState
9797
import com.infomaniak.mail.ui.newMessage.NewMessageViewModel.UiRecipients
98-
import com.infomaniak.mail.utils.*
98+
import com.infomaniak.mail.utils.AccountUtils
99+
import com.infomaniak.mail.utils.ApiErrorException
99100
import com.infomaniak.mail.utils.JsoupParserUtil.jsoupParseWithLog
101+
import com.infomaniak.mail.utils.UiUtils.animateColorChange
100102
import com.infomaniak.mail.utils.Utils
101103
import com.infomaniak.mail.utils.Utils.TAG_SEPARATOR
102104
import com.infomaniak.mail.utils.Utils.isPermanentDeleteFolder
103105
import com.infomaniak.mail.utils.Utils.kSyncAccountUri
106+
import com.infomaniak.mail.utils.WebViewUtils
104107
import io.realm.kotlin.MutableRealm
105108
import io.realm.kotlin.Realm
106109
import io.realm.kotlin.UpdatePolicy
@@ -471,11 +474,7 @@ fun Fragment.changeToolbarColorOnScroll(
471474
var headerColorState = HeaderState.LOWERED
472475

473476
viewLifecycleOwner.lifecycle.addObserver(
474-
object : LifecycleEventObserver {
475-
override fun onStateChanged(source: LifecycleOwner, event: Event) {
476-
if (event == Event.ON_DESTROY) valueAnimator?.cancel()
477-
}
478-
},
477+
LifecycleEventObserver { _, event -> if (event == Event.ON_DESTROY) valueAnimator?.cancel() },
479478
)
480479

481480
nestedScrollView.setOnScrollChangeListener { view, _, _, _, _ ->
@@ -488,7 +487,7 @@ fun Fragment.changeToolbarColorOnScroll(
488487
if (newColor == oldColor) return@setOnScrollChangeListener
489488

490489
valueAnimator?.cancel()
491-
valueAnimator = UiUtils.animateColorChange(oldColor, newColor, animate = true) { color ->
490+
valueAnimator = animateColorChange(oldColor, newColor, animate = true) { color ->
492491
oldColor = color
493492
toolbar.setBackgroundColor(color)
494493
if (shouldUpdateStatusBar()) requireActivity().window.statusBarColor = color

0 commit comments

Comments
 (0)