am e494a81f
: Merge "Restricted account visibility" into jb-mr2-dev
* commit 'e494a81f9b2727edd1c537f34bf0ea83b2fb0097': Restricted account visibility
This commit is contained in:
@ -858,6 +858,7 @@ package android {
|
||||
field public static final int resource = 16842789; // 0x1010025
|
||||
field public static final int restoreAnyVersion = 16843450; // 0x10102ba
|
||||
field public static final deprecated int restoreNeedsApplication = 16843421; // 0x101029d
|
||||
field public static final int restrictedAccountType = 16843733; // 0x10103d5
|
||||
field public static final int right = 16843183; // 0x10101af
|
||||
field public static final int ringtonePreferenceStyle = 16842899; // 0x1010093
|
||||
field public static final int ringtoneType = 16843257; // 0x10101f9
|
||||
|
@ -221,6 +221,9 @@ public class PackageInfo implements Parcelable {
|
||||
/** @hide */
|
||||
public boolean requiredForAllUsers;
|
||||
|
||||
/** @hide */
|
||||
public String restrictedAccountType;
|
||||
|
||||
public PackageInfo() {
|
||||
}
|
||||
|
||||
@ -262,6 +265,7 @@ public class PackageInfo implements Parcelable {
|
||||
dest.writeTypedArray(reqFeatures, parcelableFlags);
|
||||
dest.writeInt(installLocation);
|
||||
dest.writeInt(requiredForAllUsers ? 1 : 0);
|
||||
dest.writeString(restrictedAccountType);
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<PackageInfo> CREATOR
|
||||
@ -301,5 +305,6 @@ public class PackageInfo implements Parcelable {
|
||||
reqFeatures = source.createTypedArray(FeatureInfo.CREATOR);
|
||||
installLocation = source.readInt();
|
||||
requiredForAllUsers = source.readInt() != 0;
|
||||
restrictedAccountType = source.readString();
|
||||
}
|
||||
}
|
||||
|
@ -290,6 +290,7 @@ public class PackageParser {
|
||||
pi.applicationInfo = generateApplicationInfo(p, flags, state, userId);
|
||||
pi.installLocation = p.installLocation;
|
||||
pi.requiredForAllUsers = p.mRequiredForAllUsers;
|
||||
pi.restrictedAccountType = p.mRestrictedAccountType;
|
||||
pi.firstInstallTime = firstInstallTime;
|
||||
pi.lastUpdateTime = lastUpdateTime;
|
||||
if ((flags&PackageManager.GET_GIDS) != 0) {
|
||||
@ -1764,6 +1765,11 @@ public class PackageParser {
|
||||
false)) {
|
||||
owner.mRequiredForAllUsers = true;
|
||||
}
|
||||
String accountType = sa.getString(com.android.internal.R.styleable
|
||||
.AndroidManifestApplication_restrictedAccountType);
|
||||
if (accountType != null && accountType.length() > 0) {
|
||||
owner.mRestrictedAccountType = accountType;
|
||||
}
|
||||
}
|
||||
|
||||
if (sa.getBoolean(
|
||||
@ -3191,6 +3197,7 @@ public class PackageParser {
|
||||
}
|
||||
|
||||
public final static class Package {
|
||||
|
||||
public String packageName;
|
||||
|
||||
// For now we only support one application per package.
|
||||
@ -3278,6 +3285,9 @@ public class PackageParser {
|
||||
/* An app that's required for all users and cannot be uninstalled for a user */
|
||||
public boolean mRequiredForAllUsers;
|
||||
|
||||
/* The restricted account authenticator type that is used by this application */
|
||||
public String mRestrictedAccountType;
|
||||
|
||||
/**
|
||||
* Digest suitable for comparing whether this package's manifest is the
|
||||
* same as another.
|
||||
|
@ -889,6 +889,11 @@
|
||||
<!-- Declare that your application will be able to deal with RTL (right to left) layouts.
|
||||
If set to false (default value), your application will not care about RTL layouts. -->
|
||||
<attr name="supportsRtl" format="boolean" />
|
||||
<!-- Declare that this application requires access to restricted accounts of a certain
|
||||
type. The default value is null and restricted accounts won\'t be visible to this
|
||||
application. The type should correspond to the account authenticator type, such as
|
||||
"com.google" -->
|
||||
<attr name="restrictedAccountType" format="string"/>
|
||||
</declare-styleable>
|
||||
|
||||
<!-- The <code>permission</code> tag declares a security permission that can be
|
||||
|
@ -2041,6 +2041,7 @@
|
||||
<public type="attr" name="indicatorEnd" />
|
||||
<public type="attr" name="childIndicatorStart" />
|
||||
<public type="attr" name="childIndicatorEnd" />
|
||||
<public type="attr" name="restrictedAccountType" />
|
||||
|
||||
<public type="style" name="Theme.NoTitleBar.Overscan" />
|
||||
<public type="style" name="Theme.Light.NoTitleBar.Overscan" />
|
||||
|
@ -2708,7 +2708,7 @@ public class AccountManagerService
|
||||
}
|
||||
if (mUserManager.getUserInfo(userAccounts.userId).isRestricted()) {
|
||||
String[] packages = mPackageManager.getPackagesForUid(callingUid);
|
||||
// If any of the packages includes a white listed package, return the full set,
|
||||
// If any of the packages is a white listed package, return the full set,
|
||||
// otherwise return non-shared accounts only.
|
||||
// This might be a temporary way to specify a whitelist
|
||||
String whiteList = mContext.getResources().getString(
|
||||
@ -2721,16 +2721,30 @@ public class AccountManagerService
|
||||
ArrayList<Account> allowed = new ArrayList<Account>();
|
||||
Account[] sharedAccounts = getSharedAccountsAsUser(userAccounts.userId);
|
||||
if (sharedAccounts == null || sharedAccounts.length == 0) return unfiltered;
|
||||
for (Account account : unfiltered) {
|
||||
boolean found = false;
|
||||
for (Account shared : sharedAccounts) {
|
||||
if (shared.equals(account)) {
|
||||
found = true;
|
||||
break;
|
||||
String requiredAccountType = "";
|
||||
try {
|
||||
for (String packageName : packages) {
|
||||
PackageInfo pi = mPackageManager.getPackageInfo(packageName, 0);
|
||||
if (pi != null && pi.restrictedAccountType != null) {
|
||||
requiredAccountType = pi.restrictedAccountType;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
} catch (NameNotFoundException nnfe) {
|
||||
}
|
||||
for (Account account : unfiltered) {
|
||||
if (account.type.equals(requiredAccountType)) {
|
||||
allowed.add(account);
|
||||
} else {
|
||||
boolean found = false;
|
||||
for (Account shared : sharedAccounts) {
|
||||
if (shared.equals(account)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
allowed.add(account);
|
||||
}
|
||||
}
|
||||
}
|
||||
Account[] filtered = new Account[allowed.size()];
|
||||
|
Reference in New Issue
Block a user