Merge branch 'setup_multiaccount' into setup_app_name

Conflicts:
	res/values/setup.xml
	src/com/owncloud/android/authentication/AccountAuthenticator.java
This commit is contained in:
masensio 2013-10-18 12:32:22 +02:00
commit 31f6e61f89
5 changed files with 61 additions and 20 deletions

View file

@ -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>

View file

@ -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>

View file

@ -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;
}

View file

@ -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;

View file

@ -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