Fix CTS android.systemui.cts.tv.BasicPipTests fails
Root cause: Previous CL removed entirely PipModule.java with providePipMenuActivity declaration which tells dagger setup how to find the appropriate constructor in PipMenuActivity. Otherwise, it looks for the generic context-only constructor Solution: Introduce TvPipModule for dagger to setup PipMenuActivity ctor correctly Test: atest CtsSeccompHostTestCases Test: atest CtsSystemUiTestCases Test: make SystemUI Test: make ArcSystemUI Test: lunch aosp_tv_arm-userdebug & make Test: atest WindowManagerShellTests Test: atest SystemUITests Bug: 168113354 Change-Id: Iaedfc71e86088d912f91caa5c0d393cf4df00208
This commit is contained in:
@@ -36,6 +36,8 @@ import java.util.Optional;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* Controller for {@link PipControlsView}.
|
||||
*/
|
||||
@@ -108,7 +110,7 @@ public class PipControlsViewController {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@Inject
|
||||
public PipControlsViewController(PipControlsView view, Optional<Pip> pipOptional,
|
||||
LayoutInflater layoutInflater, @Main Handler handler) {
|
||||
super();
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (C) 2019 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.systemui.pip.tv.dagger;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.pip.Pip;
|
||||
import com.android.systemui.pip.PipBoundsHandler;
|
||||
import com.android.systemui.pip.PipSurfaceTransactionHelper;
|
||||
import com.android.systemui.pip.PipTaskOrganizer;
|
||||
import com.android.systemui.pip.PipUiEventLogger;
|
||||
import com.android.systemui.pip.tv.PipController;
|
||||
import com.android.systemui.pip.tv.PipMenuActivity;
|
||||
import com.android.systemui.pip.tv.PipNotification;
|
||||
import com.android.wm.shell.ShellTaskOrganizer;
|
||||
import com.android.wm.shell.common.DisplayController;
|
||||
import com.android.wm.shell.splitscreen.SplitScreen;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.ClassKey;
|
||||
import dagger.multibindings.IntoMap;
|
||||
|
||||
/**
|
||||
* Dagger module for TV Pip.
|
||||
*/
|
||||
@Module(subcomponents = {TvPipComponent.class})
|
||||
public abstract class TvPipModule {
|
||||
|
||||
/** Inject into PipMenuActivity. */
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ClassKey(PipMenuActivity.class)
|
||||
public abstract Activity providePipMenuActivity(PipMenuActivity activity);
|
||||
|
||||
@SysUISingleton
|
||||
@Provides
|
||||
static Pip providePipController(Context context,
|
||||
BroadcastDispatcher broadcastDispatcher,
|
||||
PipBoundsHandler pipBoundsHandler,
|
||||
PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
|
||||
PipTaskOrganizer pipTaskOrganizer) {
|
||||
return new PipController(context, broadcastDispatcher, pipBoundsHandler,
|
||||
pipSurfaceTransactionHelper, pipTaskOrganizer);
|
||||
}
|
||||
|
||||
@SysUISingleton
|
||||
@Provides
|
||||
static PipNotification providePipNotification(Context context,
|
||||
BroadcastDispatcher broadcastDispatcher,
|
||||
PipController pipController) {
|
||||
return new PipNotification(context, broadcastDispatcher, pipController);
|
||||
}
|
||||
|
||||
@SysUISingleton
|
||||
@Provides
|
||||
static PipBoundsHandler providesPipBoundsHandler(Context context) {
|
||||
return new PipBoundsHandler(context);
|
||||
}
|
||||
|
||||
@SysUISingleton
|
||||
@Provides
|
||||
static PipTaskOrganizer providesPipTaskOrganizer(Context context,
|
||||
PipBoundsHandler pipBoundsHandler,
|
||||
PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
|
||||
Optional<SplitScreen> splitScreenOptional, DisplayController displayController,
|
||||
PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer) {
|
||||
return new PipTaskOrganizer(context, pipBoundsHandler,
|
||||
pipSurfaceTransactionHelper, splitScreenOptional, displayController,
|
||||
pipUiEventLogger, shellTaskOrganizer);
|
||||
}
|
||||
}
|
||||
@@ -17,11 +17,12 @@
|
||||
package com.android.systemui.tv;
|
||||
|
||||
import com.android.systemui.dagger.GlobalRootComponent;
|
||||
import com.android.systemui.pip.tv.dagger.TvPipModule;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.Module;
|
||||
|
||||
@Module()
|
||||
@Module(includes = TvPipModule.class)
|
||||
interface TvSystemUIBinder {
|
||||
@Binds
|
||||
GlobalRootComponent bindGlobalRootComponent(TvGlobalRootComponent globalRootComponent);
|
||||
|
||||
@@ -20,17 +20,9 @@ import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.view.IWindowManager;
|
||||
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.pip.Pip;
|
||||
import com.android.systemui.pip.PipBoundsHandler;
|
||||
import com.android.systemui.pip.PipSurfaceTransactionHelper;
|
||||
import com.android.systemui.pip.PipTaskOrganizer;
|
||||
import com.android.systemui.pip.PipUiEventLogger;
|
||||
import com.android.systemui.pip.tv.PipController;
|
||||
import com.android.systemui.pip.tv.PipNotification;
|
||||
import com.android.systemui.pip.tv.dagger.TvPipComponent;
|
||||
import com.android.systemui.pip.tv.dagger.TvPipModule;
|
||||
import com.android.wm.shell.ShellTaskOrganizer;
|
||||
import com.android.wm.shell.common.DisplayController;
|
||||
import com.android.wm.shell.common.DisplayImeController;
|
||||
@@ -39,8 +31,6 @@ import com.android.wm.shell.common.TransactionPool;
|
||||
import com.android.wm.shell.splitscreen.SplitScreen;
|
||||
import com.android.wm.shell.splitscreen.SplitScreenController;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
@@ -49,7 +39,7 @@ import dagger.Provides;
|
||||
* branches of SystemUI.
|
||||
*/
|
||||
// TODO(b/162923491): Move most of these dependencies into WMSingleton scope.
|
||||
@Module(includes = WMShellBaseModule.class, subcomponents = {TvPipComponent.class})
|
||||
@Module(includes = {WMShellBaseModule.class, TvPipModule.class})
|
||||
public class TvWMShellModule {
|
||||
@SysUISingleton
|
||||
@Provides
|
||||
@@ -59,17 +49,6 @@ public class TvWMShellModule {
|
||||
return new DisplayImeController(wmService, displayController, mainHandler, transactionPool);
|
||||
}
|
||||
|
||||
@SysUISingleton
|
||||
@Provides
|
||||
static Pip providePipController(Context context,
|
||||
BroadcastDispatcher broadcastDispatcher,
|
||||
PipBoundsHandler pipBoundsHandler,
|
||||
PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
|
||||
PipTaskOrganizer pipTaskOrganizer) {
|
||||
return new PipController(context, broadcastDispatcher, pipBoundsHandler,
|
||||
pipSurfaceTransactionHelper, pipTaskOrganizer);
|
||||
}
|
||||
|
||||
@SysUISingleton
|
||||
@Provides
|
||||
static SplitScreen provideSplitScreen(Context context,
|
||||
@@ -79,30 +58,4 @@ public class TvWMShellModule {
|
||||
return new SplitScreenController(context, displayController, systemWindows,
|
||||
displayImeController, handler, transactionPool, shellTaskOrganizer);
|
||||
}
|
||||
|
||||
@SysUISingleton
|
||||
@Provides
|
||||
static PipNotification providePipNotification(Context context,
|
||||
BroadcastDispatcher broadcastDispatcher,
|
||||
PipController pipController) {
|
||||
return new PipNotification(context, broadcastDispatcher, pipController);
|
||||
}
|
||||
|
||||
@SysUISingleton
|
||||
@Provides
|
||||
static PipBoundsHandler providesPipBoundsHandler(Context context) {
|
||||
return new PipBoundsHandler(context);
|
||||
}
|
||||
|
||||
@SysUISingleton
|
||||
@Provides
|
||||
static PipTaskOrganizer providesPipTaskOrganizer(Context context,
|
||||
PipBoundsHandler pipBoundsHandler,
|
||||
PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
|
||||
Optional<SplitScreen> splitScreenOptional, DisplayController displayController,
|
||||
PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer) {
|
||||
return new PipTaskOrganizer(context, pipBoundsHandler,
|
||||
pipSurfaceTransactionHelper, splitScreenOptional, displayController,
|
||||
pipUiEventLogger, shellTaskOrganizer);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user