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: xinying <xinying1@xiaomi.corp-partner.google.com>
This commit is contained in:
xinying
2022-10-26 17:33:56 +08:00
committed by lbill
parent 8ebc9ed933
commit 1cc1f3cec6
4 changed files with 18 additions and 4 deletions

View File

@@ -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);
}
//

View File

@@ -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);
}

View File

@@ -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 =

View File

@@ -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);
}