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

Commit 1cc1f3ce authored by xinying's avatar xinying Committed by lbill
Browse files

Attach the background-panel to DisplayContent.



The background-panel is not attached to the DisplayContent,
therefore the parent of its parent, BackgroundWindowManager,
is null. This will result in the failure to record the screen
and black screen.

Therefore, we need to attach the background-panel
to the displaycontent.

bug: 254436057
Test: atest BackgroundWindowManagerTest
Test: manual record screen and trigger one-handed mode

Change-Id: I440feb76fdc59d73339770bba57857efa828c7d2
Signed-off-by: default avatarxinying <xinying1@xiaomi.corp-partner.google.com>
parent 8ebc9ed9
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.statusbar.IStatusBarService;
import com.android.launcher3.icons.IconProvider;
import com.android.wm.shell.RootDisplayAreaOrganizer;
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.TaskViewTransitions;
@@ -271,11 +272,12 @@ public abstract class WMShellModule {
            TaskStackListenerImpl taskStackListener,
            UiEventLogger uiEventLogger,
            InteractionJankMonitor jankMonitor,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer,
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler) {
        return OneHandedController.create(context, shellInit, shellCommandHandler, shellController,
                windowManager, displayController, displayLayout, taskStackListener, jankMonitor,
                uiEventLogger, mainExecutor, mainHandler);
                uiEventLogger, rootDisplayAreaOrganizer, mainExecutor, mainHandler);
    }

    //
+7 −1
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.graphics.Rect;
import android.os.Binder;
import android.util.Slog;
import android.view.ContextThemeWrapper;
import android.view.Display;
import android.view.IWindow;
import android.view.LayoutInflater;
import android.view.SurfaceControl;
@@ -47,6 +48,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.wm.shell.R;
import com.android.wm.shell.RootDisplayAreaOrganizer;
import com.android.wm.shell.common.DisplayLayout;

import java.io.PrintWriter;
@@ -67,11 +69,14 @@ public final class BackgroundWindowManager extends WindowlessWindowManager {
    private SurfaceControl mLeash;
    private View mBackgroundView;
    private @OneHandedState.State int mCurrentState;
    private RootDisplayAreaOrganizer mRootDisplayAreaOrganizer;

    public BackgroundWindowManager(Context context) {
    public BackgroundWindowManager(Context context,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer) {
        super(context.getResources().getConfiguration(), null /* rootSurface */,
                null /* hostInputToken */);
        mContext = context;
        mRootDisplayAreaOrganizer = rootDisplayAreaOrganizer;
        mTransactionFactory = SurfaceControl.Transaction::new;
    }

@@ -112,6 +117,7 @@ public final class BackgroundWindowManager extends WindowlessWindowManager {
                .setOpaque(true)
                .setName(TAG)
                .setCallsite("BackgroundWindowManager#attachToParentSurface");
        mRootDisplayAreaOrganizer.attachToDisplayArea(Display.DEFAULT_DISPLAY, builder);
        mLeash = builder.build();
        b.setParent(mLeash);
    }
+4 −1
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import androidx.annotation.VisibleForTesting;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.logging.UiEventLogger;
import com.android.wm.shell.R;
import com.android.wm.shell.RootDisplayAreaOrganizer;
import com.android.wm.shell.common.DisplayChangeController;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayLayout;
@@ -204,12 +205,14 @@ public class OneHandedController implements RemoteCallable<OneHandedController>,
            DisplayController displayController, DisplayLayout displayLayout,
            TaskStackListenerImpl taskStackListener,
            InteractionJankMonitor jankMonitor, UiEventLogger uiEventLogger,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer,
            ShellExecutor mainExecutor, Handler mainHandler) {
        OneHandedSettingsUtil settingsUtil = new OneHandedSettingsUtil();
        OneHandedAccessibilityUtil accessibilityUtil = new OneHandedAccessibilityUtil(context);
        OneHandedTimeoutHandler timeoutHandler = new OneHandedTimeoutHandler(mainExecutor);
        OneHandedState oneHandedState = new OneHandedState();
        BackgroundWindowManager backgroundWindowManager = new BackgroundWindowManager(context);
        BackgroundWindowManager backgroundWindowManager =
                new BackgroundWindowManager(context, rootDisplayAreaOrganizer);
        OneHandedTutorialHandler tutorialHandler = new OneHandedTutorialHandler(context,
                settingsUtil, windowManager, backgroundWindowManager);
        OneHandedAnimationController animationController =
+4 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import androidx.test.annotation.UiThreadTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;

import com.android.wm.shell.RootDisplayAreaOrganizer;
import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.common.DisplayLayout;

@@ -41,11 +42,13 @@ public class BackgroundWindowManagerTest extends ShellTestCase {
    private BackgroundWindowManager mBackgroundWindowManager;
    @Mock
    private DisplayLayout  mMockDisplayLayout;
    @Mock
    private RootDisplayAreaOrganizer mRootDisplayAreaOrganizer;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        mBackgroundWindowManager = new BackgroundWindowManager(mContext);
        mBackgroundWindowManager = new BackgroundWindowManager(mContext, mRootDisplayAreaOrganizer);
        mBackgroundWindowManager.onDisplayChanged(mMockDisplayLayout);
    }