+\r
+ private void populateSessionList() {\r
+ mSessions.clear();\r
+ mSessions = mDbHandler.getSessionList();\r
+ PreferenceScreen ps = getPreferenceScreen();\r
+ ps.removeAll();\r
+ addPreferencesFromResource(R.xml.preferences);\r
+ for (int i = 0; i < mSessions.size(); i++) {\r
+ Preference preference = new Preference(getBaseContext());\r
+ preference.setTitle(mSessions.get(i).getName());\r
+ URI uri;\r
+ try {\r
+ uri = new URI(mSessions.get(i).getUrl());\r
+ } catch (URISyntaxException e) {\r
+ e.printStackTrace(); // should never happen\r
+ continue;\r
+ }\r
+ preference.setSummary(uri.getScheme() + "://" + uri.getHost()\r
+ + uri.getPath());\r
+ ps.addPreference(preference);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Populates the account selector\r
+ */\r
+ private void populateAccountList() {\r
+ AccountManager accMan = AccountManager.get(this);\r
+ mAccounts = accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);\r
+ mAccountList = (ListPreference) findPreference("select_oc_account");\r
+ mAccountList.setOnPreferenceChangeListener(this);\r
+\r
+ // Display the name of the current account if there is any\r
+ Account defaultAccount = AuthUtils.getCurrentOwnCloudAccount(this);\r
+ if (defaultAccount != null) {\r
+ mAccountList.setSummary(defaultAccount.name);\r
+ }\r
+\r
+ // Transform accounts into array of string for preferences to use\r
+ String[] accNames = new String[mAccounts.length];\r
+ for (int i = 0; i < mAccounts.length; i++) {\r
+ Account account = mAccounts[i];\r
+ accNames[i] = account.name;\r
+ }\r
+\r
+ mAccountList.setEntries(accNames);\r
+ mAccountList.setEntryValues(accNames);\r
+ }\r
+\r
+ @Override\r
+ public boolean onCreateOptionsMenu(Menu menu) {\r
+ super.onCreateOptionsMenu(menu);\r
+ MenuInflater inflater = getSherlock().getMenuInflater();\r
+ inflater.inflate(R.menu.prefs_menu, menu);\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public boolean onMenuItemSelected(int featureId, MenuItem item) {\r
+ super.onMenuItemSelected(featureId, item);\r
+ Intent intent;\r
+\r
+ switch (item.getItemId()) {\r
+ case R.id.addSessionItem:\r
+ intent = new Intent(this, PreferencesNewSession.class);\r
+ startActivityForResult(intent, mNewSession);\r
+ break;\r
+ case R.id.SessionContextEdit:\r
+ intent = new Intent(this, PreferencesNewSession.class);\r
+ intent.putExtra("sessionId", mSessions.get(mSelectedMenuItem)\r
+ .getEntryId());\r
+ intent.putExtra("sessionName", mSessions.get(mSelectedMenuItem)\r
+ .getName());\r
+ intent.putExtra("sessionURL", mSessions.get(mSelectedMenuItem)\r
+ .getUrl());\r
+ startActivityForResult(intent, mEditSession);\r
+ break;\r
+ case R.id.SessionContextRemove:\r
+ OwnCloudSession ocs = mSessions.get(mSelectedMenuItem);\r
+ mDbHandler.removeSessionWithId(ocs.getEntryId());\r
+ mSessions.remove(ocs);\r
+ getPreferenceScreen().removePreference(\r
+ getPreferenceScreen().getPreference(mSelectedMenuItem + 1));\r
+ break;\r
+ case android.R.id.home:\r
+ intent = new Intent(getBaseContext(), LandingActivity.class);\r
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);\r
+ startActivity(intent);\r
+ break;\r
+ default:\r
+ Log.w(TAG, "Unknown menu item triggered");\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r
+ super.onActivityResult(requestCode, resultCode, data);\r
+ if (resultCode == Activity.RESULT_OK) {\r
+ switch (requestCode) {\r
+ case mNewSession:\r
+ mDbHandler.addSession(data.getStringExtra("sessionName"),\r
+ data.getStringExtra("sessionURL"));\r
+ getPreferenceScreen().removeAll();\r
+ addPreferencesFromResource(R.xml.preferences);\r
+ populateSessionList();\r
+ break;\r
+ case mEditSession:\r
+ mDbHandler.changeSessionFields(\r
+ data.getIntExtra("sessionId", -1),\r
+ data.getStringExtra("sessionName"),\r
+ data.getStringExtra("sessionURL"));\r
+ populateSessionList();\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onCreateContextMenu(ContextMenu menu, View v,\r
+ ContextMenuInfo menuInfo) {\r
+ super.onCreateContextMenu(menu, v, menuInfo);\r
+ AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;\r
+ mSelectedMenuItem = info.position - 1;\r
+ menu.setHeaderTitle(mSessions.get(mSelectedMenuItem).getName());\r
+\r
+ MenuInflater inflater = getSherlock().getMenuInflater();\r
+ inflater.inflate(R.menu.session_context_menu, (Menu) menu);\r
+\r
+ }\r
+\r
+ @Override\r
+ protected void onDestroy() {\r
+ mDbHandler.close();\r
+ super.onDestroy();\r
+ }\r
+\r
+ @Override\r
+ /**\r
+ * Updates various summaries after updates. Also starts and stops \r
+ * the\r
+ */\r
+ public boolean onPreferenceChange(Preference preference, Object newValue) {\r
+ // Update current account summary\r
+ if (preference.equals(mAccountList)) {\r
+ mAccountList.setSummary(newValue.toString());\r
+ } \r
+ \r
+ // Update tracking interval summary\r
+ else if (preference.equals(mTrackingUpdateInterval)) {\r
+ String trackingSummary = getResources().getString(\r
+ R.string.prefs_trackmydevice_interval_summary);\r
+ trackingSummary = String.format(trackingSummary,\r
+ newValue.toString());\r
+ mTrackingUpdateInterval.setSummary(trackingSummary);\r
+ } \r
+ \r
+ // Start or stop tracking service\r
+ else if (preference.equals(mDeviceTracking)) {\r
+ Intent locationServiceIntent = new Intent();\r
+ locationServiceIntent.setAction("eu.alefzero.owncloud.location.LocationLauncher");\r
+ locationServiceIntent.putExtra("TRACKING_SETTING", (Boolean) newValue);\r
+ sendBroadcast(locationServiceIntent);\r
+ }\r
+ return true;\r
+ }\r
+\r