Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d881664 authored by Jorge Gil's avatar Jorge Gil Committed by Android (Google) Code Review
Browse files

Merge "[17/N] Desks: Adjust activity opacity calculation" into main

parents db00be6f c017e577
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -2952,13 +2952,16 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
        }

        private boolean isOpaqueInner(@NonNull WindowContainer<?> container) {
            // If it's a leaf task fragment, then opacity is calculated based on its activities.
            if (container.asTaskFragment() != null
                    && ((TaskFragment) container).isLeafTaskFragment()) {
            final boolean isActivity = container.asActivityRecord() != null;
            final boolean isLeafTaskFragment = container.asTaskFragment() != null
                    && ((TaskFragment) container).isLeafTaskFragment();
            if (isActivity || isLeafTaskFragment) {
                // When it is an activity or leaf task fragment, then opacity is calculated based
                // on itself or its activities.
                return container.getActivity(this,
                        true /* traverseTopToBottom */, null /* boundary */) != null;
            }
            // When not a leaf, it's considered opaque if any of its opaque children fill this
            // Otherwise, it's considered opaque if any of its opaque children fill this
            // container, unless the children are adjacent fragments, in which case as long as they
            // are all opaque then |container| is also considered opaque, even if the adjacent
            // task fragment aren't filling.
+26 −0
Original line number Diff line number Diff line
@@ -509,6 +509,32 @@ public class ActivityTaskSupervisorTests extends WindowTestsBase {
        assertThat(mSupervisor.mOpaqueContainerHelper.isOpaque(rootTask)).isTrue();
    }

    @Test
    public void testOpaque_nonLeafTaskFragmentWithDirectActivity_opaque() {
        final ActivityRecord directChildActivity = new ActivityBuilder(mAtm).setCreateTask(true)
                .build();
        directChildActivity.setOccludesParent(true);
        final Task nonLeafTask = directChildActivity.getTask();
        final TaskFragment directChildFragment = new TaskFragment(mAtm, new Binder(),
                true /* createdByOrganizer */, false /* isEmbedded */);
        nonLeafTask.addChild(directChildFragment, 0);

        assertThat(mSupervisor.mOpaqueContainerHelper.isOpaque(nonLeafTask)).isTrue();
    }

    @Test
    public void testOpaque_nonLeafTaskFragmentWithDirectActivity_transparent() {
        final ActivityRecord directChildActivity = new ActivityBuilder(mAtm).setCreateTask(true)
                .build();
        directChildActivity.setOccludesParent(false);
        final Task nonLeafTask = directChildActivity.getTask();
        final TaskFragment directChildFragment = new TaskFragment(mAtm, new Binder(),
                true /* createdByOrganizer */, false /* isEmbedded */);
        nonLeafTask.addChild(directChildFragment, 0);

        assertThat(mSupervisor.mOpaqueContainerHelper.isOpaque(nonLeafTask)).isFalse();
    }

    @NonNull
    private TaskFragment createChildTaskFragment(@NonNull Task parent,
            @WindowConfiguration.WindowingMode int windowingMode,