package com.wigwamlabs.spotify;
import android.os.Handler;
import proguard.annotation.Keep;
public class PlaylistContainer extends NativeItemCollection<NativeItem> {
private static final int TYPE_PLAYLIST = 0;
private static final int TYPE_START_FOLDER = 1;
private static final int TYPE_END_FOLDER = 2;
private static final int TYPE_PLACEHOLDER = 3;
private final Handler mHandler = new Handler();
private Callback mCallback;
static {
nativeInitClass();
}
public PlaylistContainer(int handle) {
super(handle);
nativeInitInstance();
}
private static native void nativeInitClass();
private native void nativeInitInstance();
@Override
native void nativeDestroy();
native boolean nativeIsLoaded();
@Override
protected native int nativeGetCount();
private native int nativeGetPlaylistType(int index);
private native int nativeGetPlaylist(int index);
private native int nativeGetFolderStart(int index);
private native int nativeGetFolderEnd(int index);
private native int nativeGetPlaceholder(int index);
public void setCallback(Callback callback, boolean callbackNow) {
mCallback = callback;
if (callbackNow && callback != null) {
if (isLoaded()) {
callback.onContainerLoaded();
}
}
}
private boolean isLoaded() {
return nativeIsLoaded();
}
@Keep
void onPlaylistMoved(final int oldPosition, final int newPosition) {
mHandler.post(new Runnable() {
@Override
public void run() {
PlaylistContainer.this.onItemsMoved(oldPosition, newPosition);
}
});
}
@Keep
void onContainerLoaded() {
mHandler.post(new Runnable() {
@Override
public void run() {
initList();
if (mCallback != null) {
mCallback.onContainerLoaded();
}
}
});
}
@Override
NativeItem createNewItem(int index) {
switch (nativeGetPlaylistType(index)) {
case TYPE_PLAYLIST: {
final int handle = nativeGetPlaylist(index);
return new Playlist(handle);
}
case TYPE_START_FOLDER: {
final int handle = nativeGetFolderStart(index);
return new FolderStart(handle);
}
case TYPE_END_FOLDER: {
final int handle = nativeGetFolderEnd(index);
return new FolderEnd(handle);
}
default:
case TYPE_PLACEHOLDER:
final int handle = nativeGetPlaceholder(index);
return new Placeholder(handle);
}
}
public int findPlaylistIndex(String playlistLink) {
if (playlistLink != null) {
final int count = getCount();
for (int i = 0; i < count; i++) {
final NativeItem item = getItem(i);
if (item != null && item instanceof Playlist) {
final Playlist playlist = (Playlist) item;
if (playlistLink.equals(playlist.getLink())) {
return i;
}
}
}
}
return -1;
}
public interface Callback {
void onContainerLoaded();
}
}