Loading apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java +11 −11 Original line number Diff line number Diff line Loading @@ -472,7 +472,7 @@ public final class JobStatus { if (standbyBucket == RESTRICTED_INDEX) { addDynamicConstraints(DYNAMIC_RESTRICTED_CONSTRAINTS); } else { mReadyDynamicSatisfied = true; mReadyDynamicSatisfied = false; } mLastSuccessfulRunTime = lastSuccessfulRunTime; Loading Loading @@ -1132,8 +1132,8 @@ public final class JobStatus { } satisfiedConstraints = (satisfiedConstraints&~constraint) | (state ? constraint : 0); mSatisfiedConstraintsOfInterest = satisfiedConstraints & CONSTRAINTS_OF_INTEREST; mReadyDynamicSatisfied = mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); mReadyDynamicSatisfied = mDynamicConstraints != 0 && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); if (STATS_LOG_ENABLED && (STATSD_CONSTRAINTS_TO_LOG & constraint) != 0) { FrameworkStatsLog.write_non_chained( FrameworkStatsLog.SCHEDULED_JOB_CONSTRAINT_CHANGED, Loading Loading @@ -1184,8 +1184,8 @@ public final class JobStatus { } mDynamicConstraints |= constraints; mReadyDynamicSatisfied = mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); mReadyDynamicSatisfied = mDynamicConstraints != 0 && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); } /** Loading @@ -1196,8 +1196,8 @@ public final class JobStatus { */ private void removeDynamicConstraints(int constraints) { mDynamicConstraints &= ~constraints; mReadyDynamicSatisfied = mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); mReadyDynamicSatisfied = mDynamicConstraints != 0 && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); } public long getLastSuccessfulRunTime() { Loading Loading @@ -1241,8 +1241,8 @@ public final class JobStatus { break; default: satisfied |= constraint; mReadyDynamicSatisfied = mDynamicConstraints == (satisfied & mDynamicConstraints); mReadyDynamicSatisfied = mDynamicConstraints != 0 && mDynamicConstraints == (satisfied & mDynamicConstraints); break; } Loading @@ -1262,8 +1262,8 @@ public final class JobStatus { mReadyWithinQuota = oldValue; break; default: mReadyDynamicSatisfied = mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); mReadyDynamicSatisfied = mDynamicConstraints != 0 && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); break; } return toReturn; Loading apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java +28 −8 Original line number Diff line number Diff line Loading @@ -241,10 +241,11 @@ public final class QuotaController extends StateController { + "bgJobCountInMaxPeriod=" + bgJobCountInMaxPeriod + ", " + "sessionCountInWindow=" + sessionCountInWindow + ", " + "inQuotaTime=" + inQuotaTimeElapsed + ", " + "jobCountExpirationTime=" + jobRateLimitExpirationTimeElapsed + ", " + "jobCountInRateLimitingWindow=" + jobCountInRateLimitingWindow + ", " + "sessionCountExpirationTime=" + sessionRateLimitExpirationTimeElapsed + ", " + "sessionCountInRateLimitingWindow=" + sessionCountInRateLimitingWindow; + "rateLimitJobCountExpirationTime=" + jobRateLimitExpirationTimeElapsed + ", " + "rateLimitJobCountWindow=" + jobCountInRateLimitingWindow + ", " + "rateLimitSessionCountExpirationTime=" + sessionRateLimitExpirationTimeElapsed + ", " + "rateLimitSessionCountWindow=" + sessionCountInRateLimitingWindow; } @Override Loading Loading @@ -863,12 +864,19 @@ public final class QuotaController extends StateController { stats.executionTimeInMaxPeriodMs = 0; stats.bgJobCountInMaxPeriod = 0; stats.sessionCountInWindow = 0; if (stats.jobCountLimit == 0 || stats.sessionCountLimit == 0) { // App won't be in quota until configuration changes. stats.inQuotaTimeElapsed = Long.MAX_VALUE; } else { stats.inQuotaTimeElapsed = 0; } Timer timer = mPkgTimers.get(userId, packageName); final long nowElapsed = sElapsedRealtimeClock.millis(); stats.expirationTimeElapsed = nowElapsed + MAX_PERIOD_MS; if (timer != null && timer.isActive()) { // Exclude active sessions from the session count so that new jobs aren't prevented // from starting due to an app hitting the session limit. stats.executionTimeInWindowMs = stats.executionTimeInMaxPeriodMs = timer.getCurrentDuration(nowElapsed); stats.bgJobCountInWindow = stats.bgJobCountInMaxPeriod = timer.getBgJobCount(); Loading @@ -883,6 +891,10 @@ public final class QuotaController extends StateController { stats.inQuotaTimeElapsed = Math.max(stats.inQuotaTimeElapsed, nowElapsed - mMaxExecutionTimeIntoQuotaMs + MAX_PERIOD_MS); } if (stats.bgJobCountInWindow >= stats.jobCountLimit) { stats.inQuotaTimeElapsed = Math.max(stats.inQuotaTimeElapsed, nowElapsed + stats.windowSizeMs); } } List<TimingSession> sessions = mTimingSessions.get(userId, packageName); Loading Loading @@ -1303,6 +1315,13 @@ public final class QuotaController extends StateController { inQuotaTimeElapsed = Math.max(inQuotaTimeElapsed, stats.sessionRateLimitExpirationTimeElapsed); } if (inQuotaTimeElapsed <= sElapsedRealtimeClock.millis()) { final long nowElapsed = sElapsedRealtimeClock.millis(); Slog.wtf(TAG, "In quota time is " + (nowElapsed - inQuotaTimeElapsed) + "ms old. Now=" + nowElapsed + ", inQuotaTime=" + inQuotaTimeElapsed + ": " + stats); inQuotaTimeElapsed = nowElapsed + 5 * MINUTE_IN_MILLIS; } mInQuotaAlarmListener.addAlarmLocked(userId, packageName, inQuotaTimeElapsed); } Loading Loading @@ -1916,8 +1935,8 @@ public final class QuotaController extends StateController { @GuardedBy("mLock") private void setNextAlarmLocked(long earliestTriggerElapsed) { if (mAlarmQueue.size() > 0) { final long nextTriggerTimeElapsed = Math.max(earliestTriggerElapsed, mAlarmQueue.peek().second); final Pair<Package, Long> alarm = mAlarmQueue.peek(); final long nextTriggerTimeElapsed = Math.max(earliestTriggerElapsed, alarm.second); // Only schedule the alarm if one of the following is true: // 1. There isn't one currently scheduled // 2. The new alarm is significantly earlier than the previous alarm. If it's Loading @@ -1928,7 +1947,8 @@ public final class QuotaController extends StateController { || nextTriggerTimeElapsed < mTriggerTimeElapsed - 3 * MINUTE_IN_MILLIS || mTriggerTimeElapsed < nextTriggerTimeElapsed) { if (DEBUG) { Slog.d(TAG, "Scheduling start alarm at " + nextTriggerTimeElapsed); Slog.d(TAG, "Scheduling start alarm at " + nextTriggerTimeElapsed + " for app " + alarm.first); } mAlarmManager.set(AlarmManager.ELAPSED_REALTIME, nextTriggerTimeElapsed, ALARM_TAG_QUOTA_CHECK, this, mHandler); Loading apex/media/framework/java/android/media/MediaParser.java +2 −2 Original line number Diff line number Diff line Loading @@ -120,7 +120,7 @@ import java.util.UUID; * @Override * public void onTrackDataFound(int i, @NonNull TrackData trackData) { * MediaFormat mediaFormat = trackData.mediaFormat; * if (videoTrackIndex == -1 && * if (videoTrackIndex == -1 && * mediaFormat * .getString(MediaFormat.KEY_MIME, /* defaultValue= */ "") * .startsWith("video/")) { Loading Loading @@ -178,7 +178,7 @@ import java.util.UUID; * * private void ensureSpaceInBuffer(int numberOfBytesToRead) { * int requiredLength = bytesWrittenCount + numberOfBytesToRead; * if (requiredLength > sampleDataBuffer.length) { * if (requiredLength > sampleDataBuffer.length) { * sampleDataBuffer = Arrays.copyOf(sampleDataBuffer, requiredLength); * } * } Loading apex/sdkextensions/framework/java/android/os/ext/SdkExtensions.java +3 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,9 @@ public class SdkExtensions { private static final int R_EXTENSION_INT; static { // Note: when adding more extension versions, the logic that records current // extension versions when saving a rollback must also be updated. // At the time of writing this is in RollbackManagerServiceImpl#getExtensionVersions() R_EXTENSION_INT = SystemProperties.getInt("build.version.extensions.r", 0); } Loading api/test-current.txt +9 −4 Original line number Diff line number Diff line Loading @@ -732,6 +732,11 @@ package android.app.role { method public void onRoleHoldersChanged(@NonNull String, @NonNull android.os.UserHandle); } public class RoleControllerManager { method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void isApplicationVisibleForRole(@NonNull String, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void isRoleVisible(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); } public final class RoleManager { method @RequiresPermission("android.permission.OBSERVE_ROLE_HOLDERS") public void addOnRoleHoldersChangedListenerAsUser(@NonNull java.util.concurrent.Executor, @NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle); method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void addRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); Loading Loading @@ -5272,18 +5277,19 @@ package android.widget { package android.window { public final class DisplayAreaInfo implements android.os.Parcelable { ctor public DisplayAreaInfo(@NonNull android.window.WindowContainerToken, int); ctor public DisplayAreaInfo(@NonNull android.window.WindowContainerToken, int, int); method public int describeContents(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.window.DisplayAreaInfo> CREATOR; field @NonNull public final android.content.res.Configuration configuration; field public final int displayId; field public final int featureId; field @NonNull public final android.window.WindowContainerToken token; } public class DisplayAreaOrganizer extends android.window.WindowOrganizer { ctor public DisplayAreaOrganizer(); method public void onDisplayAreaAppeared(@NonNull android.window.DisplayAreaInfo); method public void onDisplayAreaAppeared(@NonNull android.window.DisplayAreaInfo, @NonNull android.view.SurfaceControl); method public void onDisplayAreaVanished(@NonNull android.window.DisplayAreaInfo); method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void registerOrganizer(int); field public static final int FEATURE_DEFAULT_TASK_CONTAINER = 1; // 0x1 Loading @@ -5303,7 +5309,7 @@ package android.window { method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static android.window.WindowContainerToken getImeTarget(int); method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static java.util.List<android.app.ActivityManager.RunningTaskInfo> getRootTasks(int, @NonNull int[]); method @BinderThread public void onBackPressedOnTaskRoot(@NonNull android.app.ActivityManager.RunningTaskInfo); method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo); method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo, @NonNull android.view.SurfaceControl); method @BinderThread public void onTaskInfoChanged(@NonNull android.app.ActivityManager.RunningTaskInfo); method @BinderThread public void onTaskVanished(@NonNull android.app.ActivityManager.RunningTaskInfo); method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public final void registerOrganizer(int); Loading @@ -5314,7 +5320,6 @@ package android.window { public final class WindowContainerToken implements android.os.Parcelable { method public int describeContents(); method @Nullable public android.view.SurfaceControl getLeash(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.window.WindowContainerToken> CREATOR; } Loading Loading
apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java +11 −11 Original line number Diff line number Diff line Loading @@ -472,7 +472,7 @@ public final class JobStatus { if (standbyBucket == RESTRICTED_INDEX) { addDynamicConstraints(DYNAMIC_RESTRICTED_CONSTRAINTS); } else { mReadyDynamicSatisfied = true; mReadyDynamicSatisfied = false; } mLastSuccessfulRunTime = lastSuccessfulRunTime; Loading Loading @@ -1132,8 +1132,8 @@ public final class JobStatus { } satisfiedConstraints = (satisfiedConstraints&~constraint) | (state ? constraint : 0); mSatisfiedConstraintsOfInterest = satisfiedConstraints & CONSTRAINTS_OF_INTEREST; mReadyDynamicSatisfied = mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); mReadyDynamicSatisfied = mDynamicConstraints != 0 && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); if (STATS_LOG_ENABLED && (STATSD_CONSTRAINTS_TO_LOG & constraint) != 0) { FrameworkStatsLog.write_non_chained( FrameworkStatsLog.SCHEDULED_JOB_CONSTRAINT_CHANGED, Loading Loading @@ -1184,8 +1184,8 @@ public final class JobStatus { } mDynamicConstraints |= constraints; mReadyDynamicSatisfied = mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); mReadyDynamicSatisfied = mDynamicConstraints != 0 && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); } /** Loading @@ -1196,8 +1196,8 @@ public final class JobStatus { */ private void removeDynamicConstraints(int constraints) { mDynamicConstraints &= ~constraints; mReadyDynamicSatisfied = mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); mReadyDynamicSatisfied = mDynamicConstraints != 0 && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); } public long getLastSuccessfulRunTime() { Loading Loading @@ -1241,8 +1241,8 @@ public final class JobStatus { break; default: satisfied |= constraint; mReadyDynamicSatisfied = mDynamicConstraints == (satisfied & mDynamicConstraints); mReadyDynamicSatisfied = mDynamicConstraints != 0 && mDynamicConstraints == (satisfied & mDynamicConstraints); break; } Loading @@ -1262,8 +1262,8 @@ public final class JobStatus { mReadyWithinQuota = oldValue; break; default: mReadyDynamicSatisfied = mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); mReadyDynamicSatisfied = mDynamicConstraints != 0 && mDynamicConstraints == (satisfiedConstraints & mDynamicConstraints); break; } return toReturn; Loading
apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java +28 −8 Original line number Diff line number Diff line Loading @@ -241,10 +241,11 @@ public final class QuotaController extends StateController { + "bgJobCountInMaxPeriod=" + bgJobCountInMaxPeriod + ", " + "sessionCountInWindow=" + sessionCountInWindow + ", " + "inQuotaTime=" + inQuotaTimeElapsed + ", " + "jobCountExpirationTime=" + jobRateLimitExpirationTimeElapsed + ", " + "jobCountInRateLimitingWindow=" + jobCountInRateLimitingWindow + ", " + "sessionCountExpirationTime=" + sessionRateLimitExpirationTimeElapsed + ", " + "sessionCountInRateLimitingWindow=" + sessionCountInRateLimitingWindow; + "rateLimitJobCountExpirationTime=" + jobRateLimitExpirationTimeElapsed + ", " + "rateLimitJobCountWindow=" + jobCountInRateLimitingWindow + ", " + "rateLimitSessionCountExpirationTime=" + sessionRateLimitExpirationTimeElapsed + ", " + "rateLimitSessionCountWindow=" + sessionCountInRateLimitingWindow; } @Override Loading Loading @@ -863,12 +864,19 @@ public final class QuotaController extends StateController { stats.executionTimeInMaxPeriodMs = 0; stats.bgJobCountInMaxPeriod = 0; stats.sessionCountInWindow = 0; if (stats.jobCountLimit == 0 || stats.sessionCountLimit == 0) { // App won't be in quota until configuration changes. stats.inQuotaTimeElapsed = Long.MAX_VALUE; } else { stats.inQuotaTimeElapsed = 0; } Timer timer = mPkgTimers.get(userId, packageName); final long nowElapsed = sElapsedRealtimeClock.millis(); stats.expirationTimeElapsed = nowElapsed + MAX_PERIOD_MS; if (timer != null && timer.isActive()) { // Exclude active sessions from the session count so that new jobs aren't prevented // from starting due to an app hitting the session limit. stats.executionTimeInWindowMs = stats.executionTimeInMaxPeriodMs = timer.getCurrentDuration(nowElapsed); stats.bgJobCountInWindow = stats.bgJobCountInMaxPeriod = timer.getBgJobCount(); Loading @@ -883,6 +891,10 @@ public final class QuotaController extends StateController { stats.inQuotaTimeElapsed = Math.max(stats.inQuotaTimeElapsed, nowElapsed - mMaxExecutionTimeIntoQuotaMs + MAX_PERIOD_MS); } if (stats.bgJobCountInWindow >= stats.jobCountLimit) { stats.inQuotaTimeElapsed = Math.max(stats.inQuotaTimeElapsed, nowElapsed + stats.windowSizeMs); } } List<TimingSession> sessions = mTimingSessions.get(userId, packageName); Loading Loading @@ -1303,6 +1315,13 @@ public final class QuotaController extends StateController { inQuotaTimeElapsed = Math.max(inQuotaTimeElapsed, stats.sessionRateLimitExpirationTimeElapsed); } if (inQuotaTimeElapsed <= sElapsedRealtimeClock.millis()) { final long nowElapsed = sElapsedRealtimeClock.millis(); Slog.wtf(TAG, "In quota time is " + (nowElapsed - inQuotaTimeElapsed) + "ms old. Now=" + nowElapsed + ", inQuotaTime=" + inQuotaTimeElapsed + ": " + stats); inQuotaTimeElapsed = nowElapsed + 5 * MINUTE_IN_MILLIS; } mInQuotaAlarmListener.addAlarmLocked(userId, packageName, inQuotaTimeElapsed); } Loading Loading @@ -1916,8 +1935,8 @@ public final class QuotaController extends StateController { @GuardedBy("mLock") private void setNextAlarmLocked(long earliestTriggerElapsed) { if (mAlarmQueue.size() > 0) { final long nextTriggerTimeElapsed = Math.max(earliestTriggerElapsed, mAlarmQueue.peek().second); final Pair<Package, Long> alarm = mAlarmQueue.peek(); final long nextTriggerTimeElapsed = Math.max(earliestTriggerElapsed, alarm.second); // Only schedule the alarm if one of the following is true: // 1. There isn't one currently scheduled // 2. The new alarm is significantly earlier than the previous alarm. If it's Loading @@ -1928,7 +1947,8 @@ public final class QuotaController extends StateController { || nextTriggerTimeElapsed < mTriggerTimeElapsed - 3 * MINUTE_IN_MILLIS || mTriggerTimeElapsed < nextTriggerTimeElapsed) { if (DEBUG) { Slog.d(TAG, "Scheduling start alarm at " + nextTriggerTimeElapsed); Slog.d(TAG, "Scheduling start alarm at " + nextTriggerTimeElapsed + " for app " + alarm.first); } mAlarmManager.set(AlarmManager.ELAPSED_REALTIME, nextTriggerTimeElapsed, ALARM_TAG_QUOTA_CHECK, this, mHandler); Loading
apex/media/framework/java/android/media/MediaParser.java +2 −2 Original line number Diff line number Diff line Loading @@ -120,7 +120,7 @@ import java.util.UUID; * @Override * public void onTrackDataFound(int i, @NonNull TrackData trackData) { * MediaFormat mediaFormat = trackData.mediaFormat; * if (videoTrackIndex == -1 && * if (videoTrackIndex == -1 && * mediaFormat * .getString(MediaFormat.KEY_MIME, /* defaultValue= */ "") * .startsWith("video/")) { Loading Loading @@ -178,7 +178,7 @@ import java.util.UUID; * * private void ensureSpaceInBuffer(int numberOfBytesToRead) { * int requiredLength = bytesWrittenCount + numberOfBytesToRead; * if (requiredLength > sampleDataBuffer.length) { * if (requiredLength > sampleDataBuffer.length) { * sampleDataBuffer = Arrays.copyOf(sampleDataBuffer, requiredLength); * } * } Loading
apex/sdkextensions/framework/java/android/os/ext/SdkExtensions.java +3 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,9 @@ public class SdkExtensions { private static final int R_EXTENSION_INT; static { // Note: when adding more extension versions, the logic that records current // extension versions when saving a rollback must also be updated. // At the time of writing this is in RollbackManagerServiceImpl#getExtensionVersions() R_EXTENSION_INT = SystemProperties.getInt("build.version.extensions.r", 0); } Loading
api/test-current.txt +9 −4 Original line number Diff line number Diff line Loading @@ -732,6 +732,11 @@ package android.app.role { method public void onRoleHoldersChanged(@NonNull String, @NonNull android.os.UserHandle); } public class RoleControllerManager { method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void isApplicationVisibleForRole(@NonNull String, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void isRoleVisible(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); } public final class RoleManager { method @RequiresPermission("android.permission.OBSERVE_ROLE_HOLDERS") public void addOnRoleHoldersChangedListenerAsUser(@NonNull java.util.concurrent.Executor, @NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle); method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void addRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); Loading Loading @@ -5272,18 +5277,19 @@ package android.widget { package android.window { public final class DisplayAreaInfo implements android.os.Parcelable { ctor public DisplayAreaInfo(@NonNull android.window.WindowContainerToken, int); ctor public DisplayAreaInfo(@NonNull android.window.WindowContainerToken, int, int); method public int describeContents(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.window.DisplayAreaInfo> CREATOR; field @NonNull public final android.content.res.Configuration configuration; field public final int displayId; field public final int featureId; field @NonNull public final android.window.WindowContainerToken token; } public class DisplayAreaOrganizer extends android.window.WindowOrganizer { ctor public DisplayAreaOrganizer(); method public void onDisplayAreaAppeared(@NonNull android.window.DisplayAreaInfo); method public void onDisplayAreaAppeared(@NonNull android.window.DisplayAreaInfo, @NonNull android.view.SurfaceControl); method public void onDisplayAreaVanished(@NonNull android.window.DisplayAreaInfo); method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void registerOrganizer(int); field public static final int FEATURE_DEFAULT_TASK_CONTAINER = 1; // 0x1 Loading @@ -5303,7 +5309,7 @@ package android.window { method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static android.window.WindowContainerToken getImeTarget(int); method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public static java.util.List<android.app.ActivityManager.RunningTaskInfo> getRootTasks(int, @NonNull int[]); method @BinderThread public void onBackPressedOnTaskRoot(@NonNull android.app.ActivityManager.RunningTaskInfo); method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo); method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo, @NonNull android.view.SurfaceControl); method @BinderThread public void onTaskInfoChanged(@NonNull android.app.ActivityManager.RunningTaskInfo); method @BinderThread public void onTaskVanished(@NonNull android.app.ActivityManager.RunningTaskInfo); method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public final void registerOrganizer(int); Loading @@ -5314,7 +5320,6 @@ package android.window { public final class WindowContainerToken implements android.os.Parcelable { method public int describeContents(); method @Nullable public android.view.SurfaceControl getLeash(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.window.WindowContainerToken> CREATOR; } Loading