package Ġcom . h ari . t mdb . ext Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġkotlinx . coroutines . suspend C ancellable Coroutine Ċ import Ġkotlin . coroutines . resume Ċ Ċ // ĠThis Ġfunction Ġis Ġcopied Ġfrom Ġhttps :// medium . com / android developers / sus pending - over - views - 1 9 de 9 ebd 7 0 2 0 Ċ Ċ suspend Ġfun ĠAn imator . await End () Ġ= Ġsuspend C ancellable Coroutine < Unit > Ġ{ Ġcont Ġ-> ĊĠĠĠ Ġ// ĠAdd Ġan Ġinvoke On Cancellation Ġlistener . ĠIf Ġthe Ġcoroutine Ġis ĊĠĠĠ Ġ// Ġcancelled , Ġcancel Ġthe Ġanimation Ġtoo Ġthat Ġwill Ġnotify ĊĠĠĠ Ġ// Ġlistener 's Ġon Animation Cancel () Ġfunction ĊĠĠĠ Ġcont . invoke On Cancellation Ġ{ Ġcancel () Ġ} ĊĊĠĠĠ Ġadd Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġended Successfully Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAn imator Ġhas Ġbeen Ġcancelled , Ġso Ġflip Ġthe Ġsuccess Ġflag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġended Successfully Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġwe Ġremove Ġthe Ġlistener Ġso Ġwe Ġdon 't Ġkeep ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġleak Ġthe Ġcoroutine Ġcontinuation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation . remove Listener ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cont . isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġcoroutine Ġis Ġstill Ġactive ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ended Successfully ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... and Ġthe ĠAn imator Ġended Ġsuccessfully , Ġresume Ġthe Ġcoroutine ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... and Ġthe ĠAn imator Ġwas Ġcancelled , Ġcancel Ġthe Ġcoroutine Ġtoo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ } Ċ