Merge "Make sure the PAC script content is sent again" into sc-dev
diff --git a/Android.bp b/Android.bp
index 6c5acd2..2321cc5 100644
--- a/Android.bp
+++ b/Android.bp
@@ -322,7 +322,6 @@
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 d8050ed..7ebb646 100644
--- a/core/java/android/net/NetworkPolicyManager.java
+++ b/core/java/android/net/NetworkPolicyManager.java
@@ -34,8 +34,6 @@
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 @@
*/
@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 @@
*/
@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 1a03ebd..bdc8ff1 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 @@
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 8147b47..acf7f33 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.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 @@
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 @@
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();
- }
- final Rect systemBarInsets = getSystemBarInsets(tmpFrames.frame, topWindowInsetsState);
- snapshotSurface.setFrames(tmpFrames.frame, systemBarInsets);
- snapshotSurface.drawSnapshot();
- });
+ 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();
return snapshotSurface;
}
@@ -469,9 +470,7 @@
* 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 1b48273..dddf3df 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 @@
// 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 @@
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 @@
private void onLockSettingsReady() {
synchronized (getLockObject()) {
migrateUserRestrictionsIfNecessaryLocked();
+ fixupAutoTimeRestrictionDuringOrganizationOwnedDeviceMigration();
performPolicyVersionUpgrade();
}
getUserData(UserHandle.USER_SYSTEM);
@@ -8576,6 +8619,7 @@
admin.defaultEnabledRestrictionsAlreadySet.clear();
admin.forceEphemeralUsers = false;
admin.isNetworkLoggingEnabled = false;
+ admin.requireAutoTime = false;
mUserManagerInternal.setForceEphemeralUsers(admin.forceEphemeralUsers);
}
final DevicePolicyData policyData = getUserData(userId);