package org.droidklavier.activity; import android.app.Activity; import android.app.ListActivity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.TextView; import org.droidklavier.Droidklavier; import org.droidklavier.R; import org.droidklavier.db.Album; import org.droidklavier.db.DAO; import org.droidklavier.db.Song; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public class SongList extends ListActivity { private Droidklavier mDroidklavier; private ArrayList<Song> mSongList; private Album mAlbum; private ProgressDialog mLoadingDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.song_list); mDroidklavier = (Droidklavier) getApplication(); String source = getIntent().getStringExtra(Player.SOURCE); mAlbum = getIntent().getParcelableExtra(Player.ALBUM); if (mAlbum != null) { setTitle("Songs from: " + mAlbum.title); } mLoadingDialog = new ProgressDialog(this); mLoadingDialog.setMessage(getString(R.string.loading)); mLoadingDialog.show(); new SongListTask().execute(source); getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> av, View v, int pos, long id) { selectSong((int) id); } }); } private void selectSong(int id) { Song song = mSongList.get(id); String source = song.source; Intent intent = new Intent(); intent.putExtra(Player.SOURCE, source); intent.putExtra(Player.ALBUM, mAlbum); intent.putExtra(Player.SONG, song); setResult(Activity.RESULT_OK, intent); finish(); } private class SongListAdapter extends ArrayAdapter<Song> { private ArrayList<Song> mmSongList; private String mmAlbumTitle; public SongListAdapter(Context context, int textViewResourceId, ArrayList<Song> songList, String albumTitle) { super(context, textViewResourceId, songList); mmSongList = songList; mmAlbumTitle = albumTitle; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.song_list_item, null); } Song song = mmSongList.get(position); if (song != null) { TextView songTitle = (TextView) v.findViewById(R.id.song_title); TextView songAlbum = (TextView) v.findViewById(R.id.song_album); TextView albumSource = (TextView) v.findViewById(R.id.album_source); String[] strings = match(song.title); if (strings != null && strings.length == 3) { songTitle.setText(strings[0]); songAlbum.setText("Album: " + strings[1]); albumSource.setText("Source: " + strings[2]); } else { songTitle.setText(song.title); songAlbum.setText("Album: " + mmAlbumTitle); albumSource.setText("Source: " + song.source); } } return v; } } private String[] match(final String songTitle) { String[] strings = null; Pattern p = Pattern.compile("([^\\[]*)(\\[)(Pianosoft|User)(:)([^\\]]*)(\\])"); Matcher m = p.matcher(songTitle); if (m.find()) { strings = songTitle.split("(\\[)(Pianosoft|User)(:)"); // strings = [song, album, source] strings = new String[] { strings[0], strings[1].substring(0, strings[1].length() - 1), m.group(3) }; } return strings; } private class SongListTask extends AsyncTask<String, Void, ArrayList<Song>> { @Override protected ArrayList<Song> doInBackground(String... params) { ArrayList<Song> songList; String source = params[0]; // Get the songs list from the database if (source.equals(DAO.SEARCH_RESULT)) { songList = mDroidklavier.getDAO().getSearchResultSongList(mAlbum.albumId); } else { songList = mDroidklavier.getDAO().getSongList(source, mAlbum.albumId); } return songList; } @Override protected void onPostExecute(ArrayList<Song> result) { super.onPostExecute(result); if (result != null) { mSongList = result; setListAdapter(new SongListAdapter(SongList.this, R.layout.song_list_item, mSongList, mAlbum.title)); } if (mLoadingDialog != null) { mLoadingDialog.dismiss(); } } } }