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