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}