blob: 3244eb43c8c458ba9635427a53eaef7678ac8265 [file] [log] [blame]
/*
* Copyright (C) 2016 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.plugins.qs;
import android.view.View;
import androidx.annotation.FloatRange;
import com.android.systemui.plugins.FragmentBase;
import com.android.systemui.plugins.annotations.DependsOn;
import com.android.systemui.plugins.annotations.ProvidesInterface;
import com.android.systemui.plugins.qs.QS.HeightListener;
import java.util.function.Consumer;
/**
* Fragment that contains QS in the notification shade. Most of the interface is for
* handling the expand/collapsing of the view interaction.
*/
@ProvidesInterface(action = QS.ACTION, version = QS.VERSION)
@DependsOn(target = HeightListener.class)
public interface QS extends FragmentBase {
String ACTION = "com.android.systemui.action.PLUGIN_QS";
int VERSION = 15;
String TAG = "QS";
void setPanelView(HeightListener notificationPanelView);
void hideImmediately();
int getQsMinExpansionHeight();
int getDesiredHeight();
void setHeightOverride(int desiredHeight);
void setHeaderClickable(boolean qsExpansionEnabled);
boolean isCustomizing();
/** Close the QS customizer, if it is open. */
void closeCustomizer();
void setOverscrolling(boolean overscrolling);
void setExpanded(boolean qsExpanded);
void setListening(boolean listening);
/**
* Set whether QQS/QS is visible or not.
*
* This is different from setExpanded, as it will be true when QQS is visible. In particular,
* it should be false when device is locked and only notifications (in lockscreen) are visible.
*/
void setQsVisible(boolean qsVisible);
boolean isShowingDetail();
void closeDetail();
void animateHeaderSlidingOut();
/**
* Asks QS to update its presentation, according to {@code NotificationPanelViewController}.
* @param qsExpansionFraction How much each UI element in QS should be expanded (QQS to QS.)
* @param panelExpansionFraction Whats the expansion of the whole shade.
* @param headerTranslation How much we should vertically translate QS.
* @param squishinessFraction Fraction that affects tile height. 0 when collapsed,
* 1 when expanded.
*/
void setQsExpansion(float qsExpansionFraction, float panelExpansionFraction,
float headerTranslation, float squishinessFraction);
void setHeaderListening(boolean listening);
void notifyCustomizeChanged();
void setContainerController(QSContainerController controller);
/**
* Provide an action to collapse if expanded or expand if collapsed.
* @param action
*/
void setCollapseExpandAction(Runnable action);
/**
* Returns the height difference between the QSPanel container and the QuickQSPanel container
*/
int getHeightDiff();
View getHeader();
default void setHasNotifications(boolean hasNotifications) {
}
/**
* Should touches from the notification panel be disallowed?
* The notification panel might grab any touches rom QS at any time to collapse the shade.
* We should disallow that in case we are showing the detail panel.
*/
default boolean disallowPanelTouches() {
return isShowingDetail();
}
/**
* If QS should translate as we pull it down, or if it should be static.
*/
void setInSplitShade(boolean shouldTranslate);
/**
* Sets the progress of the transition to full shade on the lockscreen.
*
* @param isTransitioningToFullShade
* whether the transition to full shade is in progress. This might be {@code true}, even
* though {@code qsTransitionFraction} is still 0.
* The reason for that is that on some device configurations, the QS transition has a
* start delay compared to the overall transition.
*
* @param qsTransitionFraction
* the fraction of the QS transition progress, from 0 to 1.
*
* @param qsSquishinessFraction
* the fraction of the QS "squish" transition progress, from 0 to 1.
*/
default void setTransitionToFullShadeProgress(
boolean isTransitioningToFullShade,
@FloatRange(from = 0.0, to = 1.0) float qsTransitionFraction,
@FloatRange(from = 0.0, to = 1.0) float qsSquishinessFraction) {}
/**
* A rounded corner clipping that makes QS feel as if it were behind everything.
*/
void setFancyClipping(int leftInset, int top, int rightInset, int bottom, int cornerRadius,
boolean visible, boolean fullWidth);
/**
* @return if quick settings is fully collapsed currently
*/
default boolean isFullyCollapsed() {
return true;
}
/**
* Add a listener for when the collapsed media visibility changes.
*/
void setCollapsedMediaVisibilityChangedListener(Consumer<Boolean> listener);
/**
* Set a scroll listener for the QSPanel container
*/
default void setScrollListener(ScrollListener scrollListener) {}
/**
* Sets the amount of vertical over scroll that should be performed on QS.
*/
default void setOverScrollAmount(int overScrollAmount) {}
/**
* Sets whether the notification panel is using the full width of the screen. Typically true on
* small screens and false on large screens.
*/
void setIsNotificationPanelFullWidth(boolean isFullWidth);
/**
* Callback for when QSPanel container is scrolled
*/
@ProvidesInterface(version = ScrollListener.VERSION)
interface ScrollListener {
int VERSION = 1;
void onQsPanelScrollChanged(int scrollY);
}
@ProvidesInterface(version = HeightListener.VERSION)
interface HeightListener {
int VERSION = 1;
void onQsHeightChanged();
}
}