package com.wigwamlabs.spotify.ui;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.ProgressBar;
import android.widget.Switch;
import android.widget.TextView;
import com.wigwamlabs.spotify.Playlist;
import com.wigwamlabs.spotify.PlaylistContainer;
import com.wigwamlabs.spotify.R;
import com.wigwamlabs.spotify.Session;
import static com.wigwamlabs.spotify.Playlist.OFFLINE_STATUS_DOWNLOADING;
import static com.wigwamlabs.spotify.Playlist.OFFLINE_STATUS_NO;
public class ConfigureOfflinePlaylistContainerAdapter extends PlaylistContainerAdapter {
private final Session mSession;
private boolean mUpdatesUi;
public ConfigureOfflinePlaylistContainerAdapter(Context context, Session session, PlaylistContainer playlistContainer) {
super(context, playlistContainer);
mSession = session;
}
@Override
protected View getPlaylistView(Playlist playlist, View convertView, ViewGroup parent, LayoutInflater layoutInflater) {
// initialise view
ViewGroup view = (ViewGroup) convertView;
final ViewHolder viewHolder;
if (view == null) {
view = (ViewGroup) layoutInflater.inflate(R.layout.playlistcontainer_playlist_offline, parent, false);
viewHolder = new ViewHolder(view);
view.setTag(viewHolder);
viewHolder.offlineSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (mUpdatesUi) {
return;
}
onOfflineStateChanged(viewHolder.playlist, isChecked);
}
});
} else {
viewHolder = (ViewHolder) view.getTag();
}
// update view
mUpdatesUi = true;
viewHolder.playlist = playlist;
viewHolder.name.setText(playlist.getName());
final int status = playlist.getOfflineStatus(mSession);
//TODO the status for OFFLINE_STATUS_WAITING is really unreliable, so treat waiting and yes as the same
viewHolder.offlineSwitch.setChecked(status != OFFLINE_STATUS_NO);
viewHolder.syncProgress.setVisibility(status == OFFLINE_STATUS_DOWNLOADING ? View.VISIBLE : View.GONE);
if (status == OFFLINE_STATUS_DOWNLOADING) {
viewHolder.syncProgress.setProgress(playlist.getOfflineDownloadComplete(mSession));
}
mUpdatesUi = false;
return view;
}
private void onOfflineStateChanged(Playlist playlist, boolean offline) {
playlist.setOfflineMode(mSession, offline);
}
private static class ViewHolder {
final TextView name;
final Switch offlineSwitch;
final ProgressBar syncProgress;
Playlist playlist;
public ViewHolder(ViewGroup view) {
name = (TextView) view.findViewById(R.id.name);
offlineSwitch = (Switch) view.findViewById(R.id.offlineSwitch);
syncProgress = (ProgressBar) view.findViewById(R.id.syncProgress);
}
}
}