--- /dev/null
+package eu.alefzero.owncloud.ui;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Vector;
+
+import eu.alefzero.owncloud.DbHandler;
+import eu.alefzero.owncloud.OwnCloudSession;
+import eu.alefzero.owncloud.R;
+import eu.alefzero.owncloud.R.id;
+import eu.alefzero.owncloud.R.menu;
+import eu.alefzero.owncloud.R.xml;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.util.Log;
+import android.view.ContextMenu;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.widget.AdapterView.AdapterContextMenuInfo;
+
+public class Preferences extends PreferenceActivity {
+ private String TAG = "OwnCloudPreferences";
+ private final int mNewSession = 47;
+ private final int mEditSession = 48;
+ private DbHandler mDbHandler;
+ private Vector<OwnCloudSession> mSessions;
+ private int mSelectedMenuItem;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState){
+ super.onCreate(savedInstanceState);
+ mDbHandler = new DbHandler(getBaseContext());
+ mSessions = new Vector<OwnCloudSession>();
+ addPreferencesFromResource(R.xml.preferences);
+ registerForContextMenu(getListView());
+ //populateSessionList();
+ }
+
+ private void populateSessionList() {
+ mSessions.clear();
+ mSessions = mDbHandler.getSessionList();
+ PreferenceScreen ps = getPreferenceScreen();
+ ps.removeAll();
+ addPreferencesFromResource(R.xml.preferences);
+ for (int i = 0; i < mSessions.size(); i++) {
+ Preference preference = new Preference(getBaseContext());
+ preference.setTitle(mSessions.get(i).getName());
+ URI uri;
+ try {
+ uri = new URI(mSessions.get(i).getUrl());
+ } catch (URISyntaxException e) {
+ e.printStackTrace(); // should never happend
+ continue;
+ }
+ preference.setSummary(uri.getScheme() + "://" + uri.getHost()+uri.getPath());
+ ps.addPreference(preference);
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.prefs_menu, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onMenuItemSelected(int featureId, MenuItem item) {
+ super.onMenuItemSelected(featureId, item);
+ Intent intent;
+
+ switch (item.getItemId()) {
+ case R.id.addSessionItem:
+ intent = new Intent(this, PreferencesNewSession.class);
+ startActivityForResult(intent, mNewSession);
+ break;
+ case R.id.SessionContextEdit:
+ intent = new Intent(this, PreferencesNewSession.class);
+ intent.putExtra("sessionId", mSessions.get(mSelectedMenuItem).getEntryId());
+ intent.putExtra("sessionName", mSessions.get(mSelectedMenuItem).getName());
+ intent.putExtra("sessionURL", mSessions.get(mSelectedMenuItem).getUrl());
+ startActivityForResult(intent, mEditSession);
+ break;
+ case R.id.SessionContextRemove:
+ OwnCloudSession ocs = mSessions.get(mSelectedMenuItem);
+ mDbHandler.removeSessionWithId(ocs.getEntryId());
+ mSessions.remove(ocs);
+ getPreferenceScreen().removePreference(getPreferenceScreen().getPreference(mSelectedMenuItem+1));
+ break;
+ default:
+ Log.w(TAG, "Unknown menu item triggered");
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == Activity.RESULT_OK) {
+ switch (requestCode) {
+ case mNewSession:
+ mDbHandler.addSession(data.getStringExtra("sessionName"),
+ data.getStringExtra("sessionURL"));
+ getPreferenceScreen().removeAll();
+ addPreferencesFromResource(R.xml.preferences);
+ populateSessionList();
+ break;
+ case mEditSession:
+ mDbHandler.changeSessionFields(data.getIntExtra("sessionId", -1),
+ data.getStringExtra("sessionName"),
+ data.getStringExtra("sessionURL"));
+ populateSessionList();
+ break;
+ }
+ }
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
+ super.onCreateContextMenu(menu, v, menuInfo);
+ AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
+ mSelectedMenuItem = info.position-1;
+ menu.setHeaderTitle(mSessions.get(mSelectedMenuItem).getName());
+
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.session_context_menu, menu);
+
+ }
+
+ @Override
+ protected void onDestroy() {
+ mDbHandler.close();
+ super.onDestroy();
+ }
+
+}