diff options
Diffstat (limited to 'src/de/animux/android/andmal/ListActivity.java')
-rw-r--r-- | src/de/animux/android/andmal/ListActivity.java | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/src/de/animux/android/andmal/ListActivity.java b/src/de/animux/android/andmal/ListActivity.java new file mode 100644 index 0000000..ec21f41 --- /dev/null +++ b/src/de/animux/android/andmal/ListActivity.java @@ -0,0 +1,215 @@ +package de.animux.android.andmal; + +import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Map; + +import de.animux.android.andmal.api.MalList; +import de.animux.android.andmal.api.MalObject; +import de.animux.android.andmal.api.MalState; +import de.animux.android.andmal.api.anime.AnimeList; +import de.animux.android.andmal.api.manga.MangaList; +import de.animux.android.andmal.util.SeparatedListAdapter; + +import android.app.Activity; +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.preference.PreferenceManager; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.widget.ListView; +import android.widget.SimpleAdapter; + +public class ListActivity extends Activity { + + public final static String ITEM_TITLE = "title"; + public final static String ITEM_CAPTION = "caption"; + + public final static int SYNCING = 0; + + private MalList currentList; + + private UpdateUIHandler updateUIHandler = new UpdateUIHandler(); + private SharedPreferences prefs; + + public ListActivity() { + super(); + this.currentList = null; + this.prefs = null; + } + + public Map<String, ?> createItem(String title, String caption) { + Map<String, String> item = new HashMap<String, String>(); + item.put(ITEM_TITLE, title); + item.put(ITEM_CAPTION, caption); + return item; + } + + private class UpdateUIHandler extends Handler { + @Override + public void handleMessage(Message msg) { + SeparatedListAdapter adapter = new SeparatedListAdapter( + ListActivity.this); + + if (currentList != null) { + Map<MalState, Collection<MalObject>> malObjects = currentList + .getObjects(); + + if (malObjects != null) { + for (MalState s : malObjects.keySet()) + addMalObjects(adapter, malObjects.get(s), s.toString()); + + ListView list = new ListView(ListActivity.this); + list.setAdapter(adapter); + ListActivity.this.setContentView(list); + } + } + + dismissDialog(SYNCING); + } + } + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + PreferenceManager.setDefaultValues(this, R.menu.settings, false); + + prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); + + if (prefs.getString("MAL_USERNAME", null) == null) { + startActivity(new Intent(this, Settings.class)); + return; + } + + currentList = new AnimeList(prefs.getString("MAL_USERNAME", null), + prefs.getString("MAL_PASSWORD", null)); + refreshDisplay(); + } + + @Override + protected void onResume() { + super.onResume(); + + if (currentList == null) { + if (prefs.getString("USERNAME", null) != null) { + currentList = new AnimeList(prefs.getString("MAL_USERNAME", + null), prefs.getString("MAL_PASSWORD", null)); + } + } else { + currentList.setUsername(prefs.getString("MAL_USERNAME", null)); + currentList.setPassword(prefs.getString("MAL_PASSWORD", null)); + } + + refreshDisplay(); + } + + private synchronized void refreshDisplay() { + if (currentList != null) { + if (currentList.needsRefresh()) { + showDialog(SYNCING); + + new Thread() { + public void run() { + try { + currentList.refresh(); + } catch (Exception e) { + e.printStackTrace(); + } + + updateUIHandler.sendEmptyMessage(0); + } + }.start(); + } else { + updateUIHandler.sendEmptyMessage(0); + } + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + super.onPrepareOptionsMenu(menu); + MenuItem item; + + item = menu.findItem(R.id.menu_switch_anime); + item.setVisible(currentList instanceof MangaList); + + item = menu.findItem(R.id.menu_switch_manga); + item.setVisible(currentList instanceof AnimeList); + + return true; + } + + private void addMalObjects(SeparatedListAdapter adapter, + Collection<MalObject> malObjects, String sectionName) { + if (malObjects != null && malObjects.size() > 0) { + java.util.List<Map<String, ?>> listSection = new LinkedList<Map<String, ?>>(); + + for (MalObject m : malObjects) { + listSection.add(createItem(m.getTitle(), m.getProgress())); + } + + adapter.addSection(sectionName, new SimpleAdapter(this, + listSection, R.layout.list_item, new String[] { ITEM_TITLE, + ITEM_CAPTION }, new int[] { R.id.list_item_title, + R.id.list_item_other })); + } + } + + @Override + protected Dialog onCreateDialog(int id) { + switch (id) { + case SYNCING: + ProgressDialog dialog = ProgressDialog.show(this, "", + "Loading list. Please wait...", true); + dialog.show(); + return dialog; + default: + return super.onCreateDialog(id); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_settings: + startActivity(new Intent(this, Settings.class)); + return true; + case R.id.menu_switch_manga: + currentList = new MangaList(); + break; + case R.id.menu_switch_anime: + currentList = new AnimeList(); + break; + case R.id.menu_refresh: + if (currentList != null) + currentList.setNeedsRefresh(true); + + break; + case R.id.menu_exit: + System.exit(0); + break; + default: + return false; + } + + refreshDisplay(); + return true; + } + +}
\ No newline at end of file |