package com.papagiannis.tuberun; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.SimpleAdapter; import com.papagiannis.tuberun.fetchers.Observer; import com.papagiannis.tuberun.fetchers.OysterFetcher; import com.papagiannis.tuberun.stores.CredentialsStore; @SuppressWarnings("deprecation") public class OysterActivity extends Activity implements Observer{ static final String DEFAULT_CARD="default_oyster"; static final int DIALOG_MESSAGE_NOTICE = 0; static final int DIALOG_WAIT = 1; static final int DIALOG_REFRESH = 2; private Button storeButton; private Button eraseButton; private Button updateButton; private EditText username; private EditText password; private ListView cardsListView; private ProgressBar cardProgressbar; private LinearLayout cardsLayout; private CredentialsStore store=CredentialsStore.getInstance(); private OysterFetcher fetcher; private final OysterActivity me=this; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new SlidingBehaviour(this, R.layout.oyster); create(); } private void create() { username = (EditText) findViewById(R.id.oyster_username); password = (EditText) findViewById(R.id.oyster_password); updateButton = (Button) findViewById(R.id.update_button); cardsListView = (ListView) findViewById(R.id.cards_listview); cardProgressbar = (ProgressBar) findViewById(R.id.cards_progressbar); cardsLayout = (LinearLayout) findViewById(R.id.cards_layout); storeButton = (Button) findViewById(R.id.button_store); storeButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { store.removeAll(me); String un=(username.getText()!=null)?username.getText().toString():""; String pw=(password.getText()!=null)?password.getText().toString():""; if (un.length()>0 && pw.length()>0) { InputMethodManager imm = (InputMethodManager)getSystemService( Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(password.getWindowToken(), 0); updateButton.setVisibility(View.VISIBLE); showDialog(DIALOG_WAIT); store.add(un, me); store.add(pw, me); fetcher=OysterFetcher.getInstance(un, pw); fetcher.registerCallback(me); fetcher.update(); } else if (un.length()==0) { showDialogMessage("Error","Username cannot be empty"); updateButton.setVisibility(View.GONE); } else { showDialogMessage("Error","Password cannot be empty"); updateButton.setVisibility(View.GONE); } } }); eraseButton = (Button) findViewById(R.id.button_erase); eraseButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { username.setText(""); password.setText(""); store.removeAll(me); updateButton.setVisibility(View.GONE); cardsLayout.setVisibility(View.GONE); } }); updateButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { refreshBalance(); } }); refreshBalance(); } private void refreshBalance() { ArrayList<String> credentials=store.getAll(this); if (credentials.size()==2) { cardsListView.setVisibility(View.GONE); cardProgressbar.setVisibility(View.VISIBLE); cardsLayout.setVisibility(View.VISIBLE); username.setText(credentials.get(0)); password.setText(credentials.get(1)); updateButton.setVisibility(View.VISIBLE); fetcher=OysterFetcher.getInstance(credentials.get(0), credentials.get(1)); fetcher.registerCallback(me); fetcher.update(); } else { cardsLayout.setVisibility(View.GONE); } } @Override public void update() { if (wait_dialog!=null) wait_dialog.dismiss(); if (fetcher.getErrors().length()>0) { store.removeAll(this); showDialogMessage("Error", fetcher.getErrors()); } else { populateListView(); // closeActivity(); } } private ArrayList<HashMap<String,Object>> display=new ArrayList<HashMap<String,Object>>(); private SimpleAdapter adapter=null; private void populateListView() { HashMap<String,String> cards = fetcher.getCards(); //find the default SharedPreferences preferences = getSharedPreferences(TubeRun.PREFERENCES, MODE_PRIVATE); String defaultCard = preferences.getString(DEFAULT_CARD, ""); boolean exists=cards.keySet().contains(defaultCard); display=new ArrayList<HashMap<String,Object>>(); int index=0; for (String card: cards.keySet()) { if (!exists && index==0) { defaultCard=card; setDefaultCard(card); } HashMap<String,Object> m=new HashMap<String,Object>(); m.put("card_selected", defaultCard.equals(card)); m.put("card_number", card); m.put("card_balance", cards.get(card)); display.add(m); index++; } adapter=new SimpleAdapter(this, display, R.layout.oyster_card, new String[]{"card_selected", "card_number", "card_balance"}, new int[]{R.id.enabled_button, R.id.number_textview, R.id.balance_textview}); // adapter.setViewBinder(new Sim(this)); cardsListView.setAdapter(adapter); cardsListView.setClickable(true); cardsListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { defaultChanged(position); } }); cardsListView.setVisibility(View.VISIBLE); cardProgressbar.setVisibility(View.GONE); if (index>0) cardsLayout.setVisibility(View.VISIBLE); } public void defaultChanged(Integer position) { SharedPreferences preferences = getSharedPreferences(TubeRun.PREFERENCES, MODE_PRIVATE); String defaultCard = preferences.getString(DEFAULT_CARD, ""); String card=defaultCard; int i=0; for (HashMap<String,Object> m : display) { if ( i==position ) { m.put("card_selected", true); card=(String) m.get("card_number"); } else m.put("card_selected", false); i++; } if (adapter!=null) adapter.notifyDataSetChanged(); if (!defaultCard.equals(card)) setDefaultCard(card); } // private void closeActivity() { // SharedPreferences shPrefs = getSharedPreferences(TubeRun.PREFERENCES, MODE_PRIVATE); // int viewId = shPrefs.getInt( TubeRun.AUTOSTART, TubeRun.AUTOSTART_NONE); // if (viewId == TubeRun.AUTOSTART_NONE) { // finish(); // } // else { // menuButton.callOnClick(); // } // } public void setDefaultCard(String card) { SharedPreferences preferences = getSharedPreferences(TubeRun.PREFERENCES, MODE_PRIVATE); Editor editor = preferences.edit(); editor.putString(DEFAULT_CARD, card); editor.commit(); } private String notice_title; private String notice_msg; private Dialog wait_dialog; private void showDialogMessage(String s, String ss) { notice_title = s; notice_msg = ss; showDialog(DIALOG_MESSAGE_NOTICE); } @Override protected Dialog onCreateDialog(int id) { Dialog dialog; switch(id) { case DIALOG_MESSAGE_NOTICE: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(notice_msg).setTitle(notice_title).setCancelable(false) .setNegativeButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); dialog=builder.create(); break; case DIALOG_WAIT: ProgressDialog pd=new ProgressDialog(this); wait_dialog=pd; pd.setTitle("Verifying credentials"); pd.setMessage("Please wait..."); pd.setIndeterminate(true); pd.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { fetcher.abort(); } }); dialog=pd; break; default: dialog = null; } return dialog; } @Override protected void onDestroy() { if (fetcher!=null) fetcher.deregisterCallback(this); super.onStop(); } // @Override // protected void onPause() { // super.onResume(); // } // // @Override // protected void onResume() { // btnSlide.callOnClick(); // super.onResume(); // } }