package Ġxyz . apr ild own . ult im ater ing tone picker Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . Nav Host Fragment Ċ import Ġandroidx . navigation . nav Graph ViewModels Ċ import Ġxyz . apr ild own . ult im ater ing tone picker . ui . EventHandler Ċ Ċ /** Ċ Ġ* ĠStructure : Ċ Ġ* Ġ- Ġ[ Ring tone Picker Fragment ] Ċ Ġ* ĠĠĠĠ Ġ- Ġ[ System Ring tone Fragment ] Ċ Ġ* ĠĠĠĠ Ġ- Ġ[ Device Ring tone Fragment ] Ċ Ġ* ĠĠĠĠĠĠ Ġ- Ġ[ Ring tone Fragment ] Ċ Ġ* ĠĠĠĠĠĠ Ġ- Ġ[ Category Fragment ] Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ- Ġ[ Ring tone Fragment ] Ċ Ġ*/ Ċ class ĠRing tone Picker Fragment Ġ: ĠNav Host Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpick Listener : ĠU lt imate Ring tone Picker . Ring tone Picker Listener ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġpick Listener Ġ= Ġrequire Ring tone Picker Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= Ġarguments ?. get Parcelable ( EXTRA _ SETTINGS ) Ġ?: ĠU lt imate Ring tone Picker . Settings () ĊĊĠĠĠĠĠĠĠ Ġnav Controller . graph Ġ= Ġnav Controller . nav Inflater . inflate ( R . navigation . ur p _ nav _ graph ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Destination Ġ= Ġif Ġ( settings . system Ring tone Picker Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ur p _ dest _ device ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ur p _ dest _ system ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠviewModel Ġby Ġnav Graph ViewModels < Ring tone Picker ViewModel >( R . id . ur p _ nav _ graph ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠViewModel Provider . Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( model Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRing tone Picker ViewModel :: class . java Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRing tone Picker ViewModel ( require Activity (). application , Ġsettings ) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . final Selection . observe ( view Lifecycle Owner , Ġ{ Ġring ton es Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ring ton es Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpick Listener . on Ring tone Pick ed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġring ton es . filter Ġ{ Ġit . isValid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU lt imate Ring tone Picker . Ring tone Entry ( uri Ġ= Ġit . uri , Ġname Ġ= Ġit . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Top Fragment (): ĠFragment ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchild FragmentManager . primary Navigation Fragment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonSelect Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( get Top Fragment () Ġas ? ĠEventHandler )?. on Select () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠIf Ġthe Ġback Ġevent Ġis Ġconsumed . ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ ĠIf Ġit Ġisn 't Ġconsumed ( false ), Ġyou Ġcan Ġfinish Ġthe Ġactivity Ġor Ġthe Ġdialog . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Back Click (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( get Top Fragment () Ġas ? ĠEventHandler )?. on Back () Ġ== Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ