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

Commit 4c5adb32 authored by Chris Li's avatar Chris Li Committed by Android (Google) Code Review
Browse files

Merge "Fix onDisplayAreaInfoChanged called before onDisplayAreaAppeared" into main

parents 0cdbc034 ffa927e4
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.wm.shell;

import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE;

import android.annotation.SuppressLint;
import android.app.WindowConfiguration;
import android.util.SparseArray;
import android.view.SurfaceControl;
@@ -29,6 +30,7 @@ import android.window.WindowContainerTransaction;
import androidx.annotation.NonNull;

import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.sysui.ShellInit;

import java.io.PrintWriter;
import java.util.List;
@@ -44,9 +46,14 @@ public class RootDisplayAreaOrganizer extends DisplayAreaOrganizer {
    /** Display area leashes, which is mapped by display IDs. */
    private final SparseArray<SurfaceControl> mLeashes = new SparseArray<>();

    public RootDisplayAreaOrganizer(Executor executor) {
    public RootDisplayAreaOrganizer(@NonNull Executor executor, @NonNull ShellInit shellInit) {
        super(executor);
        List<DisplayAreaAppearedInfo> infos = registerOrganizer(FEATURE_ROOT);
        shellInit.addInitCallback(this::onInit, this);
    }

    @SuppressLint("MissingPermission") // Only called by SysUI.
    private void onInit() {
        final List<DisplayAreaAppearedInfo> infos = registerOrganizer(FEATURE_ROOT);
        for (int i = infos.size() - 1; i >= 0; --i) {
            onDisplayAreaAppeared(infos.get(i).getDisplayAreaInfo(), infos.get(i).getLeash());
        }
+11 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.wm.shell;

import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TASK_ORG;

import android.annotation.SuppressLint;
import android.annotation.UiContext;
import android.app.ResourcesManager;
import android.content.Context;
@@ -38,6 +39,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.sysui.ShellInit;

import java.io.PrintWriter;
import java.util.ArrayList;
@@ -69,10 +71,17 @@ public class RootTaskDisplayAreaOrganizer extends DisplayAreaOrganizer {

    private final Context mContext;

    public RootTaskDisplayAreaOrganizer(Executor executor, Context context) {
    public RootTaskDisplayAreaOrganizer(@NonNull Executor executor, @NonNull Context context,
            @NonNull ShellInit shellInit) {
        super(executor);
        mContext = context;
        List<DisplayAreaAppearedInfo> infos = registerOrganizer(FEATURE_DEFAULT_TASK_CONTAINER);
        shellInit.addInitCallback(this::onInit, this);
    }

    @SuppressLint("MissingPermission") // Only called by SysUI.
    private void onInit() {
        final List<DisplayAreaAppearedInfo> infos =
                registerOrganizer(FEATURE_DEFAULT_TASK_CONTAINER);
        for (int i = infos.size() - 1; i >= 0; --i) {
            onDisplayAreaAppeared(infos.get(i).getDisplayAreaInfo(), infos.get(i).getLeash());
        }
+6 −6
Original line number Diff line number Diff line
@@ -110,13 +110,13 @@ import com.android.wm.shell.unfold.UnfoldAnimationController;
import com.android.wm.shell.unfold.UnfoldTransitionHandler;
import com.android.wm.shell.windowdecor.WindowDecorViewModel;

import java.util.Optional;

import dagger.BindsOptionalOf;
import dagger.Lazy;
import dagger.Module;
import dagger.Provides;

import java.util.Optional;

/**
 * Provides basic dependencies from {@link com.android.wm.shell}, these dependencies are only
 * accessible from components within the WM subcomponent (can be explicitly exposed to the
@@ -658,15 +658,15 @@ public abstract class WMShellBaseModule {
    @WMSingleton
    @Provides
    static RootTaskDisplayAreaOrganizer provideRootTaskDisplayAreaOrganizer(
            @ShellMainThread ShellExecutor mainExecutor, Context context) {
        return new RootTaskDisplayAreaOrganizer(mainExecutor, context);
            @ShellMainThread ShellExecutor mainExecutor, Context context, ShellInit shellInit) {
        return new RootTaskDisplayAreaOrganizer(mainExecutor, context, shellInit);
    }

    @WMSingleton
    @Provides
    static RootDisplayAreaOrganizer provideRootDisplayAreaOrganizer(
            @ShellMainThread ShellExecutor mainExecutor) {
        return new RootDisplayAreaOrganizer(mainExecutor);
            @ShellMainThread ShellExecutor mainExecutor, ShellInit shellInit) {
        return new RootDisplayAreaOrganizer(mainExecutor, shellInit);
    }

    @WMSingleton
+1 −1
Original line number Diff line number Diff line
@@ -277,7 +277,7 @@ public class Transitions implements RemoteCallable<Transitions>,
            @NonNull ShellExecutor animExecutor) {
        this(context, shellInit, shellController, organizer, pool, displayController, mainExecutor,
                mainHandler, animExecutor, null,
                new RootTaskDisplayAreaOrganizer(mainExecutor, context));
                new RootTaskDisplayAreaOrganizer(mainExecutor, context, shellInit));
    }

    public Transitions(@NonNull Context context,
+5 −1
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doAnswer;
@@ -92,6 +93,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;

import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.TestShellExecutor;
import com.android.wm.shell.common.DisplayController;
@@ -145,7 +147,9 @@ public class ShellTransitionTests extends ShellTestCase {
        final Transitions t = new Transitions(mContext, shellInit, mock(ShellController.class),
                mOrganizer, mTransactionPool, createTestDisplayController(), mMainExecutor,
                mMainHandler, mAnimExecutor);
        verify(shellInit, times(1)).addInitCallback(any(), eq(t));
        // One from Transitions, one from RootTaskDisplayAreaOrganizer
        verify(shellInit).addInitCallback(any(), eq(t));
        verify(shellInit).addInitCallback(any(), isA(RootTaskDisplayAreaOrganizer.class));
    }

    @Test
Loading