/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 1 ĠR ong Cloud . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġcn . r ong cloud . vo ic ero om demo . common Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcn . r ong cloud . vo ic ero om demo . My App Ċ import Ġcn . r ong cloud . vo ic ero om demo . R Ċ import Ġcn . r ong cloud . vo ic ero om demo . net . api . Api Constant Ċ import Ġcn . r ong cloud . vo ic ero om demo . utils . Image Loader Util Ċ import Ġio . reactivex . rx java 3 . core . Observable Ċ import Ġio . reactivex . rx java 3 . dis pos ables . Disposable Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . contracts . Experimental Contracts Ċ import Ġkotlin . contracts . contract Ċ Ċ /** Ċ Ġ* Ġ@ author Ġg usd Ċ Ġ* Ġ@ Date Ġ 2 0 2 1 / 0 6 / 0 4 Ċ Ġ*/ Ċ fun ĠgetString (@ String Res Ġstring Id : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġreturn ĠMy App . context . getString ( string Id ) Ċ } ĊĊ Ċ fun ĠContext . show Toast ( message : ĠString ?) Ġ{ ĊĠĠĠ Ġui Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġit , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun ĠContext . show Toast (@ String Res Ġmessage Res : ĠInt ) Ġ{ ĊĠĠĠ Ġshow Toast ( getString ( message Res )) Ċ } Ċ Ċ fun ĠAppCompatActivity . set Android Native Light StatusBar ( is Dark : ĠBoolean ) Ġ{ ĊĠĠĠ Ġval Ġwindow Insets Controller Ġ= ĠView Compat . getWindow Insets Controller ( window . decor View ) ĊĠĠĠ Ġwindow Insets Controller ?. is Appearance Light StatusBar s Ġ= Ġis Dark Ċ } ĊĊ Ċ fun ĠImageView . load ImageView ( url : ĠString , Ġ@ Drawable Res Ġdefault Image : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠ ĠImage Loader Util . load Image ( context , Ġthis , Ġurl , Ġdefault Image ) Ċ } Ċ Ċ fun ĠImageView . load ImageView ( uri : ĠUri , Ġ@ Drawable Res Ġdefault Image : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠ ĠImage Loader Util . load Image ( context , Ġthis , Ġuri , Ġdefault Image ) Ċ } Ċ Ċ fun ĠImageView . load Por trait ( url : ĠString ?) Ġ{ ĊĠĠĠ Ġif Ġ( url . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . setImage Resource ( R . drawable . default _ portrait ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠImage Loader Util . load Por trait ( context , Ġthis , Ġurl ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠImageView . load Local Por trait ( url : ĠString ?) Ġ{ ĊĠĠĠ Ġif Ġ( url . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . setImage Resource ( R . drawable . default _ portrait ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠImage Loader Util . load Local Image ( context , Ġthis , Ġurl ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠImageView . load Local Por trait ( uri : ĠUri ?) Ġ{ ĊĠĠĠ Ġif Ġ( uri Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . setImage Resource ( R . drawable . default _ portrait ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠImage Loader Util . load Local Image ( context , Ġthis , Ġuri ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠImageView . load Por trait (@ Drawable Res Ġdrawable Id : ĠInt ) Ġ{ ĊĠĠĠ ĠImage Loader Util . load Image ( context , Ġthis , Ġdrawable Id ) Ċ } ĊĊ Ċ fun Ġ< T > ĠT . ui ( action : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĊĠĠĠ Ġ// ĠFragment ĊĠĠĠ Ġif Ġ( this Ġis ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġif Ġ(! fragment . is Added ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġfragment . activity Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( activity . is Finish ing ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġactivity . run On Ui Thread ( action ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠActivity ĊĠĠĠ Ġif Ġ( this Ġis ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Finish ing ) Ġreturn ĊĠĠĠĠĠĠĠ Ġthis . run On Ui Thread ( action ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ ä¸» çº¿ç¨ĭ ĊĠĠĠ Ġif Ġ( Looper . get Main Looper () Ġ=== ĠL ooper . my Looper ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction () ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ åŃĲ çº¿ç¨ĭ ï¼Į ä½¿çĶ¨ handler ĊĠĠĠ ĠKit Util . handler . post Ġ{ Ġaction () Ġ} Ċ } Ċ Ċ object ĠKit Util Ġ{ ĊĠĠĠ Ġval Ġhandler : ĠHandler Ġby Ġlazy Ġ{ ĠHandler ( Looper . get Main Looper ()) Ġ} Ċ } ĊĊ Ċ @ Opt In ( Experimental Contracts :: class ) Ċ fun ĠCharSequence ?. isNotNull OrEmpty (): ĠBoolean Ġ{ ĊĠĠĠ Ġcontract Ġ{ ĊĠĠĠĠĠĠĠ Ġreturns ( true ) Ġimplies Ġ( this @ isNotNull OrEmpty Ġ!= Ġnull ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġthis Ġ!= Ġnull Ġ&& Ġthis . isNotEmpty () Ċ } Ċ Ċ @ Opt In ( Experimental Contracts :: class ) Ċ fun ĠCharSequence ?. isNotNull Or Blank (): ĠBoolean Ġ{ ĊĠĠĠ Ġcontract Ġ{ ĊĠĠĠĠĠĠĠ Ġreturns ( true ) Ġimplies Ġ( this @ isNotNull Or Blank Ġ!= Ġnull ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġthis Ġ!= Ġnull Ġ&& Ġthis . isNotBlank () Ċ } Ċ Ċ fun ĠView . set Avoid Fast ClickListener ( ĊĠĠĠ Ġwindow Duration : ĠLong Ġ= Ġ 5 0 0 , ĊĠĠĠ Ġunit : ĠTimeUnit Ġ= ĠTimeUnit . MILLISECONDS , ĊĠĠĠ Ġlistener : Ġ( view : ĠView ) Ġ-> ĠUnit Ċ ): ĠDis posable Ġ{ ĊĠĠĠ Ġreturn ĠObservable . create < View > Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! emitter . is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onNext ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. throttle First ( window Duration , Ġunit ). subscribe Ġ{ Ġlistener ( it ) Ġ} Ċ } Ċ Ċ fun ĠString . get Complete Por trait Url (): ĠString ? Ġ{ ĊĠĠĠ Ġif Ġ( this . isNotNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! this . startsWith (" http ") Ġ&& Ġ! this . startsWith (" file ", Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"${ Api Constant . FILE _ URL }$ this " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ