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

Commit f8f89a9d authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Automerger Merge Worker
Browse files

Merge "Add PanelInteractor" into udc-dev am: e32211c1

parents c8495b6d e32211c1
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import com.android.systemui.R;
import com.android.systemui.plugins.qs.QSFactory;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.plugins.qs.QSTileView;
import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor;
import com.android.systemui.util.leak.GarbageMonitor;

import java.util.ArrayList;
@@ -33,7 +34,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.List;

public interface QSHost {
public interface QSHost extends PanelInteractor {
    String TILES_SETTING = Settings.Secure.QS_TILES;
    int POSITION_AT_END = -1;

@@ -57,9 +58,6 @@ public interface QSHost {
    }

    void warn(String message, Throwable t);
    void collapsePanels();
    void forceCollapsePanels();
    void openPanels();
    Context getContext();
    Context getUserContext();
    int getUserId();
+50 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 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.qs.dagger

import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.qs.QSHost
import com.android.systemui.qs.QSTileHost
import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor
import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractorImpl
import dagger.Binds
import dagger.Module
import dagger.Provides

@Module
interface QSHostModule {

    @Binds fun provideQsHost(controllerImpl: QSTileHost): QSHost

    @Module
    companion object {
        @Provides
        @JvmStatic
        fun providePanelInteractor(
            featureFlags: FeatureFlags,
            qsHost: QSHost,
            panelInteractorImpl: PanelInteractorImpl
        ): PanelInteractor {
            return if (featureFlags.isEnabled(Flags.QS_PIPELINE_NEW_HOST)) {
                panelInteractorImpl
            } else {
                qsHost
            }
        }
    }
}
+7 −7
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.media.dagger.MediaModule;
import com.android.systemui.qs.AutoAddTracker;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.qs.ReduceBrightColorsController;
import com.android.systemui.qs.external.QSExternalModule;
import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -45,7 +44,6 @@ import java.util.Map;

import javax.inject.Named;

import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.Multibinds;
@@ -54,7 +52,13 @@ import dagger.multibindings.Multibinds;
 * Module for QS dependencies
 */
@Module(subcomponents = {QSFragmentComponent.class},
        includes = {MediaModule.class, QSExternalModule.class, QSFlagsModule.class})
        includes = {
                MediaModule.class,
                QSExternalModule.class,
                QSFlagsModule.class,
                QSHostModule.class
        }
)
public interface QSModule {

    /** A map of internal QS tiles. Ensures that this can be injected even if
@@ -100,8 +104,4 @@ public interface QSModule {
        manager.init();
        return manager;
    }

    /** */
    @Binds
    QSHost provideQsHost(QSTileHost controllerImpl);
}
+7 −3
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.StatusBarIconController;
@@ -74,6 +75,7 @@ public class TileServices extends IQSService.Stub {
    private final CommandQueue mCommandQueue;
    private final UserTracker mUserTracker;
    private final StatusBarIconController mStatusBarIconController;
    private final PanelInteractor mPanelInteractor;

    private int mMaxBound = DEFAULT_MAX_BOUND;

@@ -85,7 +87,8 @@ public class TileServices extends IQSService.Stub {
            UserTracker userTracker,
            KeyguardStateController keyguardStateController,
            CommandQueue commandQueue,
            StatusBarIconController statusBarIconController) {
            StatusBarIconController statusBarIconController,
            PanelInteractor panelInteractor) {
        mHost = host;
        mKeyguardStateController = keyguardStateController;
        mContext = mHost.getContext();
@@ -96,6 +99,7 @@ public class TileServices extends IQSService.Stub {
        mCommandQueue = commandQueue;
        mStatusBarIconController = statusBarIconController;
        mCommandQueue.addCallback(mRequestListeningCallback);
        mPanelInteractor = panelInteractor;
    }

    public Context getContext() {
@@ -255,7 +259,7 @@ public class TileServices extends IQSService.Stub {
        if (customTile != null) {
            verifyCaller(customTile);
            customTile.onDialogShown();
            mHost.forceCollapsePanels();
            mPanelInteractor.forceCollapsePanels();
            Objects.requireNonNull(mServices.get(customTile)).setShowingDialog(true);
        }
    }
@@ -275,7 +279,7 @@ public class TileServices extends IQSService.Stub {
        CustomTile customTile = getTileForToken(token);
        if (customTile != null) {
            verifyCaller(customTile);
            mHost.forceCollapsePanels();
            mPanelInteractor.forceCollapsePanels();
        }
    }

+53 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2015 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.qs.pipeline.domain.interactor

import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.phone.CentralSurfaces
import java.util.Optional
import javax.inject.Inject

/** Encapsulates business logic for interacting with the QS panel. */
interface PanelInteractor {

    /** Collapse the shade */
    fun collapsePanels()

    /** Collapse the shade forcefully, skipping some animations. */
    fun forceCollapsePanels()

    /** Open the Quick Settings panel */
    fun openPanels()
}

@SysUISingleton
class PanelInteractorImpl
@Inject
constructor(
    private val centralSurfaces: Optional<CentralSurfaces>,
) : PanelInteractor {
    override fun collapsePanels() {
        centralSurfaces.ifPresent { it.postAnimateCollapsePanels() }
    }

    override fun forceCollapsePanels() {
        centralSurfaces.ifPresent { it.postAnimateForceCollapsePanels() }
    }

    override fun openPanels() {
        centralSurfaces.ifPresent { it.postAnimateOpenPanels() }
    }
}
Loading