@ file : Suppress (" NOTH ING _ TO _ INLINE ") Ċ Ċ package Ġcom . xw . saml pe . bubble seek bar Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . view . View Compat Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Behavior Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Fragment Ċ Ċ /** Ċ Ġ* Ġ çĤ¹åĩ» äºĭä»¶ . Ċ Ġ* Ġ@ receiver ĠView Ċ Ġ* Ġ@ param Ġblock Ġ( View ) Ġ-> ĠUnit Ċ Ġ*/ Ċ inline Ġfun ĠView . click ( no inline Ġblock : Ġ( View ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġthis . setOnClickListener ( block ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ çĤ¹åĩ» äºĭä»¶ éĺ² éĩįå¤į . Ċ Ġ* Ġ@ receiver ĠView Ċ Ġ* Ġ@ param Ġduration ĠLong Ċ Ġ* Ġ@ param Ġblock Ġ( View ) Ġ-> ĠUnit Ċ Ġ*/ Ċ inline Ġfun ĠView . click Throttle ( duration : ĠLong Ġ= Ġ 5 0 0 L , Ġcross inline Ġblock : Ġ( View ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġ// Ġ æľĢ æĸ°çļĦ çĤ¹åĩ» æĹ¶éĹ´ . ĊĠĠĠ Ġvar Ġlast Click Time Ġ= Ġ 0 L ĊĠĠĠ Ġthis . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( System . currentTimeMillis () Ġ- Ġlast Click Time Ġ> Ġduration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Click Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock . invoke ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ çĤ¹åĩ» äºĭä»¶ éĺ² éĩįå¤į . Ċ Ġ* Ġ@ receiver ĠArray < View > Ċ Ġ* Ġ@ param Ġduration ĠLong Ċ Ġ* Ġ@ param Ġblock Ġ( View ) Ġ-> ĠUnit Ċ Ġ*/ Ċ inline Ġfun ĠArray < View >. click Throttle ( duration : ĠLong Ġ= Ġ 5 0 0 L , Ġcross inline Ġblock : Ġ( View ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġ// Ġ æľĢ æĸ°çļĦ çĤ¹åĩ» æĹ¶éĹ´ . ĊĠĠĠ Ġvar Ġlast Click Time Ġ= Ġ 0 L ĊĠĠĠ Ġthis . forEach Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠ Ġv . click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( System . currentTimeMillis () Ġ- Ġlast Click Time Ġ> Ġduration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Click Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ operator Ġfun ĠView . plus ( view : ĠView ): ĠArray < View > Ġ= ĠarrayOf ( this , Ġview ) Ċ Ċ /** Ċ Ġ* Ġ ç¦ģ æŃ¢ æ»ĳ åĬ¨ åħ³éĹŃ . Ċ Ġ* Ġ@ receiver ĠBottom Sheet Dialog Fragment Ċ Ġ*/ Ċ inline Ġfun ĠBottom Sheet Dialog Fragment . for bid Scroll () Ġ{ ĊĠĠĠ Ġview ?. view Tree Observer ?. add On Global Layout Listener ( object Ġ: ĊĠĠĠĠĠĠĠ ĠView Tree Observer . On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Global Layout () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. view Tree Observer ?. remove Global On Layout Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . from ( view ?. parent Ġas ĠView ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠBottom Sheet Behavior . STATE _ EXP AN DED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bottom Sheet Callback ( object Ġ: ĠBottom Sheet Behavior . Bottom Sheet Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Slide ( bottom Sheet : ĠView , Ġslide Offset : ĠFloat ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon StateChanged ( bottom Sheet : ĠView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġ== ĠBottom Sheet Behavior . STATE _ DR AG GING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ apply . state Ġ= ĠBottom Sheet Behavior . STATE _ EXP AN DED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ } Ċ Ċ fun ĠView . update Margin ( ĊĠĠĠ Ġlayout : ĠViewGroup . Margin LayoutParams Ġ= Ġ( layout Params Ġas ĠViewGroup . Margin LayoutParams ), ĊĠĠĠ Ġleft : ĠInt Ġ= Ġlayout . left Margin , ĊĠĠĠ Ġtop : ĠInt Ġ= Ġlayout . top Margin , ĊĠĠĠ Ġright : ĠInt Ġ= Ġlayout . right Margin , ĊĠĠĠ Ġbottom : ĠInt Ġ= Ġlayout . bottom Margin Ċ ) Ġ{ ĊĠĠĠ Ġ( layout Params Ġas ĠViewGroup . Margin LayoutParams ). set Margins ( left , Ġtop , Ġright , Ġbottom ) Ċ } Ċ Ċ inline Ġfun ĠView . on Window Insets Apply ( cross inline Ġapply : Ġ( v : ĠView , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠView Compat . setOn Apply Window Insets Listener ( this ) Ġ{ Ġv , Ġin sets Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcut out Ġ= Ġin sets . display Cut out ĊĠĠĠĠĠĠĠ Ġif Ġ( cut out Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . safe Inset Left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . safe Inset Top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . safe Inset Right , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut out . safe Inset Bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply ( v , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġin sets . consume System Window Insets () ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun ĠView . show () Ġ{ ĊĠĠĠ Ġif Ġ( visibility Ġ!= ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun ĠView . hide ( full : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠ Ġif Ġ( full Ġ&& Ġvisibility Ġ!= ĠView . GONE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} Ġelse Ġif Ġ(! full Ġ&& Ġvisibility Ġ!= ĠView . IN VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . IN VISIBLE ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress Lint (" Click ableView Accessibility ") Ċ fun ĠView . set Custom ClickListener ( ĊĠĠĠ Ġlong Click Duration : ĠLong Ġ= Ġ 5 0 0 L , ĊĠĠĠ ĠonClick : Ġ(( v : ĠView ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġon Long Click : Ġ(( v : ĠView ) Ġ-> ĠBoolean )? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġclick Handled Ġ= Ġfalse ĊĊĠĠĠ Ġif Ġ( onClick Ġ!= Ġnull Ġ&& Ġ! is Clickable ) Ġis Clickable Ġ= Ġtrue ĊĠĠĠ Ġif Ġ( on Long Click Ġ!= Ġnull Ġ&& Ġ! is Long Clickable ) Ġis Long Clickable Ġ= Ġtrue ĊĠĠĠ Ġif Ġ(! is Clickable Ġ&& Ġ! is Long Clickable ) Ġreturn ĊĊĠĠĠ Ġval Ġclick Action Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( onClick Ġ!= Ġnull Ġ&& Ġis Clickable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick . invoke ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Sound Effect ( Sound Effect Constants . CLICK ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġlong Click Action Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( on Long Click Ġ!= Ġnull Ġ&& Ġis Long Clickable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Handled Ġ= Ġon Long Click . invoke ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click Handled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform H aptic Feedback ( H aptic Feedback Constants . LONG _ PRESS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠView . touch In ( raw X : ĠFloat , Ġraw Y : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠInt Array ( 2 ) ĊĠĠĠĠĠĠĠ Ġget Location On Screen ( location ) ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġlocation [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġlocation [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġleft Ġ+ Ġwidth ĊĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġtop Ġ+ Ġheight ĊĠĠĠĠĠĠĠ Ġreturn Ġraw X Ġ>= Ġleft Ġ&& Ġraw X Ġ<= Ġright Ġ&& Ġraw Y Ġ>= Ġtop Ġ&& Ġraw Y Ġ<= Ġbottom ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġset On Touch Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Handled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . remove Callbacks ( long Click Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . post Delayed ( long Click Action , Ġlong Click Duration ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ MOVE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! touch In ( event . raw X , Ġevent . raw Y )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . remove Callbacks ( long Click Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! click Handled Ġ&& Ġtouch In ( event . raw X , Ġevent . raw Y )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Action . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . remove Callbacks ( long Click Action ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ CANCEL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . remove Callbacks ( long Click Action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ /*** Ġ æĶ¹åıĺ åŃĹ éĩį */ Ċ inline Ġfun ĠTextView . change TextStyle ( bold : ĠBoolean ) Ġ{ ĊĠĠĠ Ġset Type face ( null , Ġif Ġ( bold ) ĠType face . BOLD Ġelse ĠType face . NORMAL ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ å°Ŀè¯ķ è®¾ç½® åŃĹ éĩį ä¸º ĠMedium Ċ Ġ* Ċ Ġ* Ġ!!! Ġnot Ġwork Ġas Ġexpected Ċ Ġ* Ġ@ param [ fallback To Bold ] Ġæ ² ¡ æľī ĠMedium Ġ åŃĹ éĩį æĹ¶ åĽŀ æ»ļ åĪ° ĠB old Ġ è¿ĺæĺ¯ ĠNormal Ċ Ġ*/ Ċ inline Ġfun ĠTextView . try Medium Weight ( fallback To Bold : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠ Ġval Ġmedium Ġ= Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . P ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtf Ġ= ĠType face . create ( Type face . DEFAULT , Ġ 5 0 0 , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġif Ġ( tf Ġ== ĠType face . DEFAULT ) Ġnull Ġelse Ġtf ĊĠĠĠ Ġ} Ġelse Ġnull ĊĊĠĠĠ Ġif Ġ( medium Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Type face ( null , Ġif Ġ( fallback To Bold ) ĠType face . BOLD Ġelse ĠType face . NORMAL ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġtype face Ġ= Ġmedium ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġval ĠView . layout Inflater : ĠLayoutInflater Ġinline Ġget () Ġ= ĠLayoutInflater . from ( context ) Ċ