diff --git a/app/src/main/assets/litepal.xml b/app/src/main/assets/litepal.xml
index d5df70e..0a86e7f 100644
--- a/app/src/main/assets/litepal.xml
+++ b/app/src/main/assets/litepal.xml
@@ -2,11 +2,12 @@
-
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/musicplayer/adapter/LoveSongAdapter.java b/app/src/main/java/com/example/musicplayer/adapter/LoveSongAdapter.java
new file mode 100644
index 0000000..ae77e5c
--- /dev/null
+++ b/app/src/main/java/com/example/musicplayer/adapter/LoveSongAdapter.java
@@ -0,0 +1,137 @@
+package com.example.musicplayer.adapter;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.example.musicplayer.R;
+import com.example.musicplayer.entiy.Love;
+import com.example.musicplayer.util.FileHelper;
+
+import java.util.List;
+
+/**
+ * Created by 残渊 on 2018/11/30.
+ */
+
+public class LoveSongAdapter extends RecyclerView.Adapter {
+ private static final String TAG = "LoveSongAdapter";
+ private int footerViewType = 1;
+ private int itemViewType = 0;
+ private List mLoveList;
+ private Context mContext;
+ private int mLastPosition = -1;
+ private OnItemClickListener onItemClickListener;
+
+ public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
+ this.onItemClickListener = onItemClickListener;
+ }
+
+ public LoveSongAdapter(Context context, List loveList) {
+ mContext = context;
+ mLoveList = loveList;
+ }
+
+
+ class ViewHolder extends RecyclerView.ViewHolder {
+ TextView songNameTv;
+ TextView singerTv;
+ View mItemView;
+ View playLine;
+
+ public ViewHolder(View itemView) {
+ super(itemView);
+ songNameTv = itemView.findViewById(R.id.tv_title);
+ singerTv = itemView.findViewById(R.id.tv_artist);
+ playLine = itemView.findViewById(R.id.line_play);
+ mItemView = itemView;
+ }
+ }
+
+ /**
+ * 底部holder
+ */
+ static class FooterHolder extends RecyclerView.ViewHolder {
+
+ TextView numTv;
+
+ public FooterHolder(View itemView) {
+ super(itemView);
+ numTv = itemView.findViewById(R.id.tv_song_num);
+ }
+ }
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ if (viewType == itemViewType) {
+ View view = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.recycler_song_search_item, parent, false);
+ ViewHolder viewHolder = new ViewHolder(view);
+ return viewHolder;
+ } else {
+ View footerView = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.footer_local_songs_item, parent, false);
+ FooterHolder footerHolder = new FooterHolder(footerView);
+ return footerHolder;
+ }
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {
+ if (viewHolder instanceof ViewHolder) {
+ ViewHolder holder = (ViewHolder) viewHolder;
+ final Love love = mLoveList.get(position);
+
+ holder.songNameTv.setText(love.getName());
+ holder.singerTv.setText(love.getSinger());
+ //根据点击显示
+ if(love.getSongId().equals(FileHelper.getSong().getOnlineId())){
+ holder.playLine.setVisibility(View.VISIBLE);
+ mLastPosition =position;
+ holder.mItemView.setBackgroundResource(R.color.click);
+ }else {
+ holder.playLine.setVisibility(View.INVISIBLE);
+ holder.mItemView.setBackgroundResource(R.color.transparent);
+ }
+ holder.mItemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onItemClickListener.onSongClick(position);
+ equalPosition(position);
+ }
+ });
+ } else {
+ FooterHolder footerHolder = (FooterHolder) viewHolder;
+ footerHolder.numTv.setText("共" + mLoveList.size() + "首音乐");
+ }
+ }
+
+ //判断点击的是否为上一个点击的项目
+ public void equalPosition(int position) {
+ if (position != mLastPosition) {
+ notifyItemChanged(mLastPosition);
+ mLastPosition = position;
+ }
+ notifyItemChanged(position);
+ }
+
+ @Override
+ public int getItemCount() {
+ return mLoveList.size() + 1;
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ return position + 1 == getItemCount() ? footerViewType : itemViewType;
+ }
+
+
+ public interface OnItemClickListener {
+ void onSongClick(int position);
+ }
+
+}
diff --git a/app/src/main/java/com/example/musicplayer/adapter/SongAdapter.java b/app/src/main/java/com/example/musicplayer/adapter/SongAdapter.java
index 12343fa..069d475 100644
--- a/app/src/main/java/com/example/musicplayer/adapter/SongAdapter.java
+++ b/app/src/main/java/com/example/musicplayer/adapter/SongAdapter.java
@@ -9,6 +9,7 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
+import com.example.musicplayer.constant.Constant;
import com.example.musicplayer.constant.MyApplication;
import com.example.musicplayer.entiy.Song;
import com.example.musicplayer.R;
@@ -73,10 +74,6 @@ public class SongAdapter extends RecyclerView.Adapter {
if (viewType == itemViewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_song_item, parent, false);
-// TypedValue typedValue = new TypedValue();
-// mContext.getTheme().resolveAttribute(R.attr.selectableItemBackground, typedValue, true);
-// view.setBackgroundResource(typedValue.resourceId);
-
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
} else {
@@ -123,6 +120,8 @@ public class SongAdapter extends RecyclerView.Adapter {
song.setDuration(mp3Info.getDuration());
song.setCurrent(position);
song.setOnline(false);
+ song.setOnlineId(mp3Info.getSongId());
+ song.setListType(Constant.LIST_TYPE_LOCAL);
FileHelper.saveSong(song);
onItemClickListener.onSongClick();
@@ -131,7 +130,8 @@ public class SongAdapter extends RecyclerView.Adapter {
});
} else {
FooterHolder footerHolder = (FooterHolder) viewHolder;
- footerHolder.numTv.setText("共" + mMp3InfoList.size() + "首音乐");
+ int num=mMp3InfoList.size()-1;
+ footerHolder.numTv.setText("共" + num + "首音乐");
}
}
diff --git a/app/src/main/java/com/example/musicplayer/constant/BroadcastName.java b/app/src/main/java/com/example/musicplayer/constant/BroadcastName.java
index 16c75d7..c988ced 100644
--- a/app/src/main/java/com/example/musicplayer/constant/BroadcastName.java
+++ b/app/src/main/java/com/example/musicplayer/constant/BroadcastName.java
@@ -13,5 +13,6 @@ public class BroadcastName {
public static final String SONG_RESUME="song_resume";
public static final String ONLINE_SONG_ERROR="online_song_error";
public static final String ONLINE_ALBUM_SONG_Change="online_album_song_change";
+ public static final String LOVE_SONG_CHANGE="love_song_change";
}
diff --git a/app/src/main/java/com/example/musicplayer/constant/Constant.java b/app/src/main/java/com/example/musicplayer/constant/Constant.java
index 34110c0..82462ca 100644
--- a/app/src/main/java/com/example/musicplayer/constant/Constant.java
+++ b/app/src/main/java/com/example/musicplayer/constant/Constant.java
@@ -11,4 +11,5 @@ public class Constant {
public static final int TYPE_ALBUM_SONG=3;
public static final int LIST_TYPE_LOCAL=4;
public static final int LIST_TYPE_ONLINE=5;
+ public static final int LIST_TYPE_LOVE=6;
}
diff --git a/app/src/main/java/com/example/musicplayer/contract/IPlayContract.java b/app/src/main/java/com/example/musicplayer/contract/IPlayContract.java
index 25325ad..3a14362 100644
--- a/app/src/main/java/com/example/musicplayer/contract/IPlayContract.java
+++ b/app/src/main/java/com/example/musicplayer/contract/IPlayContract.java
@@ -1,5 +1,8 @@
package com.example.musicplayer.contract;
+import com.example.musicplayer.entiy.Love;
+import com.example.musicplayer.entiy.Song;
+
/**
* Created by 残渊 on 2018/10/26.
*/
@@ -7,17 +10,27 @@ package com.example.musicplayer.contract;
public interface IPlayContract {
interface Model{
void getSingerImg(String singer);//网络请求获得歌手uri
+ void queryLove(String songId);//查询我喜欢的数据库中有没这首歌
+ void saveToLove(Song song); //添加到我喜欢的表
+ void deleteFromLove(String songId); //从我喜欢的表中移除
}
interface View{
String getSingerName(); //得到歌手的姓名
void getSingerAndLrc();//按钮点击事件,获取封面和歌词
void setSingerImg(String ImgUrl); //将图片设置成背景
void setImgFail(String errorMessage);
- void setSearchImg();//设置搜索歌曲的图片
+ void showLove(boolean love); //判断是否显示我喜欢的图标
+ void showLoveAnim(); //喜欢的动画
+ void saveToLoveSuccess();//保存到我喜欢数据库成功
}
interface Presenter{
void getSingerImg(String singer);
void getSingerImgSuccess(String ImgUrl); //成功获取图片
void getSingerImgFail(); //请求失败
+ void queryLove(String songId);//查询我喜欢的数据库中有没这首歌
+ void saveToLove(Song song); //添加到我喜欢的表
+ void deleteFromLove(String songId); //从我喜欢的表中移除
+ void saveToLoveSuccess();//保存到我喜欢数据库成功
+ void showLove(boolean love); //判断是否显示我喜欢的图标
}
}
diff --git a/app/src/main/java/com/example/musicplayer/entiy/LocalSong.java b/app/src/main/java/com/example/musicplayer/entiy/LocalSong.java
index 3dba1df..f83121d 100644
--- a/app/src/main/java/com/example/musicplayer/entiy/LocalSong.java
+++ b/app/src/main/java/com/example/musicplayer/entiy/LocalSong.java
@@ -9,6 +9,7 @@ import org.litepal.crud.LitePalSupport;
public class LocalSong extends LitePalSupport{
private int id;
+ private String songId;
private String name;
private String singer;
private String url;
@@ -63,4 +64,12 @@ public class LocalSong extends LitePalSupport{
public long getDuration() {
return duration;
}
+
+ public void setSongId(String songId) {
+ this.songId = songId;
+ }
+
+ public String getSongId() {
+ return songId;
+ }
}
diff --git a/app/src/main/java/com/example/musicplayer/entiy/Love.java b/app/src/main/java/com/example/musicplayer/entiy/Love.java
new file mode 100644
index 0000000..18f045d
--- /dev/null
+++ b/app/src/main/java/com/example/musicplayer/entiy/Love.java
@@ -0,0 +1,75 @@
+package com.example.musicplayer.entiy;
+
+import org.litepal.crud.LitePalSupport;
+
+/**
+ * Created by 残渊 on 2018/11/30.
+ */
+
+public class Love extends LitePalSupport{
+ private int id;
+ private String songId;
+ private String name;
+ private String singer;
+ private String url;
+ private String pic;
+ private boolean isOnline;
+
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getSinger() {
+ return singer;
+ }
+
+ public void setSinger(String singer) {
+ this.singer = singer;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getPic() {
+ return pic;
+ }
+
+ public void setPic(String pic) {
+ this.pic = pic;
+ }
+
+
+ public String getSongId() {
+ return songId;
+ }
+
+ public void setSongId(String songId) {
+ this.songId = songId;
+ }
+
+ public void setOnline(boolean online) {
+ isOnline = online;
+ }
+
+ public boolean isOnline() {
+ return isOnline;
+ }
+}
diff --git a/app/src/main/java/com/example/musicplayer/entiy/Song.java b/app/src/main/java/com/example/musicplayer/entiy/Song.java
index 6548de2..7c7d637 100644
--- a/app/src/main/java/com/example/musicplayer/entiy/Song.java
+++ b/app/src/main/java/com/example/musicplayer/entiy/Song.java
@@ -18,7 +18,7 @@ public class Song implements Serializable {
private int current;//在本地音乐的位置
private String imgUrl;
private boolean isOnline;
- private boolean isOnlineAlbum;
+ private int listType;
public String getImgUrl() {
return imgUrl;
@@ -84,12 +84,12 @@ public class Song implements Serializable {
isOnline = online;
}
- public boolean isOnlineAlbum() {
- return isOnlineAlbum;
+ public int getListType() {
+ return listType;
}
- public void setOnlineAlbum(boolean onlineAlbum) {
- isOnlineAlbum = onlineAlbum;
+ public void setListType(int listType) {
+ this.listType = listType;
}
public String getOnlineId() {
@@ -103,7 +103,7 @@ public class Song implements Serializable {
public String toString(){
return "songName="+songName+",singer="+singer+",url="+url+",imgUrl="+imgUrl
+",duration="+duration+",currentTime="+currentTime+",current="+current
- +",onlineId="+onlineId+",isOnline="+isOnline+",isOnlineAlbum="+isOnlineAlbum;
+ +",onlineId="+onlineId+",isOnline="+isOnline+",listType="+listType;
}
}
diff --git a/app/src/main/java/com/example/musicplayer/model/IPlayModel.java b/app/src/main/java/com/example/musicplayer/model/IPlayModel.java
index 221e3ce..b12d765 100644
--- a/app/src/main/java/com/example/musicplayer/model/IPlayModel.java
+++ b/app/src/main/java/com/example/musicplayer/model/IPlayModel.java
@@ -4,10 +4,17 @@ import android.support.annotation.MainThread;
import android.util.Log;
import com.example.musicplayer.contract.IPlayContract;
+import com.example.musicplayer.entiy.Love;
import com.example.musicplayer.entiy.SingerImg;
+import com.example.musicplayer.entiy.Song;
import com.example.musicplayer.https.NetWork;
+import org.litepal.LitePal;
+import org.litepal.crud.callback.FindMultiCallback;
+import org.litepal.crud.callback.SaveCallback;
+
import java.io.IOException;
+import java.util.List;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -63,4 +70,57 @@ public class IPlayModel implements IPlayContract.Model {
}
});
}
+
+ @Override
+ public void queryLove(final String songId) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ LitePal.where("songId=?",songId).findAsync(Love.class).listen(new FindMultiCallback() {
+ @Override
+ public void onFinish(List list) {
+ if(list.size()==0){
+ mPresenter.showLove(false);
+ }else{
+ mPresenter.showLove(true);
+ }
+ }
+ });
+ }
+ }).start();
+ }
+
+ @Override
+ public void saveToLove(final Song song) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ Love love =new Love();
+ love.setName(song.getSongName());
+ love.setSinger(song.getSinger());
+ love.setUrl(song.getUrl());
+ love.setPic(song.getImgUrl());
+ love.setSongId(song.getOnlineId());
+ love.setOnline(song.isOnline());
+ love.saveAsync().listen(new SaveCallback() {
+ @Override
+ public void onFinish(boolean success) {
+ if(success){
+ mPresenter.saveToLoveSuccess();
+ }
+ }
+ });
+ }
+ }).start();
+ }
+
+ @Override
+ public void deleteFromLove(final String songId) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ LitePal.deleteAll("songId=?",songId);
+ }
+ }).start();
+ }
}
diff --git a/app/src/main/java/com/example/musicplayer/model/LocalMusicModel.java b/app/src/main/java/com/example/musicplayer/model/LocalMusicModel.java
index 5c7758a..77c234c 100644
--- a/app/src/main/java/com/example/musicplayer/model/LocalMusicModel.java
+++ b/app/src/main/java/com/example/musicplayer/model/LocalMusicModel.java
@@ -2,6 +2,7 @@ package com.example.musicplayer.model;
import android.database.Cursor;
import android.provider.MediaStore;
+import android.util.Log;
import com.example.musicplayer.constant.MyApplication;
import com.example.musicplayer.contract.ILocalMusicContract;
@@ -18,6 +19,7 @@ import java.util.List;
*/
public class LocalMusicModel implements ILocalMusicContract.Model {
+ private static final String TAG="LocalMusicModel";
private ILocalMusicContract.Presenter mPresenter;
@@ -65,6 +67,8 @@ public class LocalMusicModel implements ILocalMusicContract.Model {
mp3Info.setSinger(artist);
mp3Info.setDuration(duration);
mp3Info.setUrl(url);
+ mp3Info.setSongId(String.valueOf(id));
+ Log.d(TAG, "run: "+mp3Info.getSongId());
mp3InfoList.add(mp3Info);
}
}
@@ -88,6 +92,7 @@ public class LocalMusicModel implements ILocalMusicContract.Model {
song.setSinger(localSong.getSinger());
song.setUrl(localSong.getUrl());
song.setDuration(localSong.getDuration());
+ song.setSongId(localSong.getSongId());
song.save();
}
}
diff --git a/app/src/main/java/com/example/musicplayer/presenter/PlayPresenter.java b/app/src/main/java/com/example/musicplayer/presenter/PlayPresenter.java
index ca6a13a..ddc1813 100644
--- a/app/src/main/java/com/example/musicplayer/presenter/PlayPresenter.java
+++ b/app/src/main/java/com/example/musicplayer/presenter/PlayPresenter.java
@@ -2,6 +2,7 @@ package com.example.musicplayer.presenter;
import com.example.musicplayer.base.BasePresenter;
import com.example.musicplayer.contract.IPlayContract;
+import com.example.musicplayer.entiy.Song;
import com.example.musicplayer.model.IPlayModel;
/**
@@ -34,4 +35,33 @@ public class PlayPresenter extends BasePresenter implements
getMvpView().setImgFail("获取歌手照片失败");
}
}
+
+ @Override
+ public void queryLove(String songId) {
+ mModel.queryLove(songId);
+ }
+
+ @Override
+ public void saveToLove(Song song) {
+ mModel.saveToLove(song);
+ }
+
+ @Override
+ public void deleteFromLove(String songId) {
+ mModel.deleteFromLove(songId);
+ }
+
+ @Override
+ public void saveToLoveSuccess() {
+ if(isAttachView()){
+ getMvpView().saveToLoveSuccess();
+ }
+ }
+
+ @Override
+ public void showLove(boolean love) {
+ if(isAttachView()){
+ getMvpView().showLove(love);
+ }
+ }
}
diff --git a/app/src/main/java/com/example/musicplayer/service/PlayerService.java b/app/src/main/java/com/example/musicplayer/service/PlayerService.java
index 9d8ddee..c3be26b 100644
--- a/app/src/main/java/com/example/musicplayer/service/PlayerService.java
+++ b/app/src/main/java/com/example/musicplayer/service/PlayerService.java
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
+import android.net.ConnectivityManager;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
@@ -11,6 +12,7 @@ import android.util.Log;
import com.example.musicplayer.constant.BroadcastName;
import com.example.musicplayer.constant.Constant;
import com.example.musicplayer.entiy.LocalSong;
+import com.example.musicplayer.entiy.Love;
import com.example.musicplayer.entiy.OnlineSong;
import com.example.musicplayer.entiy.Song;
import com.example.musicplayer.util.FileHelper;
@@ -28,10 +30,10 @@ public class PlayerService extends Service {
private PlayStatusBinder mPlayStatusBinder = new PlayStatusBinder();
private MediaPlayer mediaPlayer = new MediaPlayer(); //媒体播放器对象
private boolean isPause; //暂停状态
- private Song song;
private boolean isPlaying; //是否播放
private List mLocalSongList;
private List mSongList;
+ private List mLoveList;
private int mCurrent;
private int mListType;
@@ -60,7 +62,7 @@ public class PlayerService extends Service {
} else {
mPlayStatusBinder.stop();
}
- } else {
+ } else if(mListType == Constant.LIST_TYPE_ONLINE){
saveOnlineSongInfo(mCurrent);
if (mCurrent <= mSongList.size()) {
mPlayStatusBinder.play(Constant.LIST_TYPE_ONLINE);
@@ -69,8 +71,15 @@ public class PlayerService extends Service {
mPlayStatusBinder.stop();
}
+ } else {
+ saveLoveInfo(mCurrent,FileHelper.getSong().isOnline());
+ if (mCurrent <= mLoveList.size()) {
+ mPlayStatusBinder.play(Constant.LIST_TYPE_LOVE);
+ sendBroadcast(new Intent(BroadcastName.LOVE_SONG_CHANGE));//专辑列表的改变
+ } else {
+ mPlayStatusBinder.stop();
+ }
}
- sendBroadcast(new Intent(BroadcastName.SONG_CHANGE)); //发送广播改变播放栏的信息
sendBroadcast(new Intent(BroadcastName.ONLINE_SONG_FINISH));//发送网络歌曲播放结束的广播改变网络搜索列表的改变
}
});
@@ -90,15 +99,6 @@ public class PlayerService extends Service {
}
public class PlayStatusBinder extends Binder {
- //确认播放列表的类型
- public void setListType(int listType) {
- mListType = listType;
- if (mListType == Constant.LIST_TYPE_ONLINE) {
- mSongList = LitePal.findAll(OnlineSong.class);
- } else if (mListType == Constant.LIST_TYPE_LOCAL) {
- mLocalSongList = LitePal.findAll(LocalSong.class);
- }
- }
/**
@@ -115,13 +115,17 @@ public class PlayerService extends Service {
mSongList = LitePal.findAll(OnlineSong.class);
} else if (mListType == Constant.LIST_TYPE_LOCAL) {
mLocalSongList = LitePal.findAll(LocalSong.class);
+ }else if(mListType == Constant.LIST_TYPE_LOVE){
+ mLoveList = orderList(LitePal.findAll(Love.class));
}
mCurrent = FileHelper.getSong().getCurrent();
mediaPlayer.reset();//把各项参数恢复到初始状态
if (mListType == Constant.LIST_TYPE_LOCAL) {
mediaPlayer.setDataSource(mLocalSongList.get(mCurrent).getUrl());
- } else {
+ } else if(mListType == Constant.LIST_TYPE_ONLINE){
mediaPlayer.setDataSource(mSongList.get(mCurrent).getUrl());
+ } else{
+ mediaPlayer.setDataSource(mLoveList.get(mCurrent).getUrl());
}
mediaPlayer.prepare(); //进行缓冲
isPlaying = true;
@@ -185,16 +189,21 @@ public class PlayerService extends Service {
saveLocalSongInfo(mCurrent);
mPlayStatusBinder.play(Constant.LIST_TYPE_LOCAL);
sendBroadcast(new Intent(BroadcastName.LOCAL_SONG_CHANGE_LIST));//发送广播改变当地列表的显示
- } else {
+ } else if(mListType == Constant.LIST_TYPE_ONLINE){
if (mCurrent >= mSongList.size()) {
mCurrent = 0;
}
saveOnlineSongInfo(mCurrent);
mPlayStatusBinder.play(Constant.LIST_TYPE_ONLINE);
sendBroadcast(new Intent(BroadcastName.ONLINE_ALBUM_SONG_Change));//专辑列表的改变
+ } else{
+ if (mCurrent >= mLoveList.size()) {
+ mCurrent = 0;
+ }
+ saveLoveInfo(mCurrent,FileHelper.getSong().isOnline());
+ mPlayStatusBinder.play(Constant.LIST_TYPE_LOVE);
+ sendBroadcast(new Intent(BroadcastName.LOVE_SONG_CHANGE));
}
-
- sendBroadcast(new Intent(BroadcastName.SONG_CHANGE)); //发送广播改变播放栏的信息
sendBroadcast(new Intent(BroadcastName.ONLINE_SONG_FINISH));//发送网络歌曲播放结束的广播改变网络搜索列表的改变
}
@@ -202,18 +211,27 @@ public class PlayerService extends Service {
mCurrent = FileHelper.getSong().getCurrent();
mCurrent--;
if (mCurrent == -1) {
- mCurrent = mListType == Constant.LIST_TYPE_LOCAL ? mLocalSongList.size() - 1 : mSongList.size() - 1;
+ if(mListType == Constant.LIST_TYPE_LOCAL){
+ mCurrent = mLocalSongList.size()-1;
+ }else if(mListType ==Constant.LIST_TYPE_ONLINE){
+ mCurrent =mSongList.size()-1;
+ }else {
+ mCurrent = mLoveList.size()-1;
+ }
}
if (mListType == Constant.LIST_TYPE_LOCAL) {
saveLocalSongInfo(mCurrent);
- mPlayStatusBinder.play(Constant.LIST_TYPE_LOCAL);
+ mPlayStatusBinder.play(mListType);
sendBroadcast(new Intent(BroadcastName.LOCAL_SONG_CHANGE_LIST));//发送广播改变当地列表的显示
- } else {
+ } else if(mListType == Constant.LIST_TYPE_ONLINE){
saveOnlineSongInfo(mCurrent);
- mPlayStatusBinder.play(Constant.LIST_TYPE_ONLINE);
+ mPlayStatusBinder.play(mListType);
sendBroadcast(new Intent(BroadcastName.ONLINE_ALBUM_SONG_Change));//专辑列表的改变
+ } else{
+ saveLoveInfo(mCurrent,FileHelper.getSong().isOnline());
+ mPlayStatusBinder.play(mListType);
+ sendBroadcast(new Intent(BroadcastName.LOVE_SONG_CHANGE));
}
- sendBroadcast(new Intent(BroadcastName.SONG_CHANGE)); //发送广播改变播放栏的信息
sendBroadcast(new Intent(BroadcastName.ONLINE_SONG_FINISH));//发送网络歌曲播放结束的广播改变网络搜索列表的改变
}
@@ -296,7 +314,7 @@ public class PlayerService extends Service {
song.setDuration(localSong.getDuration());
song.setUrl(localSong.getUrl());
song.setOnline(false);
- song.setOnlineAlbum(false);
+ song.setListType(Constant.LIST_TYPE_LOCAL);
FileHelper.saveSong(song);
}
@@ -311,9 +329,30 @@ public class PlayerService extends Service {
song.setUrl(mSongList.get(current).getUrl());
song.setImgUrl(mSongList.get(current).getPic());
song.setOnline(true);
- song.setOnlineAlbum(true);
+ song.setListType(Constant.LIST_TYPE_ONLINE);
FileHelper.saveSong(song);
}
+ private void saveLoveInfo(int current,boolean isOnline){
+ mLoveList = orderList(LitePal.findAll(Love.class));
+ Love love = mLoveList.get(current);
+ Song song = new Song();
+ song.setCurrent(current);
+ song.setOnlineId(love.getSongId());
+ song.setSongName(love.getName());
+ song.setSinger(love.getSinger());
+ song.setUrl(love.getUrl());
+ song.setImgUrl(love.getPic());
+ song.setListType(Constant.LIST_TYPE_LOVE);
+ song.setOnline(isOnline);
+ }
+ private List orderList(List tempList){
+ List loveList=new ArrayList<>();
+ loveList.clear();
+ for(int i=tempList.size()-1;i>=0;i--){
+ loveList.add(tempList.get(i));
+ }
+ return loveList;
+ }
}
diff --git a/app/src/main/java/com/example/musicplayer/view/AlbumSongFragment.java b/app/src/main/java/com/example/musicplayer/view/AlbumSongFragment.java
index 972c694..a4a57d8 100644
--- a/app/src/main/java/com/example/musicplayer/view/AlbumSongFragment.java
+++ b/app/src/main/java/com/example/musicplayer/view/AlbumSongFragment.java
@@ -167,7 +167,7 @@ public class AlbumSongFragment extends Fragment implements IAlbumSongContract.Vi
song.setImgUrl(dataBean.getPic());
song.setCurrent(position);
song.setOnline(true);
- song.setOnlineAlbum(true);
+ song.setListType(Constant.LIST_TYPE_ONLINE);
FileHelper.saveSong(song);
mPlayStatusBinder.play(Constant.LIST_TYPE_ONLINE);
diff --git a/app/src/main/java/com/example/musicplayer/view/CollectionFragment.java b/app/src/main/java/com/example/musicplayer/view/CollectionFragment.java
new file mode 100644
index 0000000..58754b2
--- /dev/null
+++ b/app/src/main/java/com/example/musicplayer/view/CollectionFragment.java
@@ -0,0 +1,145 @@
+package com.example.musicplayer.view;
+
+
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.ServiceConnection;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.support.v4.app.Fragment;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+
+import com.example.musicplayer.R;
+import com.example.musicplayer.adapter.LoveSongAdapter;
+import com.example.musicplayer.adapter.SongAdapter;
+import com.example.musicplayer.constant.BroadcastName;
+import com.example.musicplayer.constant.Constant;
+import com.example.musicplayer.entiy.LocalSong;
+import com.example.musicplayer.entiy.Love;
+import com.example.musicplayer.entiy.Song;
+import com.example.musicplayer.service.PlayerService;
+import com.example.musicplayer.util.FileHelper;
+
+import org.litepal.LitePal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by 残渊 on 2018/11/30.
+ */
+
+public class CollectionFragment extends Fragment {
+ private RecyclerView mRecycler;
+ private ImageView mBackIv;
+ private LinearLayoutManager mManager;
+ private LoveSongAdapter mAdapter;
+ private LinearLayout mSongListLinear;
+ private RelativeLayout mEmptyRelative;
+ private List mLoveList;
+ private List mTempList;
+
+ //注册广播
+ private IntentFilter intentFilter;
+ private SongChangeReceiver songChangeReceiver;
+
+ private PlayerService.PlayStatusBinder mPlayStatusBinder;
+ private ServiceConnection connection = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ mPlayStatusBinder = (PlayerService.PlayStatusBinder) service;
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+
+ }
+ };
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ View mView = inflater.inflate(R.layout.fragment_love_music, container, false);
+ mRecycler = mView.findViewById(R.id.recycler_love_songs);
+ mBackIv = mView.findViewById(R.id.iv_back);
+ mEmptyRelative = mView.findViewById(R.id.relative_empty);
+ mSongListLinear = mView.findViewById(R.id.linear_song_list);
+ mTempList =new ArrayList<>();
+ mLoveList = new ArrayList<>();
+ return mView;
+ }
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState){
+ super.onActivityCreated(savedInstanceState);
+ //启动服务
+ Intent playIntent = new Intent(getActivity(), PlayerService.class);
+ getActivity().bindService(playIntent, connection, Context.BIND_AUTO_CREATE);
+ //注册广播
+ intentFilter=new IntentFilter();
+ intentFilter.addAction(BroadcastName.LOVE_SONG_CHANGE);
+ songChangeReceiver=new SongChangeReceiver();
+ getActivity().registerReceiver(songChangeReceiver,intentFilter);
+ showSongList();
+ onClick();
+ }
+
+
+ private void showSongList(){
+ mLoveList.clear();
+ mTempList = LitePal.findAll(Love.class);
+ if(mTempList.size()==0){
+ mEmptyRelative.setVisibility(View.VISIBLE);
+ mSongListLinear.setVisibility(View.GONE);
+ }else{
+ mEmptyRelative.setVisibility(View.GONE);
+ mSongListLinear.setVisibility(View.VISIBLE);
+ }
+ //对数据库的数据倒序显示
+ for(int i=mTempList.size()-1;i>=0;i--){
+ mLoveList.add(mTempList.get(i));
+ }
+ mAdapter = new LoveSongAdapter(getActivity(),mLoveList);
+ mManager = new LinearLayoutManager(getActivity());
+ mRecycler.setLayoutManager(mManager);
+ mRecycler.setAdapter(mAdapter);
+ }
+ private void onClick(){
+ mAdapter.setOnItemClickListener(new LoveSongAdapter.OnItemClickListener() {
+ @Override
+ public void onSongClick(int position) {
+ Love love = mLoveList.get(position);
+ Song song =new Song();
+ song.setOnlineId(love.getSongId());
+ song.setSongName(love.getName());
+ song.setSinger(love.getSinger());
+ song.setOnline(love.isOnline());
+ song.setUrl(love.getUrl());
+ song.setImgUrl(love.getPic());
+ song.setCurrent(position);
+ song.setListType(Constant.LIST_TYPE_LOVE);
+ FileHelper.saveSong(song);
+
+ mPlayStatusBinder.play(Constant.LIST_TYPE_LOVE);
+ }
+ });
+ }
+ private class SongChangeReceiver extends BroadcastReceiver{
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ mAdapter.notifyDataSetChanged();
+ if(FileHelper.getSong()!=null) {
+ mManager.scrollToPositionWithOffset(FileHelper.getSong().getCurrent()+4, mRecycler.getHeight());
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/musicplayer/view/LocalMusicFragment.java b/app/src/main/java/com/example/musicplayer/view/LocalMusicFragment.java
index 25b3aa7..c6082d7 100644
--- a/app/src/main/java/com/example/musicplayer/view/LocalMusicFragment.java
+++ b/app/src/main/java/com/example/musicplayer/view/LocalMusicFragment.java
@@ -55,9 +55,6 @@ public class LocalMusicFragment extends Fragment implements ILocalMusicContract.
private ImageView mBackIv;
private ViewStub mEmptyViewStub;
-
-
-
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
diff --git a/app/src/main/java/com/example/musicplayer/view/MainActivity.java b/app/src/main/java/com/example/musicplayer/view/MainActivity.java
index bc9b427..de4748d 100644
--- a/app/src/main/java/com/example/musicplayer/view/MainActivity.java
+++ b/app/src/main/java/com/example/musicplayer/view/MainActivity.java
@@ -90,6 +90,7 @@ public class MainActivity extends AppCompatActivity {
intentFilter.addAction(BroadcastName.ONLINE_ALBUM_SONG_Change);
songChangeReceiver = new SongChangeReceiver();
registerReceiver(songChangeReceiver, intentFilter);
+ LitePal.getDatabase();
initView();
onClick();
@@ -196,10 +197,8 @@ public class MainActivity extends AppCompatActivity {
} else {
if (FileHelper.getSong().isOnline()) {
mPlayStatusBinder.playOnline();
- } else if(FileHelper.getSong().isOnlineAlbum()){
- mPlayStatusBinder.play(Constant.LIST_TYPE_ONLINE);
- }else{
- mPlayStatusBinder.play(Constant.LIST_TYPE_LOCAL);
+ } else{
+ mPlayStatusBinder.play(FileHelper.getSong().getListType());
}
mMediaPlayer.seekTo((int) mSong.getCurrentTime());
mCircleAnimator.start();
diff --git a/app/src/main/java/com/example/musicplayer/view/MainFragment.java b/app/src/main/java/com/example/musicplayer/view/MainFragment.java
index 4ac9ad2..ce1a2a3 100644
--- a/app/src/main/java/com/example/musicplayer/view/MainFragment.java
+++ b/app/src/main/java/com/example/musicplayer/view/MainFragment.java
@@ -19,9 +19,14 @@ import android.widget.TextView;
import com.example.musicplayer.R;
import com.example.musicplayer.adapter.ExpandableListViewAdapter;
+import com.example.musicplayer.entiy.History;
+import com.example.musicplayer.entiy.LocalSong;
+import com.example.musicplayer.entiy.Love;
import com.example.musicplayer.util.CommonUtil;
import com.example.musicplayer.widget.MyListView;
+import org.litepal.LitePal;
+
/**
* A simple {@link Fragment} subclass.
*/
@@ -30,11 +35,10 @@ public class MainFragment extends Fragment {
private LinearLayout mFunctionLinear;
private MyListView myListView;
- private LocalMusicFragment mLocalMusicFragment;
- private SearchFragment mSearchFragment;
private ExpandableListAdapter mAdapter;
- private LinearLayout mLocalMusicLinear;
+ private LinearLayout mLocalMusicLinear,mCollectionLinear;
private Button playerBtn;
+ private TextView mLocalMusicNum,mLoveMusicNum,mHistoryMusicNum;
private TextView mSeekBtn;
private String[] mGroupStrings = {"自建歌单", "收藏歌单"};
@@ -49,12 +53,16 @@ public class MainFragment extends Fragment {
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
mLocalMusicLinear = view.findViewById(R.id.linear_local_music);
+ mCollectionLinear = view.findViewById(R.id.linear_collection);
playerBtn = view.findViewById(R.id.btn_player);
mFunctionLinear = view.findViewById(R.id.linear_function);
//获取焦点
mFunctionLinear.setFocusableInTouchMode(true);
myListView = view.findViewById(R.id.expand_lv_song_list);
mSeekBtn = view.findViewById(R.id.tv_seek);
+ mLocalMusicNum = view.findViewById(R.id.tv_local_music_num);
+ mLoveMusicNum = view.findViewById(R.id.tv_love_num);
+ mHistoryMusicNum = view.findViewById(R.id.tv_history_num);
return view;
}
@@ -65,13 +73,12 @@ public class MainFragment extends Fragment {
mAdapter = new ExpandableListViewAdapter(getActivity(), mGroupStrings, mSongStrings);
myListView.setAdapter(mAdapter);
onClick();
-
-
}
@Override
public void onResume(){
super.onResume();
CommonUtil.hideStatusBar(getActivity(),true);
+ showMusicNum();
Log.d(TAG, "onResume: true");
}
@@ -79,37 +86,41 @@ public class MainFragment extends Fragment {
mLocalMusicLinear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- replaceFragment(1);
+ replaceFragment(new LocalMusicFragment());
}
});
mSeekBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- replaceFragment(2);
+ replaceFragment(new SearchFragment());
+ }
+ });
+
+ mCollectionLinear.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ replaceFragment(new CollectionFragment());
}
});
}
- private void replaceFragment(int type) {
+ private void replaceFragment(Fragment fragment) {
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
-
//进入和退出动画
transaction.setCustomAnimations(R.anim.fragment_in, R.anim.fragment_out, R.anim.slide_in_right, R.anim.slide_out_right);
- if (type == 1) {
- mLocalMusicFragment = new LocalMusicFragment();
- transaction.add(R.id.fragment_container, mLocalMusicFragment);
- } else if (type ==2) {
- mSearchFragment = new SearchFragment();
- transaction.add(R.id.fragment_container,mSearchFragment);
- }
+ transaction.add(R.id.fragment_container, fragment);
transaction.hide(this);
//将事务提交到返回栈
transaction.addToBackStack(null);
transaction.commit();
}
+ private void showMusicNum(){
+ mLoveMusicNum.setText(""+LitePal.findAll(LocalSong.class).size());
+ mLoveMusicNum.setText(""+LitePal.findAll(Love.class).size());
+ }
}
diff --git a/app/src/main/java/com/example/musicplayer/view/PlayActivity.java b/app/src/main/java/com/example/musicplayer/view/PlayActivity.java
index c12a323..4126bf7 100644
--- a/app/src/main/java/com/example/musicplayer/view/PlayActivity.java
+++ b/app/src/main/java/com/example/musicplayer/view/PlayActivity.java
@@ -1,5 +1,7 @@
package com.example.musicplayer.view;
+import android.animation.AnimatorInflater;
+import android.animation.AnimatorSet;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -66,7 +68,7 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
private String TAG = "PlayActivity";
private boolean isOnline; //判断是否为网络歌曲
- private boolean isOnlineAlbum;//判断是否为网络专辑
+ private int mListType; //列表类型
private int mPlayStatus;
private boolean isChange; //拖动进度条
@@ -90,6 +92,9 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
private TextView mDurationTimeTv;
+ private Button mLoveBtn;
+ private boolean isLove;//是否已经在我喜欢的列表中
+
private DiscView mDisc; //唱碟
private ImageView mDiscImg; //唱碟中的歌手头像
private Bitmap mImgBmp;
@@ -107,7 +112,6 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
public void onServiceConnected(ComponentName name, IBinder service) {
mPlayStatusBinder = (PlayerService.PlayStatusBinder) service;
isOnline = FileHelper.getSong().isOnline();
- isOnlineAlbum = FileHelper.getSong().isOnlineAlbum();
if (isOnline) {
mGetImgAndLrcBtn.setVisibility(View.GONE);
mDurationTimeTv.setText(MediaUtil.formatTime(FileHelper.getSong().getDuration()));
@@ -156,6 +160,7 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
//与Presenter建立关系
mPresenter = new PlayPresenter();
mPresenter.attachView(this);
+
//是否为网络歌曲
@@ -185,15 +190,19 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
mDisc = findViewById(R.id.disc_view);
mDiscImg = findViewById(R.id.iv_disc_background);
+ mLoveBtn = findViewById(R.id.btn_love);
+
+
//界面填充
mSong = FileHelper.getSong();
+ mListType = mSong.getListType();
mSingerTv.setText(mSong.getSinger());
mSongTv.setText(mSong.getSongName());
mCurrentTimeTv.setText(MediaUtil.formatTime(mSong.getCurrentTime()));
mSeekBar.setMax((int) mSong.getDuration());
mSeekBar.setProgress((int) mSong.getCurrentTime());
-
+ mPresenter.queryLove(mSong.getOnlineId()); //查找歌曲是否为我喜欢的歌曲
if (mPlayStatus == PlayerStatus.PLAY) {
mDisc.play();
@@ -205,7 +214,6 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
Intent playIntent = new Intent(PlayActivity.this, PlayerService.class);
bindService(playIntent, connection, Context.BIND_AUTO_CREATE);
-
}
private void try2UpdateMusicPicBackground(final Bitmap bitmap) {
@@ -315,10 +323,8 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
Log.d(TAG, "onClick: --------play");
if (isOnline) {
mPlayStatusBinder.playOnline();
- } else if (isOnlineAlbum) {
- mPlayStatusBinder.play(Constant.LIST_TYPE_ONLINE);
} else {
- mPlayStatusBinder.play(Constant.LIST_TYPE_LOCAL);
+ mPlayStatusBinder.play(mListType);
}
mMediaPlayer.seekTo((int) mSong.getCurrentTime());
mDisc.play();
@@ -347,6 +353,21 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
mDisc.last();
}
});
+
+ mLoveBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showLoveAnim();
+ if(isLove){
+ mLoveBtn.setSelected(false);
+ mPresenter.deleteFromLove(FileHelper.getSong().getOnlineId());
+ }else {
+ mLoveBtn.setSelected(true);
+ mPresenter.saveToLove(FileHelper.getSong());
+ }
+
+ }
+ });
}
@Override
@@ -379,12 +400,11 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
//保存图片到本地
FileHelper.saveImgToNative(PlayActivity.this, mImgBmp, getSingerName());
CommonUtil.showToast(PlayActivity.this, "获取封面歌词成功");
-
-// //将封面地址放到数据库中
-// LocalSong localSong =new LocalSong();
-// mLocalSong = LitePal.findAll(LocalSong.class);
-// localSong.setPic(BaseUri.STORAGE_IMG_FILE + FileHelper.getSong().getSinger() + ".jpg");
-// localSong.updateAll("singer",FileHelper.getSong().getSinger());
+ //将封面地址放到数据库中
+ LocalSong localSong =new LocalSong();
+ mLocalSong = LitePal.findAll(LocalSong.class);
+ localSong.setPic(BaseUri.STORAGE_IMG_FILE + FileHelper.getSong().getSinger() + ".jpg");
+ localSong.updateAll("singer",FileHelper.getSong().getSinger());
}
try2UpdateMusicPicBackground(mImgBmp);
@@ -406,8 +426,32 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
}
@Override
- public void setSearchImg() {
+ public void showLove(final boolean love) {
+ isLove =love;
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ if(love){
+ mLoveBtn.setSelected(true);
+ }else{
+ mLoveBtn.setSelected(false);
+ }
+ }
+ });
+
+ }
+
+ @Override
+ public void showLoveAnim() {
+ mLoveBtn.setSelected(true);
+ AnimatorSet animatorSet = (AnimatorSet) AnimatorInflater.loadAnimator(PlayActivity.this, R.animator.favorites_anim);
+ animatorSet.setTarget(mLoveBtn);
+ animatorSet.start();
+ }
+ @Override
+ public void saveToLoveSuccess() {
+ CommonUtil.showToast(PlayActivity.this,"添加成功");
}
@@ -427,7 +471,6 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
@Override
public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
Song mSong = FileHelper.getSong();
mSongTv.setText(mSong.getSongName());
mSingerTv.setText(mSong.getSinger());
@@ -435,7 +478,7 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
mPlayBtn.setSelected(true);
mSeekBar.setMax((int) mSong.getDuration());
startUpdateSeekBarProgress();
- if (action.equals(BroadcastName.ONLINE_ALBUM_SONG_Change) || action.equals(BroadcastName.ONLINE_SONG)) {
+ if (mSong.isOnline()) {
setSingerImg(mSong.getImgUrl());
} else {
setLocalImg(mSong.getSinger());//显示照片
diff --git a/app/src/main/java/com/example/musicplayer/view/SearchHistoryFragment.java b/app/src/main/java/com/example/musicplayer/view/SearchHistoryFragment.java
index 790e085..e4aebd7 100644
--- a/app/src/main/java/com/example/musicplayer/view/SearchHistoryFragment.java
+++ b/app/src/main/java/com/example/musicplayer/view/SearchHistoryFragment.java
@@ -11,6 +11,7 @@ import android.view.ViewGroup;
import com.example.musicplayer.R;
import com.example.musicplayer.adapter.SearchHistoryAdapter;
import com.example.musicplayer.entiy.History;
+import com.example.musicplayer.widget.DeleteDialog;
import org.litepal.LitePal;
@@ -56,14 +57,34 @@ public class SearchHistoryFragment extends Fragment {
mAdapter.setFooterClickListener(new SearchHistoryAdapter.OnFooterClickListener() {
@Override
public void onClick() {
- LitePal.deleteAll(History.class);
- mRecycler.setVisibility(View.GONE);
+ final DeleteDialog dialog = new DeleteDialog(getActivity());
+ dialog.setOnClickListener(new DeleteDialog.OnClickListener() {
+ @Override
+ public void selectCancel() {
+ dialog.dismiss();
+ }
+
+ @Override
+ public void selectDelete() {
+ //删除数据库中的历史记录
+ LitePal.deleteAll(History.class);
+ mRecycler.setVisibility(View.GONE);
+ dialog.dismiss();
+ }
+
+ @Override
+ public String setTitle() {
+ return "确定清空搜索历史?";
+ }
+ });
+ dialog.show();
+
}
});
mAdapter.setOnDeleteClickListener(new SearchHistoryAdapter.OnDeleteClickListener() {
@Override
public void onClick(int position) {
- History history =mTempList.get(position);
+ History history =mHistoryList.get(position);
LitePal.deleteAll(History.class,"history = ?",history.getHistory());
mTempList =LitePal.findAll(History.class);
changeList();
diff --git a/app/src/main/java/com/example/musicplayer/widget/DeleteDialog.java b/app/src/main/java/com/example/musicplayer/widget/DeleteDialog.java
new file mode 100644
index 0000000..215464c
--- /dev/null
+++ b/app/src/main/java/com/example/musicplayer/widget/DeleteDialog.java
@@ -0,0 +1,84 @@
+package com.example.musicplayer.widget;
+
+import android.annotation.SuppressLint;
+import android.app.Dialog;
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.util.DisplayMetrics;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.TextView;
+
+import com.example.musicplayer.R;
+
+
+public class DeleteDialog extends Dialog implements View.OnClickListener{
+
+ private OnClickListener mOnClickListener;
+
+ private TextView mTitle;
+
+ public interface OnClickListener {
+ void selectCancel(); //选择取消
+ void selectDelete(); //选择删除
+ String setTitle();
+ }
+
+ public void setOnClickListener(OnClickListener onClickListener) {
+ mOnClickListener = onClickListener;
+ }
+
+ public DeleteDialog(@NonNull Context context) {
+ super(context, R.style.MyDialog);
+ initView();
+ }
+
+ private void initView() {
+ @SuppressLint("InflateParams") View view = LayoutInflater.from(getContext()).inflate(R.layout.dialog_delete_photo, null);
+ mTitle = view.findViewById(R.id.tv_dialog_delete_title); //标题
+ TextView cancel = view.findViewById(R.id.tv_dialog_delete_photo_cancel); //取消
+ cancel.setOnClickListener(this);
+ TextView delete = view.findViewById(R.id.tv_dialog_delete_photo_delete); //删除
+ delete.setOnClickListener(this);
+ super.setContentView(view); //设置布局
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.tv_dialog_delete_photo_cancel: //取消
+ mOnClickListener.selectCancel(); //回调给主活动,让主活动处理相关逻辑,下同
+ break;
+ case R.id.tv_dialog_delete_photo_delete: //删除
+ mOnClickListener.selectDelete();
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * 重新该方法,使dialog适应屏幕的宽高
+ */
+ @Override
+ public void show() {
+ super.show();
+ Window dialogWindow = this.getWindow();
+ assert dialogWindow != null;
+ WindowManager.LayoutParams lp = dialogWindow.getAttributes();
+ //获取屏幕宽度
+ DisplayMetrics dm = new DisplayMetrics();
+ WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
+ assert wm != null;
+ wm.getDefaultDisplay().getMetrics(dm);
+ int screenWidth = dm.widthPixels;
+ //设置高宽
+ lp.width = (int) (screenWidth * 0.9); // 宽度
+ lp.height = (int) (lp.width * 0.4); // 高度
+ dialogWindow.setAttributes(lp);
+
+ mTitle.setText(mOnClickListener.setTitle()); //设置标题
+ }
+}
diff --git a/app/src/main/res/animator/favorites_anim.xml b/app/src/main/res/animator/favorites_anim.xml
new file mode 100644
index 0000000..0525aa0
--- /dev/null
+++ b/app/src/main/res/animator/favorites_anim.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-xxhdpi/favorites.png b/app/src/main/res/drawable-xxhdpi/favorites.png
new file mode 100644
index 0000000..f221e5e
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/favorites.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/favorites_selected.png b/app/src/main/res/drawable-xxhdpi/favorites_selected.png
new file mode 100644
index 0000000..a67a2ff
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/favorites_selected.png differ
diff --git a/app/src/main/res/drawable/dialog_bg.xml b/app/src/main/res/drawable/dialog_bg.xml
new file mode 100644
index 0000000..fb26df1
--- /dev/null
+++ b/app/src/main/res/drawable/dialog_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/empty_song.png b/app/src/main/res/drawable/empty_song.png
new file mode 100644
index 0000000..30faa48
Binary files /dev/null and b/app/src/main/res/drawable/empty_song.png differ
diff --git a/app/src/main/res/drawable/love.xml b/app/src/main/res/drawable/love.xml
new file mode 100644
index 0000000..b20a0b9
--- /dev/null
+++ b/app/src/main/res/drawable/love.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_play.xml b/app/src/main/res/layout/activity_play.xml
index abd4f40..4083003 100644
--- a/app/src/main/res/layout/activity_play.xml
+++ b/app/src/main/res/layout/activity_play.xml
@@ -161,6 +161,16 @@
android:layout_height="60dp"
android:background="@drawable/activity_play_next" />
+
+
+
diff --git a/app/src/main/res/layout/dialog_delete_photo.xml b/app/src/main/res/layout/dialog_delete_photo.xml
new file mode 100644
index 0000000..c17c67c
--- /dev/null
+++ b/app/src/main/res/layout/dialog_delete_photo.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_local_music.xml b/app/src/main/res/layout/fragment_local_music.xml
index 1a518f6..0c1f189 100644
--- a/app/src/main/res/layout/fragment_local_music.xml
+++ b/app/src/main/res/layout/fragment_local_music.xml
@@ -23,6 +23,7 @@
android:src="@drawable/back" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_search_history.xml b/app/src/main/res/layout/fragment_search_history.xml
index f6082bd..2088bec 100644
--- a/app/src/main/res/layout/fragment_search_history.xml
+++ b/app/src/main/res/layout/fragment_search_history.xml
@@ -7,7 +7,7 @@
diff --git a/app/src/main/res/layout/function.xml b/app/src/main/res/layout/function.xml
index 2a5c9fb..a27dc9d 100644
--- a/app/src/main/res/layout/function.xml
+++ b/app/src/main/res/layout/function.xml
@@ -39,6 +39,7 @@
android:textColor="@drawable/selector_linear_click"
/>
人生几何,对酒当歌
搜索
清空搜索历史
+ 取消
+ 确定
Hello blank fragment
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index a48304f..2fd20df 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -42,7 +42,13 @@
- wrap_content
- @drawable/ic_seekbar_thumb
-
+