482780ede4fbb99b79b89187f92ddef84472fc75
[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 i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
80 startActivity(i);
81 finish();
82 }
83
84 @Override
85 public boolean onMenuItemSelected(int featureId, MenuItem item) {
86 if (item.getItemId() == R.id.createAccount) {
87 Intent intent = new Intent(
88 android.provider.Settings.ACTION_ADD_ACCOUNT);
89 intent.putExtra("authorities",
90 new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE });
91 startActivity(intent);
92 return true;
93 }
94 return false;
95 }
96
97 @Override
98 public boolean onContextItemSelected(android.view.MenuItem item) {
99 AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
100 .getMenuInfo();
101 int index = info.position;
102 HashMap<String, String> map = (HashMap<String, String>) getListAdapter()
103 .getItem(index);
104 String accountName = map.get("NAME");
105 AccountManager am = (AccountManager) getSystemService(ACCOUNT_SERVICE);
106 Account accounts[] = am
107 .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);
108 for (Account a : accounts) {
109 if (a.name.equals(accountName)) {
110 am.removeAccount(a, this, mHandler);
111 }
112 }
113
114 return false;
115 }
116
117 private void populateAccountList() {
118 AccountManager am = (AccountManager) getSystemService(ACCOUNT_SERVICE);
119 Account accounts[] = am
120 .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);
121 LinkedList<HashMap<String, String>> ll = new LinkedList<HashMap<String, String>>();
122 for (Account a : accounts) {
123 HashMap<String, String> h = new HashMap<String, String>();
124 h.put("NAME", a.name);
125 h.put("VER",
126 "ownCloud version: "
127 + am.getUserData(a,
128 AccountAuthenticator.KEY_OC_VERSION));
129 ll.add(h);
130 }
131
132 setListAdapter(new AccountCheckedSimpleAdepter(this, ll,
133 android.R.layout.simple_list_item_single_choice,
134 new String[] { "NAME" }, new int[] { android.R.id.text1 }));
135 registerForContextMenu(getListView());
136 }
137
138 @Override
139 public void run(AccountManagerFuture<Boolean> future) {
140 if (future.isDone()) {
141 Account a = AccountUtils.getCurrentOwnCloudAccount(this);
142 String accountName = "";
143 if (a == null) {
144 Account[] accounts = AccountManager.get(this)
145 .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);
146 if (accounts.length != 0)
147 accountName = accounts[0].name;
148 AccountUtils.setCurrentOwnCloudAccount(this, accountName);
149 }
150 populateAccountList();
151 }
152 }
153
154 private class AccountCheckedSimpleAdepter extends SimpleAdapter {
155 private Account mCurrentAccount;
156 private List<? extends Map<String, ?>> mPrivateData;
157
158 public AccountCheckedSimpleAdepter(Context context,
159 List<? extends Map<String, ?>> data, int resource,
160 String[] from, int[] to) {
161 super(context, data, resource, from, to);
162 mCurrentAccount = AccountUtils
163 .getCurrentOwnCloudAccount(AccountSelectActivity.this);
164 mPrivateData = data;
165 }
166
167 @Override
168 public View getView(int position, View convertView, ViewGroup parent) {
169 View v = super.getView(position, convertView, parent);
170 CheckedTextView ctv = (CheckedTextView) v
171 .findViewById(android.R.id.text1);
172 if (mPrivateData.get(position).get("NAME")
173 .equals(mCurrentAccount.name)) {
174 ctv.setChecked(true);
175 }
176 return v;
177 }
178
179 }
180
181 }