Merge "Allows affiliated profile owners to start activities in the background" into udc-dev
This commit is contained in:
@@ -49,6 +49,14 @@ public abstract class DeviceStateCache {
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isUserOrganizationManaged(@UserIdInt int userHandle);
|
public abstract boolean isUserOrganizationManaged(@UserIdInt int userHandle);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether a user has affiliated IDs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public boolean hasAffiliationWithDevice(int userId) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Empty implementation.
|
* Empty implementation.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -584,6 +584,11 @@ public abstract class ActivityTaskManagerInternal {
|
|||||||
*/
|
*/
|
||||||
public abstract void setDeviceOwnerUid(int uid);
|
public abstract void setDeviceOwnerUid(int uid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by DevicePolicyManagerService to set the uids of the profile owners.
|
||||||
|
*/
|
||||||
|
public abstract void setProfileOwnerUids(Set<Integer> uids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set all associated companion app that belongs to a userId.
|
* Set all associated companion app that belongs to a userId.
|
||||||
* @param userId
|
* @param userId
|
||||||
|
|||||||
@@ -158,6 +158,7 @@ import android.app.PictureInPictureUiState;
|
|||||||
import android.app.ProfilerInfo;
|
import android.app.ProfilerInfo;
|
||||||
import android.app.WaitResult;
|
import android.app.WaitResult;
|
||||||
import android.app.admin.DevicePolicyCache;
|
import android.app.admin.DevicePolicyCache;
|
||||||
|
import android.app.admin.DeviceStateCache;
|
||||||
import android.app.assist.ActivityId;
|
import android.app.assist.ActivityId;
|
||||||
import android.app.assist.AssistContent;
|
import android.app.assist.AssistContent;
|
||||||
import android.app.assist.AssistStructure;
|
import android.app.assist.AssistStructure;
|
||||||
@@ -783,6 +784,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
|||||||
|
|
||||||
private int mDeviceOwnerUid = Process.INVALID_UID;
|
private int mDeviceOwnerUid = Process.INVALID_UID;
|
||||||
|
|
||||||
|
private Set<Integer> mProfileOwnerUids = new ArraySet<Integer>();
|
||||||
|
|
||||||
private final class SettingObserver extends ContentObserver {
|
private final class SettingObserver extends ContentObserver {
|
||||||
private final Uri mFontScaleUri = Settings.System.getUriFor(FONT_SCALE);
|
private final Uri mFontScaleUri = Settings.System.getUriFor(FONT_SCALE);
|
||||||
private final Uri mHideErrorDialogsUri = Settings.Global.getUriFor(HIDE_ERROR_DIALOGS);
|
private final Uri mHideErrorDialogsUri = Settings.Global.getUriFor(HIDE_ERROR_DIALOGS);
|
||||||
@@ -5360,6 +5363,15 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
|||||||
mDeviceOwnerUid = uid;
|
mDeviceOwnerUid = uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isAffiliatedProfileOwner(int uid) {
|
||||||
|
return uid >= 0 && mProfileOwnerUids.contains(uid)
|
||||||
|
&& DeviceStateCache.getInstance().hasAffiliationWithDevice(UserHandle.getUserId(uid));
|
||||||
|
}
|
||||||
|
|
||||||
|
void setProfileOwnerUids(Set<Integer> uids) {
|
||||||
|
mProfileOwnerUids = uids;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Saves the current activity manager state and includes the saved state in the next dump of
|
* Saves the current activity manager state and includes the saved state in the next dump of
|
||||||
* activity manager.
|
* activity manager.
|
||||||
@@ -6915,6 +6927,13 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProfileOwnerUids(Set<Integer> uids) {
|
||||||
|
synchronized (mGlobalLock) {
|
||||||
|
ActivityTaskManagerService.this.setProfileOwnerUids(uids);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCompanionAppUids(int userId, Set<Integer> companionAppUids) {
|
public void setCompanionAppUids(int userId, Set<Integer> companionAppUids) {
|
||||||
synchronized (mGlobalLock) {
|
synchronized (mGlobalLock) {
|
||||||
|
|||||||
@@ -342,6 +342,14 @@ public class BackgroundActivityStartController {
|
|||||||
/*background*/ true, callingUid, realCallingUid,
|
/*background*/ true, callingUid, realCallingUid,
|
||||||
intent, "Device Owner");
|
intent, "Device Owner");
|
||||||
}
|
}
|
||||||
|
// don't abort if the callingUid is a affiliated profile owner
|
||||||
|
if (mService.isAffiliatedProfileOwner(callingUid)) {
|
||||||
|
return logStartAllowedAndReturnCode(
|
||||||
|
BAL_ALLOW_ALLOWLISTED_COMPONENT,
|
||||||
|
resultIfPiSenderAllowsBal, balAllowedByPiSender,
|
||||||
|
/*background*/ true, callingUid, realCallingUid,
|
||||||
|
intent, "Affiliated Profile Owner");
|
||||||
|
}
|
||||||
// don't abort if the callingUid has companion device
|
// don't abort if the callingUid has companion device
|
||||||
final int callingUserId = UserHandle.getUserId(callingUid);
|
final int callingUserId = UserHandle.getUserId(callingUid);
|
||||||
if (mService.isAssociatedCompanionApp(callingUserId, callingUid)) {
|
if (mService.isAssociatedCompanionApp(callingUserId, callingUid)) {
|
||||||
|
|||||||
@@ -10329,6 +10329,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
|||||||
policy.mSecondaryLockscreenEnabled = false;
|
policy.mSecondaryLockscreenEnabled = false;
|
||||||
policy.mUserProvisioningState = DevicePolicyManager.STATE_USER_UNMANAGED;
|
policy.mUserProvisioningState = DevicePolicyManager.STATE_USER_UNMANAGED;
|
||||||
policy.mAffiliationIds.clear();
|
policy.mAffiliationIds.clear();
|
||||||
|
resetAffiliationCacheLocked();
|
||||||
policy.mLockTaskPackages.clear();
|
policy.mLockTaskPackages.clear();
|
||||||
if (!isPolicyEngineForFinanceFlagEnabled()) {
|
if (!isPolicyEngineForFinanceFlagEnabled()) {
|
||||||
updateLockTaskPackagesLocked(mContext, policy.mLockTaskPackages, userId);
|
updateLockTaskPackagesLocked(mContext, policy.mLockTaskPackages, userId);
|
||||||
@@ -18022,10 +18023,16 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
|||||||
synchronized (getLockObject()) {
|
synchronized (getLockObject()) {
|
||||||
getUserData(callingUserId).mAffiliationIds = affiliationIds;
|
getUserData(callingUserId).mAffiliationIds = affiliationIds;
|
||||||
saveSettingsLocked(callingUserId);
|
saveSettingsLocked(callingUserId);
|
||||||
if (callingUserId != UserHandle.USER_SYSTEM && isDeviceOwner(admin, callingUserId)) {
|
mStateCache.setHasAffiliationWithDevice(callingUserId,
|
||||||
|
isUserAffiliatedWithDeviceLocked(callingUserId));
|
||||||
|
if (callingUserId == UserHandle.USER_SYSTEM) {
|
||||||
|
resetAffiliationCacheLocked();
|
||||||
|
} else if (callingUserId != UserHandle.USER_SYSTEM && isDeviceOwner(admin,
|
||||||
|
callingUserId)) {
|
||||||
// Affiliation ids specified by the device owner are additionally stored in
|
// Affiliation ids specified by the device owner are additionally stored in
|
||||||
// UserHandle.USER_SYSTEM's DevicePolicyData.
|
// UserHandle.USER_SYSTEM's DevicePolicyData.
|
||||||
getUserData(UserHandle.USER_SYSTEM).mAffiliationIds = affiliationIds;
|
getUserData(UserHandle.USER_SYSTEM).mAffiliationIds = affiliationIds;
|
||||||
|
mStateCache.setHasAffiliationWithDevice(UserHandle.USER_SYSTEM, true);
|
||||||
saveSettingsLocked(UserHandle.USER_SYSTEM);
|
saveSettingsLocked(UserHandle.USER_SYSTEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -18039,6 +18046,15 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void resetAffiliationCacheLocked() {
|
||||||
|
mInjector.binderWithCleanCallingIdentity(() -> {
|
||||||
|
for (UserInfo user : mUserManager.getUsers()) {
|
||||||
|
mStateCache.setHasAffiliationWithDevice(user.id,
|
||||||
|
isUserAffiliatedWithDeviceLocked(user.id));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getAffiliationIds(ComponentName admin) {
|
public List<String> getAffiliationIds(ComponentName admin) {
|
||||||
if (!mHasFeature) {
|
if (!mHasFeature) {
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ public class DeviceStateCacheImpl extends DeviceStateCache {
|
|||||||
|
|
||||||
private AtomicInteger mDeviceOwnerType = new AtomicInteger(NO_DEVICE_OWNER);
|
private AtomicInteger mDeviceOwnerType = new AtomicInteger(NO_DEVICE_OWNER);
|
||||||
private Map<Integer, Boolean> mHasProfileOwner = new ConcurrentHashMap<>();
|
private Map<Integer, Boolean> mHasProfileOwner = new ConcurrentHashMap<>();
|
||||||
|
private Map<Integer, Boolean> mAffiliationWithDevice = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
|
||||||
@GuardedBy("mLock")
|
@GuardedBy("mLock")
|
||||||
private boolean mIsDeviceProvisioned = false;
|
private boolean mIsDeviceProvisioned = false;
|
||||||
@@ -70,6 +72,19 @@ public class DeviceStateCacheImpl extends DeviceStateCache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setHasAffiliationWithDevice(int userId, Boolean hasAffiliateProfileOwner) {
|
||||||
|
if (hasAffiliateProfileOwner) {
|
||||||
|
mAffiliationWithDevice.put(userId, true);
|
||||||
|
} else {
|
||||||
|
mAffiliationWithDevice.remove(userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasAffiliationWithDevice(int userId) {
|
||||||
|
return mAffiliationWithDevice.getOrDefault(userId, false);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isUserOrganizationManaged(@UserIdInt int userHandle) {
|
public boolean isUserOrganizationManaged(@UserIdInt int userHandle) {
|
||||||
if (mHasProfileOwner.getOrDefault(userHandle, false)
|
if (mHasProfileOwner.getOrDefault(userHandle, false)
|
||||||
|
|||||||
@@ -131,7 +131,8 @@ class Owners {
|
|||||||
}
|
}
|
||||||
|
|
||||||
notifyChangeLocked();
|
notifyChangeLocked();
|
||||||
pushToActivityTaskManagerLocked();
|
pushDeviceOwnerUidToActivityTaskManagerLocked();
|
||||||
|
pushProfileOwnerUidsToActivityTaskManagerLocked();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,10 +164,15 @@ class Owners {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GuardedBy("mData")
|
@GuardedBy("mData")
|
||||||
private void pushToActivityTaskManagerLocked() {
|
private void pushDeviceOwnerUidToActivityTaskManagerLocked() {
|
||||||
mActivityTaskManagerInternal.setDeviceOwnerUid(getDeviceOwnerUidLocked());
|
mActivityTaskManagerInternal.setDeviceOwnerUid(getDeviceOwnerUidLocked());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GuardedBy("mData")
|
||||||
|
private void pushProfileOwnerUidsToActivityTaskManagerLocked() {
|
||||||
|
mActivityTaskManagerInternal.setProfileOwnerUids(getProfileOwnerUidsLocked());
|
||||||
|
}
|
||||||
|
|
||||||
@GuardedBy("mData")
|
@GuardedBy("mData")
|
||||||
private void pushToActivityManagerLocked() {
|
private void pushToActivityManagerLocked() {
|
||||||
mActivityManagerInternal.setDeviceOwnerUid(getDeviceOwnerUidLocked());
|
mActivityManagerInternal.setDeviceOwnerUid(getDeviceOwnerUidLocked());
|
||||||
@@ -196,6 +202,11 @@ class Owners {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GuardedBy("mData")
|
||||||
|
Set<Integer> getProfileOwnerUidsLocked() {
|
||||||
|
return mData.mProfileOwners.keySet();
|
||||||
|
}
|
||||||
|
|
||||||
String getDeviceOwnerPackageName() {
|
String getDeviceOwnerPackageName() {
|
||||||
synchronized (mData) {
|
synchronized (mData) {
|
||||||
return mData.mDeviceOwner != null ? mData.mDeviceOwner.packageName : null;
|
return mData.mDeviceOwner != null ? mData.mDeviceOwner.packageName : null;
|
||||||
@@ -263,7 +274,7 @@ class Owners {
|
|||||||
}
|
}
|
||||||
|
|
||||||
notifyChangeLocked();
|
notifyChangeLocked();
|
||||||
pushToActivityTaskManagerLocked();
|
pushDeviceOwnerUidToActivityTaskManagerLocked();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,7 +293,7 @@ class Owners {
|
|||||||
mUserManagerInternal.setDeviceManaged(false);
|
mUserManagerInternal.setDeviceManaged(false);
|
||||||
}
|
}
|
||||||
notifyChangeLocked();
|
notifyChangeLocked();
|
||||||
pushToActivityTaskManagerLocked();
|
pushDeviceOwnerUidToActivityTaskManagerLocked();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,6 +313,7 @@ class Owners {
|
|||||||
mUserManagerInternal.setUserManaged(userId, true);
|
mUserManagerInternal.setUserManaged(userId, true);
|
||||||
}
|
}
|
||||||
notifyChangeLocked();
|
notifyChangeLocked();
|
||||||
|
pushProfileOwnerUidsToActivityTaskManagerLocked();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,6 +329,7 @@ class Owners {
|
|||||||
mUserManagerInternal.setUserManaged(userId, false);
|
mUserManagerInternal.setUserManaged(userId, false);
|
||||||
}
|
}
|
||||||
notifyChangeLocked();
|
notifyChangeLocked();
|
||||||
|
pushProfileOwnerUidsToActivityTaskManagerLocked();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,6 +341,7 @@ class Owners {
|
|||||||
ownerInfo.isOrganizationOwnedDevice);
|
ownerInfo.isOrganizationOwnedDevice);
|
||||||
mData.mProfileOwners.put(userId, newOwnerInfo);
|
mData.mProfileOwners.put(userId, newOwnerInfo);
|
||||||
notifyChangeLocked();
|
notifyChangeLocked();
|
||||||
|
pushProfileOwnerUidsToActivityTaskManagerLocked();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -345,7 +359,7 @@ class Owners {
|
|||||||
mData.mDeviceOwner.packageName, previousDeviceOwnerType);
|
mData.mDeviceOwner.packageName, previousDeviceOwnerType);
|
||||||
}
|
}
|
||||||
notifyChangeLocked();
|
notifyChangeLocked();
|
||||||
pushToActivityTaskManagerLocked();
|
pushDeviceOwnerUidToActivityTaskManagerLocked();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -645,7 +645,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
runAndVerifyBackgroundActivityStartsSubtest("allowed_noStartsAborted", false,
|
runAndVerifyBackgroundActivityStartsSubtest("allowed_noStartsAborted", false,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, false, false, false, false);
|
false, false, false, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -659,7 +659,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"disallowed_unsupportedUsecase_aborted", true,
|
"disallowed_unsupportedUsecase_aborted", true,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, false, false, false, false);
|
false, false, false, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -673,7 +673,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"disallowed_callingUidProcessStateTop_aborted", true,
|
"disallowed_callingUidProcessStateTop_aborted", true,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, false, false, false, false);
|
false, false, false, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -687,7 +687,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"disallowed_realCallingUidProcessStateTop_aborted", true,
|
"disallowed_realCallingUidProcessStateTop_aborted", true,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_TOP,
|
||||||
false, false, false, false, false, false, false);
|
false, false, false, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -701,7 +701,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"disallowed_hasForegroundActivities_aborted", true,
|
"disallowed_hasForegroundActivities_aborted", true,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
true, false, false, false, false, false, false);
|
true, false, false, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -715,7 +715,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"disallowed_pinned_singleinstance_aborted", true,
|
"disallowed_pinned_singleinstance_aborted", true,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, false, false, true, false);
|
false, false, false, false, false, false, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -729,7 +729,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
runAndVerifyBackgroundActivityStartsSubtest("disallowed_rootUid_notAborted", false,
|
runAndVerifyBackgroundActivityStartsSubtest("disallowed_rootUid_notAborted", false,
|
||||||
Process.ROOT_UID, false, PROCESS_STATE_BOUND_TOP,
|
Process.ROOT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, false, false, false, false);
|
false, false, false, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -743,7 +743,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
runAndVerifyBackgroundActivityStartsSubtest("disallowed_systemUid_notAborted", false,
|
runAndVerifyBackgroundActivityStartsSubtest("disallowed_systemUid_notAborted", false,
|
||||||
Process.SYSTEM_UID, false, PROCESS_STATE_BOUND_TOP,
|
Process.SYSTEM_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, false, false, false, false);
|
false, false, false, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -757,7 +757,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
runAndVerifyBackgroundActivityStartsSubtest("disallowed_nfcUid_notAborted", false,
|
runAndVerifyBackgroundActivityStartsSubtest("disallowed_nfcUid_notAborted", false,
|
||||||
Process.NFC_UID, false, PROCESS_STATE_BOUND_TOP,
|
Process.NFC_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, false, false, false, false);
|
false, false, false, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -772,7 +772,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"disallowed_callingUidHasVisibleWindow_notAborted", false,
|
"disallowed_callingUidHasVisibleWindow_notAborted", false,
|
||||||
UNIMPORTANT_UID, true, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, true, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, false, false, false, false);
|
false, false, false, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -788,7 +788,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"disallowed_realCallingUidHasVisibleWindow_abortedInU", true,
|
"disallowed_realCallingUidHasVisibleWindow_abortedInU", true,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, true, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, true, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, false, false, false, false);
|
false, false, false, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -803,7 +803,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"disallowed_callerIsRecents_notAborted", false,
|
"disallowed_callerIsRecents_notAborted", false,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, true, false, false, false, false, false);
|
false, true, false, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -818,7 +818,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"disallowed_callerIsAllowed_notAborted", false,
|
"disallowed_callerIsAllowed_notAborted", false,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, true, false, false, false, false);
|
false, false, true, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -834,7 +834,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
false,
|
false,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, true, false, false, false);
|
false, false, false, true, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -850,7 +850,23 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"disallowed_callingPackageNameIsDeviceOwner_notAborted", false,
|
"disallowed_callingPackageNameIsDeviceOwner_notAborted", false,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, false, true, false, false);
|
false, false, false, false, true, false, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This test ensures that supported usecases aren't aborted when background starts are
|
||||||
|
* disallowed. Each scenarios tests one condition that makes them supported in isolation. In
|
||||||
|
* this case the caller is a affiliated profile owner.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void
|
||||||
|
testBackgroundActivityStartsDisallowed_isAffiliatedProfileOwnerNotAborted() {
|
||||||
|
doReturn(false).when(mAtm).isBackgroundActivityStartsEnabled();
|
||||||
|
runAndVerifyBackgroundActivityStartsSubtest(
|
||||||
|
"disallowed_callingUidIsAffiliatedProfileOwner_notAborted", false,
|
||||||
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
|
false, false, false, false, false, true, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -865,7 +881,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"disallowed_callerHasSystemExemptAppOpNotAborted", false,
|
"disallowed_callerHasSystemExemptAppOpNotAborted", false,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, false, false, false, true);
|
false, false, false, false, false, false, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -881,7 +897,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"disallowed_callingPackageNameIsIme_notAborted", false,
|
"disallowed_callingPackageNameIsIme_notAborted", false,
|
||||||
CURRENT_IME_UID, false, PROCESS_STATE_BOUND_TOP,
|
CURRENT_IME_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, false, false, false, false, false, false);
|
false, false, false, false, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -902,7 +918,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"allowed_notAborted", false,
|
"allowed_notAborted", false,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID2, false, PROCESS_STATE_BOUND_TOP,
|
||||||
false, true, false, false, false, false, false);
|
false, true, false, false, false, false, false, false);
|
||||||
verify(() -> FrameworkStatsLog.write(FrameworkStatsLog.BAL_ALLOWED,
|
verify(() -> FrameworkStatsLog.write(FrameworkStatsLog.BAL_ALLOWED,
|
||||||
"", // activity name
|
"", // activity name
|
||||||
BackgroundActivityStartController.BAL_ALLOW_PERMISSION,
|
BackgroundActivityStartController.BAL_ALLOW_PERMISSION,
|
||||||
@@ -933,7 +949,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
"allowed_notAborted", false,
|
"allowed_notAborted", false,
|
||||||
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,
|
||||||
Process.SYSTEM_UID, true, PROCESS_STATE_BOUND_TOP,
|
Process.SYSTEM_UID, true, PROCESS_STATE_BOUND_TOP,
|
||||||
false, true, false, false, false, false, false);
|
false, true, false, false, false, false, false, false);
|
||||||
verify(() -> FrameworkStatsLog.write(FrameworkStatsLog.BAL_ALLOWED,
|
verify(() -> FrameworkStatsLog.write(FrameworkStatsLog.BAL_ALLOWED,
|
||||||
DEFAULT_COMPONENT_PACKAGE_NAME + "/" + DEFAULT_COMPONENT_PACKAGE_NAME,
|
DEFAULT_COMPONENT_PACKAGE_NAME + "/" + DEFAULT_COMPONENT_PACKAGE_NAME,
|
||||||
BackgroundActivityStartController.BAL_ALLOW_PENDING_INTENT,
|
BackgroundActivityStartController.BAL_ALLOW_PENDING_INTENT,
|
||||||
@@ -949,6 +965,7 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
boolean callerIsTempAllowed,
|
boolean callerIsTempAllowed,
|
||||||
boolean callerIsInstrumentingWithBackgroundActivityStartPrivileges,
|
boolean callerIsInstrumentingWithBackgroundActivityStartPrivileges,
|
||||||
boolean isCallingUidDeviceOwner,
|
boolean isCallingUidDeviceOwner,
|
||||||
|
boolean isCallingUidAffiliatedProfileOwner,
|
||||||
boolean isPinnedSingleInstance,
|
boolean isPinnedSingleInstance,
|
||||||
boolean hasSystemExemptAppOp) {
|
boolean hasSystemExemptAppOp) {
|
||||||
// window visibility
|
// window visibility
|
||||||
@@ -982,6 +999,9 @@ public class ActivityStarterTests extends WindowTestsBase {
|
|||||||
callerIsInstrumentingWithBackgroundActivityStartPrivileges);
|
callerIsInstrumentingWithBackgroundActivityStartPrivileges);
|
||||||
// callingUid is the device owner
|
// callingUid is the device owner
|
||||||
doReturn(isCallingUidDeviceOwner).when(mAtm).isDeviceOwner(callingUid);
|
doReturn(isCallingUidDeviceOwner).when(mAtm).isDeviceOwner(callingUid);
|
||||||
|
// callingUid is the affiliated profile owner
|
||||||
|
doReturn(isCallingUidAffiliatedProfileOwner).when(mAtm)
|
||||||
|
.isAffiliatedProfileOwner(callingUid);
|
||||||
|
|
||||||
// caller has OP_SYSTEM_EXEMPT_FROM_ACTIVITY_BG_START_RESTRICTION appop
|
// caller has OP_SYSTEM_EXEMPT_FROM_ACTIVITY_BG_START_RESTRICTION appop
|
||||||
doReturn(hasSystemExemptAppOp ? AppOpsManager.MODE_ALLOWED
|
doReturn(hasSystemExemptAppOp ? AppOpsManager.MODE_ALLOWED
|
||||||
|
|||||||
Reference in New Issue
Block a user