@ file : Suppress (" NOTH ING _ TO _ INLINE ", Ġ" unused ") Ċ package Ġb rig it te Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Color Res Ċ import Ġandroidx . annotation . Dim en Res Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġb rig it te . arch . Single Live Event Ċ import Ġorg . slf 4 j . Logger Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . Print Stream Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġ< a Ġhref =" mailto : auc d 2 9 @ gmail . com "> Bur ke ĠCh oi </ a > Ġon Ġ 2 0 1 8 . Ġ 1 0 . Ġ 3 0 . Ġ< p /> Ċ Ġ* Ċ Ġ* ĠActivity Ġê´Ģ ëł¨ ĠëĲľ Ġextension Ġëª¨ ìĿĮ Ċ Ġ*/ Ċ Ċ // ĠLifecycle Observer Ġìľ ¼ ë¡ľ ĠëĮĢ ì²´ Ċ // interface ĠIL ife Cycle Ġ{ Ċ // ĠĠĠ Ġfun Ġon Pause () Ċ // ĠĠĠ Ġfun Ġon Resume () Ċ // ĠĠĠ Ġfun Ġon Destroy () Ċ //} Ċ Ċ // https :// stackoverflow . com / questions / 2 2 1 9 2 2 9 1 / how - to - change - the - status - bar - color - in - android Ċ inline Ġfun ĠActivity . change StatusBar Color Res (@ Color Res Ġcolor : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . status Bar Color Ġ= ĠContext Compat . getColor ( this , Ġcolor ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun ĠActivity . change StatusBar Color (@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . status Bar Color Ġ= Ġcolor ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġsn ackbar Ġíĺ¸ì¶ľ Ċ Ġ* Ċ Ġ* Ġ@ param Ġview ĠëĮĢ ìĥģ ìĿ´ ĠëĲĺ ëĬĶ Ġë · ° Ċ Ġ* Ġ@ param Ġmsg Ġì¶ľëł¥ íķł Ġë©Ķ ìĭľ ì§Ģ Ċ Ġ* Ġ@ param Ġlength Ġë©Ķ ìĭľ ì§Ģ Ġì¶ľëł¥ Ġìĭľê°Ħ Ġ( ê¸° ë³¸ ê°Ĵ ĠLEN GTH _ SHORT ) Ċ Ġ* Ġ@ return ĠSn ackbar Ġê°Ŀì²´ Ċ Ġ*/ Ċ inline Ġfun ĠActivity . sn ackbar ( view : ĠView , Ġmsg : ĠString , Ġlength : ĠInt Ġ= ĠSn ackbar . LENGTH _ SHORT ) Ġ= ĊĠĠĠ ĠSn ackbar . make ( view , Ġmsg , Ġlength ) Ċ Ċ /** Ċ Ġ* Ġsn ackbar Ġíĺ¸ì¶ľ Ċ Ġ* Ġ@ param Ġview ĠëĮĢ ìĥģ ìĿ´ ĠëĲĺ ëĬĶ Ġë · ° Ċ Ġ* Ġ@ param Ġres id Ġì¶ľëł¥ íķł Ġë©Ķ ìĭľ ì§Ģ Ġë¦¬ ìĨĮ ìĬ¤ ĠìķĦ ìĿ´ ëĶĶ Ċ Ġ* Ġ@ param Ġlength Ġë©Ķ ìĭľ ì§Ģ Ġì¶ľëł¥ Ġìĭľê°Ħ Ġ( ê¸° ë³¸ ê°Ĵ ĠLEN GTH _ SHORT ) Ċ Ġ* Ġ@ return ĠSn ackbar Ġê°Ŀì²´ Ċ Ġ*/ Ċ inline Ġfun ĠActivity . sn ackbar ( view : ĠView , Ġ@ String Res Ġres id : ĠInt , Ġlength : ĠInt Ġ= ĠSn ackbar . LENGTH _ SHORT ) Ġ= ĊĠĠĠ Ġsn ackbar ( view , ĠgetString ( res id ), Ġlength ) Ċ Ċ inline Ġfun ĠActivity . error Log ( e : ĠThrowable , Ġlogger : ĠLogger ) Ġ{ ĊĠĠĠ Ġif Ġ( logger . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlogger . error (" ERROR : Ġ${ e . message }") Ċ } Ċ Ċ /** Ċ Ġ* Ġì¢ ħ ë£Į Ġíķĺ ëł¤ ë©´ Ġëĭ¤ ìĭľ ĠìĦłíĥĿ Ġíķĺ ëĿ¼ ëĬĶ Ġë©Ķ ë ī ´ Ġíĺ¸ì¶ľ Ċ Ġ* Ċ Ġ* Ġ@ param Ġview Ġsn ackbar ĠìĿ¼ Ġê²½ìļ° ĠëĮĢ ìĥģ ìĿ´ ĠëĲĺ ëĬĶ Ġview Ċ Ġ* Ġ@ return ĠBack Pressed Manager Ġê°Ŀì²´ Ċ Ġ*/ Ċ inline Ġfun ĠAppCompatActivity . check Back Pressed ( view : ĠView ?) Ġ= ĠBack Pressed Manager ( this , Ġview ) Ċ Ċ /** Ċ Ġ* Ġë¦¬ ìĨĮ ìĬ¤ ĠëĤ´ Ġdim en ĠìĿ Ħ Ġìĸ » ê¸° ĠìľĦ íķľ Ġshortcut Ċ Ġ* Ċ Ġ* Ġ@ param Ġres id Ġdim Ġê°Ĵ ìĹĲ Ġíķ´ëĭ¹ íķĺëĬĶ Ġë¦¬ ìĨĮ ìĬ¤ ĠìķĦ ìĿ´ ëĶĶ Ċ Ġ* Ġ@ return ĠìķĦ ìĿ´ ëĶĶ ìĹĲ Ġíķ´ëĭ¹ íķĺëĬĶ Ġê°Ĵ Ċ Ġ*/ Ċ inline Ġfun ĠActivity . dim en (@ Dim en Res Ġres id : ĠInt ) Ġ= ĊĠĠĠ Ġresources . get Dimension ( res id ) Ċ Ċ /** Ċ Ġ* Ġëĭ¤ ìĿ´ ìĸ ¼ ë¡ľ ê·¸ ë¥¼ Ġë Ŀ Ħ ìļ° ê¸° ĠìľĦ íķľ Ġìĺ µ ìłĢ ë²Ħ Ġë¡ľ Ġview Ġmodel ĠìĹĲ ĠìĦł ìĸ¸ ëĲĺìĸ´ ĠìŀĪëĬĶ Ġsingle Ġlive Ġevent ĠìĿĺ Ġê°Ĵ ìĿĺ Ġë³Ģ íĻĶ ë¥¼ ĠìĿ¸ ì§Ģ Ġíķĺ ìĹ¬ Ġdialog ĠìĿ Ħ Ġë Ŀ Ħ ìļ´ ëĭ¤ . Ċ Ġ* Ċ Ġ* Ġ@ param Ġevent ĠDialog Param ĠìĿ Ħ Ġëĭ ´ ëĬĶ ĠLive Event Ċ Ġ* Ġ@ param Ġdis posable ĠComposite Disposable Ġê°Ŀì²´ Ġ( ê¸° ë³¸ Ġê°Ĵ ìĿĢ Ġnull ) Ċ Ġ*/ Ċ inline Ġfun ĠFragment Activity . observe Dialog ( event : ĠSingle Live Event < Dialog Param >, Ġdis posable : ĠComposite Disposable ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġevent . observe ( this , ĠObserver Ġ{ Ġdialog ( it , Ġdis posable ) Ġ}) Ċ } Ċ Ċ /** Ċ Ġ* Ġactivity ĠìĿĺ Ġíģ´ëŀĺìĬ¤ Ġëªħ ìĿĦ Ġê¸° ë°ĺ íķĺìĹ¬ Ġinf late Ġíķł Ġlayout ĠìĿ´ë¦Ħ ìĿĦ Ġìĸ » ëıĦë¡Ŀ Ġíķľëĭ¤ . ĠìĿ´ë ķĮ Ġì² « ê¸ Ģ ìŀĲ Ġë Ĵ ¤ ìĹĲ Ġìĺ¤ ëĬĶ ĠëĮĢ ë¬¸ ìŀĲ ëĬĶ Ġ_ ĠìĿ Ħ Ġë¶ Ļ ìĿ´ ê³ł ĠëĮĢ ë¬¸ ìŀĲ ëĬĶ ĠìĨĮ ë¬¸ ìŀĲ ë¡ľ Ġë³Ģ íĻĺ ĠëĲľëĭ¤ . Ċ Ġ* ĠìĺĪ ë¡ľ ĠTest Activity ĠëĿ¼ ë©´ Ġtest _ activity Ġíĺķ íĥľ ë¡ľ Ġë³Ģ íĻĺ ĠëĲľëĭ¤ . Ċ Ġ*/ Ċ inline Ġfun ĠActivity . generate Layout Name (): ĠString Ġ{ ĊĠĠĠ Ġval Ġname Ġ= Ġjava Class . simple Name ĊĠĠĠ Ġvar Ġlayout Name Ġ= Ġname [ 0 ]. toLowerCase (). toString () ĊĊĠĠĠ Ġname . substring ( 1 , Ġname . length ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout Name Ġ+= Ġif Ġ( it . is UpperCase ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"_ ${ it . toLowerCase () }" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġlayout Name Ċ } Ċ Ċ /** Ċ Ġ* ĠíĻ Ķ ë©´ ìĿĦ ĠON Ġ/ ĠOFF Ġìĭľ í Ĥ¨ ëĭ¤ . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Ġtrue ìĿ¼ Ġê²½ìļ° ĠíĻ Ķ ë©´ ìĿĦ Ġì ¼ ľ ê³ł ĠìķĦ ëĭ Ĳ ê²½ ìļ° Ġë ģ Īëĭ¤ . Ċ Ġ*/ Ċ inline Ġfun ĠActivity . keep Screen ( on : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( on ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow ?. add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow ?. clear Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠìłĦ ì²´ ĠíĻ Ķ ë©´ ìľ¼ë¡ľ Ġí Ĩł ê¸ Ģ Ġíķľëĭ¤ . Ċ Ġ* Ċ Ġ* Ġ@ param Ġfullscreen Ġtrue ĠìĿ¼ Ġê²½ìļ° ĠìłĦ ì²´ íĻĶ ë©´ ĠìķĦ ëĭĪ ë©´ ĠìĿ¼ ë°ĺ íĻĶ ë©´ Ċ Ġ*/ Ċ inline Ġfun ĠActivity . fullscreen ( fullscreen : ĠBoolean ) Ġ{ ĊĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġwindow . attributes ĊĠĠĠĠĠĠĠ Ġlp . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fullscreen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . flags Ġ= Ġit . flags Ġor ĠWindow Manager . LayoutParams . FLAG _ FULL SCREEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . flags Ġ= Ġit . flags Ġand ĠWindow Manager . LayoutParams . FLAG _ FULL SCREEN . inv () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . attributes Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠìłĦ ì²´ íĻĶ ë©´ ìĿ¸ ì§Ģ ĠìķĦ ëĭ Į ì§Ģ Ġë°ĺíĻĺ Ġíķľëĭ¤ . Ċ Ġ* Ġ@ return Ġtrue Ġë© ´ ĠìłĦ ì²´ ĠíĻ Ķ ë©´ Ġfalse Ġë© ´ ĠìĿ¼ ë°ĺ íĻĶ ë©´ Ċ Ġ*/ Ċ inline Ġfun ĠActivity . is Fullscreen () Ġ= ĊĠĠĠ Ġ( window . attributes . flags Ġand ĠWindow Manager . LayoutParams . FLAG _ FULL SCREEN ) Ġ== ĠWindow Manager . LayoutParams . FLAG _ FULL SCREEN Ċ Ċ // inline Ġfun ĠAppCompatActivity . back Pressed Callback ( cross inline Ġf : Ġ() Ġ-> ĠBoolean ) Ġ= Ġwith ( on Back Pressed Dispatcher ) Ġ{ Ċ // ĠĠĠ Ġadd Callback ( this @ back Pressed Callback , Ġobject : ĠOn Back Pressed Callback ( true ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle On Back Pressed () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġf () Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ}) Ċ //} Ċ Ċ inline Ġfun ĠActivity . exception Catch er ( no inline Ġcallback : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġ// Ġsetting Ġexception ĊĠĠĠ Ġval Ġhandler Ġ= ĠThread . getDefault Un caught ExceptionHandler () ĊĠĠĠ ĠThread . setDefault Un caught ExceptionHandler Ġ{ Ġt , Ġe Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġos Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ Ġ= ĠPrint Stream ( os ) ĊĠĠĠĠĠĠĠ Ġe . printStackTrace ( s ) ĊĠĠĠĠĠĠĠ Ġs . flush () ĊĊĠĠĠĠĠĠĠ Ġcallback . invoke (" ERROR : Ġ$ os ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( handler Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . unc a ught Exception ( t , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke (" ERROR : ĠEXCEPTION ĠHAND LER Ġ== Ġnull ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . os . Process . kill Process ( android . os . Process . my Pid ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠActivity . chrome Inspector ( log : Ġ(( String ) Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġenabled Ġchrome Ġinspector ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ?. invoke (" ENABLED ĠCH ROME ĠIN S PECT OR ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWebView . set Web Contents Debugging Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ //////////////////////////////////////////////////////////////////////////////// //// Ċ // Ċ // ĠDialog Ċ // Ċ //////////////////////////////////////////////////////////////////////////////// //// Ċ Ċ /** Ċ Ġ* Ġëĭ¤ ìĿ´ ìĸ ¼ ë¡ľ ê·¸ ë¥¼ Ġë Ŀ Ħ ìļ° ê¸° ĠìľĦ íķľ ĠìĨį ìĦ± ìĿĦ Ġê´Ģë¦¬ íķĺëĬĶ Ġëį°ìĿ´íĦ° Ġíģ´ëŀĺìĬ¤ Ċ Ġ*/ Ċ data Ġclass ĠDialog Param Ġconstructor Ġ( ĊĠĠĠ Ġvar Ġmessage : ĠString ? Ġ= Ġnull , ĠĠĠĠĠĠĠ Ġ// Ġëĭ¤ ìĿ´ ìĸ ¼ ë¡ľ ê·¸ ìĹĲ Ġì¶ľëł¥ íķł Ġë©Ķ ìĭľ ì§Ģ ĊĠĠĠ Ġvar Ġtitle : ĠString ? Ġ= Ġnull , ĠĠĠĠĠĠĠĠĠ Ġ// Ġëĭ¤ ìĿ´ ìĸ ¼ ë¡ľ ê·¸ Ġíĥ ĢìĿ´ íĭ Ģ ĊĠĠĠ Ġvar Ġpositive Str : ĠString ? Ġ= Ġnull , ĠĠĠ Ġ// Ġpositive Ġë²Ħ íĬ ¼ ìĹĲ Ġì¶ľëł¥ íķł Ġë¬¸ êµ¬ ĊĠĠĠ Ġvar Ġnegative Str : ĠString ? Ġ= Ġnull , ĠĠĠ Ġ// Ġnegative Ġë²Ħ íĬ ¼ ìĹĲ Ġì¶ľëł¥ íķł Ġë¬¸ êµ¬ ĊĠĠĠ Ġvar Ġlistener : Ġ(( Boolean , ĠDialog Interface ) Ġ-> ĠUnit )? Ġ= Ġnull , Ġ// ĠìĤ¬ìļ©ìŀĲ ê°Ģ Ġpositive ĠëĺĲëĬĶ Ġnegative Ġë ¥ ¼ ĠìĦłíĥĿ íķł Ġê²°ê³¼ ë¥¼ ĠìłĦ ëĭ ¬ Ġë°Ľ ëĬĶ Ġë¦¬ ìĬ¤ ëĦ Ī ĊĠĠĠ Ġvar Ġtimer : ĠInt Ġ= Ġ 0 , ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġëĭ¤ ìĿ´ ìĸ ¼ ë¡ľ ê·¸ ë¥¼ Ġìĭľê°Ħ ìĹĲ ĠëĶ°ëĿ¼ ĠìŀĲ ëıĻ ìľ¼ë¡ľ Ġì¢ ħ ë£Į Ġìĭľ í Ĥ¬ Ġíĥ ĢìĿ´ ë ¨ ¸ Ġê°Ĵ ĊĠĠĠ Ġval Ġcontext : ĠContext ? Ġ= Ġnull , ĠĠĠĠĠĠ Ġ// Ġapplication Ġcontext ĊĠĠĠ Ġvar ĠmessageId : ĠInt ? Ġ= Ġnull , ĠĠĠĠĠĠĠĠ Ġ// Ġì¶ľëł¥ íķł Ġë©Ķ ìĭľ ì§Ģ ìĹĲ Ġíķ´ëĭ¹ íķĺëĬĶ Ġë¦¬ ìĨĮ ìĬ¤ ĠìķĦ ìĿ´ ëĶĶ ĊĠĠĠ Ġvar Ġtitle Id : ĠInt ? Ġ= Ġnull , ĠĠĠĠĠĠĠĠĠĠ Ġ// Ġì¶ľëł¥ íķł Ġíĥ ĢìĿ´ íĭ Ģ ìĹĲ Ġíķ´ëĭ¹ íķĺëĬĶ Ġë¦¬ ìĨĮ ìĬ¤ ĠìķĦ ìĿ´ ëĶĶ ĊĠĠĠ Ġvar Ġpositive Id : ĠInt ? Ġ= Ġnull , ĠĠĠĠĠĠĠ Ġ// Ġì¶ľëł¥ íķł Ġpositive Ġë²Ħ íĬ ¼ ìĹĲ Ġíķ´ëĭ¹ íķĺëĬĶ Ġë¦¬ ìĨĮ ìĬ¤ ĠìķĦ ìĿ´ ëĶĶ ĊĠĠĠ Ġvar Ġnegative Id : ĠInt ? Ġ= Ġnull , ĠĠĠĠĠĠĠ Ġ// Ġì¶ľëł¥ íķł Ġnegative Ġë²Ħ íĬ ¼ ìĹĲ Ġíķ´ëĭ¹ íķĺëĬĶ Ġë¦¬ ìĨĮ ìĬ¤ ĠìķĦ ìĿ´ ëĶĶ ĊĠĠĠ Ġvar Ġview : ĠView ? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġdialog : ĠDialog ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId ?. apply Ġ Ġ{ Ġmessage ĠĠĠĠ Ġ= Ġstring ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Id ?. apply ĠĠĠ Ġ{ Ġtitle ĠĠĠĠĠĠ Ġ= Ġstring ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Id ?. apply Ġ{ Ġnegative Str Ġ= Ġstring ( this ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Str Ġ= Ġstring ( if Ġ( positive Id Ġ!= Ġnull ) Ġpositive Id !! Ġelse Ġandroid . R . string . ok ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġëĭ¤ ìĿ´ ìĸ ¼ ë¡ľ ê·¸ ë¥¼ Ġë Ŀ Ħ ìļ´ ëĭ¤ . Ċ Ġ* Ċ Ġ* Ġ@ param Ġparams Ġëĭ¤ ìĿ´ ìĸ ¼ ë¡ľ ê·¸ ë¥¼ ĠìĹ ´ ê¸° ĠìľĦ íķľ ĠìĨį ìĦ± Ġê°Ĵ Ċ Ġ* Ġ@ param Ġdis posable Ġrx ĠìĿĺ Ġinterval ĠìĿ Ħ ĠíĨµíķ´ Ġëĭ¤ ìĿ´ ìĸ ¼ ë¡ľ ê·¸ ë¥´ ĠìŀĲ ëıĻ Ġì¢ ħ ë£Į Ġìĭľ íĤ¤ ëĬĶ ëį° ĠìĿ´ë ķĮ ĠíķĦìļĶ íķľ ĠComposite Disposable Ġê°Ĵ Ċ Ġ*/ Ċ inline Ġfun ĠActivity . dialog ( params : ĠDialog Param , Ġdis posable : ĠComposite Disposable ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġval Ġbd Ġ= ĠAlertDialog . Builder ( this ) ĊĊĠĠĠ Ġif Ġ( params . view Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbd . setView ( params . view ) ĊĠĠĠĠĠĠĠ Ġparams . dialog Ġ= Ġbd . show () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġbd . setMessage ( params . message ) ĊĠĠĠĠĠĠĠ Ġbd . set Cancel able ( false ) ĊĠĠĠĠĠĠĠ Ġparams . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle ?. let Ġ{ Ġbd . setTitle ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Str ?. let Ġ{ Ġbd . set Positive Button ( it ) Ġ{ Ġdlg , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdlg . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. invoke ( true , Ġdlg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Str ?. let Ġ{ Ġbd . set Negative Button ( it ) Ġ{ Ġdlg , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdlg . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. invoke ( false , Ġdlg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdlg Ġ= Ġbd . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( timer Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable ?. add ( Observable . interval ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( 1 ). subscribe Ġ{ Ġdlg . dismiss () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ //////////////////////////////////////////////////////////////////////////////// //// Ċ // Ċ // ĠBack Pressed Manager Ċ // Ċ //////////////////////////////////////////////////////////////////////////////// //// Ċ Ċ /** Ċ Ġ* Ġìķ ± Ġì¢ ħ ë£Į ë¥¼ ĠìľĦíķ´ Ġëĭ¤ ìĭľ Ġíķľ ë²Ī Ġback key Ġë ¥ ¼ ĠìĦłíĥĿ íķĺ ëĿ¼ ëĬĶ Ġë¬¸ êµ¬ ë¥¼ ĠëıĻ ìŀĳ Ġìĭľ íĤ¤ ê¸° ĠìľĦ íķľ Ġíģ´ëŀĺìĬ¤ Ċ Ġ*/ Ċ open Ġclass ĠBack Pressed Manager Ġconstructor Ġ( ĊĠĠĠ Ġprivate Ġvar Ġactivity : ĠAppCompatActivity , Ġvar Ġview : ĠView ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEL AY Ġ= Ġ 2 0 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġvar Ġtoast : ĠToast ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġsn ackbar : ĠSn ackbar ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġpressed Time : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġfun Ġtime () Ġ= Ġpressed Time Ġ+ ĠDEL AY ĊĊĠĠĠ Ġfun Ġon Back Pressed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity . support FragmentManager . back Stack Entry Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( System . currentTimeMillis () Ġ> Ġtime ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( System . currentTimeMillis () Ġ<= Ġtime ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. let Ġ{ Ġsn ackbar ?. dismiss () Ġ} Ġ?: Ġtoast ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . finish Affinity ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar Ġ= Ġactivity . sn ackbar ( view !! , ĠR . string . activity _ back key _ exit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar ?. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ