/* * Copyright (C) 2020 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; import static com.android.systemui.media.dagger.MediaModule.QUICK_QS_PANEL; import static com.android.systemui.qs.dagger.QSFragmentModule.QS_USING_COLLAPSED_LANDSCAPE_MEDIA; import static com.android.systemui.qs.dagger.QSFragmentModule.QS_USING_MEDIA_PLAYER; import androidx.annotation.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; import com.android.systemui.R; import com.android.systemui.dump.DumpManager; import com.android.systemui.media.controls.ui.MediaHierarchyManager; import com.android.systemui.media.controls.ui.MediaHost; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.qs.customize.QSCustomizerController; import com.android.systemui.qs.dagger.QSScope; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.util.leak.RotationUtils; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Provider; /** Controller for {@link QuickQSPanel}. */ @QSScope public class QuickQSPanelController extends QSPanelControllerBase { private final Provider mUsingCollapsedLandscapeMediaProvider; @Inject QuickQSPanelController(QuickQSPanel view, QSHost qsHost, QSCustomizerController qsCustomizerController, @Named(QS_USING_MEDIA_PLAYER) boolean usingMediaPlayer, @Named(QUICK_QS_PANEL) MediaHost mediaHost, @Named(QS_USING_COLLAPSED_LANDSCAPE_MEDIA) Provider usingCollapsedLandscapeMediaProvider, MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger, DumpManager dumpManager ) { super(view, qsHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger, uiEventLogger, qsLogger, dumpManager); mUsingCollapsedLandscapeMediaProvider = usingCollapsedLandscapeMediaProvider; } @Override protected void onInit() { super.onInit(); updateMediaExpansion(); mMediaHost.setShowsOnlyActiveMedia(true); mMediaHost.init(MediaHierarchyManager.LOCATION_QQS); } private void updateMediaExpansion() { int rotation = getRotation(); boolean isLandscape = rotation == RotationUtils.ROTATION_LANDSCAPE || rotation == RotationUtils.ROTATION_SEASCAPE; boolean usingCollapsedLandscapeMedia = mUsingCollapsedLandscapeMediaProvider.get(); if (!usingCollapsedLandscapeMedia || !isLandscape) { mMediaHost.setExpansion(MediaHost.EXPANDED); } else { mMediaHost.setExpansion(MediaHost.COLLAPSED); } } @VisibleForTesting protected int getRotation() { return RotationUtils.getRotation(getContext()); } @Override protected void onViewAttached() { super.onViewAttached(); } @Override protected void onViewDetached() { super.onViewDetached(); } private void setMaxTiles(int parseNumTiles) { mView.setMaxTiles(parseNumTiles); setTiles(); } @Override protected void onConfigurationChanged() { int newMaxTiles = getResources().getInteger(R.integer.quick_qs_panel_max_tiles); if (newMaxTiles != mView.getNumQuickTiles()) { setMaxTiles(newMaxTiles); } updateMediaExpansion(); } @Override public void setTiles() { List tiles = new ArrayList<>(); for (QSTile tile : mHost.getTiles()) { tiles.add(tile); if (tiles.size() == mView.getNumQuickTiles()) { break; } } super.setTiles(tiles, /* collapsedView */ true); } public void setContentMargins(int marginStart, int marginEnd) { mView.setContentMargins(marginStart, marginEnd, mMediaHost.getHostView()); } public int getNumQuickTiles() { return mView.getNumQuickTiles(); } }