Fix memory leak with PlayPauseButton

Fix a memory leak in PlayPauseButton that occured from not clearing an animation listener when done with it.
This commit is contained in:
OxygenCobalt 2021-02-16 20:41:55 -07:00
parent 2203018947
commit cccf6ba9f8
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
4 changed files with 15 additions and 13 deletions

View file

@ -52,7 +52,7 @@ fun ImageView.bindGenreImage(genre: Genre) {
/**
* Custom extension function similar to the stock coil load extensions, but handles whether
* to even show images and custom fetchers.
* to show images and custom fetchers.
*/
inline fun <reified T : Any> ImageView.load(
data: T,
@ -80,9 +80,9 @@ inline fun <reified T : Any> ImageView.load(
// --- OTHER FUNCTIONS ---
/**
* Get a bitmap for a [song]. [onDone] will be called when the bitmap is loaded.
* Get a bitmap for a [song]. [onDone] will be called with the loaded bitmap, or null if loading
* failed/shouldn't occur.
* **This not meant for UIs, instead use the Binding Adapters.**
* @param onDone What to do with the bitmap when the loading is finished. Bitmap will be null if loading failed/shouldn't occur.
*/
fun loadBitmap(context: Context, song: Song, onDone: (Bitmap?) -> Unit) {
val settingsManager = SettingsManager.getInstance()

View file

@ -80,11 +80,11 @@ class CompactPlaybackFragment : Fragment() {
playbackModel.isPlaying.observe(viewLifecycleOwner) {
if (it) {
binding.playbackPlayPause.showPause(playbackModel.canAnimate)
playbackModel.enableAnimation()
} else {
binding.playbackPlayPause.showPlay(playbackModel.canAnimate)
playbackModel.enableAnimation()
}
playbackModel.enableAnimation()
}
}
}

View file

@ -45,12 +45,6 @@ class PlayPauseButton @JvmOverloads constructor(
}
}
/**
* Hack that fixes an issue where a seam will display on the play button on certain display
* sizes due to floating point precision problems (Gotta love IEEE 754)
* This is done by detecting when the animation has ended and then reverting this
* view to the normal static image. Not possible below API 23 though.
*/
@RequiresApi(Build.VERSION_CODES.M)
private fun fixSeams() {
iconPauseToPlay.registerAnimationCallback(object : Animatable2.AnimationCallback() {
@ -59,4 +53,12 @@ class PlayPauseButton @JvmOverloads constructor(
}
})
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
iconPauseToPlay.clearAnimationCallbacks()
}
}
}

View file

@ -193,12 +193,12 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
if (it) {
binding.playbackPlayPause.showPause(playbackModel.canAnimate)
binding.playbackPlayPause.backgroundTintList = accentColor
playbackModel.enableAnimation()
} else {
binding.playbackPlayPause.showPlay(playbackModel.canAnimate)
binding.playbackPlayPause.backgroundTintList = controlColor
playbackModel.enableAnimation()
}
playbackModel.enableAnimation()
}
}