From: Lennart Rosam Date: Sat, 7 Apr 2012 00:15:38 +0000 (+0200) Subject: Make account selectable from preferences X-Git-Tag: oc-android-1.4.3~475 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/4cbe903b8af46455a558dd466bfd97ca1a27501e Make account selectable from preferences --- diff --git a/.classpath b/.classpath index 63292d73..4d02d2c2 100644 --- a/.classpath +++ b/.classpath @@ -3,15 +3,15 @@ - - - - - - - - - + + + + + + + + + diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 8f9a8fbb..12cd5911 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -60,7 +60,7 @@ android:resource="@xml/syncadapter_files"/> - + diff --git a/res/layout-large-land/files.xml b/res/layout-large-land/files.xml new file mode 100644 index 00000000..c43feb94 --- /dev/null +++ b/res/layout-large-land/files.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout-port/files.xml b/res/layout-port/files.xml deleted file mode 100644 index d6308dab..00000000 --- a/res/layout-port/files.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/res/layout-port/landing_page_item.xml b/res/layout-port/landing_page_item.xml deleted file mode 100644 index a15412ca..00000000 --- a/res/layout-port/landing_page_item.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/res/layout-port/main.xml b/res/layout-port/main.xml deleted file mode 100644 index 5e644351..00000000 --- a/res/layout-port/main.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/layout/files.xml b/res/layout/files.xml index c43feb94..d6308dab 100644 --- a/res/layout/files.xml +++ b/res/layout/files.xml @@ -3,30 +3,7 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#F7F7F7" - android:orientation="vertical" > - - - - - - - - - - - + android:orientation="vertical" + android:id="@+id/file_list_container"> \ No newline at end of file diff --git a/res/layout/landing_page_item.xml b/res/layout/landing_page_item.xml index fde1c560..a15412ca 100644 --- a/res/layout/landing_page_item.xml +++ b/res/layout/landing_page_item.xml @@ -2,25 +2,23 @@ - - - + android:layout_centerHorizontal="true" + android:src="@drawable/action_item_btn" /> + - \ No newline at end of file diff --git a/res/layout/main.xml b/res/layout/main.xml index dc8c8d76..33eb75a9 100644 --- a/res/layout/main.xml +++ b/res/layout/main.xml @@ -1,23 +1,23 @@ + + + - - - - - - - + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 0d2bb3e3..47daf45f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -17,6 +17,9 @@ General Stored sessions Add new session + Create image thumbnails + Select an account + Choose, which of your accounts the app should use. Session Name URL Username diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index 2b733ae9..2fe8d3bb 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -1,4 +1,15 @@ - - - + + + + + + + \ No newline at end of file diff --git a/src/eu/alefzero/owncloud/authenticator/AuthUtils.java b/src/eu/alefzero/owncloud/authenticator/AuthUtils.java index e3386796..e3fc32c4 100644 --- a/src/eu/alefzero/owncloud/authenticator/AuthUtils.java +++ b/src/eu/alefzero/owncloud/authenticator/AuthUtils.java @@ -48,8 +48,12 @@ import org.apache.http.protocol.BasicHttpContext; import eu.alefzero.owncloud.ui.activity.AuthenticatorActivity; +import android.accounts.Account; +import android.accounts.AccountManager; import android.content.Context; +import android.content.SharedPreferences; import android.os.Handler; +import android.preference.PreferenceManager; import android.util.Log; public class AuthUtils { @@ -219,4 +223,29 @@ public class AuthUtils { }; return performOnBackgroundThread(r); } + + /** + * Can be used to get the currently selected ownCloud account in the preferences + * + * @param context The current appContext + * @return The current account or null, if there is none yet. + */ + public static Account getCurrentOwnCloudAccount(Context context){ + Account[] ocAccounts = AccountManager.get(context).getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE); + Account defaultAccount = null; + + SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(context); + String accountName = appPreferences.getString("select_oc_account", null); + + if(accountName != null){ + for(Account account : ocAccounts){ + if(account.name.equals(accountName)){ + defaultAccount = account; + break; + } + } + } + + return defaultAccount; + } } diff --git a/src/eu/alefzero/owncloud/ui/activity/AuthenticatorActivity.java b/src/eu/alefzero/owncloud/ui/activity/AuthenticatorActivity.java index 31874ad8..9db46e0e 100644 --- a/src/eu/alefzero/owncloud/ui/activity/AuthenticatorActivity.java +++ b/src/eu/alefzero/owncloud/ui/activity/AuthenticatorActivity.java @@ -29,9 +29,11 @@ import android.app.ProgressDialog; import android.content.ContentResolver; import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; +import android.preference.PreferenceManager; import android.text.InputType; import android.util.Log; import android.view.View; @@ -98,15 +100,25 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity { try { url = new URL(message); } catch (MalformedURLException e) { - // should never happend + // should never happen Log.e(getClass().getName(), "Malformed URL: " + message); return; } String username = username_text.getText().toString().trim(); - Account account = new Account(username + "@" + url.getHost(), AccountAuthenticator.ACCOUNT_TYPE); + String accountName = username + "@" + url.getHost(); + Account account = new Account(accountName, AccountAuthenticator.ACCOUNT_TYPE); AccountManager accManager = AccountManager.get(this); accManager.addAccountExplicitly(account, password_text.getText().toString(), null); + + // Add this account as default in the preferences, if there is none already + SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this); + String defaultAccountName = appPreferences.getString("select_oc_account", null); + if(defaultAccountName == null){ + SharedPreferences.Editor editor = appPreferences.edit(); + editor.putString("select_oc_account", accountName); + editor.commit(); + } final Intent intent = new Intent(); intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, AccountAuthenticator.ACCOUNT_TYPE); @@ -114,7 +126,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity { intent.putExtra(AccountManager.KEY_AUTHTOKEN, AccountAuthenticator.ACCOUNT_TYPE); accManager.setUserData(account, AccountAuthenticator.KEY_OC_URL, url.toString()); - // TODO prepare this URL during a central service + // TODO prepare this URL using a central service intent.putExtra(AccountManager.KEY_USERDATA, username); accManager.setUserData(account, AccountAuthenticator.KEY_CONTACT_URL, url.toString().replace(AuthUtils.WEBDAV_PATH_2_0, AuthUtils.CARDDAV_PATH_2_0) diff --git a/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java b/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java index 7a79a915..e13ce678 100644 --- a/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java +++ b/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java @@ -23,12 +23,10 @@ import android.accounts.AccountManager; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; -import android.content.Intent; import android.content.DialogInterface.OnCancelListener; -import android.content.res.Configuration; +import android.content.Intent; import android.os.Bundle; import android.support.v4.app.ActionBar; -import android.support.v4.app.FragmentTransaction; import android.support.v4.app.ActionBar.OnNavigationListener; import android.support.v4.view.Menu; import android.support.v4.view.MenuItem; @@ -37,7 +35,6 @@ import android.widget.ArrayAdapter; import eu.alefzero.owncloud.R; import eu.alefzero.owncloud.R.id; import eu.alefzero.owncloud.authenticator.AccountAuthenticator; -import eu.alefzero.owncloud.ui.fragment.FileDetail; import eu.alefzero.owncloud.ui.fragment.FileList; /** @@ -70,13 +67,6 @@ public class FileDisplayActivity extends android.support.v4.app.FragmentActivity action_bar.setNavigationMode(android.support.v4.app.ActionBar.NAVIGATION_MODE_LIST); action_bar.setDisplayShowTitleEnabled(false); action_bar.setListNavigationCallbacks(mDirectories, this); - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - ft.add(R.id.file_list_container, new FileList()); - if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { - ft.add(R.id.fileDetail, new FileDetail()); - } - ft.commit(); } @Override diff --git a/src/eu/alefzero/owncloud/ui/activity/Preferences.java b/src/eu/alefzero/owncloud/ui/activity/Preferences.java index 46cabcf3..1e35896c 100644 --- a/src/eu/alefzero/owncloud/ui/activity/Preferences.java +++ b/src/eu/alefzero/owncloud/ui/activity/Preferences.java @@ -23,11 +23,15 @@ import java.util.Vector; import eu.alefzero.owncloud.OwnCloudSession; import eu.alefzero.owncloud.R; +import eu.alefzero.owncloud.authenticator.AccountAuthenticator; import eu.alefzero.owncloud.db.DbHandler; +import android.accounts.Account; +import android.accounts.AccountManager; import android.app.Activity; import android.content.Intent; import android.os.Bundle; +import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; @@ -46,11 +50,12 @@ import android.widget.AdapterView.AdapterContextMenuInfo; * */ public class Preferences extends PreferenceActivity { - private String TAG = "OwnCloudPreferences"; + private static final String TAG = "OwnCloudPreferences"; private final int mNewSession = 47; private final int mEditSession = 48; private DbHandler mDbHandler; private Vector mSessions; + private Account[] mAccounts; private int mSelectedMenuItem; @Override @@ -60,6 +65,7 @@ public class Preferences extends PreferenceActivity { mSessions = new Vector(); addPreferencesFromResource(R.xml.preferences); registerForContextMenu(getListView()); + populateAccountList(); //populateSessionList(); } @@ -76,13 +82,32 @@ public class Preferences extends PreferenceActivity { try { uri = new URI(mSessions.get(i).getUrl()); } catch (URISyntaxException e) { - e.printStackTrace(); // should never happend + e.printStackTrace(); // should never happen continue; } preference.setSummary(uri.getScheme() + "://" + uri.getHost()+uri.getPath()); ps.addPreference(preference); } } + + /** + * Populates the account selector + */ + private void populateAccountList(){ + AccountManager accMan = AccountManager.get(this); + mAccounts = accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE); + ListPreference accountList = (ListPreference) findPreference("select_oc_account"); + + // Transform accounts into array of string for preferences to use + String[] accNames = new String[mAccounts.length]; + for(int i = 0; i < mAccounts.length; i++){ + Account account = mAccounts[i]; + accNames[i] = account.name; + } + + accountList.setEntries(accNames); + accountList.setEntryValues(accNames); + } @Override public boolean onCreateOptionsMenu(Menu menu) { diff --git a/src/eu/alefzero/owncloud/ui/adapter/LandingScreenAdapter.java b/src/eu/alefzero/owncloud/ui/adapter/LandingScreenAdapter.java index 694225d5..914ed438 100644 --- a/src/eu/alefzero/owncloud/ui/adapter/LandingScreenAdapter.java +++ b/src/eu/alefzero/owncloud/ui/adapter/LandingScreenAdapter.java @@ -26,6 +26,7 @@ import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import eu.alefzero.owncloud.R; +import eu.alefzero.owncloud.authenticator.AuthUtils; import eu.alefzero.owncloud.ui.activity.FileDisplayActivity; import eu.alefzero.owncloud.ui.activity.Preferences; @@ -65,9 +66,15 @@ public class LandingScreenAdapter extends BaseAdapter { */ public Object getItem(int position) { Intent intent = new Intent(); + switch (position) { case 0: - intent.setClass(mContext, FileDisplayActivity.class); + /* + * The FileDisplayActivity requires the ownCloud account as an parcableExtra. + * We will put in the one that is selected in the preferences + */ + intent.setClass(mContext, FileDisplayActivity.class); + intent.putExtra("ACCOUNT", AuthUtils.getCurrentOwnCloudAccount(mContext)); break; case 5: intent.setClass(mContext, Preferences.class); @@ -100,5 +107,4 @@ public class LandingScreenAdapter extends BaseAdapter { } return convertView; } - } diff --git a/src/eu/alefzero/owncloud/ui/fragment/FileDetail.java b/src/eu/alefzero/owncloud/ui/fragment/FileDetail.java index 23c90dc3..4786bef9 100644 --- a/src/eu/alefzero/owncloud/ui/fragment/FileDetail.java +++ b/src/eu/alefzero/owncloud/ui/fragment/FileDetail.java @@ -66,7 +66,7 @@ public class FileDetail extends Fragment implements OnClickListener { null); c.moveToFirst(); - // retrive details from DB + // Retrieve details from DB String filename = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_NAME)); String mimetype = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_CONTENT_TYPE)); String path = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_STORAGE_PATH));