content: package com.wm.remusic.activity;
  
  import android.content.ContentUris;
  import android.content.DialogInterface;
  import android.content.Intent;
  import android.net.Uri;
  import android.os.AsyncTask;
  import android.os.Bundle;
  import android.os.Handler;
  import android.provider.MediaStore;
  import android.support.v7.app.ActionBar;
  import android.support.v7.app.AlertDialog;
  import android.support.v7.app.AppCompatActivity;
  import android.support.v7.widget.LinearLayoutManager;
  import android.support.v7.widget.RecyclerView;
  import android.support.v7.widget.Toolbar;
  import android.util.SparseBooleanArray;
  import android.view.LayoutInflater;
  import android.view.Menu;
  import android.view.MenuInflater;
  import android.view.MenuItem;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.CheckBox;
  import android.widget.LinearLayout;
  import android.widget.TextView;
  
  import com.wm.remusic.R;
  import com.wm.remusic.dialog.AddPlaylistDialog;
  import com.wm.remusic.info.MusicInfo;
  import com.wm.remusic.provider.PlaylistsManager;
  import com.wm.remusic.service.MediaService;
  import com.wm.remusic.service.MusicPlayer;
  import com.wm.remusic.uitl.IConstants;
  import com.wm.remusic.uitl.MusicUtils;
  import com.wm.remusic.widget.DividerItemDecoration;
  
  import java.util.ArrayList;
  import java.util.HashMap;
  
  /**
   * Created by wm on 2016/3/9.
   */
  public class SelectActivity extends AppCompatActivity implements View.OnClickListener {
  
      private ArrayList<MusicInfo> mList;
      private SelectAdapter mAdapter;
      private ActionBar ab;
      private RecyclerView recyclerView;
      private LinearLayoutManager layoutManager;
      private Toolbar toolbar;
      private LinearLayout nextPlay, addtoPlaylist, delete;
  
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.select);
  
          toolbar = (Toolbar) findViewById(R.id.toolbar);
          setSupportActionBar(toolbar);
          ab = getSupportActionBar();
          ab.setHomeAsUpIndicator(R.drawable.actionbar_back);
          ab.setDisplayHomeAsUpEnabled(true);
          ab.setTitle("已选择0项");
          toolbar.setNavigationOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  onBackPressed();
              }
          });
  
          nextPlay = (LinearLayout) findViewById(R.id.select_next);
          addtoPlaylist = (LinearLayout) findViewById(R.id.select_addtoplaylist);
          delete = (LinearLayout) findViewById(R.id.select_del);
          nextPlay.setOnClickListener(this);
          addtoPlaylist.setOnClickListener(this);
          delete.setOnClickListener(this);
  
          recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
          layoutManager = new LinearLayoutManager(this);
          recyclerView.setLayoutManager(layoutManager);
          recyclerView.setHasFixedSize(true);
  
  
          new loadSongs().execute("");
  
      }
  
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          // Inflate the menu; this adds items to the action bar if it is present.
          final MenuInflater inflater = getMenuInflater();
          inflater.inflate(R.menu.down, menu);
          MenuItem down = menu.findItem(R.id.down);
          down.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
              @Override
              public boolean onMenuItemClick(MenuItem item) {
                  Intent intent = new Intent(SelectActivity.this, DownActivity.class);
                  startActivity(intent);
                  return false;
              }
          });
  
  
          return true;
  
      }
  
  
      @Override
      public void onClick(View v) {
          final ArrayList<MusicInfo> selectList = mAdapter.getSelectedItem();
          switch (v.getId()) {
  
              case R.id.select_next:
  
                  new Handler().postDelayed(new Runnable() {
                      @Override
                      public void run() {
  
                          ArrayList<MusicInfo> select = mAdapter.getSelectedItem();
                          long currentAudioId = MusicPlayer.getCurrentAudioId();
  
                          for (int i = 0; i < select.size(); i++) {
                              if (select.get(i).songId == currentAudioId) {
                                  select.remove(i);
                                  break;
                              }
                          }
  
                          final long[] list = new long[select.size()];
                          HashMap<Long, MusicInfo> infos = new HashMap();
                          for (int i = 0; i < select.size(); i++) {
                              list[i] = select.get(i).songId;
                              MusicInfo info = select.get(i);
                              list[i] = info.songId;
                              info.islocal = true;
                              info.albumData = MusicUtils.getAlbumArtUri(info.albumId) + "";
                              infos.put(list[i], select.get(i));
                          }
  
                          MusicPlayer.playNext(SelectActivity.this, infos, list);
  
                      }
                  }, 100);
  
                  break;
              case R.id.select_addtoplaylist:
                  long[] list1 = new long[selectList.size()];
                  for (int i = 0; i < mAdapter.getSelectedItem().size(); i++) {
                      list1[i] = selectList.get(i).songId;
                  }
                  AddPlaylistDialog.newInstance(list1).show(getSupportFragmentManager(), "add");
                  Intent intent = new Intent(MediaService.PLAYLIST_CHANGED);
                  sendBroadcast(intent);
  
                  break;
              case R.id.select_del:
                  new AlertDialog.Builder(this).setTitle(getResources().getString(R.string.sure_to_delete_music)).
                          setPositiveButton(getResources().getString(R.string.sure), new DialogInterface.OnClickListener() {
                              @Override
                              public void onClick(DialogInterface dialog, int which) {
                                  new AsyncTask<Void, Void, Void>() {
  
                                      @Override
                                      protected Void doInBackground(Void... params) {
                                          for (MusicInfo music : selectList) {
  
                                              if (MusicPlayer.getCurrentAudioId() == music.songId) {
                                                  if (MusicPlayer.getQueueSize() == 0) {
                                                      MusicPlayer.stop();
                                                  } else {
                                                      MusicPlayer.next();
                                                  }
  
                                              }
                                              Uri uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, music.songId);
                                              SelectActivity.this.getContentResolver().delete(uri, null, null);
                                              PlaylistsManager.getInstance(SelectActivity.this).deleteMusic(SelectActivity.this,
                                                      music.songId);
                                          }
  
                                          return null;
                                      }
  
                                      @Override
                                      protected void onPostExecute(Void v) {
                                          mAdapter.updateDataSet();
                                          mAdapter.notifyDataSetChanged();
                                          SelectActivity.this.sendBroadcast(new Intent(IConstants.MUSIC_COUNT_CHANGED));
                                      }
  
                                  }.execute();
                                  dialog.dismiss();
                              }
                          }).
                          setNegativeButton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
                              @Override
                              public void onClick(DialogInterface dialog, int which) {
                                  dialog.dismiss();
                              }
                          }).show();
  
                  break;
          }
      }
  
      @Override
      public void onStop() {
          super.onStop();
          finish();
      }
  
      //异步加载recyclerview界面
      private class loadSongs extends AsyncTask<String, Void, String> {
  
          @Override
          protected String doInBackground(String... params) {
              if (getIntent().getParcelableArrayListExtra("ids") != null) {
                  mList = getIntent().getParcelableArrayListExtra("ids");
              }
              if (mList != null)
                  mAdapter = new SelectAdapter(mList);
              return "Executed";
          }
  
          @Override
          protected void onPostExecute(String result) {
              recyclerView.setAdapter(mAdapter);
              recyclerView.addItemDecoration(new DividerItemDecoration(SelectActivity.this, DividerItemDecoration.VERTICAL_LIST));
  
          }
  
          @Override
          protected void onPreExecute() {
  
          }
      }
  
      public class SelectAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
  
          ArrayList selected;
          private ArrayList<MusicInfo> mList;
          private SparseBooleanArray mSelectedPositions = new SparseBooleanArray();
          private boolean mIsSelectable = false;
  
  
          public SelectAdapter(ArrayList<MusicInfo> list) {
              if (list == null) {
                  throw new IllegalArgumentException("model Data must not be null");
              }
              mList = list;
          }
  
          public ArrayList<MusicInfo> getSelectedItem() {
  
  
              ArrayList<MusicInfo> selectList = new ArrayList<>();
              for (int i = 0; i < mList.size(); i++) {
                  if (isItemChecked(i)) {
                      selectList.add(mList.get(i));
                  }
              }
              return selectList;
          }
  
          //更新adpter的数据
          public void updateDataSet() {
              ab.setTitle("已选择0项");
              mList.removeAll(getSelectedItem());
              mSelectedPositions.clear();
          }
  
  
          @Override
          public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
              View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.select_item, viewGroup, false);
              return new ListItemViewHolder(itemView);
          }
  
          private void setItemChecked(int position, boolean isChecked) {
              mSelectedPositions.put(position, isChecked);
          }
  
          private boolean isItemChecked(int position) {
              return mSelectedPositions.get(position);
          }
  
          private boolean isSelectable() {
              return mIsSelectable;
          }
  
          private void setSelectable(boolean selectable) {
              mIsSelectable = selectable;
          }
  
          @Override
          public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int i) {
              MusicInfo model = mList.get(i);
              //设置条目状态
              ((ListItemViewHolder) holder).mainTitle.setText(model.musicName);
              ((ListItemViewHolder) holder).title.setText(model.artist);
              ((ListItemViewHolder) holder).checkBox.setChecked(isItemChecked(i));
              ((ListItemViewHolder) holder).checkBox.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (isItemChecked(i)) {
                          setItemChecked(i, false);
                      } else {
                          setItemChecked(i, true);
                      }
                      ab.setTitle("已选择" + getSelectedItem().size() + "项");
                  }
              });
              ((ListItemViewHolder) holder).itemView.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (isItemChecked(i)) {
                          setItemChecked(i, false);
                      } else {
                          setItemChecked(i, true);
                      }
                      notifyItemChanged(i);
                      ab.setTitle("已选择" + getSelectedItem().size() + "项");
                  }
              });
  
  
          }
  
          @Override
          public int getItemCount() {
              return mList == null ? 0 : mList.size();
          }
  
          public class ListItemViewHolder extends RecyclerView.ViewHolder {
              //ViewHolder
              CheckBox checkBox;
              TextView mainTitle, title;
  
              ListItemViewHolder(View view) {
                  super(view);
                  this.mainTitle = (TextView) view.findViewById(R.id.select_title_main);
                  this.title = (TextView) view.findViewById(R.id.select_title_small);
                  this.checkBox = (CheckBox) view.findViewById(R.id.select_checkbox);
  
              }
  
          }
      }
  
  
  }
  