Ensure, that user switching back using the task switcher also must have
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / ui / activity / Preferences.java
index 46cabcf..aec2f94 100644 (file)
@@ -21,36 +21,45 @@ import java.net.URI;
 import java.net.URISyntaxException;\r
 import java.util.Vector;\r
 \r
-import eu.alefzero.owncloud.OwnCloudSession;\r
-import eu.alefzero.owncloud.R;\r
-import eu.alefzero.owncloud.db.DbHandler;\r
-\r
+import android.accounts.Account;\r
+import android.accounts.AccountManager;\r
 import android.app.Activity;\r
 import android.content.Intent;\r
 import android.os.Bundle;\r
+import android.preference.ListPreference;\r
 import android.preference.Preference;\r
-import android.preference.PreferenceActivity;\r
+import android.preference.Preference.OnPreferenceChangeListener;\r
 import android.preference.PreferenceScreen;\r
 import android.util.Log;\r
 import android.view.ContextMenu;\r
-import android.view.Menu;\r
-import android.view.MenuInflater;\r
-import android.view.MenuItem;\r
-import android.view.View;\r
 import android.view.ContextMenu.ContextMenuInfo;\r
+import android.view.View;\r
 import android.widget.AdapterView.AdapterContextMenuInfo;\r
 \r
+import com.actionbarsherlock.app.SherlockPreferenceActivity;\r
+import com.actionbarsherlock.view.Menu;\r
+import com.actionbarsherlock.view.MenuInflater;\r
+import com.actionbarsherlock.view.MenuItem;\r
+\r
+import eu.alefzero.owncloud.OwnCloudSession;\r
+import eu.alefzero.owncloud.R;\r
+import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
+import eu.alefzero.owncloud.authenticator.AuthUtils;\r
+import eu.alefzero.owncloud.db.DbHandler;\r
+\r
 /**\r
  * An Activity that allows the user to change the application's settings.\r
  * @author Bartek Przybylski\r
  *\r
  */\r
-public class Preferences extends PreferenceActivity {\r
-  private String TAG = "OwnCloudPreferences";\r
+public class Preferences extends SherlockPreferenceActivity implements OnPreferenceChangeListener {\r
+  private static final String TAG = "OwnCloudPreferences";\r
   private final int mNewSession = 47;\r
   private final int mEditSession = 48;\r
   private DbHandler mDbHandler;\r
   private Vector<OwnCloudSession> mSessions;\r
+  private Account[] mAccounts;\r
+  private ListPreference mAccountList;\r
   private int mSelectedMenuItem;\r
   \r
   @Override\r
@@ -60,6 +69,7 @@ public class Preferences extends PreferenceActivity {
     mSessions = new Vector<OwnCloudSession>();\r
     addPreferencesFromResource(R.xml.preferences);\r
     registerForContextMenu(getListView());\r
+    populateAccountList();\r
     //populateSessionList();\r
   }\r
   \r
@@ -76,18 +86,44 @@ public class Preferences extends PreferenceActivity {
       try {\r
         uri = new URI(mSessions.get(i).getUrl());\r
       } catch (URISyntaxException e) {\r
-        e.printStackTrace(); // should never happend\r
+        e.printStackTrace(); // should never happen\r
         continue;\r
       }\r
       preference.setSummary(uri.getScheme() + "://" + uri.getHost()+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 = getMenuInflater();\r
+    MenuInflater inflater = getSherlock().getMenuInflater();\r
     inflater.inflate(R.menu.prefs_menu, menu);\r
     return true;\r
   }\r
@@ -151,8 +187,8 @@ public class Preferences extends PreferenceActivity {
     mSelectedMenuItem = info.position-1;\r
     menu.setHeaderTitle(mSessions.get(mSelectedMenuItem).getName());\r
     \r
-    MenuInflater inflater = getMenuInflater();\r
-    inflater.inflate(R.menu.session_context_menu, menu);\r
+    MenuInflater inflater = getSherlock().getMenuInflater();\r
+    inflater.inflate(R.menu.session_context_menu, (Menu) menu);\r
     \r
   }\r
   \r
@@ -161,5 +197,17 @@ public class Preferences extends PreferenceActivity {
     mDbHandler.close();\r
     super.onDestroy();\r
   }\r
+\r
+@Override\r
+/**\r
+ * Updates the summary of the account selector after a new account has \r
+ * been selected\r
+ */\r
+public boolean onPreferenceChange(Preference preference, Object newValue) {\r
+       if(preference.equals(mAccountList)) {\r
+               mAccountList.setSummary(newValue.toString());\r
+       }\r
+       return true;\r
+}\r
   \r
 }\r