package Ġcom . car rey . permissions . sn ackbar Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . support . design . widget . Base Transient Bottom Bar Ċ import Ġandroid . support . design . widget . Snackbar Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġcom . car rey . permissions . Rx Permissions . Companion . report Log Ċ import Ġjava . lang . Exception Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġcar rey Ġon Ġ 2 0 1 9 / 3 / 1 4 . Ċ Ġ* Ċ Ġ* ĠDesc : Ċ Ġ*/ Ċ object ĠCustom Sn ackBar Ġ{ ĊĊĠĠĠ Ġfun Ġshow ( ĊĠĠĠĠĠĠĠ Ġactivity : ĠActivity , Ġtitle : ĠString , Ġaction : ĠString ?, Ġlistener : ĠView . OnClickListener ?, ĊĠĠĠĠĠĠĠ Ġduration : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġactivity . window . findViewById < View >( android . R . id . content ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Color Ġ= ĠColor . parse Color ("# 2 6 8 1 ff ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbg Ġ= ĠColor . parse Color ("# B 2 0 0 0 0 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar . make ( content , Ġtitle , Ġduration ). setAction ( action , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction TextColor ( action Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . view . set BackgroundColor ( bg ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackBar Text Ġ= Ġsn ackbar . view . findViewById < TextView >( android . support . design . R . id . sn ackbar _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackBar Text . max Lines Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġsn ackBar Text . parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Max Inline Action Width Ġ= Ġparent . java Class . getDeclared Field (" m Max Inline Action Width ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Max Inline Action Width . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Max Inline Action Width . set ( parent , Ġdp 2 px ( activity , Ġ 1 0 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Field Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . show () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġreport Log . boom (" Custom Sn ackBar ", ĠException ( e )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġmake ( activity : ĠActivity , Ġtitle : ĠString , Ġduration : ĠInt ): ĠSn ackbar Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġactivity . window . findViewById < View >( android . R . id . content ) ĊĠĠĠĠĠĠĠ Ġreturn ĠSn ackbar . make ( parent , Ġtitle , Ġduration ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Action TextColor ( Color . parse Color ("# 2 6 8 1 ff ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( Color . parse Color ("# B 2 0 0 0 0 0 0 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġview . findViewById < TextView >( android . support . design . R . id . sn ackbar _ text ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġtext . parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . java Class . getDeclared Field (" m Max Inline Action Width "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset ( content , Ġdp 2 px ( activity , Ġ 1 0 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Callback ( object Ġ: ĠBase Transient Bottom Bar . Base Callback < Snackbar >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Shown ( transient Bottom Bar : ĠSn ackbar ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport Log . boom (" Custom Sn ackBar ", ĠException ( e )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġdp 2 px ( context : ĠContext , Ġdp Value : ĠFloat ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġscale Ġ= Ġcontext . resources . display Metrics . density ĊĠĠĠ Ġreturn Ġ( dp Value Ġ* Ġscale Ġ+ Ġ 0 . 5 f ). toInt () Ċ } ĊĊĊ