package Ġd io zz . echo . fragments Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . media . MediaPlayer Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 7 . widget . Default Item Animator Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . Relative Layout Ċ import Ġandroid . widget . TextView Ċ import Ġd io zz . echo . R Ċ import Ġd io zz . echo . S ongs Ċ import Ġd io zz . echo . activities . MainActivity Ċ import Ġd io zz . echo . adapters . Favorite Adapter Ċ import Ġd io zz . echo . databases . Echo Database Ċ import Ġkotlinx . android . synt hetic . main . fragment _ fav our ites .* Ċ Ċ class ĠF avour ites Fragment Ġ: ĠFragment () Ċ { ĊĠĠĠ Ġvar Ġthat : ĠActivity ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġno F avorites : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġbottom Bar : ĠRelative Layout ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġpause Play Button : ĠImage Button ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġre cyclerView : ĠRecyclerView ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġtrack Position : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġfav Content : ĠEcho Database ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġrefresh List : ĠArrayList < S ongs >? Ġ= Ġnull ĊĠĠĠ Ġvar Ġlist From Database : ĠArrayList < S ongs >? Ġ= Ġnull ĊĊĠĠĠ Ġobject ĠStat ified ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmedia Player : ĠMedia Player ? Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠStatic Bar ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsong Title : ĠTextView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġsong Artist : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġview Ġ= Ġinflater !!. inflate ( R . layout . fragment _ fav our ites , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġno F avorites Ġ= Ġview ?. findViewById ( R . id . no Fav s ) ĊĠĠĠĠĠĠĠ Ġbottom Bar Ġ= Ġview ?. findViewById ( R . id . hidden Bar Fav Screen ) ĊĠĠĠĠĠĠĠ Ġpause Play Button Ġ= Ġview ?. findViewById ( R . id . play Pause Button ) ĊĠĠĠĠĠĠĠ ĠStatic Bar . song Title Ġ= Ġview ?. findViewById ( R . id . now Fav Playing ) ĊĠĠĠĠĠĠĠ ĠStatic Bar . song Artist Ġ= Ġview ?. findViewById ( R . id . now Fav Playing Artist ) ĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= Ġview ?. findViewById ( R . id . fav Recycler ) ĊĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġactivity ?. title Ġ= Ġ" F avorites " ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?, Ġinflater : ĠMenu Inflater ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu ?. clear () ĊĠĠĠĠĠĠĠ Ġinflater ?. inflate ( R . menu . main , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu ?. find Item ( R . id . action _ sort )?. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġmenu ?. find Item ( R . id . action _ search )?. isVisible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġsuper . on Prepare Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġthat Ġ= Ġcontext Ġas ĠActivity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( activity : ĠActivity ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( activity ) ĊĠĠĠĠĠĠĠ Ġthat Ġ= Ġactivity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ( that Ġas ĠMainActivity )?. support ActionBar ?. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġfav Content Ġ= ĠEcho Database ( that ) ĊĊĠĠĠĠĠĠĠ Ġdisplay Fav sBy Searching () ĊĠĠĠĠĠĠĠ Ġbottom Bar Setter () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetS ongs In Phone () Ġ: ĠArrayList < S ongs > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġarray List Ġ= ĠArrayList < S ongs >() ĊĊĠĠĠĠĠĠĠ Ġvar Ġcontent Resolver Ġ= Ġthat ?. content Resolver ĊĠĠĠĠĠĠĠ Ġvar Ġsong Uri Ġ= ĠMedia Store . Audio . Media . EXTERNAL _ CONTENT _ URI ĊĠĠĠĠĠĠĠ Ġvar Ġsong Cursor Ġ= Ġcontent Resolver ?. query ( song Uri , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( song Cursor Ġ!= Ġnull Ġ&& Ġsong Cursor . moveTo First ()) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsong Id Ġ= Ġsong Cursor . getColumnIndex ( Media Store . Audio . Media ._ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġsong Cursor . getColumnIndex ( Media Store . Audio . Media . TITLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartist Ġ= Ġsong Cursor . getColumnIndex ( Media Store . Audio . Media . AR TI ST ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġsong Cursor . getColumnIndex ( Media Store . Audio . Media . DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Added Ġ= Ġsong Cursor . getColumnIndex ( Media Store . Audio . Media . DATE _ AD DED ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( song Cursor . moveTo Next ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc urent Id Ġ= Ġsong Cursor . getLong ( song Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc urent Title Ġ= Ġsong Cursor . getString ( title ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc urent Artist Ġ= Ġsong Cursor . getString ( artist ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc urent Data Ġ= Ġsong Cursor . getString ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc urent Date Ġ= Ġsong Cursor . getLong ( date Added ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray List . add ( S ongs ( c urent Id , Ġc urent Title , Ġc urent Artist , Ġc urent Data , Ġc urent Date )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġarray List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbottom Bar Setter () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġtry ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Bar Click Handler () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatic Bar . song Title ?. text Ġ= ĠPlayer Fragment . Statics . current Song Helper ?. song Title ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatic Bar . song Artist ?. text Ġ= ĠPlayer Fragment . Statics . current Song Helper ?. song Artist ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Fragment . Statics . media Player ?. setOn Completion Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatic Bar . song Title ?. text Ġ= ĠPlayer Fragment . Statics . current Song Helper ?. song Title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatic Bar . song Artist ?. text Ġ= ĠPlayer Fragment . Statics . current Song Helper ?. song Artist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Fragment . Statics . on Song Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Player Fragment . Statics . media Player ?. is Playing Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Bar ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Bar ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ){} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbottom Bar Click Handler () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġbottom Bar ?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStat ified . media Player Ġ= ĠPlayer Fragment . Statics . media Player ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Fragment Ġ= ĠPlayer Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . putString (" song Artist ", ĠPlayer Fragment . Statics . current Song Helper ?. song Artist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . putString (" path ", ĠPlayer Fragment . Statics . current Song Helper ?. song Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . putString (" song Title ", ĠPlayer Fragment . Statics . current Song Helper ?. song Title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Int (" song Id ", ĠPlayer Fragment . Statics . current Song Helper ?. song Id ?. toInt () Ġas ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Int (" song Position ", ĠPlayer Fragment . Statics . current Song Helper ?. current Position Ġas ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Parcelable ArrayList (" song Data ", ĠPlayer Fragment . Statics . fetch S ongs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . putString (" Fav Bottom Bar ", Ġ" Y ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Fragment . arguments Ġ= Ġargs ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Manager ?. beginTransaction ()?. replace ( R . id . details _ fragment , Ġplayer Fragment )?. addTo Back Stack (" Song Playing Fragment ") ?. commit () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġplay Pause Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Player Fragment . Statics . media Player ?. is Playing Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Fragment . Statics . media Player ?. pause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Position Ġ= ĠPlayer Fragment . Statics . media Player ?. current Position Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Pause Button ?. setImage Resource ( R . drawable . play _ icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Fragment . Statics . media Player ?. seek To ( track Position Ġas ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Fragment . Statics . media Player ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Pause Button ?. setImage Resource ( R . drawable . pause _ icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisplay Fav sBy Searching () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fav Content ?. check Size () Ġas ĠInt Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh List Ġ= ĠArrayList < S ongs >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist From Database Ġ= Ġfav Content ?. query Db List ( that Ġas ĠContext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlist From Device Ġ= ĠgetS ongs In Phone () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list From Device Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. list From Device . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. list From Database ?. size Ġas ĠInt Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list From Database ?. get ( j )?. song Id Ġ=== Ġlist From Device ?. get ( i ). song Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh List ?. add (( list From Database Ġas ĠArrayList < S ongs >) [ j ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( refresh List Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno F avorites ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfav Adapter Ġ= ĠF avorite Adapter ( refresh List Ġas ĠArrayList < S ongs >, Ġthat Ġas ĠContext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView ?. layout Manager Ġ= ĠLinearLayoutManager ( that ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView ?. item Animator Ġ= ĠDefault Item Animator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView ?. adapter Ġ= Ġfav Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView ?. set Has Fixed Size ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno F avorites ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno F avorites ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Player Fragment . Statics . media Player Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Bar ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( Player Fragment . Statics . media Player ?. is Playing Ġ== Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Bar ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Bar ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ){} ĊĠĠĠ Ġ} Ċ } Ċ