diff --git a/app/src/androidTest/kotlin/info/hannes/slidingup/demo/tools/Matcher.kt b/app/src/androidTest/kotlin/info/hannes/slidingup/demo/tools/Matcher.kt index 312a11d..651cee9 100644 --- a/app/src/androidTest/kotlin/info/hannes/slidingup/demo/tools/Matcher.kt +++ b/app/src/androidTest/kotlin/info/hannes/slidingup/demo/tools/Matcher.kt @@ -36,7 +36,7 @@ fun setValue(value: PanelState): ViewAction { override fun perform(uiController: UiController?, view: View) { val slidingUpPanelLayout = view as SlidingUpPanelLayout - slidingUpPanelLayout.setPanelState(value) + slidingUpPanelLayout.panelState = value } } } \ No newline at end of file diff --git a/app/src/main/kotlin/info/hannes/slidinguppanel/demo/DemoActivity.kt b/app/src/main/kotlin/info/hannes/slidinguppanel/demo/DemoActivity.kt index 8230dc3..ff2fa0d 100644 --- a/app/src/main/kotlin/info/hannes/slidinguppanel/demo/DemoActivity.kt +++ b/app/src/main/kotlin/info/hannes/slidinguppanel/demo/DemoActivity.kt @@ -80,7 +80,7 @@ class DemoActivity : AppCompatActivity() { } }) binding.slidingLayout.setFadeOnClickListener { - binding.slidingLayout.setPanelState(PanelState.COLLAPSED) + binding.slidingLayout.panelState = PanelState.COLLAPSED Log.i(tag, "FadeOnClickListener ${binding.slidingLayout.panelState}") } binding.nameMain.text = Html.fromHtml(getString(R.string.hello)) @@ -116,10 +116,10 @@ class DemoActivity : AppCompatActivity() { when (item.itemId) { R.id.action_toggle -> { if (binding.slidingLayout.panelState != PanelState.HIDDEN) { - binding.slidingLayout.setPanelState(PanelState.HIDDEN) + binding.slidingLayout.panelState = PanelState.HIDDEN item.setTitle(R.string.action_show) } else { - binding.slidingLayout.setPanelState(PanelState.COLLAPSED) + binding.slidingLayout.panelState = PanelState.COLLAPSED item.setTitle(R.string.action_hide) } return true @@ -128,11 +128,11 @@ class DemoActivity : AppCompatActivity() { R.id.action_anchor -> { if (binding.slidingLayout.anchorPoint == 1.0f) { binding.slidingLayout.anchorPoint = 0.7f - binding.slidingLayout.setPanelState(PanelState.ANCHORED) + binding.slidingLayout.panelState = PanelState.ANCHORED item.setTitle(R.string.action_anchor_disable) } else { binding.slidingLayout.anchorPoint = 1.0f - binding.slidingLayout.setPanelState(PanelState.COLLAPSED) + binding.slidingLayout.panelState = PanelState.COLLAPSED item.setTitle(R.string.action_anchor_enable) } return true @@ -144,7 +144,7 @@ class DemoActivity : AppCompatActivity() { @Deprecated("Deprecated in Java") override fun onBackPressed() { if ((binding.slidingLayout.panelState == PanelState.EXPANDED || binding.slidingLayout.panelState == PanelState.ANCHORED)) { - binding.slidingLayout.setPanelState(PanelState.COLLAPSED) + binding.slidingLayout.panelState = PanelState.COLLAPSED } else { super.onBackPressed() } diff --git a/library/src/main/kotlin/com/sothree/slidinguppanel/SlidingUpPanelLayout.kt b/library/src/main/kotlin/com/sothree/slidinguppanel/SlidingUpPanelLayout.kt index a992bc1..4b56d1f 100644 --- a/library/src/main/kotlin/com/sothree/slidinguppanel/SlidingUpPanelLayout.kt +++ b/library/src/main/kotlin/com/sothree/slidinguppanel/SlidingUpPanelLayout.kt @@ -184,41 +184,40 @@ open class SlidingUpPanelLayout @JvmOverloads constructor( */ private var mainView: View? = null - private var slideState: PanelState = DEFAULT_SLIDE_STATE +// private var slideState: PanelState = DEFAULT_SLIDE_STATE - val panelState: PanelState - get() = slideState - - fun setPanelState(value: PanelState) { - // Abort any running animation, to allow state change - if (dragHelper?.viewDragState == ViewDragHelper.STATE_SETTLING) { - dragHelper?.abort() - } - require(value !== PanelState.DRAGGING) { "Panel state can't be DRAGGING during state set" } - if (!isEnabled || - (!firstLayout && (slideableView == null)) || - (value === slideState) || (slideState === PanelState.DRAGGING) - ) return - if (firstLayout) { - setPanelStateInternal(value) - } else { - if (slideState === PanelState.HIDDEN) { - slideableView!!.visibility = VISIBLE - requestLayout() + var panelState: PanelState = DEFAULT_SLIDE_STATE + set(value) { + // Abort any running animation, to allow state change + if (dragHelper?.viewDragState == ViewDragHelper.STATE_SETTLING) { + dragHelper?.abort() } - when (value) { - PanelState.ANCHORED -> smoothSlideTo(anchorPoint, 0) - PanelState.COLLAPSED -> smoothSlideTo(0f, 0) - PanelState.EXPANDED -> smoothSlideTo(maxSlideOffset, 0) - PanelState.HIDDEN -> { - val newTop = computePanelTopPosition(0.0f) + if (isSlidingUp) +panelHeight else -panelHeight - smoothSlideTo(computeSlideOffset(newTop), 0) + require(value !== PanelState.DRAGGING) { "Panel state can't be DRAGGING during state set" } + if (!isEnabled || + (!firstLayout && (slideableView == null)) || + (value === panelState) || (panelState === PanelState.DRAGGING) + ) return + if (firstLayout) { + setPanelStateInternal(value) + } else { + if (panelState === PanelState.HIDDEN) { + slideableView!!.visibility = VISIBLE + requestLayout() } + when (value) { + PanelState.ANCHORED -> smoothSlideTo(anchorPoint, 0) + PanelState.COLLAPSED -> smoothSlideTo(0f, 0) + PanelState.EXPANDED -> smoothSlideTo(maxSlideOffset, 0) + PanelState.HIDDEN -> { + val newTop = computePanelTopPosition(0.0f) + if (isSlidingUp) +panelHeight else -panelHeight + smoothSlideTo(computeSlideOffset(newTop), 0) + } - PanelState.DRAGGING -> Unit + PanelState.DRAGGING -> Unit + } + field = value } } - } /** * If the current slide state is DRAGGING, this will store the last non dragging state @@ -340,7 +339,7 @@ open class SlidingUpPanelLayout @JvmOverloads constructor( clipPanel = ta.getBoolean(R.styleable.SlidingUpPanelLayout_umanoClipPanel, DEFAULT_CLIP_PANEL_FLAG) anchorPoint = ta.getFloat(R.styleable.SlidingUpPanelLayout_umanoAnchorPoint, DEFAULT_ANCHOR_POINT) maxSlideOffset = ta.getFloat(R.styleable.SlidingUpPanelLayout_umanoMaxSlidingOffset, DEFAULT_MAX_SLIDING_OFFSET) - slideState = PanelState.entries.toTypedArray()[ta.getInt(R.styleable.SlidingUpPanelLayout_umanoInitialState, DEFAULT_SLIDE_STATE.ordinal)] + panelState = PanelState.entries.toTypedArray()[ta.getInt(R.styleable.SlidingUpPanelLayout_umanoInitialState, DEFAULT_SLIDE_STATE.ordinal)] val interpolatorResId = ta.getResourceId(R.styleable.SlidingUpPanelLayout_umanoScrollInterpolator, -1) if (interpolatorResId != -1) { scrollerInterpolator = AnimationUtils.loadInterpolator(context, interpolatorResId) @@ -391,7 +390,7 @@ open class SlidingUpPanelLayout @JvmOverloads constructor( * Set sliding enabled flag */ var isTouchEnabled: Boolean - get() = touchEnabled && slideableView != null && slideState !== PanelState.HIDDEN + get() = touchEnabled && slideableView != null && panelState !== PanelState.HIDDEN set(enabled) { touchEnabled = enabled } @@ -473,8 +472,8 @@ open class SlidingUpPanelLayout @JvmOverloads constructor( it.isFocusableInTouchMode = false it.setOnClickListener(OnClickListener { if (!isEnabled || !isTouchEnabled) return@OnClickListener - slideState = - if (slideState !== PanelState.EXPANDED && slideState !== PanelState.ANCHORED) { + panelState = + if (panelState !== PanelState.EXPANDED && panelState !== PanelState.ANCHORED) { if (anchorPoint < DEFAULT_ANCHOR_POINT) { PanelState.ANCHORED } else { @@ -642,7 +641,7 @@ open class SlidingUpPanelLayout @JvmOverloads constructor( // If the sliding panel is not visible, then put the whole view in the hidden state if (slideableView?.visibility != VISIBLE) { - slideState = PanelState.HIDDEN + panelState = PanelState.HIDDEN } val layoutHeight = heightSize - paddingTop - paddingBottom val layoutWidth = widthSize - paddingLeft - paddingRight @@ -659,7 +658,7 @@ open class SlidingUpPanelLayout @JvmOverloads constructor( var height = layoutHeight var width = layoutWidth if (child === mainView) { - if (!overlayContent && slideState !== PanelState.HIDDEN) { + if (!overlayContent && panelState !== PanelState.HIDDEN) { height -= panelHeight } width -= lp.leftMargin + lp.rightMargin @@ -706,7 +705,7 @@ open class SlidingUpPanelLayout @JvmOverloads constructor( val paddingTop = paddingTop val childCount = childCount if (firstLayout) { - slideOffset = when (slideState) { + slideOffset = when (panelState) { PanelState.EXPANDED -> maxSlideOffset PanelState.ANCHORED -> anchorPoint PanelState.HIDDEN -> { @@ -946,9 +945,9 @@ open class SlidingUpPanelLayout @JvmOverloads constructor( } private fun setPanelStateInternal(state: PanelState) { - if (slideState === state) return - val oldState = slideState - slideState = state + if (panelState === state) return + val oldState = panelState + panelState = state dispatchOnPanelStateChanged(this, oldState, state) } @@ -964,8 +963,8 @@ open class SlidingUpPanelLayout @JvmOverloads constructor( } private fun onPanelDragged(newTop: Int) { - if (slideState !== PanelState.DRAGGING) { - lastNotDraggingSlideState = slideState + if (panelState !== PanelState.DRAGGING) { + lastNotDraggingSlideState = panelState } setPanelStateInternal(PanelState.DRAGGING) // Recompute the slide offset based on the new top position @@ -1133,7 +1132,7 @@ open class SlidingUpPanelLayout @JvmOverloads constructor( bundle.putParcelable("superState", super.onSaveInstanceState()) bundle.putSerializable( SLIDING_STATE, - if (slideState !== PanelState.DRAGGING) slideState else lastNotDraggingSlideState + if (panelState !== PanelState.DRAGGING) panelState else lastNotDraggingSlideState ) return bundle } @@ -1142,7 +1141,7 @@ open class SlidingUpPanelLayout @JvmOverloads constructor( var parcelable: Parcelable? = state if (parcelable is Bundle) { val bundle = parcelable - slideState = requireNotNull(bundle.getSerializable(SLIDING_STATE)) as PanelState + panelState = requireNotNull(bundle.getSerializable(SLIDING_STATE)) as PanelState parcelable = bundle.getParcelable("superState") } super.onRestoreInstanceState(parcelable)