package com.airplayer.model;
import android.content.Context;
import android.provider.MediaStore;
import com.airplayer.util.QueryUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
/**
* Created by ZiyiTsang on 15/7/22.
*/
public class AirModelSingleton {
private static ArrayList<Artist> sArtists;
private static ArrayList<Album> sAlbums;
private static ArrayList<Song> sSongs;
private static ArrayList<Album> sActivityAlbums;
private static int sRecentAlbumsSize;
private static AirModelSingleton singleton;
private Context context;
private AirModelSingleton(Context context) {
this.context = context;
}
public synchronized static AirModelSingleton getInstance(Context context) {
if (singleton == null) {
synchronized (AirModelSingleton.class) {
if (singleton == null) {
singleton = new AirModelSingleton(context);
}
}
}
return singleton;
}
public ArrayList<Artist> getArtistArrayList() {
if (sArtists == null) {
synchronized (AirModelSingleton.class) {
if (sArtists == null) {
sArtists = QueryUtils.loadArtistList(context);
}
}
}
return sArtists;
}
public ArrayList<Album> getAlbumArrayList() {
if (sAlbums == null) {
synchronized (AirModelSingleton.class) {
if (sAlbums == null) {
sAlbums = QueryUtils.loadAlbumList(context, null, null, MediaStore.Audio.Albums.ALBUM);
if (sArtists == null) getArtistArrayList();
for (int i = 0; i < sArtists.size(); i++) {
Artist artist = sArtists.get(i);
for (int j = 0; j < sAlbums.size(); j++) {
Album album = sAlbums.get(j);
if (artist.getName().equals(album.getAlbumArtist())) {
sAlbums.get(j).setArtist(artist);
}
}
}
}
}
}
return sAlbums;
}
public ArrayList<Song> getSongArrayList() {
if (sSongs == null) {
synchronized (AirModelSingleton.class) {
if (sSongs == null) {
sSongs = QueryUtils.loadSongList(context, null, null, MediaStore.Audio.Media.TITLE);
}
if (sAlbums == null) getAlbumArrayList();
for (int i = 0; i < sAlbums.size(); i++) {
Album album = sAlbums.get(i);
for (int j = 0; j < sSongs.size(); j++) {
Song song = sSongs.get(j);
if (album.getId() == song.getAlbumId()) {
song.setAlbum(album);
}
}
}
}
}
return sSongs;
}
public ArrayList<Album> getActivityAlbums() {
if (sActivityAlbums == null) {
synchronized (AirModelSingleton.class) {
if (sActivityAlbums == null) {
sActivityAlbums = QueryUtils.loadRecentAlbum(context);
sRecentAlbumsSize = sActivityAlbums.size();
if (sAlbums == null) {
getAlbumArrayList();
}
loadFavourAlbums();
}
}
}
return sActivityAlbums;
}
public int getRecentAlbumsSize() {
return sRecentAlbumsSize;
}
private void loadFavourAlbums() {
ArrayList<Album> freqAlbums = new ArrayList<>();
if (sAlbums == null) {
getAlbumArrayList();
}
if (sAlbums.size() == 0) {
return;
}
for (Album album : sAlbums) {
if (album.getFreq() > 0) {
freqAlbums.add(album);
}
}
if (freqAlbums.size() == 0) {
return;
}
Collections.sort(freqAlbums, new Comparator<Album>() {
@Override
public int compare(Album lhs, Album rhs) {
return rhs.getFreq() - lhs.getFreq();
}
});
for (int i = 0; i < freqAlbums.size(); i++) {
if (sActivityAlbums.size() == 12) {
sActivityAlbums.remove(6);
}
sActivityAlbums.add(freqAlbums.get(i));
}
}
public ArrayList<Album> getArtistAlbum(String artistName) {
ArrayList<Album> list = new ArrayList<>();
if (sAlbums == null) {
getAlbumArrayList();
}
for (Album album : sAlbums) {
if (album.getAlbumArtist().equals(artistName)) {
list.add(album);
}
}
Collections.sort(list);
return list;
}
public ArrayList<Song> getAlbumSong(String albumTitle) {
ArrayList<Song> list = new ArrayList<>();
if (sSongs == null) {
getSongArrayList();
}
for (Song song : sSongs) {
if (song.getAlbum().getTitle().equals(albumTitle)) {
list.add(song);
}
}
Collections.sort(list);
return list;
}
}