3677f8aef47f67d405d26b7f3b4f27e8a5995f68
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / ui / activity / Preferences.java
1 /* ownCloud Android client application
2 * Copyright (C) 2011 Bartek Przybylski
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 *
17 */
18 package eu.alefzero.owncloud.ui.activity;
19
20 import java.net.URI;
21 import java.net.URISyntaxException;
22 import java.util.Vector;
23
24 import eu.alefzero.owncloud.OwnCloudSession;
25 import eu.alefzero.owncloud.R;
26 import eu.alefzero.owncloud.authenticator.AccountAuthenticator;
27 import eu.alefzero.owncloud.authenticator.AuthUtils;
28 import eu.alefzero.owncloud.db.DbHandler;
29
30 import android.accounts.Account;
31 import android.accounts.AccountManager;
32 import android.app.Activity;
33 import android.content.Intent;
34 import android.os.Bundle;
35 import android.preference.ListPreference;
36 import android.preference.Preference;
37 import android.preference.PreferenceActivity;
38 import android.preference.PreferenceScreen;
39 import android.util.Log;
40 import android.view.ContextMenu;
41 import android.view.Menu;
42 import android.view.MenuInflater;
43 import android.view.MenuItem;
44 import android.view.View;
45 import android.view.ContextMenu.ContextMenuInfo;
46 import android.widget.AdapterView.AdapterContextMenuInfo;
47
48 /**
49 * An Activity that allows the user to change the application's settings.
50 * @author Bartek Przybylski
51 *
52 */
53 public class Preferences extends PreferenceActivity {
54 private static final String TAG = "OwnCloudPreferences";
55 private final int mNewSession = 47;
56 private final int mEditSession = 48;
57 private DbHandler mDbHandler;
58 private Vector<OwnCloudSession> mSessions;
59 private Account[] mAccounts;
60 private int mSelectedMenuItem;
61
62 @Override
63 public void onCreate(Bundle savedInstanceState){
64 super.onCreate(savedInstanceState);
65 mDbHandler = new DbHandler(getBaseContext());
66 mSessions = new Vector<OwnCloudSession>();
67 addPreferencesFromResource(R.xml.preferences);
68 registerForContextMenu(getListView());
69 populateAccountList();
70 //populateSessionList();
71 }
72
73 private void populateSessionList() {
74 mSessions.clear();
75 mSessions = mDbHandler.getSessionList();
76 PreferenceScreen ps = getPreferenceScreen();
77 ps.removeAll();
78 addPreferencesFromResource(R.xml.preferences);
79 for (int i = 0; i < mSessions.size(); i++) {
80 Preference preference = new Preference(getBaseContext());
81 preference.setTitle(mSessions.get(i).getName());
82 URI uri;
83 try {
84 uri = new URI(mSessions.get(i).getUrl());
85 } catch (URISyntaxException e) {
86 e.printStackTrace(); // should never happen
87 continue;
88 }
89 preference.setSummary(uri.getScheme() + "://" + uri.getHost()+uri.getPath());
90 ps.addPreference(preference);
91 }
92 }
93
94 /**
95 * Populates the account selector
96 */
97 private void populateAccountList(){
98 AccountManager accMan = AccountManager.get(this);
99 mAccounts = accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);
100 ListPreference accountList = (ListPreference) findPreference("select_oc_account");
101
102 // Display the name of the current account if there is any
103 Account defaultAccount = AuthUtils.getCurrentOwnCloudAccount(this);
104 if(defaultAccount != null){
105 accountList.setSummary(defaultAccount.name);
106 }
107
108 // Transform accounts into array of string for preferences to use
109 String[] accNames = new String[mAccounts.length];
110 for(int i = 0; i < mAccounts.length; i++){
111 Account account = mAccounts[i];
112 accNames[i] = account.name;
113 }
114
115 accountList.setEntries(accNames);
116 accountList.setEntryValues(accNames);
117 }
118
119 @Override
120 public boolean onCreateOptionsMenu(Menu menu) {
121 super.onCreateOptionsMenu(menu);
122 MenuInflater inflater = getMenuInflater();
123 inflater.inflate(R.menu.prefs_menu, menu);
124 return true;
125 }
126
127 @Override
128 public boolean onMenuItemSelected(int featureId, MenuItem item) {
129 super.onMenuItemSelected(featureId, item);
130 Intent intent;
131
132 switch (item.getItemId()) {
133 case R.id.addSessionItem:
134 intent = new Intent(this, PreferencesNewSession.class);
135 startActivityForResult(intent, mNewSession);
136 break;
137 case R.id.SessionContextEdit:
138 intent = new Intent(this, PreferencesNewSession.class);
139 intent.putExtra("sessionId", mSessions.get(mSelectedMenuItem).getEntryId());
140 intent.putExtra("sessionName", mSessions.get(mSelectedMenuItem).getName());
141 intent.putExtra("sessionURL", mSessions.get(mSelectedMenuItem).getUrl());
142 startActivityForResult(intent, mEditSession);
143 break;
144 case R.id.SessionContextRemove:
145 OwnCloudSession ocs = mSessions.get(mSelectedMenuItem);
146 mDbHandler.removeSessionWithId(ocs.getEntryId());
147 mSessions.remove(ocs);
148 getPreferenceScreen().removePreference(getPreferenceScreen().getPreference(mSelectedMenuItem+1));
149 break;
150 default:
151 Log.w(TAG, "Unknown menu item triggered");
152 return false;
153 }
154 return true;
155 }
156
157 @Override
158 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
159 super.onActivityResult(requestCode, resultCode, data);
160 if (resultCode == Activity.RESULT_OK) {
161 switch (requestCode) {
162 case mNewSession:
163 mDbHandler.addSession(data.getStringExtra("sessionName"),
164 data.getStringExtra("sessionURL"));
165 getPreferenceScreen().removeAll();
166 addPreferencesFromResource(R.xml.preferences);
167 populateSessionList();
168 break;
169 case mEditSession:
170 mDbHandler.changeSessionFields(data.getIntExtra("sessionId", -1),
171 data.getStringExtra("sessionName"),
172 data.getStringExtra("sessionURL"));
173 populateSessionList();
174 break;
175 }
176 }
177 }
178
179 @Override
180 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
181 super.onCreateContextMenu(menu, v, menuInfo);
182 AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
183 mSelectedMenuItem = info.position-1;
184 menu.setHeaderTitle(mSessions.get(mSelectedMenuItem).getName());
185
186 MenuInflater inflater = getMenuInflater();
187 inflater.inflate(R.menu.session_context_menu, menu);
188
189 }
190
191 @Override
192 protected void onDestroy() {
193 mDbHandler.close();
194 super.onDestroy();
195 }
196
197 }