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:
@@ -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);
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user