package cn.qylk.app; import java.util.ArrayList; import java.util.Collections; import cn.qylk.database.MediaDatabase; public class PlayList implements IPlayList { private ArrayList<Integer> ids; private int lastId; private PlayMode mode = PlayMode.Normal; private int sum; private TrackInfo track = new TrackInfo(); private ListTypeInfo typeinfo; public PlayList(ListTypeInfo last) { setListType(last); } public int getId() { return ids.get(typeinfo.pos); } @Override public int getIndex() { return typeinfo.pos; } @Override public PlayMode getMode() { return mode; } @Override public String getNextTitle() { return MediaDatabase.getTrackInfo(ids.get((typeinfo.pos + 1) % sum), null).title; } @Override public TrackInfo getPreviousEntity() { return MediaDatabase.getTrackInfo(lastId, null); } @Override public int getSum() { return sum; } @Override public TrackInfo getTrackEntity() { return track; } public ListTypeInfo getTypeInfo() { return typeinfo; } @Override public void goLast() { record(); if (typeinfo.pos == 0) typeinfo.pos += sum; typeinfo.pos = (typeinfo.pos - 1) % sum; MediaDatabase.getTrackInfo(getId(), track); } @Override public void goNext() { record(); typeinfo.pos = (typeinfo.pos + 1) % sum; MediaDatabase.getTrackInfo(getId(), track); } @Override public void goTo(int pos) { typeinfo.pos = pos; MediaDatabase.getTrackInfo(getId(), track); } /** * 记录播放历史 */ private void record() { lastId = getId(); if (typeinfo.list != ListType.HISTORY) MediaDatabase.TimeRecode(getId()); } public void setListType(ListTypeInfo info) { if (mode == PlayMode.Shuffle)// 当前正处于随机播放中,当用户从列表界面选择歌曲时,需要更改为顺序播放。 setMode(PlayMode.Normal); if (typeinfo == null || info.para != typeinfo.para || info.list != typeinfo.list) {// 条件1:typeinfo==null,即初次建表,条件2:列表不同 this.ids = MediaDatabase.getIDS(info); sum = ids.size(); this.typeinfo = info; mode = PlayMode.Normal; if (sum == 0) { setListType(new ListTypeInfo(ListType.ALLSONGS, 0)); } } else typeinfo.pos = info.pos; if (info.pos >= sum) info.pos = 0; MediaDatabase.getTrackInfo(getId(), track); } @Override public void setMode(PlayMode mode) { this.mode = mode; if (mode == PlayMode.Shuffle) Collections.shuffle(ids); else if (mode == PlayMode.Normal) Collections.sort(ids); } }