package Ġorg . ny pl . simpl ified . listeners . api Ċ Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Has Default ViewModel Provider Factory Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Store Owner Ċ Ċ object ĠFragment Listener Finder Ġ{ ĊĊĠ Ġfun Ġ< E Ġ: ĠAny > Ġfind Listener ( ĊĠĠĠ ĠviewModel Store Owner : ĠViewModel Store Owner , ĊĠĠĠ Ġinterface Type : ĠClass < E >, ĊĠĠĠ Ġrecursive : ĠBoolean Ġ= Ġtrue ĊĠ Ġ): ĠFragment Listener Type < E > Ġ{ ĊĠĠĠ Ġif Ġ( viewModel Store Owner Ġis ĠHas Default ViewModel Provider Factory Ġ&& ĊĠĠĠĠĠ ĠviewModel Store Owner . default ViewModel Provider Factory Ġis ĠListener Repository Factory < *, Ġ*> ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ ĠViewModel Provider ( viewModel Store Owner ) ĊĠĠĠĠĠĠĠ Ġ. get ( Listener Repository :: class . java ) ĊĠĠĠĠĠĠĠ Ġ. get Listener ( interface Type . kotlin ) ĊĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġreturn Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( viewModel Store Owner Ġ! is ĠFragment Ġ|| Ġ! recursive ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠ Ġ" No Ġlisteners Ġof Ġtype Ġ$ interface Type Ġare Ġavailable " ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġparent Store Owner Ġ= ĊĠĠĠĠĠ ĠviewModel Store Owner . parent Fragment Ġ?: ĠviewModel Store Owner . require Activity () ĊĊĠĠĠ Ġreturn Ġthis . find Listener ( parent Store Owner , Ġinterface Type ) ĊĠ Ġ} Ċ } Ċ