Răsfoiți Sursa

Merge branch 'setup_multiaccount' into setup_app_name

Conflicts:
	res/values/setup.xml
	src/com/owncloud/android/authentication/AccountAuthenticator.java
masensio 11 ani în urmă
părinte
comite
31f6e61f89

+ 3 - 0
res/values/setup.xml

@@ -22,4 +22,7 @@
     <color name="actionbar_start_color">#1D2D44</color>
     <color name="actionbar_end_color">#1D2D44</color>
     
+    <!-- Multiaccount support -->
+    <bool name="multiaccount_support">true</bool>
+    
 </resources>

+ 1 - 0
res/values/strings.xml

@@ -216,6 +216,7 @@
 	<string name="auth_connecting_auth_server">Connecting to authentication server…</string>
 	<string name="auth_follow_auth_server">Follow instructions above to get authenticated</string>
 	<string name="auth_unsupported_auth_method">The server does not support this authentication method</string>    
+	<string name="auth_unsupported_multiaccount">This version of ownCloud doesn\'t support multiaccount</string>
     
     <string name="crashlog_message">Application terminated unexpectedly. Would you like to submit a crash report?</string>
     <string name="crashlog_send_report">Send report</string>

+ 50 - 17
src/com/owncloud/android/authentication/AccountAuthenticator.java

@@ -22,9 +22,15 @@ import android.accounts.*;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.Handler;
+import android.widget.Toast;
+
 import com.owncloud.android.Log_OC;
 import com.owncloud.android.MainApp;
 
+import com.owncloud.android.R;
+
+
 /**
  *  Authenticator for ownCloud accounts.
  * 
@@ -86,10 +92,13 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
     private static final String TAG = AccountAuthenticator.class.getSimpleName();
     
     private Context mContext;
+    
+    private Handler mHandler;
 
     public AccountAuthenticator(Context context) {
         super(context);
         mContext = context;
+        mHandler = new Handler();
     }
 
     /**
@@ -102,25 +111,49 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
             throws NetworkErrorException {
         Log_OC.i(TAG, "Adding account with type " + accountType
                 + " and auth token " + authTokenType);
-        try {
-            validateAccountType(accountType);
-        } catch (AuthenticatorException e) {
-            Log_OC.e(TAG, "Failed to validate account type " + accountType + ": "
-                    + e.getMessage());
-            e.printStackTrace();
-            return e.getFailureBundle();
-        }
-        final Intent intent = new Intent(mContext, AuthenticatorActivity.class);
-        intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
-        intent.putExtra(KEY_AUTH_TOKEN_TYPE, authTokenType);
-        intent.putExtra(KEY_REQUIRED_FEATURES, requiredFeatures);
-        intent.putExtra(KEY_LOGIN_OPTIONS, options);
-        intent.putExtra(AuthenticatorActivity.EXTRA_ACTION, AuthenticatorActivity.ACTION_CREATE);
-
-        setIntentFlags(intent);
         
         final Bundle bundle = new Bundle();
-        bundle.putParcelable(AccountManager.KEY_INTENT, intent);
+        
+        AccountManager accountManager = AccountManager.get(mContext);
+        Account[] accounts = accountManager.getAccountsByType(MainApp.getAccountType());
+        
+        if (mContext.getResources().getBoolean(R.bool.multiaccount_support) || accounts.length < 1) {
+            try {
+                validateAccountType(accountType);
+            } catch (AuthenticatorException e) {
+                Log_OC.e(TAG, "Failed to validate account type " + accountType + ": "
+                        + e.getMessage());
+                e.printStackTrace();
+                return e.getFailureBundle();
+            }
+            
+            final Intent intent = new Intent(mContext, AuthenticatorActivity.class);
+            intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
+            intent.putExtra(KEY_AUTH_TOKEN_TYPE, authTokenType);
+            intent.putExtra(KEY_REQUIRED_FEATURES, requiredFeatures);
+            intent.putExtra(KEY_LOGIN_OPTIONS, options);
+            intent.putExtra(AuthenticatorActivity.EXTRA_ACTION, AuthenticatorActivity.ACTION_CREATE);
+
+            setIntentFlags(intent);
+            
+            bundle.putParcelable(AccountManager.KEY_INTENT, intent);
+        
+        } else {
+
+            // Return an error
+            bundle.putInt(AccountManager.KEY_ERROR_CODE, AccountManager.ERROR_CODE_UNSUPPORTED_OPERATION);
+            bundle.putString(AccountManager.KEY_ERROR_MESSAGE, mContext.getString(R.string.auth_unsupported_multiaccount));
+           
+            mHandler.post(new Runnable() {
+
+                @Override
+                public void run() {
+                    Toast.makeText(mContext, R.string.auth_unsupported_multiaccount, Toast.LENGTH_SHORT).show();
+                }
+            });
+            
+        }
+        
         return bundle;
     }
 

+ 1 - 0
src/com/owncloud/android/authentication/AuthenticatorActivity.java

@@ -49,6 +49,7 @@ import android.widget.CheckBox;
 import android.widget.EditText;
 import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
+import android.widget.Toast;
 
 import com.actionbarsherlock.app.SherlockDialogFragment;
 import com.owncloud.android.Log_OC;

+ 6 - 3
src/com/owncloud/android/ui/activity/AccountSelectActivity.java

@@ -111,8 +111,11 @@ public class AccountSelectActivity extends SherlockListActivity implements
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
-        MenuInflater inflater = getSherlock().getMenuInflater();
-        inflater.inflate(R.menu.account_picker, menu);
+        // Show Create Account if Multiaccount is enabled
+        if (getResources().getBoolean(R.bool.multiaccount_support)) {
+            MenuInflater inflater = getSherlock().getMenuInflater();
+            inflater.inflate(R.menu.account_picker, menu);
+        }
         return true;
     }
 
@@ -147,7 +150,6 @@ public class AccountSelectActivity extends SherlockListActivity implements
                             this, 
                             null,                        
                             null);
-            
             return true;
         }
         return false;
@@ -212,6 +214,7 @@ public class AccountSelectActivity extends SherlockListActivity implements
                 android.R.layout.simple_list_item_single_choice,
                 new String[] { "NAME" }, new int[] { android.R.id.text1 }));
         registerForContextMenu(getListView());
+        
     }
 
     @Override