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:
Bill Lin
2020-09-19 03:10:22 +08:00
parent 692483238d
commit cc10cdfbc1
4 changed files with 99 additions and 51 deletions

View File

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

View File

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

View File

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

View File

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