content: package com.example.admin.musicplayer;
  
  import android.Manifest;
  import android.content.ComponentName;
  import android.content.ContentResolver;
  import android.content.Context;
  import android.content.Intent;
  import android.content.ServiceConnection;
  import android.content.pm.PackageManager;
  import android.database.Cursor;
  import android.net.Uri;
  import android.os.Bundle;
  import android.os.IBinder;
  import android.provider.SyncStateContract;
  import android.support.design.widget.FloatingActionButton;
  import android.support.design.widget.Snackbar;
  import android.support.v4.app.ActivityCompat;
  import android.support.v4.content.ContextCompat;
  import android.support.v7.app.AppCompatActivity;
  import android.support.v7.widget.Toolbar;
  import android.view.View;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.widget.ListView;
  import android.widget.MediaController;
  import android.widget.MediaController.MediaPlayerControl;
  
  import java.util.ArrayList;
  import java.util.Collection;
  import java.util.Collections;
  import java.util.Comparator;
  
  public class MainActivity extends AppCompatActivity implements MediaPlayerControl {
      private ArrayList<Song> songList;
      private ListView songView;
      private MusicService musicSrv;
      private Intent playIntent;
      private boolean musicBound =false;
      private boolean paused=false, playbackPaused=false;
      private MusicController controller;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
  
          songView=(ListView)findViewById(R.id.song_list);
          songList=new ArrayList<Song>();
  
  
          getSongInfo();
          Collections.sort(songList, new Comparator<Song>(){
              public int compare(Song a, Song b){
                  return a.getTitle().compareTo(b.getTitle());
              }
          });
  
          SongAdapter songAdt = new SongAdapter(this, songList);
          songView.setAdapter(songAdt);
          setController();
  
      }
      private void playNext(){
          musicSrv.playNext();
          if(playbackPaused){
              setController();
              playbackPaused=false;
          }
          controller.show(0);
      }
      private void playPrev(){
          musicSrv.playPrev();
          if(playbackPaused){
              setController();
              playbackPaused=false;
          }
          controller.show(0);
      }
      @Override
      public void start() {
          musicSrv.go();
      }
  
      @Override
      public void pause() {
          playbackPaused=true;
          musicSrv.pausePlayer();
      }
  
      @Override
      public int getDuration() {
          if(musicSrv!=null && musicBound&& musicSrv.isPng())
              return musicSrv.getDur();
          else return 0;
      }
  
      @Override
      public int getCurrentPosition() {
          if(musicSrv!=null && musicBound && musicSrv.isPng())
              return musicSrv.getPosn();
          else return 0;
  
      }
  
      @Override
      public void seekTo(int i) {
          musicSrv.seek(i);
      }
  
      @Override
      public boolean isPlaying() {
          if(musicSrv!=null && musicBound)
              return musicSrv.isPng();
          return false;
      }
  
      @Override
      public int getBufferPercentage() {
          return 0;
      }
  
      @Override
      public boolean canPause() {
          return true;
      }
  
      @Override
      public boolean canSeekBackward() {
          return true;
      }
  
      @Override
      public boolean canSeekForward() {
          return true;
      }
  
      @Override
      public int getAudioSessionId() {
          return 0;
      }
      @Override
      protected void onPause(){
          super.onPause();
          paused=true;
      }
      @Override
      protected void onResume(){
          super.onResume();
          if(paused){
              setController();
              paused=false;
          }
      }
  
      @Override
      protected void onStop() {
          controller.hide();
          super.onStop();
      }
  
      private ServiceConnection musicConnection = new ServiceConnection(){
          @Override
          public void onServiceConnected(ComponentName name, IBinder service) {
              MusicService.MusicBinder binder =(MusicService.MusicBinder)service;
              musicSrv=binder.getService();
              musicSrv.setList(songList);
              musicBound=true;
          }
  
          @Override
          public void onServiceDisconnected(ComponentName componentName) {
          musicBound=false;
          }
      };
      public void getSongInfo()
      {
          ContentResolver musicResolver = getContentResolver();
          Uri musicUri= android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
  
  
          Cursor musicCursor=musicResolver.query(musicUri,null,null,null,null);
  
          if(musicCursor!=null && musicCursor.moveToFirst()){
              //get columns
              int titleColumn = musicCursor.getColumnIndex
                      (android.provider.MediaStore.Audio.Media.TITLE);
              int idColumn = musicCursor.getColumnIndex
                      (android.provider.MediaStore.Audio.Media._ID);
              int artistColumn = musicCursor.getColumnIndex
                      (android.provider.MediaStore.Audio.Media.ARTIST);
              //add songs to list
              do {
                  long thisId = musicCursor.getLong(idColumn);
                  String thisTitle = musicCursor.getString(titleColumn);
                  String thisArtist = musicCursor.getString(artistColumn);
                  songList.add(new Song(thisId, thisTitle, thisArtist));
              }
              while (musicCursor.moveToNext());
          }
  
      }
      @Override
      protected void onStart() {
          super.onStart();
          if(playIntent==null){
              playIntent = new Intent(this, MusicService.class);
              bindService(playIntent, musicConnection, Context.BIND_AUTO_CREATE);
              startService(playIntent);
          }
      }
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          // Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.menu_main, menu);
          return true;
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
              case R.id.action_shuffle:
                 musicSrv.setShuffle();
                  break;
              case R.id.action_end:
                  stopService(playIntent);
                  musicSrv=null;
                  System.exit(0);
                  break;
  
          }
          return super.onOptionsItemSelected(item);
      }
  
      public void songPicked(View view)
      {
          musicSrv.setSong(Integer.parseInt(view.getTag().toString()));
          musicSrv.playSong();
          if(playbackPaused){
              setController();
              playbackPaused=false;
          }
          controller.show(0);
  
      }
  
      @Override
      protected void onDestroy() {
          stopService(playIntent);
          musicSrv=null;
          super.onDestroy();
      }
  
      private  void setController()
      {
          controller=new MusicController(this);
          controller.setPrevNextListeners(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              playNext();
          }
      }, new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              playPrev();
          }
      });
          controller.setMediaPlayer(this);
          controller.setAnchorView(findViewById(R.id.song_list));
          controller.setEnabled(true);
  
  
      }
  
  
  }
  