Эх сурвалжийг харах

Make account selectable from preferences

Lennart Rosam 13 жил өмнө
parent
commit
4cbe903b8a

+ 9 - 9
.classpath

@@ -3,15 +3,15 @@
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="gen"/>
 	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
-	<classpathentry kind="lib" path="lib/commons-codec-1.4.jar"/>
-	<classpathentry kind="lib" path="lib/commons-logging-1.1.1.jar"/>
-	<classpathentry kind="lib" path="lib/commons-httpclient-3.0.1.jar"/>
-	<classpathentry kind="lib" path="lib/commons-io-2.0.1.jar"/>
-	<classpathentry kind="lib" path="lib/commons-httpclient-contrib-3.0.jar"/>
-	<classpathentry kind="lib" path="lib/httpclient-4.1.2.jar"/>
-	<classpathentry kind="lib" path="lib/httpcore-4.1.2.jar"/>
-	<classpathentry kind="lib" path="lib/httpmime-4.1.2.jar"/>
-	<classpathentry kind="lib" path="lib/httpclient-cache-4.1.2.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-codec-1.4.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-logging-1.1.1.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-httpclient-3.0.1.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-io-2.0.1.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-httpclient-contrib-3.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/httpclient-4.1.2.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/httpcore-4.1.2.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/httpmime-4.1.2.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/httpclient-cache-4.1.2.jar"/>
 	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
 	<classpathentry kind="output" path="bin/classes"/>
 </classpath>

+ 1 - 1
AndroidManifest.xml

@@ -60,7 +60,7 @@
                 android:resource="@xml/syncadapter_files"/>
         </service>
          <provider android:name=".cp" android:enabled="true" android:syncable="true" android:exported="false" android:authorities="org.owncloud" android:label="@string/sync_string_files"></provider>
-         <activity android:name=".ui.activity.AuthenticatorActivity"></activity>
+         <activity android:name=".ui.activity.AuthenticatorActivity" android:theme="@style/Theme.ownCloud"></activity>
          <service android:name=".FileDownloader">
          </service>
          <activity android:name=".ui.activity.FileDetailActivity"></activity>

+ 32 - 0
res/layout-large-land/files.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:background="#F7F7F7"
+    android:orientation="vertical" >
+
+    <LinearLayout
+        android:id="@+id/linearLayout1"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:orientation="horizontal" >
+
+        <LinearLayout
+            android:id="@+id/file_list_container"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content" 
+            android:layout_weight="1">
+        </LinearLayout>
+
+        <fragment
+            android:id="@+id/fileDetail"
+            android:layout_width="0dp"
+            android:layout_height="fill_parent"
+            android:layout_weight="2"
+            class="eu.alefzero.owncloud.ui.fragment.FileDetail" >
+
+            <!-- Preview: layout=@layout/file_details -->
+        </fragment>
+    </LinearLayout>
+
+</LinearLayout>

+ 0 - 9
res/layout-port/files.xml

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:background="#F7F7F7"
-    android:orientation="vertical" 
-    android:id="@+id/file_list_container">
-
-</LinearLayout>

+ 0 - 24
res/layout-port/landing_page_item.xml

@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent" >
-
-    <ImageView
-        android:id="@+id/gridImage"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignParentTop="true"
-        android:layout_centerHorizontal="true"
-        android:src="@drawable/action_item_btn" />
-


-    <TextView
-        android:id="@+id/gridText"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_below="@+id/gridImage"
-        android:layout_centerHorizontal="true"
-        android:text="Medium Text"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:textColor="@color/setup_text_hint" />
-
-</RelativeLayout>

+ 0 - 22
res/layout-port/main.xml

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:orientation="vertical" >
-    
-    <GridView
-        android:id="@+id/homeScreenGrid"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        android:layout_gravity="center_horizontal"
-        android:columnWidth="90dp"
-        android:gravity="center"
-        android:horizontalSpacing="10dp"
-        android:numColumns="2"
-        android:stretchMode="columnWidth"
-        android:verticalSpacing="10dp" >
-    </GridView>
-
-    
-
-</LinearLayout>

+ 2 - 25
res/layout/files.xml

@@ -3,30 +3,7 @@
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:background="#F7F7F7"
-    android:orientation="vertical" >
-
-    <LinearLayout
-        android:id="@+id/linearLayout1"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        android:orientation="horizontal" >
-
-        <LinearLayout
-            android:id="@+id/file_list_container"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content" 
-            android:layout_weight="1">
-        </LinearLayout>
-
-        <fragment
-            android:id="@+id/fileDetail"
-            android:layout_width="0dp"
-            android:layout_height="fill_parent"
-            android:layout_weight="2"
-            class="eu.alefzero.owncloud.ui.fragment.FileDetail" >
-
-            <!-- Preview: layout=@layout/file_details -->
-        </fragment>
-    </LinearLayout>
+    android:orientation="vertical" 
+    android:id="@+id/file_list_container">
 
 </LinearLayout>

+ 7 - 9
res/layout/landing_page_item.xml

@@ -2,25 +2,23 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent" >
-    
-    <ImageView 
+
+    <ImageView
         android:id="@+id/gridImage"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentTop="true"
-        android:layout_centerVertical="true"
-        android:src="@drawable/action_item_btn"
-        />
-    
+        android:layout_centerHorizontal="true"
+        android:src="@drawable/action_item_btn" />
+


     <TextView
         android:id="@+id/gridText"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_toRightOf="@+id/gridImage"
-        android:layout_centerVertical="true"
+        android:layout_below="@+id/gridImage"
+        android:layout_centerHorizontal="true"
         android:text="Medium Text"
         android:textAppearance="?android:attr/textAppearanceMedium"
         android:textColor="@color/setup_text_hint" />
-    
 
 </RelativeLayout>

+ 17 - 17
res/layout/main.xml

@@ -1,23 +1,23 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
     android:orientation="vertical" >
+    
+    <GridView
+        android:id="@+id/homeScreenGrid"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:layout_gravity="center_horizontal"
+        android:columnWidth="90dp"
+        android:gravity="center"
+        android:horizontalSpacing="20dp"
+        android:verticalSpacing="20dp"
+        android:layout_marginTop="20dp"
+        android:numColumns="2"
+        android:stretchMode="columnWidth" >
+    </GridView>
 
-    <LinearLayout
-        android:id="@+id/linearLayout1"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="horizontal" >
-
-        <fragment
-            android:id="@+id/landingPage"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            class="eu.alefzero.owncloud.ui.fragment.LandingPageFragment" >
-
-            <!-- Preview: layout=@layout/landing_page_fragment -->
-        </fragment>
-    </LinearLayout>
+    
 
 </LinearLayout>

+ 3 - 0
res/values/strings.xml

@@ -17,6 +17,9 @@
     <string name="prefs_general">General</string>
     <string name="prefs_sessions">Stored sessions</string>
     <string name="prefs_add_session">Add new session</string>
+    <string name="prefs_create_img_thumbnails">Create image thumbnails</string>
+    <string name="prefs_select_oc_account">Select an account</string>
+    <string name="prefs_summary_select_oc_account">Choose, which of your accounts the app should use.</string>
     <string name="new_session_id">Session Name</string>
     <string name="new_session_url">URL</string>
     <string name="new_session_username">Username</string>

+ 14 - 3
res/xml/preferences.xml

@@ -1,4 +1,15 @@
 <?xml version="1.0" encoding="utf-8"?>
-    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-        <CheckBoxPreference android:title="Create images thumbnails" android:key="create_thumbnails"></CheckBoxPreference>
-    </PreferenceScreen>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <CheckBoxPreference
+        android:key="create_thumbnails"
+        android:title="@string/prefs_create_img_thumbnails" 
+        />
+    
+    <ListPreference
+        android:key="select_oc_account"
+        android:title="@string/prefs_select_oc_account"
+        android:summary="@string/prefs_summary_select_oc_account" 
+        />
+
+</PreferenceScreen>

+ 29 - 0
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;
+  }
 }

+ 15 - 3
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)

+ 1 - 11
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

+ 27 - 2
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<OwnCloudSession> mSessions;
+  private Account[] mAccounts;
   private int mSelectedMenuItem;
   
   @Override
@@ -60,6 +65,7 @@ public class Preferences extends PreferenceActivity {
     mSessions = new Vector<OwnCloudSession>();
     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) {

+ 8 - 2
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;
 	}
-
 }

+ 1 - 1
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));