ManageAccountActivity.java

  1package de.gultsch.chat.ui;
  2
  3import java.util.ArrayList;
  4import java.util.List;
  5
  6import de.gultsch.chat.R;
  7import de.gultsch.chat.entities.Account;
  8import de.gultsch.chat.ui.EditAccount.EditAccountListener;
  9import android.app.ActionBar;
 10import android.app.Activity;
 11import android.content.Context;
 12import android.content.Intent;
 13import android.os.Bundle;
 14import android.util.Log;
 15import android.view.LayoutInflater;
 16import android.view.Menu;
 17import android.view.MenuItem;
 18import android.view.View;
 19import android.view.ViewGroup;
 20import android.widget.AdapterView;
 21import android.widget.AdapterView.OnItemClickListener;
 22import android.widget.ArrayAdapter;
 23import android.widget.ListView;
 24import android.widget.TextView;
 25
 26public class ManageAccountActivity extends XmppActivity {
 27
 28	
 29	protected List<Account> accountList = new ArrayList<Account>();
 30	protected ListView accountListView;
 31	protected ArrayAdapter<Account> accountListViewAdapter;
 32	
 33	@Override
 34	protected void onCreate(Bundle savedInstanceState) {
 35
 36		super.onCreate(savedInstanceState);
 37
 38		setContentView(R.layout.manage_accounts);
 39		
 40		accountListView = (ListView) findViewById(R.id.account_list);
 41		accountListViewAdapter = new ArrayAdapter<Account>(getApplicationContext(), R.layout.account_row, this.accountList) {
 42			@Override
 43			public View getView(int position, View view, ViewGroup parent) {
 44				if (view == null) {
 45					LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 46					view = (View) inflater.inflate(R.layout.account_row, null);
 47				}
 48					((TextView) view.findViewById(R.id.account_jid)).setText(getItem(position).getJid());
 49				
 50				return view;
 51			}
 52		};
 53		accountListView.setAdapter(this.accountListViewAdapter);
 54		accountListView.setOnItemClickListener(new OnItemClickListener() {
 55
 56			@Override
 57			public void onItemClick(AdapterView<?> arg0, View view, int position,
 58					long arg3) {
 59				EditAccount dialog = new EditAccount();
 60				dialog.setAccount(accountList.get(position));
 61				dialog.setEditAccountListener(new EditAccountListener() {
 62					
 63					@Override
 64					public void onAccountEdited(Account account) {
 65						xmppConnectionService.updateAccount(account);
 66					}
 67
 68					@Override
 69					public void onAccountDelete(Account account) {
 70						
 71						Log.d("gultsch","deleting account:"+account.getJid());
 72						
 73						xmppConnectionService.deleteAccount(account);
 74						
 75						//dont bother finding the right account in the frontend list. just reload
 76						accountList.clear();
 77						accountList.addAll(xmppConnectionService.getAccounts());
 78						
 79						accountListViewAdapter.notifyDataSetChanged();
 80						
 81					}
 82				});
 83				dialog.show(getFragmentManager(),"edit_account");
 84			}
 85		});
 86	}
 87
 88	@Override
 89	public void onStart() {
 90		super.onStart();
 91		if (xmppConnectionServiceBound) {
 92			this.accountList.clear();
 93			this.accountList.addAll(xmppConnectionService
 94					.getAccounts());
 95			accountListViewAdapter.notifyDataSetChanged();
 96			if (this.accountList.size() == 0) {
 97				getActionBar().setDisplayHomeAsUpEnabled(false);
 98			}
 99		}
100	}
101	
102	@Override
103	void onBackendConnected() {
104		Log.d("gultsch","called on backend connected");
105		this.accountList.clear();
106		this.accountList.addAll(xmppConnectionService.getAccounts());
107		accountListViewAdapter.notifyDataSetChanged();
108		if (this.accountList.size() == 0) {
109			getActionBar().setDisplayHomeAsUpEnabled(false);
110			addAccount();
111		}
112	}
113	
114	@Override
115	public boolean onCreateOptionsMenu(Menu menu) {
116		// Inflate the menu; this adds items to the action bar if it is present.
117		getMenuInflater().inflate(R.menu.manageaccounts, menu);
118		return true;
119	}
120	
121	@Override
122	public boolean onOptionsItemSelected(MenuItem item) {
123		switch (item.getItemId()) {
124		case R.id.action_settings:
125			startActivity(new Intent(this, SettingsActivity.class));
126			break;
127		case R.id.action_add_account:
128			addAccount();
129			break;
130		default:
131			break;
132		}
133		return super.onOptionsItemSelected(item);
134	}
135
136	protected void addAccount() {
137		final Activity activity = this;
138		EditAccount dialog = new EditAccount();
139		dialog.setEditAccountListener(new EditAccountListener() {
140			
141			@Override
142			public void onAccountEdited(Account account) {
143				xmppConnectionService.createAccount(account);
144				accountList.add(account);
145				accountListViewAdapter.notifyDataSetChanged();
146				activity.getActionBar().setDisplayHomeAsUpEnabled(true);
147				if (accountList.size() == 1) {
148					activity.startActivity(new Intent(activity,NewConversationActivity.class));
149				}
150			}
151
152			@Override
153			public void onAccountDelete(Account account) {
154				//this will never be called
155			}
156		});
157		dialog.show(getFragmentManager(),"add_account");
158	}
159}