Loading core/java/android/window/flags/windowing_frontend.aconfig +1 −0 Original line number Diff line number Diff line Loading @@ -19,4 +19,5 @@ flag { namespace: "windowing_frontend" description: "Refactor dim to fix flickers" bug: "281632483,295291019" is_fixed_read_only: true } No newline at end of file services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +11 −4 Original line number Diff line number Diff line Loading @@ -2832,17 +2832,22 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { static class OpaqueActivityHelper implements Predicate<ActivityRecord> { private ActivityRecord mStarting; private boolean mIncludeInvisibleAndFinishing; private boolean mIgnoringKeyguard; ActivityRecord getOpaqueActivity(@NonNull WindowContainer<?> container) { ActivityRecord getOpaqueActivity( @NonNull WindowContainer<?> container, boolean ignoringKeyguard) { mIncludeInvisibleAndFinishing = true; mIgnoringKeyguard = ignoringKeyguard; return container.getActivity(this, true /* traverseTopToBottom */, null /* boundary */); } ActivityRecord getVisibleOpaqueActivity(@NonNull WindowContainer<?> container, @Nullable ActivityRecord starting) { ActivityRecord getVisibleOpaqueActivity( @NonNull WindowContainer<?> container, @Nullable ActivityRecord starting, boolean ignoringKeyguard) { mStarting = starting; mIncludeInvisibleAndFinishing = false; mIgnoringKeyguard = ignoringKeyguard; final ActivityRecord opaque = container.getActivity(this, true /* traverseTopToBottom */, null /* boundary */); mStarting = null; Loading @@ -2851,7 +2856,9 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { @Override public boolean test(ActivityRecord r) { if (!mIncludeInvisibleAndFinishing && !r.visibleIgnoringKeyguard && r != mStarting) { if (!mIncludeInvisibleAndFinishing && r != mStarting && ((mIgnoringKeyguard && !r.visibleIgnoringKeyguard) || (!mIgnoringKeyguard && !r.isVisible()))) { // Ignore invisible activities that are not the currently starting activity // (about to be visible). return false; Loading services/core/java/com/android/server/wm/Task.java +3 −1 Original line number Diff line number Diff line Loading @@ -199,6 +199,7 @@ import com.android.server.Watchdog; import com.android.server.am.ActivityManagerService; import com.android.server.am.AppTimeTracker; import com.android.server.uri.NeededUriGrants; import com.android.window.flags.Flags; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; Loading Loading @@ -3307,7 +3308,8 @@ class Task extends TaskFragment { // Once at the root task level, we want to check {@link #isTranslucent(ActivityRecord)}. // If true, we want to get the Dimmer from the level above since we don't want to animate // the dim with the Task. if (!isRootTask() || isTranslucent(null)) { if (!isRootTask() || (Flags.dimmerRefactor() && isTranslucentAndVisible()) || isTranslucent(null)) { return super.getDimmer(); } Loading services/core/java/com/android/server/wm/TaskFragment.java +15 −2 Original line number Diff line number Diff line Loading @@ -989,7 +989,7 @@ class TaskFragment extends WindowContainer<WindowContainer> { // A TaskFragment isn't translucent if it has at least one visible activity that occludes // this TaskFragment. return mTaskSupervisor.mOpaqueActivityHelper.getVisibleOpaqueActivity(this, starting) == null; starting, true /* ignoringKeyguard */) == null; } /** Loading @@ -1002,7 +1002,20 @@ class TaskFragment extends WindowContainer<WindowContainer> { return true; } // Including finishing Activity if the TaskFragment is becoming invisible in the transition. return mTaskSupervisor.mOpaqueActivityHelper.getOpaqueActivity(this) == null; return mTaskSupervisor.mOpaqueActivityHelper.getOpaqueActivity(this, true /* ignoringKeyguard */) == null; } /** * Like {@link #isTranslucent(ActivityRecord)} but evaluating the actual visibility of the * windows rather than their visibility ignoring keyguard. */ boolean isTranslucentAndVisible() { if (!isAttached() || isForceHidden() || isForceTranslucent()) { return true; } return mTaskSupervisor.mOpaqueActivityHelper.getVisibleOpaqueActivity(this, null, false /* ignoringKeyguard */) == null; } ActivityRecord getTopNonFinishingActivity() { Loading services/core/java/com/android/server/wm/Transition.java +2 −2 Original line number Diff line number Diff line Loading @@ -418,8 +418,8 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { if (transientRoot == null) continue; final WindowContainer<?> rootParent = transientRoot.getParent(); if (rootParent == null || rootParent.getTopChild() == transientRoot) continue; final ActivityRecord topOpaque = mController.mAtm.mTaskSupervisor .mOpaqueActivityHelper.getOpaqueActivity(rootParent); final ActivityRecord topOpaque = mController.mAtm.mTaskSupervisor.mOpaqueActivityHelper .getOpaqueActivity(rootParent, true /* ignoringKeyguard */); if (transientRoot.compareTo(topOpaque.getRootTask()) < 0) { occludedCount++; } Loading Loading
core/java/android/window/flags/windowing_frontend.aconfig +1 −0 Original line number Diff line number Diff line Loading @@ -19,4 +19,5 @@ flag { namespace: "windowing_frontend" description: "Refactor dim to fix flickers" bug: "281632483,295291019" is_fixed_read_only: true } No newline at end of file
services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +11 −4 Original line number Diff line number Diff line Loading @@ -2832,17 +2832,22 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { static class OpaqueActivityHelper implements Predicate<ActivityRecord> { private ActivityRecord mStarting; private boolean mIncludeInvisibleAndFinishing; private boolean mIgnoringKeyguard; ActivityRecord getOpaqueActivity(@NonNull WindowContainer<?> container) { ActivityRecord getOpaqueActivity( @NonNull WindowContainer<?> container, boolean ignoringKeyguard) { mIncludeInvisibleAndFinishing = true; mIgnoringKeyguard = ignoringKeyguard; return container.getActivity(this, true /* traverseTopToBottom */, null /* boundary */); } ActivityRecord getVisibleOpaqueActivity(@NonNull WindowContainer<?> container, @Nullable ActivityRecord starting) { ActivityRecord getVisibleOpaqueActivity( @NonNull WindowContainer<?> container, @Nullable ActivityRecord starting, boolean ignoringKeyguard) { mStarting = starting; mIncludeInvisibleAndFinishing = false; mIgnoringKeyguard = ignoringKeyguard; final ActivityRecord opaque = container.getActivity(this, true /* traverseTopToBottom */, null /* boundary */); mStarting = null; Loading @@ -2851,7 +2856,9 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { @Override public boolean test(ActivityRecord r) { if (!mIncludeInvisibleAndFinishing && !r.visibleIgnoringKeyguard && r != mStarting) { if (!mIncludeInvisibleAndFinishing && r != mStarting && ((mIgnoringKeyguard && !r.visibleIgnoringKeyguard) || (!mIgnoringKeyguard && !r.isVisible()))) { // Ignore invisible activities that are not the currently starting activity // (about to be visible). return false; Loading
services/core/java/com/android/server/wm/Task.java +3 −1 Original line number Diff line number Diff line Loading @@ -199,6 +199,7 @@ import com.android.server.Watchdog; import com.android.server.am.ActivityManagerService; import com.android.server.am.AppTimeTracker; import com.android.server.uri.NeededUriGrants; import com.android.window.flags.Flags; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; Loading Loading @@ -3307,7 +3308,8 @@ class Task extends TaskFragment { // Once at the root task level, we want to check {@link #isTranslucent(ActivityRecord)}. // If true, we want to get the Dimmer from the level above since we don't want to animate // the dim with the Task. if (!isRootTask() || isTranslucent(null)) { if (!isRootTask() || (Flags.dimmerRefactor() && isTranslucentAndVisible()) || isTranslucent(null)) { return super.getDimmer(); } Loading
services/core/java/com/android/server/wm/TaskFragment.java +15 −2 Original line number Diff line number Diff line Loading @@ -989,7 +989,7 @@ class TaskFragment extends WindowContainer<WindowContainer> { // A TaskFragment isn't translucent if it has at least one visible activity that occludes // this TaskFragment. return mTaskSupervisor.mOpaqueActivityHelper.getVisibleOpaqueActivity(this, starting) == null; starting, true /* ignoringKeyguard */) == null; } /** Loading @@ -1002,7 +1002,20 @@ class TaskFragment extends WindowContainer<WindowContainer> { return true; } // Including finishing Activity if the TaskFragment is becoming invisible in the transition. return mTaskSupervisor.mOpaqueActivityHelper.getOpaqueActivity(this) == null; return mTaskSupervisor.mOpaqueActivityHelper.getOpaqueActivity(this, true /* ignoringKeyguard */) == null; } /** * Like {@link #isTranslucent(ActivityRecord)} but evaluating the actual visibility of the * windows rather than their visibility ignoring keyguard. */ boolean isTranslucentAndVisible() { if (!isAttached() || isForceHidden() || isForceTranslucent()) { return true; } return mTaskSupervisor.mOpaqueActivityHelper.getVisibleOpaqueActivity(this, null, false /* ignoringKeyguard */) == null; } ActivityRecord getTopNonFinishingActivity() { Loading
services/core/java/com/android/server/wm/Transition.java +2 −2 Original line number Diff line number Diff line Loading @@ -418,8 +418,8 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { if (transientRoot == null) continue; final WindowContainer<?> rootParent = transientRoot.getParent(); if (rootParent == null || rootParent.getTopChild() == transientRoot) continue; final ActivityRecord topOpaque = mController.mAtm.mTaskSupervisor .mOpaqueActivityHelper.getOpaqueActivity(rootParent); final ActivityRecord topOpaque = mController.mAtm.mTaskSupervisor.mOpaqueActivityHelper .getOpaqueActivity(rootParent, true /* ignoringKeyguard */); if (transientRoot.compareTo(topOpaque.getRootTask()) < 0) { occludedCount++; } Loading