diff options
8 files changed, 125 insertions, 95 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 37e7b1b8e0c7..05df1065ad30 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -5857,16 +5857,16 @@ public final class ActivityThread extends ClientTransactionHandler final boolean movedToDifferentDisplay = isDifferentDisplay(activity.getDisplayId(), displayId); - final Configuration currentResConfig = activity.getResources().getConfiguration(); - final int diff = currentResConfig.diffPublicOnly(newConfig); - final boolean hasPublicResConfigChange = diff != 0; + final Configuration currentConfig = activity.mCurrentConfig; + final int diff = currentConfig.diffPublicOnly(newConfig); + final boolean hasPublicConfigChange = diff != 0; final ActivityClientRecord r = getActivityClient(activityToken); // TODO(b/173090263): Use diff instead after the improvement of AssetManager and // ResourcesImpl constructions. - final boolean shouldUpdateResources = hasPublicResConfigChange - || shouldUpdateResources(activityToken, currentResConfig, newConfig, - amOverrideConfig, movedToDifferentDisplay, hasPublicResConfigChange); - final boolean shouldReportChange = shouldReportChange(activity.mCurrentConfig, newConfig, + final boolean shouldUpdateResources = hasPublicConfigChange + || shouldUpdateResources(activityToken, currentConfig, newConfig, amOverrideConfig, + movedToDifferentDisplay, hasPublicConfigChange); + final boolean shouldReportChange = shouldReportChange(diff, currentConfig, newConfig, r != null ? r.mSizeConfigurations : null, activity.mActivityInfo.getRealConfigChanged()); // Nothing significant, don't proceed with updating and reporting. @@ -5890,6 +5890,9 @@ public final class ActivityThread extends ClientTransactionHandler amOverrideConfig, contextThemeWrapperOverrideConfig); mResourcesManager.updateResourcesForActivity(activityToken, finalOverrideConfig, displayId); + activity.mConfigChangeFlags = 0; + activity.mCurrentConfig = new Configuration(newConfig); + // Apply the ContextThemeWrapper override if necessary. // NOTE: Make sure the configurations are not modified, as they are treated as immutable // in many places. @@ -5900,10 +5903,8 @@ public final class ActivityThread extends ClientTransactionHandler activity.dispatchMovedToDisplay(displayId, configToReport); } - activity.mConfigChangeFlags = 0; if (shouldReportChange) { activity.mCalled = false; - activity.mCurrentConfig = new Configuration(newConfig); activity.onConfigurationChanged(configToReport); if (!activity.mCalled) { throw new SuperNotCalledException("Activity " + activity.getLocalClassName() + @@ -5918,6 +5919,8 @@ public final class ActivityThread extends ClientTransactionHandler * Returns {@code true} if {@link Activity#onConfigurationChanged(Configuration)} should be * dispatched. * + * @param publicDiff Usually computed by {@link Configuration#diffPublicOnly(Configuration)}. + * This parameter is to prevent we compute it again. * @param currentConfig The current configuration cached in {@link Activity#mCurrentConfig}. * It is {@code null} before the first config update from the server side. * @param newConfig The updated {@link Configuration} @@ -5926,10 +5929,9 @@ public final class ActivityThread extends ClientTransactionHandler * @return {@code true} if the config change should be reported to the Activity */ @VisibleForTesting - public static boolean shouldReportChange(@Nullable Configuration currentConfig, + public static boolean shouldReportChange(int publicDiff, @Nullable Configuration currentConfig, @NonNull Configuration newConfig, @Nullable SizeConfigurationBuckets sizeBuckets, int handledConfigChanges) { - final int publicDiff = currentConfig.diffPublicOnly(newConfig); // Don't report the change if there's no public diff between current and new config. if (publicDiff == 0) { return false; diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 1a37d11b65a8..ff1817a75ba2 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -2351,47 +2351,6 @@ public final class SurfaceControl implements Parcelable { } /** - * @hide - */ - @UnsupportedAppUsage - public static void setDisplayProjection(IBinder displayToken, - int orientation, Rect layerStackRect, Rect displayRect) { - synchronized (SurfaceControl.class) { - sGlobalTransaction.setDisplayProjection(displayToken, orientation, - layerStackRect, displayRect); - } - } - - /** - * @hide - */ - @UnsupportedAppUsage - public static void setDisplayLayerStack(IBinder displayToken, int layerStack) { - synchronized (SurfaceControl.class) { - sGlobalTransaction.setDisplayLayerStack(displayToken, layerStack); - } - } - - /** - * @hide - */ - @UnsupportedAppUsage - public static void setDisplaySurface(IBinder displayToken, Surface surface) { - synchronized (SurfaceControl.class) { - sGlobalTransaction.setDisplaySurface(displayToken, surface); - } - } - - /** - * @hide - */ - public static void setDisplaySize(IBinder displayToken, int width, int height) { - synchronized (SurfaceControl.class) { - sGlobalTransaction.setDisplaySize(displayToken, width, height); - } - } - - /** * Overrides HDR modes for a display device. * * If the caller does not have ACCESS_SURFACE_FLINGER permission, this will throw a Security diff --git a/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java b/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java index 47f70ddf2d42..8d3751e6ad6c 100644 --- a/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java +++ b/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java @@ -207,8 +207,8 @@ public class ActivityThreadClientTest { final Configuration currentConfig = new Configuration(); assertFalse("Must not report change if no public diff", - shouldReportChange(currentConfig, newConfig, null /* sizeBuckets */, - 0 /* handledConfigChanges */)); + shouldReportChange(0 /* publicDiff */, currentConfig, newConfig, + null /* sizeBuckets */, 0 /* handledConfigChanges */)); final int[] verticalThresholds = {100, 400}; final SizeConfigurationBuckets buckets = new SizeConfigurationBuckets( @@ -221,25 +221,25 @@ public class ActivityThreadClientTest { newConfig.screenHeightDp = 300; assertFalse("Must not report changes if the diff is small and not handled", - shouldReportChange(currentConfig, newConfig, buckets, - CONFIG_FONT_SCALE /* handledConfigChanges */)); + shouldReportChange(CONFIG_SCREEN_SIZE /* publicDiff */, currentConfig, + newConfig, buckets, CONFIG_FONT_SCALE /* handledConfigChanges */)); assertTrue("Must report changes if the small diff is handled", - shouldReportChange(currentConfig, newConfig, buckets, - CONFIG_SCREEN_SIZE /* handledConfigChanges */)); + shouldReportChange(CONFIG_SCREEN_SIZE /* publicDiff */, currentConfig, newConfig, + buckets, CONFIG_SCREEN_SIZE /* handledConfigChanges */)); currentConfig.fontScale = 0.8f; newConfig.fontScale = 1.2f; assertTrue("Must report handled changes regardless of small unhandled change", - shouldReportChange(currentConfig, newConfig, buckets, - CONFIG_FONT_SCALE /* handledConfigChanges */)); + shouldReportChange(CONFIG_SCREEN_SIZE | CONFIG_FONT_SCALE /* publicDiff */, + currentConfig, newConfig, buckets, CONFIG_FONT_SCALE /* handledConfigChanges */)); newConfig.screenHeightDp = 500; assertFalse("Must not report changes if there's unhandled big changes", - shouldReportChange(currentConfig, newConfig, buckets, - CONFIG_FONT_SCALE /* handledConfigChanges */)); + shouldReportChange(CONFIG_SCREEN_SIZE | CONFIG_FONT_SCALE /* publicDiff */, + currentConfig, newConfig, buckets, CONFIG_FONT_SCALE /* handledConfigChanges */)); } private void recreateAndVerifyNoRelaunch(ActivityThread activityThread, TestActivity activity) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManager.kt index 911e750f666e..a6160aaf7756 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManager.kt @@ -20,6 +20,7 @@ import android.annotation.IntDef import android.util.Log import androidx.annotation.FloatRange import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.util.Compile import javax.inject.Inject /** @@ -109,8 +110,8 @@ class PanelExpansionStateManager @Inject constructor() { debugLog( "panelExpansionChanged:" + - "start state=${oldState.stateToString()} " + - "end state=${state.stateToString()} " + + "start state=${oldState.panelStateToString()} " + + "end state=${state.panelStateToString()} " + "f=$fraction " + "expanded=$expanded " + "tracking=$tracking" + @@ -126,14 +127,15 @@ class PanelExpansionStateManager @Inject constructor() { /** Updates the panel state if necessary. */ fun updateState(@PanelState state: Int) { - debugLog("update state: ${this.state.stateToString()} -> ${state.stateToString()}") + debugLog( + "update state: ${this.state.panelStateToString()} -> ${state.panelStateToString()}") if (this.state != state) { updateStateInternal(state) } } private fun updateStateInternal(@PanelState state: Int) { - debugLog("go state: ${this.state.stateToString()} -> ${state.stateToString()}") + debugLog("go state: ${this.state.panelStateToString()} -> ${state.panelStateToString()}") this.state = state stateListeners.forEach { it.onPanelStateChanged(state) } } @@ -154,7 +156,7 @@ const val STATE_OPENING = 1 const val STATE_OPEN = 2 @PanelState -private fun Int.stateToString(): String { +fun Int.panelStateToString(): String { return when (this) { STATE_CLOSED -> "CLOSED" STATE_OPENING -> "OPENING" @@ -163,5 +165,5 @@ private fun Int.stateToString(): String { } } -private const val DEBUG = false private val TAG = PanelExpansionStateManager::class.simpleName +private val DEBUG = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.DEBUG) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionController.kt index 16f28e7d1a21..1b8afb9ddc1d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionController.kt @@ -11,6 +11,8 @@ import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent +import com.android.systemui.statusbar.phone.panelstate.PanelState +import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.LargeScreenUtils import java.io.PrintWriter @@ -30,8 +32,9 @@ constructor( private var inSplitShade = false private var splitShadeScrimTransitionDistance = 0 - private var lastExpansionFraction: Float = 0f + private var lastExpansionFraction: Float? = null private var lastExpansionEvent: PanelExpansionChangeEvent? = null + private var currentPanelState: Int? = null init { updateResources() @@ -41,8 +44,8 @@ constructor( updateResources() } }) - dumpManager - .registerDumpable(ScrimShadeTransitionController::class.java.simpleName, this::dump) + dumpManager.registerDumpable( + ScrimShadeTransitionController::class.java.simpleName, this::dump) } private fun updateResources() { @@ -51,21 +54,38 @@ constructor( resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance) } + fun onPanelStateChanged(@PanelState state: Int) { + currentPanelState = state + onStateChanged() + } + fun onPanelExpansionChanged(panelExpansionChangeEvent: PanelExpansionChangeEvent) { - val expansionFraction = calculateScrimExpansionFraction(panelExpansionChangeEvent) + lastExpansionEvent = panelExpansionChangeEvent + onStateChanged() + } + + private fun onStateChanged() { + val expansionEvent = lastExpansionEvent ?: return + val panelState = currentPanelState + val expansionFraction = calculateScrimExpansionFraction(expansionEvent, panelState) scrimController.setRawPanelExpansionFraction(expansionFraction) lastExpansionFraction = expansionFraction - lastExpansionEvent = panelExpansionChangeEvent } - private fun calculateScrimExpansionFraction(expansionEvent: PanelExpansionChangeEvent): Float { - return if (inSplitShade && isScreenUnlocked()) { + private fun calculateScrimExpansionFraction( + expansionEvent: PanelExpansionChangeEvent, + @PanelState panelState: Int? + ): Float { + return if (canUseCustomFraction(panelState)) { constrain(expansionEvent.dragDownPxAmount / splitShadeScrimTransitionDistance, 0f, 1f) } else { expansionEvent.fraction } } + private fun canUseCustomFraction(panelState: Int?) = + inSplitShade && isScreenUnlocked() && panelState == STATE_OPENING + private fun isScreenUnlocked() = statusBarStateController.currentOrUpcomingState == StatusBarState.SHADE @@ -78,9 +98,9 @@ constructor( isScreenUnlocked: ${isScreenUnlocked()} splitShadeScrimTransitionDistance: $splitShadeScrimTransitionDistance State: + currentPanelState: $currentPanelState lastExpansionFraction: $lastExpansionFraction lastExpansionEvent: $lastExpansionEvent - """.trimIndent() - ) + """.trimIndent()) } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt index e967d4af19b1..71c61597ff11 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt @@ -11,6 +11,7 @@ import com.android.systemui.statusbar.phone.NotificationPanelViewController import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager import com.android.systemui.statusbar.phone.panelstate.PanelState +import com.android.systemui.statusbar.phone.panelstate.panelStateToString import com.android.systemui.statusbar.policy.ConfigurationController import java.io.PrintWriter import javax.inject.Inject @@ -34,6 +35,8 @@ constructor( lateinit var qs: QS private var inSplitShade = false + private var currentPanelState: Int? = null + private var lastPanelExpansionChangeEvent: PanelExpansionChangeEvent? = null private val splitShadeOverScroller by lazy { splitShadeOverScrollerFactory.create({ qs }, { notificationStackScrollLayoutController }) @@ -66,10 +69,13 @@ constructor( } private fun onPanelStateChanged(@PanelState state: Int) { + currentPanelState = state shadeOverScroller.onPanelStateChanged(state) + scrimShadeTransitionController.onPanelStateChanged(state) } private fun onPanelExpansionChanged(event: PanelExpansionChangeEvent) { + lastPanelExpansionChangeEvent = event shadeOverScroller.onDragDownAmountChanged(event.dragDownPxAmount) scrimShadeTransitionController.onPanelExpansionChanged(event) } @@ -84,6 +90,8 @@ constructor( """ ShadeTransitionController: inSplitShade: $inSplitShade + currentPanelState: ${currentPanelState?.panelStateToString()} + lastPanelExpansionChangeEvent: $lastPanelExpansionChangeEvent qs.isInitialized: ${this::qs.isInitialized} npvc.isInitialized: ${this::notificationPanelViewController.isInitialized} nssl.isInitialized: ${this::notificationStackScrollLayoutController.isInitialized} diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionControllerTest.kt index cafe113e7872..304a274576b7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionControllerTest.kt @@ -9,6 +9,9 @@ import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent +import com.android.systemui.statusbar.phone.panelstate.STATE_CLOSED +import com.android.systemui.statusbar.phone.panelstate.STATE_OPEN +import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING import com.android.systemui.statusbar.policy.FakeConfigurationController import org.junit.Before import org.junit.Test @@ -39,8 +42,9 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { dumpManager, scrimController, context.resources, - statusBarStateController - ) + statusBarStateController) + + controller.onPanelStateChanged(STATE_OPENING) } @Test @@ -54,8 +58,7 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { @Test fun onPanelExpansionChanged_inSplitShade_unlockedShade_setsFractionBasedOnDragDownAmount() { - whenever(statusBarStateController.currentOrUpcomingState) - .thenReturn(StatusBarState.SHADE) + whenever(statusBarStateController.currentOrUpcomingState).thenReturn(StatusBarState.SHADE) val scrimShadeTransitionDistance = context.resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance) setSplitShadeEnabled(true) @@ -68,23 +71,20 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { @Test fun onPanelExpansionChanged_inSplitShade_largeDragDownAmount_fractionIsNotGreaterThan1() { - whenever(statusBarStateController.currentOrUpcomingState) - .thenReturn(StatusBarState.SHADE) + whenever(statusBarStateController.currentOrUpcomingState).thenReturn(StatusBarState.SHADE) val scrimShadeTransitionDistance = context.resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance) setSplitShadeEnabled(true) controller.onPanelExpansionChanged( - EXPANSION_EVENT.copy(dragDownPxAmount = 100f * scrimShadeTransitionDistance) - ) + EXPANSION_EVENT.copy(dragDownPxAmount = 100f * scrimShadeTransitionDistance)) verify(scrimController).setRawPanelExpansionFraction(1f) } @Test fun onPanelExpansionChanged_inSplitShade_negativeDragDownAmount_fractionIsNotLessThan0() { - whenever(statusBarStateController.currentOrUpcomingState) - .thenReturn(StatusBarState.SHADE) + whenever(statusBarStateController.currentOrUpcomingState).thenReturn(StatusBarState.SHADE) setSplitShadeEnabled(true) controller.onPanelExpansionChanged(EXPANSION_EVENT.copy(dragDownPxAmount = -100f)) @@ -114,6 +114,30 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction) } + @Test + fun onPanelExpansionChanged_inSplitShade_panelOpen_setsFractionEqualToEventFraction() { + controller.onPanelStateChanged(STATE_OPEN) + whenever(statusBarStateController.currentOrUpcomingState) + .thenReturn(StatusBarState.KEYGUARD) + setSplitShadeEnabled(true) + + controller.onPanelExpansionChanged(EXPANSION_EVENT) + + verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction) + } + + @Test + fun onPanelExpansionChanged_inSplitShade_panelClosed_setsFractionEqualToEventFraction() { + controller.onPanelStateChanged(STATE_CLOSED) + whenever(statusBarStateController.currentOrUpcomingState) + .thenReturn(StatusBarState.KEYGUARD) + setSplitShadeEnabled(true) + + controller.onPanelExpansionChanged(EXPANSION_EVENT) + + verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction) + } + private fun setSplitShadeEnabled(enabled: Boolean) { overrideResource(R.bool.config_use_split_notification_shade, enabled) configurationController.notifyConfigurationChanged() @@ -122,7 +146,6 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { companion object { val EXPANSION_EVENT = PanelExpansionChangeEvent( - fraction = 0.5f, expanded = true, tracking = true, dragDownPxAmount = 10f - ) + fraction = 0.5f, expanded = true, tracking = true, dragDownPxAmount = 10f) } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionControllerTest.kt index 85a8c6bf7d95..8b7e04bbab1b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionControllerTest.kt @@ -8,6 +8,7 @@ import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.qs.QS import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController import com.android.systemui.statusbar.phone.NotificationPanelViewController +import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING import com.android.systemui.statusbar.policy.FakeConfigurationController @@ -49,8 +50,7 @@ class ShadeTransitionControllerTest : SysuiTestCase() { context, splitShadeOverScrollerFactory = { _, _ -> splitShadeOverScroller }, noOpOverScroller, - scrimShadeTransitionController - ) + scrimShadeTransitionController) // Resetting as they are notified upon initialization. reset(noOpOverScroller, splitShadeOverScroller) @@ -91,6 +91,16 @@ class ShadeTransitionControllerTest : SysuiTestCase() { verifyZeroInteractions(splitShadeOverScroller) } + @Test + fun onPanelStateChanged_forwardsToScrimTransitionController() { + initLateProperties() + + startPanelExpansion() + + verify(scrimShadeTransitionController).onPanelStateChanged(STATE_OPENING) + verify(scrimShadeTransitionController).onPanelExpansionChanged(DEFAULT_EXPANSION_EVENT) + } + private fun initLateProperties() { controller.qs = qs controller.notificationStackScrollLayoutController = nsslController @@ -112,14 +122,20 @@ class ShadeTransitionControllerTest : SysuiTestCase() { private fun startPanelExpansion() { panelExpansionStateManager.onPanelExpansionChanged( - fraction = 0.5f, - expanded = true, - tracking = true, - dragDownPxAmount = DEFAULT_DRAG_DOWN_AMOUNT + DEFAULT_EXPANSION_EVENT.fraction, + DEFAULT_EXPANSION_EVENT.expanded, + DEFAULT_EXPANSION_EVENT.tracking, + DEFAULT_EXPANSION_EVENT.dragDownPxAmount, ) } companion object { private const val DEFAULT_DRAG_DOWN_AMOUNT = 123f + private val DEFAULT_EXPANSION_EVENT = + PanelExpansionChangeEvent( + fraction = 0.5f, + expanded = true, + tracking = true, + dragDownPxAmount = DEFAULT_DRAG_DOWN_AMOUNT) } } |