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

Commit cc10cdfb authored by Bill Lin's avatar Bill Lin
Browse files

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
parent 69248323
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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();
+92 −0
Original line number Diff line number Diff line
/*
 * 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);
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -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);
+2 −49
Original line number Diff line number Diff line
@@ -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);
    }
}