/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠNet E ase , ĠInc . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġa ĠMIT Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ package Ġcom . net ease . yun xin . app . wis dom . base . util Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġjava . lang . reflect . Invocation Handler Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . lang . reflect . Proxy Ċ Ċ object ĠCommon Util Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEmit s Ġonly Ġthe Ġfirst Ġevent Ġduring Ġsequential Ġtime Ġwindows Ġof Ġa Ġspecified Ġduration ĊĠĠĠĠ Ġ* Ġ@ param Ġduration Ġduration Ġtime ĊĠĠĠĠ Ġ* Ġ@ param Ġcombine Ġ ä¸Ģä¸ª æİ¥åı£ ä¸ŃçļĦ æīĢæľī åĽŀè°ĥ æĸ¹æ³ķ æĺ¯åĲ¦ åħ± çĶ¨ éĺ² æĬ ĸ æĹ¶éĹ´ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > ĠT . throttle First ( duration : ĠLong Ġ= Ġ 5 0 0 L , Ġcombine : ĠBoolean Ġ= Ġfalse , Ġdefault ReturnValue : ĠAny ? Ġ= Ġnull ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠProxy . new Proxy Instance ( this !! :: class . java . class Loader , Ġthis !! :: class . java . interfaces , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠInvocation Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmap Ġ= ĠHashMap < Method ?, ĠLong >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( proxy : ĠAny , Ġmethod : ĠMethod , Ġargs : ĠArray < out ĠAny >? ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġif Ġ( combine ) Ġnull Ġelse Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( current Ġ- Ġ( map [ key ] Ġ?: Ġ 0 ) Ġ> Ġduration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ key ] Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . invoke ( this @ throttle First , Ġ* args . or Empty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Return If Throttle ( method , Ġdefault ReturnValue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Return If Throttle ( method : ĠMethod , Ġdefault ReturnValue : ĠAny ?): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( method . returnType . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVoid :: class . java . name , ĠVoid . TYPE . name Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdefault ReturnValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ( throw ĠIllegalArgumentException (" Cannot Ġproperly Ġthrottle Ġa Ġcallback Ġthat Ġdoes Ġnot Ġreturn Ġa Ġnull Ġvalue Ġor Ġlack s Ġa Ġdefault Ġvalue .")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠView . setOn Click Throttle First ( listener : ĠView . OnClickListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset OnClickListener ( listener . throttle First ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġcompare List ( list 1 : ĠList < T >, Ġlist 2 : ĠList < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlist 1 . size Ġ== Ġlist 2 . size Ġ&& Ġlist 1 . contains All ( list 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġlist 2 . contains All ( list 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Key Board ( activity : ĠActivity , Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Method Manager Ġ= Ġactivity . getSystem Service ( Activity . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġinput Method Manager . hide Soft Input From Window ( view . window Token , ĠInput Method Manager . HIDE _ NOT _ ALWAYS ) ĊĠĠĠ Ġ} Ċ }