package com.wigwamlabs.spotify.ui; import android.content.Context; import android.database.DataSetObserver; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.TextView; import com.wigwamlabs.spotify.FolderStart; import com.wigwamlabs.spotify.NativeItem; import com.wigwamlabs.spotify.Playlist; import com.wigwamlabs.spotify.PlaylistContainer; import com.wigwamlabs.spotify.R; public class PlaylistContainerAdapter implements ListAdapter, PlaylistContainer.Callback, Playlist.Callback { private final Context mContext; private final LayoutInflater mLayoutInflater; private final PlaylistContainer mContainer; private DataSetObserver mObserver; public PlaylistContainerAdapter(Context context, PlaylistContainer container) { mContext = context; mLayoutInflater = LayoutInflater.from(context); mContainer = container; mContainer.setCallback(this, false); } @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEnabled(int position) { final NativeItem item = getItem(position); return item instanceof Playlist; } @Override public void registerDataSetObserver(DataSetObserver observer) { mObserver = observer; } @Override public void unregisterDataSetObserver(DataSetObserver observer) { if (mObserver == observer) { mObserver = null; } } @Override public int getCount() { return mContainer.getCount(); } @Override public NativeItem getItem(int position) { return mContainer.getItem(position); } @Override public long getItemId(int position) { final NativeItem item = mContainer.getItem(position); return item.getId(); } @Override public boolean hasStableIds() { return true; } @Override public View getView(int position, View convertView, ViewGroup parent) { final NativeItem item = getItem(position); if (item != null) { if (item instanceof Playlist) { final Playlist playlist = (Playlist) item; playlist.setCallback(this, false); return getPlaylistView(playlist, convertView, parent, mLayoutInflater); } else if (item instanceof FolderStart) { return getFolderStartView((FolderStart) item, convertView, parent, mLayoutInflater); } } // null, FolderEnd or Placeholder final View view = (convertView != null ? convertView : new View(mContext)); view.setVisibility(View.GONE); return view; } protected View getFolderStartView(FolderStart folderStart, View convertView, ViewGroup parent, LayoutInflater layoutInflater) { TextView view = (TextView) convertView; if (view == null) { view = (TextView) layoutInflater.inflate(R.layout.playlistcontainer_folderstart, parent, false); } view.setText(folderStart.getName()); return view; } protected View getPlaylistView(Playlist playlist, View convertView, ViewGroup parent, LayoutInflater layoutInflater) { TextView view = (TextView) convertView; if (view == null) { view = (TextView) layoutInflater.inflate(R.layout.playlistcontainer_playlist, parent, false); } view.setText(playlist.getName()); return view; } @Override public int getItemViewType(int position) { final NativeItem item = getItem(position); if (item != null) { if (item instanceof Playlist) { return 0; } if (item instanceof FolderStart) { return 1; } } // null, FolderEnd or Placeholder return 2; } @Override public int getViewTypeCount() { return 3; } @Override public boolean isEmpty() { return mContainer.getCount() == 0; } @Override public void onContainerLoaded() { refresh(); } @Override public void onPlaylistUpdateInProgress(boolean done) { } @Override public void onPlaylistRenamed() { refresh(); } @Override public void onPlaylistStateChanged() { } public void refresh() { if (mObserver != null) { mObserver.onChanged(); } } }