Merge "Tolerate missing AccountManager resource, not just missing resource name"
This commit is contained in:
committed by
Android (Google) Code Review
commit
ceb889711f
@@ -26,7 +26,7 @@ import android.os.Bundle;
|
||||
* to handle the request then it can have the activity extend AccountAuthenticatorActivity.
|
||||
* The AbstractAccountAuthenticator passes in the response to the intent using the following:
|
||||
* <pre>
|
||||
* intent.putExtra(Constants.ACCOUNT_AUTHENTICATOR_RESPONSE_KEY, response);
|
||||
* intent.putExtra({@link AccountManager#KEY_ACCOUNT_AUTHENTICATOR_RESPONSE}, response);
|
||||
* </pre>
|
||||
* The activity then sets the result that is to be handed to the response via
|
||||
* {@link #setAccountAuthenticatorResult(android.os.Bundle)}.
|
||||
|
||||
@@ -179,6 +179,7 @@ public class AccountManager {
|
||||
public static final String KEY_PASSWORD = "password";
|
||||
|
||||
public static final String KEY_ACCOUNTS = "accounts";
|
||||
|
||||
public static final String KEY_ACCOUNT_AUTHENTICATOR_RESPONSE = "accountAuthenticatorResponse";
|
||||
public static final String KEY_ACCOUNT_MANAGER_RESPONSE = "accountManagerResponse";
|
||||
public static final String KEY_AUTHENTICATOR_TYPES = "authenticator_types";
|
||||
@@ -1269,7 +1270,7 @@ public class AccountManager {
|
||||
/** Handles the responses from the AccountManager */
|
||||
private class Response extends IAccountManagerResponse.Stub {
|
||||
public void onResult(Bundle bundle) {
|
||||
Intent intent = bundle.getParcelable("intent");
|
||||
Intent intent = bundle.getParcelable(KEY_INTENT);
|
||||
if (intent != null && mActivity != null) {
|
||||
// since the user provided an Activity we will silently start intents
|
||||
// that we see
|
||||
|
||||
@@ -37,6 +37,7 @@ import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.RegisteredServicesCache;
|
||||
import android.content.pm.RegisteredServicesCacheListener;
|
||||
import android.content.res.Resources;
|
||||
import android.database.Cursor;
|
||||
import android.database.DatabaseUtils;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
@@ -73,8 +74,7 @@ import java.util.concurrent.atomic.AtomicReference;
|
||||
* accounts on the device. Some of these calls are implemented with the help of the corresponding
|
||||
* {@link IAccountAuthenticator} services. This service is not accessed by users directly,
|
||||
* instead one uses an instance of {@link AccountManager}, which can be accessed as follows:
|
||||
* AccountManager accountManager =
|
||||
* (AccountManager)context.getSystemService(Context.ACCOUNT_SERVICE)
|
||||
* AccountManager accountManager = AccountManager.get(context);
|
||||
* @hide
|
||||
*/
|
||||
public class AccountManagerService
|
||||
@@ -1064,14 +1064,18 @@ public class AccountManagerService
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
throw new IllegalArgumentException("unknown account type: " + accountType);
|
||||
}
|
||||
return authContext.getString(serviceInfo.type.labelId);
|
||||
try {
|
||||
return authContext.getString(serviceInfo.type.labelId);
|
||||
} catch (Resources.NotFoundException e) {
|
||||
throw new IllegalArgumentException("unknown account type: " + accountType);
|
||||
}
|
||||
}
|
||||
|
||||
private Intent newGrantCredentialsPermissionIntent(Account account, int uid,
|
||||
AccountAuthenticatorResponse response, String authTokenType, String authTokenLabel) {
|
||||
|
||||
Intent intent = new Intent(mContext, GrantCredentialsPermissionActivity.class);
|
||||
// See FLAT_ACTIVITY_NEW_TASK docs for limitations and benefits of the flag.
|
||||
// See FLAG_ACTIVITY_NEW_TASK docs for limitations and benefits of the flag.
|
||||
// Since it was set in Eclair+ we can't change it without breaking apps using
|
||||
// the intent from a non-Activity context.
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
|
||||
@@ -18,6 +18,7 @@ package android.accounts;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
@@ -103,7 +104,12 @@ public class ChooseAccountActivity extends Activity {
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
// Nothing we can do much here, just log
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "No icon for account type " + accountType);
|
||||
Log.w(TAG, "No icon name for account type " + accountType);
|
||||
}
|
||||
} catch (Resources.NotFoundException e) {
|
||||
// Nothing we can do much here, just log
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "No icon resource for account type " + accountType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,12 @@ public class GrantCredentialsPermissionActivity extends Activity implements View
|
||||
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
|
||||
final Bundle extras = getIntent().getExtras();
|
||||
if (extras == null) {
|
||||
// we were somehow started with bad parameters. abort the activity.
|
||||
setResult(Activity.RESULT_CANCELED);
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
// Grant 'account'/'type' to mUID
|
||||
mAccount = extras.getParcelable(EXTRAS_ACCOUNT);
|
||||
@@ -73,8 +79,15 @@ public class GrantCredentialsPermissionActivity extends Activity implements View
|
||||
return;
|
||||
}
|
||||
|
||||
final String accountTypeLabel = accountManagerService.getAccountLabel(mAccount.type);
|
||||
|
||||
String accountTypeLabel;
|
||||
try {
|
||||
accountTypeLabel = accountManagerService.getAccountLabel(mAccount.type);
|
||||
} catch (IllegalArgumentException e) {
|
||||
// label or resource was missing. abort the activity.
|
||||
setResult(Activity.RESULT_CANCELED);
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
final TextView authTokenTypeView = (TextView) findViewById(R.id.authtoken_type);
|
||||
authTokenTypeView.setVisibility(View.GONE);
|
||||
|
||||
@@ -31,6 +31,8 @@ import android.util.Log;
|
||||
import dalvik.system.VMRuntime;
|
||||
import dalvik.system.Zygote;
|
||||
|
||||
import libcore.io.IoUtils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.IOException;
|
||||
@@ -304,6 +306,7 @@ public class ZygoteInit {
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Error reading " + PRELOADED_CLASSES + ".", e);
|
||||
} finally {
|
||||
IoUtils.closeQuietly(is);
|
||||
// Restore default.
|
||||
runtime.setTargetHeapUtilization(defaultUtilization);
|
||||
|
||||
|
||||
@@ -907,7 +907,7 @@ void AndroidRuntime::start(const char* className, const bool startSystemServer)
|
||||
blockSigpipe();
|
||||
|
||||
/*
|
||||
* 'startSystemServer == true' means runtime is obslete and not run from
|
||||
* 'startSystemServer == true' means runtime is obsolete and not run from
|
||||
* init.rc anymore, so we print out the boot start event here.
|
||||
*/
|
||||
if (startSystemServer) {
|
||||
|
||||
@@ -23,10 +23,13 @@ import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.charset.Charsets;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* {@hide}
|
||||
* @hide This should not be made public in its present form because it
|
||||
* assumes that private and secret key bytes are available and would
|
||||
* preclude the use of hardware crypto.
|
||||
*/
|
||||
public class KeyStore {
|
||||
public static final int NO_ERROR = 1;
|
||||
@@ -211,20 +214,10 @@ public class KeyStore {
|
||||
}
|
||||
|
||||
private static byte[] getBytes(String string) {
|
||||
try {
|
||||
return string.getBytes("UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
// will never happen
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return string.getBytes(Charsets.UTF_8);
|
||||
}
|
||||
|
||||
private static String toString(byte[] bytes) {
|
||||
try {
|
||||
return new String(bytes, "UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
// will never happen
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return new String(bytes, Charsets.UTF_8);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user