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