/*
* Copyright 2008-2013, ETH Zürich, Samuel Welten, Michael Kuhn, Tobias Langner,
* Sandro Affentranger, Lukas Bossard, Michael Grob, Rahul Jain,
* Dominic Langenegger, Sonia Mayor Alonso, Roger Odermatt, Tobias Schlueter,
* Yannick Stucki, Sebastian Wendland, Samuel Zehnder, Samuel Zihlmann,
* Samuel Zweifel
*
* This file is part of Jukefox.
*
* Jukefox is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or any later version. Jukefox is
* distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* Jukefox. If not, see <http://www.gnu.org/licenses/>.
*/
package ch.ethz.dcg.pancho3.view.overlays;
import java.util.List;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import ch.ethz.dcg.jukefox.commons.DataUnavailableException;
import ch.ethz.dcg.jukefox.commons.utils.JoinableThread;
import ch.ethz.dcg.jukefox.commons.utils.Log;
import ch.ethz.dcg.jukefox.controller.Controller;
import ch.ethz.dcg.jukefox.model.TagPlaylistGenerator;
import ch.ethz.dcg.jukefox.model.collection.BaseAlbum;
import ch.ethz.dcg.jukefox.model.collection.BaseArtist;
import ch.ethz.dcg.jukefox.model.collection.BaseTag;
import ch.ethz.dcg.jukefox.model.collection.CompleteTag;
import ch.ethz.dcg.jukefox.model.collection.PlaylistSong;
import ch.ethz.dcg.pancho3.R;
import ch.ethz.dcg.pancho3.controller.eventhandlers.TagPlaylistGenerationEventListener;
import ch.ethz.dcg.pancho3.model.collection.ParcelableTag;
import ch.ethz.dcg.pancho3.view.tabs.lists.TextListAdapter;
public class TagPlaylistGenerationActivity extends JukefoxOverlayActivity implements OnItemClickListener {
public static final String TAG = TagPlaylistGenerationActivity.class.getSimpleName();
private TagPlaylistGenerationEventListener eventListener;
private EditText playlistSize;
private ListView playlistList;
private TextView title;
private List<PlaylistSong<BaseArtist, BaseAlbum>> currentPlaylist;
private CompleteTag tag;
private Handler handler;
private JoinableThread playlistLoadingThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tagplaylistgeneration);
playlistSize = (EditText) findViewById(R.id.playlistSize);
playlistList = (ListView) findViewById(R.id.playlist);
title = (TextView) findViewById(R.id.tagPlaylistTitle);
eventListener = controller.createTagPlaylistGenerationEventListener(this);
this.handler = new Handler();
getTagFromIntent();
if (tag == null) {
finish();
}
generatePlaylist();
registerButtonListeners();
}
@Override
protected void onPause() {
if (playlistLoadingThread != null) {
}
super.onPause();
}
private void getTagFromIntent() {
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras == null) {
return;
}
ParcelableTag pTag = extras.getParcelable(Controller.INTENT_EXTRA_BASE_TAG);
BaseTag baseTag = pTag.getBaseTag();
if (baseTag == null) {
return;
}
try {
tag = tagProvider.getCompleteTag(baseTag.getId());
} catch (DataUnavailableException e) {
Log.w(TAG, e);
}
title.setText(tag.getName() + " - " + getString(R.string.playlist));
}
public void generatePlaylist() {
eventListener.startLoadingPlaylist();
playlistLoadingThread = new JoinableThread(new Runnable() {
@Override
public void run() {
int size = getPlaylistSize();
try {
currentPlaylist = collectionModel.getTagPlaylistGenerator().generatePlaylist(tag, size,
TagPlaylistGenerator.DEFAULT_SAMPLE_FACTOR);
} catch (DataUnavailableException e) {
Log.w(TAG, e);
return;
}
handler.post(new Runnable() {
@Override
public void run() {
createAndSetAdapter();
}
});
}
});
playlistLoadingThread.start();
}
private int getPlaylistSize() {
int size = TagPlaylistGenerator.DEFAULT_PLAYLIST_SIZE;
try {
size = Integer.parseInt(playlistSize.getText().toString());
} catch (NumberFormatException e) {
Log.w(TAG, e);
}
return size;
}
private void registerButtonListeners() {
findViewById(R.id.playButton).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
eventListener.onPlayButtonClicked();
}
});
findViewById(R.id.regenerateButton).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
eventListener.onRegenerateButtonClicked();
}
});
}
public List<PlaylistSong<BaseArtist, BaseAlbum>> getCurrentPlaylist() {
return currentPlaylist;
}
@Override
public void onItemClick(AdapterView<?> listAdapter, View arg1, int position, long arg3) {
eventListener.onListItemClicked(position);
}
private void createAndSetAdapter() {
TextListAdapter<PlaylistSong<BaseArtist, BaseAlbum>> adapter;
adapter = new TextListAdapter<PlaylistSong<BaseArtist, BaseAlbum>>(TagPlaylistGenerationActivity.this,
R.layout.textlistitem, currentPlaylist);
playlistList.setAdapter(adapter);
eventListener.endLoadingPlaylist();
playlistList.setOnItemClickListener(TagPlaylistGenerationActivity.this);
}
}