package Ġcom . du ch uy ctl k . widget . internal Ċ Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . widget . List Popup Window Ċ import Ġandroid . widget . Popup Window Ċ import Ġandroid . widget . Spinner Ċ import Ġcom . du ch uy ctl k . widget . internal . Constants . M _ POP UP Ċ import Ġcom . du ch uy ctl k . widget . internal . Constants . ON _ DIS MIS S _ LIST ENER Ċ Ċ internal Ġinterface ĠListener Subst it utor Factory Ġ{ ĊĊĠĠĠ Ġfun Ġget Listener Subst it utor ( mode : ĠInt ): ĠListener Subst it utor Ċ } Ċ Ċ internal Ġclass ĠListener Subst it utor Factory Impl ( private Ġval Ġm Internal Listener : ĠInternal Listener ) Ġ: ĠListener Subst it utor Factory Ġ{ ĊĊĠĠĠ Ġprivate Ġclass ĠDialog Listener Subst it utor ( private Ġval Ġm Internal Listener : ĠInternal Listener ) Ġ: ĠListener Subst it utor Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsubstitute ( spinner Popup : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreflect ing ĠDialog Popup . m Popup ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner Popup ?. java Class ?. getDeclared Field ( M _ POP UP )?. let Ġ{ Ġfield AlertDialog Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġenable Ġaccess Ġchecks Ġto ĠSp inner . m Popup . m Popup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield AlertDialog . is Accessible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġon Dismiss Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( field AlertDialog . get ( spinner Popup ) Ġas ĠAlertDialog ). setOn Dismiss Listener ( m Internal Listener ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdisable Ġaccess Ġchecks Ġto ĠSp inner . m Popup . m Popup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield AlertDialog . is Accessible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDrop Down Subst it utor ( private Ġval Ġm Internal Listener : ĠInternal Listener ) Ġ: ĠListener Subst it utor Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsubstitute ( spinner Popup : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreflect ing ĠSp inner . m Popup . m Popup ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList Popup Window :: class . java . getDeclared Field ( M _ POP UP ). let Ġ{ Ġfield Popup Window Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Popup Window . is Accessible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreflect ing ĠSp inner . m Popup . m Popup . On Dismiss Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPopup Window :: class . java . getDeclared Field ( ON _ DIS MIS S _ LIST ENER ). let Ġ{ Ġfield On Dismiss Listener Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield On Dismiss Listener . is Accessible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġdefault Ġlistener Ġand Ġset Ġinto Ġthe Ġcustom Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( field On Dismiss Listener . get ( field Popup Window . get ( spinner Popup )) Ġas ? ĠPopup Window . On Dismiss Listener )?. let Ġ{ Ġdefault Listener Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Internal Listener . set Popup Listener ( default Listener ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreplace Ġthe Ġdefault Ġlistener Ġby Ġthe Ġcustom Ġone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( spinner Popup Ġas ? ĠList Popup Window )?. setOn Dismiss Listener ( m Internal Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield On Dismiss Listener . is Accessible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Popup Window . is Accessible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDefault Subst it utor Ġ: ĠListener Subst it utor Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsubstitute ( spinner Popup : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Listener Subst it utor ( mode : ĠInt ): ĠListener Subst it utor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp inner . MODE _ DIALOG Ġ-> ĠDialog Listener Subst it utor ( m Internal Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp inner . MODE _ DROP DOWN Ġ-> ĠDrop Down Subst it utor ( m Internal Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠDefault Subst it utor () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ