package Ġcom . s jn . stamp . ui . fragment . media Ċ Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 4 . view . View Compat Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . De cel erate Interpolator Ċ import Ġcom . g ord on w ong . material sheet fab . Material Sheet Fab EventListener Ċ import Ġcom . s jn . stamp . R Ċ import Ġcom . s jn . stamp . ui . Song Adapter Ċ import Ġcom . s jn . stamp . ui . custom . Center ed Material Sheet Fab Ċ import Ġcom . s jn . stamp . ui . custom . Fab Ċ import Ġcom . s jn . stamp . ui . item . holder . Song ViewHolder Ċ import Ġcom . s jn . stamp . ui . observer . Stamp Edit State Observer Ċ import Ġcom . s jn . stamp . utils .* Ċ import Ġcom . tak use mb a . spot light . Simple Target Ċ import Ġcom . tak use mb a . spot light . Spot light Ċ import Ġio . mult imo on . color ful . Color ful Ċ Ċ abstract Ġclass ĠF ab Fragment Ġ: ĠFragment (), ĠSt amp Edit State Observer . Listener Ġ{ ĊĊĠĠĠ Ġvar Ġis Showing Ġ= Ġtrue ĊĠĠĠ Ġprotected Ġvar Ġre cyclerView : ĠRecyclerView ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġadapter : ĠSong Adapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfab : ĠF ab ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcentered Material Sheet Fab : ĠCenter ed Material Sheet Fab < *> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġstart Stamp Edit : ĠView . OnClickListener Ġ= ĠView . OnClickListener Ġ{ ĠSt amp Edit State Observer . notify StateChange ( Stamp Edit State Observer . State . EDIT ING ) Ġ} ĊĠĠĠ Ġprivate Ġvar Ġstop Stamp Edit : ĠView . OnClickListener Ġ= ĠView . OnClickListener Ġ{ ĠSt amp Edit State Observer . notify StateChange ( Stamp Edit State Observer . State . NO _ EDIT ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Stamp Edit () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( centered Material Sheet Fab Ġ== Ġnull Ġ|| Ġfab Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( centered Material Sheet Fab ?. is Sheet Visible () Ġ== Ġfalse ) Ġcentered Material Sheet Fab ?. show Sheet () ĊĠĠĠĠĠĠĠ Ġfab ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Tint List Ġ= ĠColor State List . valueOf ( Color . RED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Resource ( R . drawable . ic _ dialog _ close _ light ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Tag ( R . id . fab _ type , ĠR . drawable . ic _ dialog _ close _ light ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener ( stop Stamp Edit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclose Stamp Edit () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( centered Material Sheet Fab Ġ== Ġnull Ġ|| Ġfab Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( centered Material Sheet Fab ?. is Sheet Visible () Ġ== Ġtrue ) Ġcentered Material Sheet Fab ?. hide Sheet () ĊĠĠĠĠĠĠĠ Ġfab ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Tint List Ġ= ĠColor State List . valueOf ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Resource ( R . drawable . ic _ stamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Tag ( R . id . fab _ type , ĠR . drawable . ic _ stamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener ( start Stamp Edit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġhide Fab () Ġ{ ĊĠĠĠĠĠĠĠ Ġfab Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠView Compat . animate ( fab ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale X ( 0 f ). scale Y ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 0 f ). set Duration ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġshow Fab () Ġ{ ĊĠĠĠĠĠĠĠ Ġfab Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠView Compat . animate ( fab ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale X ( 1 f ). scale Y ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 1 f ). set Duration ( 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Start Delay ( 3 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġinitialize Fab ( resourceId : ĠInt , Ġcolor : ĠColor State List , ĠonClick Listener : ĠView . OnClickListener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġfab Ġ= Ġactivity ?. findViewById < Fab >( R . id . fab )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Integer . valueOf ( resourceId ) Ġ!= Ġget Tag ( R . id . fab _ type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSt amp Edit State Observer . notify StateChange ( Stamp Edit State Observer . State . NO _ EDIT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Tag ( R . id . fab _ type , Ġresource Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Resource ( resourceId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Tint List Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Listener ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . animate ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale X ( 1 f ). scale Y ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 1 f ). set Duration ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Start Delay ( 3 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġinitialize Fab With Stamp () Ġ{ ĊĠĠĠĠĠĠĠ Ġinitialize Fab ( R . drawable . ic _ stamp , ĠColor State List . valueOf ( Color ful (). get Accent (). as Int ()), Ġstart Stamp Edit ) ĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcentered Material Sheet Fab Ġ= ĠCenter ed Material Sheet Fab ( fab !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . findViewById < View >( R . id . fab _ sheet ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . findViewById < View >( R . id . overlay ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor ful (). get Primary Dark (). as Int (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor ful (). get Accent (). as Int ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcentered Material Sheet Fab ?. set EventListener ( object Ġ: ĠMaterial Sheet Fab EventListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Show Sheet () Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sheet Shown () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSt amp Edit State Observer . notify StateChange ( Stamp Edit State Observer . State . EDIT ING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Hide Sheet () Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sheet Hidden () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSt amp Edit State Observer . notify StateChange ( if Ġ( Stamp Edit State Observer . selected Stamp List . isEmpty ()) ĠSt amp Edit State Observer . State . NO _ EDIT Ġelse ĠSt amp Edit State Observer . State . STAMP ING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġperform Fab Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// default Ġimplementation Ġdoes Ġnothing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Helper . d ( TAG , Ġ" onStart ĠSTART ") ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ ĠSt amp Edit State Observer . addListener ( this ) ĊĠĠĠĠĠĠĠ ĠLog Helper . d ( TAG , Ġ" onStart ĠEND ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Helper . d ( TAG , Ġ" on Stop ĠSTART ") ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġif Ġ( centered Material Sheet Fab ?. is Sheet Visible () Ġ== Ġtrue ) Ġcentered Material Sheet Fab ?. hide Sheet () ĊĠĠĠĠĠĠĠ ĠSt amp Edit State Observer . remove Listener ( this ) ĊĠĠĠĠĠĠĠ ĠLog Helper . d ( TAG , Ġ" on Stop ĠEND ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Selected Stamp Change ( selected Stamp List : ĠList < String >) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Stamp Created ( stamp : ĠString ) Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Stamp Edit State Observer . Listener ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Stamp StateChange ( state : ĠSt amp Edit State Observer . State ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Helper . d ( TAG , Ġ" on Stamp StateChange : Ġ", Ġstate ) ĊĠĠĠĠĠĠĠ Ġif Ġ( centered Material Sheet Fab Ġ== Ġnull Ġ|| Ġfab Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSt amp Edit State Observer . State . EDIT ING Ġ-> Ġopen Stamp Edit () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSt amp Edit State Observer . State . NO _ EDIT Ġ-> Ġclose Stamp Edit () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSt amp Edit State Observer . State . STAMP ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( centered Material Sheet Fab ?. is Sheet Visible () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcentered Material Sheet Fab ?. hide Sheet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Showing Ġ&& Ġ! Preference Helper . is Spot light Shown ( activity , ĠPreference Helper . Key . Spot light . STAMP _ ADD )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Spot light () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadapter ?. notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Spot light () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( re cyclerView Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġre cyclerView ?. findFirst Visible ViewHolder () ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġis ĠSong ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Tap Target View ?. let Ġ{ ĠtextView Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSpot light . with ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 2 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Animation ( De cel erate Interpolator ( 2 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Targets ( Simple Target . Builder ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Point ( textView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Radius ( 1 2 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( getString ( R . string . spot light _ stamp _ add _ title )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setDescription ( getString ( R . string . spot light _ stamp _ add _ description )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Helper . set Spot light Shown ( activity , ĠPreference Helper . Key . Spot light . STAMP _ ADD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠLog Helper . make Log Tag ( Fab Fragment :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ