diff options
5 files changed, 80 insertions, 37 deletions
diff --git a/Android.bp b/Android.bp index 6c5acd2b416b..2321cc5dd61d 100644 --- a/Android.bp +++ b/Android.bp @@ -322,7 +322,6 @@ java_defaults { libs: [ "app-compat-annotations", "ext", - "framework-connectivity-annotations", "framework-updatable-stubs-module_libs_api", "unsupportedappusage", ], diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java index d8050ed5329d..7ebb646ba3eb 100644 --- a/core/java/android/net/NetworkPolicyManager.java +++ b/core/java/android/net/NetworkPolicyManager.java @@ -34,8 +34,6 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.Signature; -import android.net.ConnectivityAnnotations.MultipathPreference; -import android.net.ConnectivityAnnotations.RestrictBackgroundStatus; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.os.Build; @@ -465,7 +463,6 @@ public class NetworkPolicyManager { */ @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @RequiresPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) - @RestrictBackgroundStatus public int getRestrictBackgroundStatus(int uid) { try { return mService.getRestrictBackgroundStatus(uid); @@ -591,7 +588,6 @@ public class NetworkPolicyManager { */ @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @RequiresPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) - @MultipathPreference public int getMultipathPreference(@NonNull Network network) { try { return mService.getMultipathPreference(network); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java index 1a03ebd4caae..bdc8ff1f9882 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java @@ -347,8 +347,13 @@ public class StartingSurfaceDrawer { void makeTaskSnapshotWindow(StartingWindowInfo startingWindowInfo, IBinder appToken, TaskSnapshot snapshot) { final int taskId = startingWindowInfo.taskInfo.taskId; + // Remove any existing starting window for this task before adding. + removeWindowNoAnimate(taskId); final TaskSnapshotWindow surface = TaskSnapshotWindow.create(startingWindowInfo, appToken, snapshot, mSplashScreenExecutor, () -> removeWindowNoAnimate(taskId)); + if (surface == null) { + return; + } final StartingWindowRecord tView = new StartingWindowRecord(appToken, null/* decorView */, surface); mStartingWindowRecords.put(taskId, tView); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java index 8147b4775963..acf7f3367d71 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java @@ -45,6 +45,7 @@ import static com.android.internal.policy.DecorView.STATUS_BAR_COLOR_VIEW_ATTRIB import static com.android.internal.policy.DecorView.getNavigationBarRect; import android.annotation.BinderThread; +import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityManager.TaskDescription; @@ -141,7 +142,8 @@ public class TaskSnapshotWindow { private final float[] mTmpFloat9 = new float[9]; static TaskSnapshotWindow create(StartingWindowInfo info, IBinder appToken, - TaskSnapshot snapshot, ShellExecutor mainExecutor, Runnable clearWindowHandler) { + TaskSnapshot snapshot, ShellExecutor splashScreenExecutor, + @NonNull Runnable clearWindowHandler) { final ActivityManager.RunningTaskInfo runningTaskInfo = info.taskInfo; final int taskId = runningTaskInfo.taskId; if (DEBUG) { @@ -208,39 +210,38 @@ public class TaskSnapshotWindow { final TaskSnapshotWindow snapshotSurface = new TaskSnapshotWindow( surfaceControl, snapshot, layoutParams.getTitle(), taskDescription, appearance, windowFlags, windowPrivateFlags, taskBounds, orientation, - topWindowInsetsState, clearWindowHandler, mainExecutor); + topWindowInsetsState, clearWindowHandler, splashScreenExecutor); final Window window = snapshotSurface.mWindow; final InsetsState mTmpInsetsState = new InsetsState(); final InputChannel tmpInputChannel = new InputChannel(); - mainExecutor.execute(() -> { - try { - Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "TaskSnapshot#addToDisplay"); - final int res = session.addToDisplay(window, layoutParams, View.GONE, displayId, - mTmpInsetsState, tmpInputChannel, mTmpInsetsState, mTempControls); - Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); - if (res < 0) { - Slog.w(TAG, "Failed to add snapshot starting window res=" + res); - return; - } - } catch (RemoteException e) { - snapshotSurface.clearWindowSynced(); - } - window.setOuter(snapshotSurface); - try { - Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "TaskSnapshot#relayout"); - session.relayout(window, layoutParams, -1, -1, View.VISIBLE, 0, -1, - tmpFrames, tmpMergedConfiguration, surfaceControl, mTmpInsetsState, - mTempControls, TMP_SURFACE_SIZE); - Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); - } catch (RemoteException e) { - snapshotSurface.clearWindowSynced(); + + try { + Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "TaskSnapshot#addToDisplay"); + final int res = session.addToDisplay(window, layoutParams, View.GONE, displayId, + mTmpInsetsState, tmpInputChannel, mTmpInsetsState, mTempControls); + Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); + if (res < 0) { + Slog.w(TAG, "Failed to add snapshot starting window res=" + res); + return null; } + } catch (RemoteException e) { + snapshotSurface.clearWindowSynced(); + } + window.setOuter(snapshotSurface); + try { + Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "TaskSnapshot#relayout"); + session.relayout(window, layoutParams, -1, -1, View.VISIBLE, 0, -1, + tmpFrames, tmpMergedConfiguration, surfaceControl, mTmpInsetsState, + mTempControls, TMP_SURFACE_SIZE); + Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); + } catch (RemoteException e) { + snapshotSurface.clearWindowSynced(); + } - final Rect systemBarInsets = getSystemBarInsets(tmpFrames.frame, topWindowInsetsState); - snapshotSurface.setFrames(tmpFrames.frame, systemBarInsets); - snapshotSurface.drawSnapshot(); - }); + final Rect systemBarInsets = getSystemBarInsets(tmpFrames.frame, topWindowInsetsState); + snapshotSurface.setFrames(tmpFrames.frame, systemBarInsets); + snapshotSurface.drawSnapshot(); return snapshotSurface; } @@ -469,9 +470,7 @@ public class TaskSnapshotWindow { * Clear window from drawer, must be post on main executor. */ private void clearWindowSynced() { - if (mClearWindowHandler != null) { - mClearWindowHandler.run(); - } + mSplashScreenExecutor.executeDelayed(mClearWindowHandler, 0); } private void reportDrawn() { diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 1b48273e34a0..dddf3df63793 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -2086,12 +2086,19 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { // The following policies weren't available to PO, but will be available after migration. parentAdmin.disableCamera = doAdmin.disableCamera; - parentAdmin.requireAutoTime = doAdmin.requireAutoTime; parentAdmin.disableScreenCapture = doAdmin.disableScreenCapture; parentAdmin.accountTypesWithManagementDisabled.addAll( doAdmin.accountTypesWithManagementDisabled); moveDoUserRestrictionsToCopeParent(doAdmin, parentAdmin); + + // From Android 11, {@link setAutoTimeRequired} is no longer used. The user restriction + // {@link UserManager#DISALLOW_CONFIG_DATE_TIME} should be used to enforce auto time + // settings instead. + if (doAdmin.requireAutoTime) { + parentAdmin.ensureUserRestrictions().putBoolean( + UserManager.DISALLOW_CONFIG_DATE_TIME, true); + } } private void moveDoUserRestrictionsToCopeParent(ActiveAdmin doAdmin, ActiveAdmin parentAdmin) { @@ -2361,6 +2368,41 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { saveSettingsLocked(user.getIdentifier()); } + /** + * Fix left-over restrictions and auto-time policy during COMP -> COPE migration. + * + * When a COMP device with requireAutoTime policy set was migrated to an + * organization-owned profile, a DISALLOW_CONFIG_DATE_TIME restriction is set + * on user 0 from the DO user, which becomes unremovable by the organization-owned + * profile owner. Fix this by force removing that restriction. Also revert the + * parentAdmin.requireAutoTime bit (since the COPE PO cannot unset this bit) + * and replace it with DISALLOW_CONFIG_DATE_TIME on the correct + * admin, in line with the deprecation recommendation of setAutoTimeRequired(). + */ + private void fixupAutoTimeRestrictionDuringOrganizationOwnedDeviceMigration() { + for (UserInfo ui : mUserManager.getUsers()) { + final int userId = ui.id; + if (isProfileOwnerOfOrganizationOwnedDevice(userId)) { + final ActiveAdmin parent = getProfileOwnerAdminLocked(userId).parentAdmin; + if (parent != null && parent.requireAutoTime) { + // Remove deprecated requireAutoTime + parent.requireAutoTime = false; + saveSettingsLocked(userId); + + // Remove user restrictions set by the device owner before the upgrade to + // Android 11. + mUserManagerInternal.setDevicePolicyUserRestrictions(UserHandle.USER_SYSTEM, + new Bundle(), new RestrictionsSet(), /* isDeviceOwner */ false); + + // Apply user restriction to parent active admin instead + parent.ensureUserRestrictions().putBoolean( + UserManager.DISALLOW_CONFIG_DATE_TIME, true); + pushUserRestrictions(userId); + } + } + } + } + private ComponentName findAdminComponentWithPackageLocked(String packageName, int userId) { final DevicePolicyData policy = getUserData(userId); final int n = policy.mAdminList.size(); @@ -3020,6 +3062,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { private void onLockSettingsReady() { synchronized (getLockObject()) { migrateUserRestrictionsIfNecessaryLocked(); + fixupAutoTimeRestrictionDuringOrganizationOwnedDeviceMigration(); performPolicyVersionUpgrade(); } getUserData(UserHandle.USER_SYSTEM); @@ -8576,6 +8619,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { admin.defaultEnabledRestrictionsAlreadySet.clear(); admin.forceEphemeralUsers = false; admin.isNetworkLoggingEnabled = false; + admin.requireAutoTime = false; mUserManagerInternal.setForceEphemeralUsers(admin.forceEphemeralUsers); } final DevicePolicyData policyData = getUserData(userId); |