package com.wigwamlabs.spotify;
import android.os.Handler;
import proguard.annotation.Keep;
public class Playlist extends NativeItemCollection<Track> {
static {
nativeInitClass();
}
public static final int OFFLINE_STATUS_NO = 0;
public static final int OFFLINE_STATUS_YES = 1;
public static final int OFFLINE_STATUS_DOWNLOADING = 2;
public static final int OFFLINE_STATUS_WAITING = 3;
private final Handler mHandler = new Handler();
private Callback mCallback;
Playlist(int handle) {
super(handle);
nativeInitInstance();
}
public static Playlist create(Session session, String link) {
final int handle = nativeCreate(session, link);
if (handle != 0) {
return new Playlist(handle);
}
return null;
}
private static native void nativeInitClass();
static native int nativeCreate(Session session, String link);
@Override
public Playlist clone() {
final int handle = nativeClone();
return new Playlist(handle);
}
private native void nativeInitInstance();
@Override
native void nativeDestroy();
private native int nativeClone();
private native boolean nativeIsLoaded();
private native String nativeGetLink();
private native String nativeGetName();
@Override
native int nativeGetCount();
private native int nativeGetTrack(int position);
private native void nativeSetOfflineMode(Session session, boolean offline);
private native int nativeGetOfflineStatus(Session session);
private native int nativeGetOfflineDownloadComplete(Session session);
@Override
Track createNewItem(int index) {
final int handle = nativeGetTrack(index);
return new Track(handle);
}
public boolean isLoaded() {
return nativeIsLoaded();
}
public String getLink() {
return nativeGetLink();
}
public String getName() {
return nativeGetName();
}
public void setOfflineMode(Session session, boolean offline) {
nativeSetOfflineMode(session, offline);
}
public int getOfflineStatus(Session session) {
return nativeGetOfflineStatus(session);
}
public int getOfflineDownloadComplete(Session session) {
return nativeGetOfflineDownloadComplete(session);
}
public void setCallback(Callback callback, boolean callbackNow) {
mCallback = callback;
if (callback != null && callbackNow) {
//TODO how to treat the other callbacks
if (isLoaded()) {
callback.onPlaylistStateChanged();
}
}
}
@Keep
private void onTracksMoved(final int[] oldPositions, final int newPosition) {
mHandler.post(new Runnable() {
@Override
public void run() {
Playlist.this.onItemsMoved(oldPositions, newPosition);
}
});
}
@Keep
private void onPlaylistRenamed() {
if (mCallback == null) {
return;
}
mHandler.post(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
mCallback.onPlaylistRenamed();
}
}
});
}
@Keep
private void onPlaylistStateChanged() {
if (mCallback == null) {
return;
}
mHandler.post(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
mCallback.onPlaylistStateChanged();
}
}
});
}
@Keep
private void onPlaylistUpdateInProgress(final boolean done) {
if (mCallback == null) {
return;
}
mHandler.post(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
mCallback.onPlaylistUpdateInProgress(done);
}
}
});
}
public interface Callback {
void onPlaylistUpdateInProgress(boolean done);
void onPlaylistRenamed();
void onPlaylistStateChanged();
}
}