package Ġorg . z ack . music Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 7 . app . AlertDialog Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġorg . z ack . music . main . Main Fragment Ċ import Ġorg . z ack . music . setup . Setup Fragment Ċ import Ġorg . z ack . music . tools . Clean Leak Utils Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . TextView Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġorg . z ack . music . http . ApiService Ċ import Ġorg . z ack . music . http . Rx Utils Ċ import Ġorg . z ack . music . service . Play Service Ċ import Ġorg . z ack . music . update . Update Utils Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . adapter . rx java 2 . Rx Java 2 Call Adapter Factory Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory ĊĊ Ċ /** Ċ Ġ* Ġ@ Author Ġ ĠZ ack rat os Ċ Ġ* Ġ@ Data ĠĠĠĠ 1 8 - 5 - 1 4 Ċ Ġ* Ġ@ Email ĠĠĠ 8 6 9 6 4 9 3 3 9 @ qq . com Ċ Ġ*/ Ċ class ĠLaunch er Activity : ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmain Fragment : ĠMain Fragment Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Fragment . newInstance () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcomposite Disposable Ġby Ġlazy Ġ{ ĠComposite Disposable () Ġ} ĊĊĠĠĠ Ġvar Ġplay Binder : ĠPlay Service . Play Binder ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġconnection : ĠService Connection Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠService Connection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( name : ĠComponent Name ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Connected ( name : ĠComponent Name ?, Ġservice : ĠI Binder ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Binder Ġ= Ġservice Ġas ĠPlay Service . Play Binder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Binder ?. send Status () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ fragment ) ĊĠĠĠĠĠĠĠ Ġimm ersion Bar () ĊĠĠĠĠĠĠĠ Ġadd Child ( main Fragment ) ĊĠĠĠĠĠĠĠ Ġcheck Update () Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( find Fragment ( Main Fragment :: class . java ) Ġ== Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġload Root Fragment ( R . id . fragment _ container , ĠMain Fragment . newInstance ()) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġload Root Fragment ( R . id . fragment _ container , ĠSetup Fragment . newInstance ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠClean Leak Utils . fix Input Method Manager Leak ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . clear () Ċ // ĠĠĠĠĠĠĠ Ġun bind Service ( connection ) Ċ // ĠĠĠĠĠĠĠ Ġplay Binder ?. stop When Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( top Fragment Ġis ĠSetup Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Setup () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( main Fragment . on Back Pressed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . KIT K AT ) ĊĠĠĠ Ġprivate Ġfun Ġimm ersion Bar () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġwindow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecor View Ġ= Ġwindow . decor View ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoption Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ LAYOUT _ HIDE _ NAV IG ATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ FULL SCREEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecor View . system Ui Visibility Ġ= Ġoption ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . navigation Bar Color Ġ= ĠColor . TRANSP ARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . status Bar Color Ġ= ĠColor . TRANSP ARENT ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġwindow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ TRANSL UC ENT _ STATUS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ TRANSL UC ENT _ NAV IG ATION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Update () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdate Disposable Ġ= ĠUpdate Utils . check Update ( support FragmentManager ) ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( update Disposable ) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġvar Ġbin ded Ġ= Ġfalse ĊĠĠĠ Ġfun Ġstart And Bind Service () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠPlay Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġstart Service ( intent ) ĊĠĠĠĠĠĠĠ Ġbin ded Ġ= Ġbind Service ( intent , Ġconnection , ĠB IND _ AUTO _ CREATE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġun bind Service () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bin ded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun bind Service ( connection ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġplay Binder ?. stop When Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Setup () Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove ( top Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run On Commit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Fragment Ġ= Ġmain Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Fragment . set Toolbar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġtop Fragment : ĠFragment ? Ġ= Ġnull ĊĠĠĠ Ġfun Ġadd Child ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( R . id . fragment _ container , Ġfragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run On Commit Ġ{ Ġtop Fragment Ġ= Ġfragment Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġnavigation Bar Exist (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġwindow Manager . default Display ĊĠĠĠĠĠĠĠ Ġval Ġreal Display Metrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd . get Real Metrics ( real Display Metrics ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġreal Height Ġ= Ġreal Display Metrics . height Pixels ĊĠĠĠĠĠĠĠ Ġval Ġreal Width Ġ= Ġreal Display Metrics . width Pixels ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Metrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġd . get Metrics ( display Metrics ) ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Height Ġ= Ġdisplay Metrics . height Pixels ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Width Ġ= Ġdisplay Metrics . width Pixels ĊĠĠĠĠĠĠĠ Ġreturn Ġreal Width Ġ- Ġdisplay Width Ġ> Ġ 0 Ġ|| Ġreal Height Ġ- Ġdisplay Height Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget StatusBar Height (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresource Id Ġ= Ġresources . getIdentifier (" status _ bar _ height ", Ġ" dim en ", Ġ" android ") ĊĠĠĠĠĠĠĠ Ġreturn Ġresources . get Dimension Pixel Size ( resourceId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget NavigationBar Height (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! navigation Bar Exist ()) Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġresource Id Ġ= Ġresources . getIdentifier (" navigation _ bar _ height ", Ġ" dim en ", Ġ" android ") ĊĠĠĠĠĠĠĠ Ġreturn Ġresources . get Dimension Pixel Size ( resourceId ) ĊĠĠĠ Ġ} Ċ Ċ }