3ff27e4a183114fd8acf74b8719893dc6e4af411
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / ui / activity / AccountSelectActivity.java
1 package eu.alefzero.owncloud.ui.activity;
2
3 import java.util.HashMap;
4 import java.util.LinkedList;
5 import java.util.List;
6 import java.util.Map;
7
8 import android.accounts.Account;
9 import android.accounts.AccountManager;
10 import android.accounts.AccountManagerCallback;
11 import android.accounts.AccountManagerFuture;
12 import android.content.Context;
13 import android.content.Intent;
14 import android.os.Bundle;
15 import android.os.Handler;
16 import android.util.Log;
17 import android.view.ContextMenu;
18 import android.view.View;
19 import android.view.ViewGroup;
20 import android.view.ContextMenu.ContextMenuInfo;
21 import android.widget.AdapterView;
22 import android.widget.AdapterView.AdapterContextMenuInfo;
23 import android.widget.AdapterView.OnItemLongClickListener;
24 import android.widget.CheckedTextView;
25 import android.widget.ListView;
26 import android.widget.SimpleAdapter;
27 import android.widget.TextView;
28
29 import com.actionbarsherlock.app.ActionBar;
30 import com.actionbarsherlock.app.SherlockListActivity;
31 import com.actionbarsherlock.view.Menu;
32 import com.actionbarsherlock.view.MenuInflater;
33 import com.actionbarsherlock.view.MenuItem;
34
35 import eu.alefzero.owncloud.authenticator.AccountAuthenticator;
36 import eu.alefzero.owncloud.AccountUtils;
37 import eu.alefzero.owncloud.R;
38
39 public class AccountSelectActivity extends SherlockListActivity implements
40 AccountManagerCallback<Boolean> {
41
42 private final Handler mHandler = new Handler();
43
44 @Override
45 protected void onCreate(Bundle savedInstanceState) {
46 super.onCreate(savedInstanceState);
47
48 ActionBar action_bar = getSupportActionBar();
49 action_bar.setDisplayShowTitleEnabled(true);
50 action_bar.setDisplayHomeAsUpEnabled(false);
51 }
52
53 @Override
54 protected void onResume() {
55 super.onResume();
56 populateAccountList();
57 }
58
59 @Override
60 public boolean onCreateOptionsMenu(Menu menu) {
61 MenuInflater inflater = getSherlock().getMenuInflater();
62 inflater.inflate(eu.alefzero.owncloud.R.menu.account_picker, menu);
63 return true;
64 }
65
66 @Override
67 public void onCreateContextMenu(ContextMenu menu, View v,
68 ContextMenuInfo menuInfo) {
69 getMenuInflater().inflate(R.menu.account_picker_long_click, menu);
70 super.onCreateContextMenu(menu, v, menuInfo);
71 }
72
73 @Override
74 protected void onListItemClick(ListView l, View v, int position, long id) {
75 String accountName = ((TextView) v.findViewById(android.R.id.text1))
76 .getText().toString();
77 AccountUtils.setCurrentOwnCloudAccount(this, accountName);
78 Intent i = new Intent(this, FileDisplayActivity.class);
79 startActivity(i);
80 finish();
81 }
82
83 @Override
84 public boolean onMenuItemSelected(int featureId, MenuItem item) {
85 if (item.getItemId() == R.id.createAccount) {
86 Intent intent = new Intent(
87 android.provider.Settings.ACTION_ADD_ACCOUNT);
88 intent.putExtra("authorities",
89 new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE });
90 startActivity(intent);
91 return true;
92 }
93 return false;
94 }
95
96 @Override
97 public boolean onContextItemSelected(android.view.MenuItem item) {
98 AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
99 .getMenuInfo();
100 int index = info.position;
101 HashMap<String, String> map = (HashMap<String, String>) getListAdapter()
102 .getItem(index);
103 String accountName = map.get("NAME");
104 AccountManager am = (AccountManager) getSystemService(ACCOUNT_SERVICE);
105 Account accounts[] = am
106 .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);
107 for (Account a : accounts) {
108 if (a.name.equals(accountName)) {
109 am.removeAccount(a, this, mHandler);
110 }
111 }
112
113 return false;
114 }
115
116 private void populateAccountList() {
117 AccountManager am = (AccountManager) getSystemService(ACCOUNT_SERVICE);
118 Account accounts[] = am
119 .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);
120 LinkedList<HashMap<String, String>> ll = new LinkedList<HashMap<String, String>>();
121 for (Account a : accounts) {
122 HashMap<String, String> h = new HashMap<String, String>();
123 h.put("NAME", a.name);
124 h.put("VER",
125 "ownCloud version: "
126 + am.getUserData(a,
127 AccountAuthenticator.KEY_OC_VERSION));
128 ll.add(h);
129 }
130
131 setListAdapter(new AccountCheckedSimpleAdepter(this, ll,
132 android.R.layout.simple_list_item_single_choice,
133 new String[] { "NAME" }, new int[] { android.R.id.text1 }));
134 registerForContextMenu(getListView());
135 }
136
137 @Override
138 public void run(AccountManagerFuture<Boolean> future) {
139 if (future.isDone()) {
140 Account a = AccountUtils.getCurrentOwnCloudAccount(this);
141 String accountName = "";
142 if (a == null) {
143 Account[] accounts = AccountManager.get(this)
144 .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);
145 if (accounts.length != 0)
146 accountName = accounts[0].name;
147 AccountUtils.setCurrentOwnCloudAccount(this, accountName);
148 }
149 populateAccountList();
150 }
151 }
152
153 private class AccountCheckedSimpleAdepter extends SimpleAdapter {
154 private Account mCurrentAccount;
155 private List<? extends Map<String, ?>> mPrivateData;
156
157 public AccountCheckedSimpleAdepter(Context context,
158 List<? extends Map<String, ?>> data, int resource,
159 String[] from, int[] to) {
160 super(context, data, resource, from, to);
161 mCurrentAccount = AccountUtils
162 .getCurrentOwnCloudAccount(AccountSelectActivity.this);
163 mPrivateData = data;
164 }
165
166 @Override
167 public View getView(int position, View convertView, ViewGroup parent) {
168 View v = super.getView(position, convertView, parent);
169 CheckedTextView ctv = (CheckedTextView) v
170 .findViewById(android.R.id.text1);
171 if (mPrivateData.get(position).get("NAME")
172 .equals(mCurrentAccount.name)) {
173 ctv.setChecked(true);
174 }
175 return v;
176 }
177
178 }
179
180 }