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 createItem(String title, String caption) { Map item = new HashMap(); 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> 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 malObjects, String sectionName) { if (malObjects != null && malObjects.size() > 0) { java.util.List> listSection = new LinkedList>(); 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; } }