Skip to content

Commit b6118bd

Browse files
committed
Rework panelState to Kotlin property
1 parent b402434 commit b6118bd

File tree

3 files changed

+36
-34
lines changed

3 files changed

+36
-34
lines changed

app/src/androidTest/kotlin/info/hannes/slidingup/demo/tools/Matcher.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ fun setValue(value: PanelState): ViewAction {
3636

3737
override fun perform(uiController: UiController?, view: View) {
3838
val slidingUpPanelLayout = view as SlidingUpPanelLayout
39-
slidingUpPanelLayout.setPanelState(value)
39+
slidingUpPanelLayout.panelState = value
4040
}
4141
}
4242
}

app/src/main/kotlin/info/hannes/slidinguppanel/demo/DemoActivity.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class DemoActivity : AppCompatActivity() {
8080
}
8181
})
8282
binding.slidingLayout.setFadeOnClickListener {
83-
binding.slidingLayout.setPanelState(PanelState.COLLAPSED)
83+
binding.slidingLayout.panelState = PanelState.COLLAPSED
8484
Log.i(tag, "FadeOnClickListener ${binding.slidingLayout.panelState}")
8585
}
8686
binding.nameMain.text = Html.fromHtml(getString(R.string.hello))
@@ -116,10 +116,10 @@ class DemoActivity : AppCompatActivity() {
116116
when (item.itemId) {
117117
R.id.action_toggle -> {
118118
if (binding.slidingLayout.panelState != PanelState.HIDDEN) {
119-
binding.slidingLayout.setPanelState(PanelState.HIDDEN)
119+
binding.slidingLayout.panelState = PanelState.HIDDEN
120120
item.setTitle(R.string.action_show)
121121
} else {
122-
binding.slidingLayout.setPanelState(PanelState.COLLAPSED)
122+
binding.slidingLayout.panelState = PanelState.COLLAPSED
123123
item.setTitle(R.string.action_hide)
124124
}
125125
return true
@@ -128,11 +128,11 @@ class DemoActivity : AppCompatActivity() {
128128
R.id.action_anchor -> {
129129
if (binding.slidingLayout.anchorPoint == 1.0f) {
130130
binding.slidingLayout.anchorPoint = 0.7f
131-
binding.slidingLayout.setPanelState(PanelState.ANCHORED)
131+
binding.slidingLayout.panelState = PanelState.ANCHORED
132132
item.setTitle(R.string.action_anchor_disable)
133133
} else {
134134
binding.slidingLayout.anchorPoint = 1.0f
135-
binding.slidingLayout.setPanelState(PanelState.COLLAPSED)
135+
binding.slidingLayout.panelState = PanelState.COLLAPSED
136136
item.setTitle(R.string.action_anchor_enable)
137137
}
138138
return true
@@ -144,7 +144,7 @@ class DemoActivity : AppCompatActivity() {
144144
@Deprecated("Deprecated in Java")
145145
override fun onBackPressed() {
146146
if ((binding.slidingLayout.panelState == PanelState.EXPANDED || binding.slidingLayout.panelState == PanelState.ANCHORED)) {
147-
binding.slidingLayout.setPanelState(PanelState.COLLAPSED)
147+
binding.slidingLayout.panelState = PanelState.COLLAPSED
148148
} else {
149149
super.onBackPressed()
150150
}

library/src/main/kotlin/com/sothree/slidinguppanel/SlidingUpPanelLayout.kt

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -186,39 +186,41 @@ open class SlidingUpPanelLayout @JvmOverloads constructor(
186186

187187
private var slideState: PanelState = DEFAULT_SLIDE_STATE
188188

189-
val panelState: PanelState
189+
var panelState: PanelState = slideState
190190
get() = slideState
191-
192-
fun setPanelState(state: PanelState) {
193-
// Abort any running animation, to allow state change
194-
if (dragHelper?.viewDragState == ViewDragHelper.STATE_SETTLING) {
195-
dragHelper?.abort()
196-
}
197-
require(state !== PanelState.DRAGGING) { "Panel state can't be DRAGGING during state set" }
198-
if (!isEnabled ||
199-
(!firstLayout && (slideableView == null)) ||
200-
(state === slideState) || (slideState === PanelState.DRAGGING)
201-
) return
202-
if (firstLayout) {
203-
setPanelStateInternal(state)
204-
} else {
205-
if (slideState === PanelState.HIDDEN) {
206-
slideableView!!.visibility = VISIBLE
207-
requestLayout()
191+
set(value) {
192+
slideState = value
193+
field = value
194+
// Abort any running animation, to allow state change
195+
if (dragHelper?.viewDragState == ViewDragHelper.STATE_SETTLING) {
196+
dragHelper?.abort()
208197
}
209-
when (state) {
210-
PanelState.ANCHORED -> smoothSlideTo(anchorPoint, 0)
211-
PanelState.COLLAPSED -> smoothSlideTo(0f, 0)
212-
PanelState.EXPANDED -> smoothSlideTo(maxSlideOffset, 0)
213-
PanelState.HIDDEN -> {
214-
val newTop = computePanelTopPosition(0.0f) + if (isSlidingUp) +panelHeight else -panelHeight
215-
smoothSlideTo(computeSlideOffset(newTop), 0)
198+
require(value !== PanelState.DRAGGING) { "Panel state can't be DRAGGING during state set" }
199+
if (!isEnabled ||
200+
(!firstLayout && (slideableView == null)) ||
201+
(value === slideState) || (slideState === PanelState.DRAGGING)
202+
)
203+
return
204+
if (firstLayout) {
205+
setPanelStateInternal(value)
206+
} else {
207+
if (slideState === PanelState.HIDDEN) {
208+
slideableView!!.visibility = VISIBLE
209+
requestLayout()
216210
}
211+
when (value) {
212+
PanelState.ANCHORED -> smoothSlideTo(anchorPoint, 0)
213+
PanelState.COLLAPSED -> smoothSlideTo(0f, 0)
214+
PanelState.EXPANDED -> smoothSlideTo(maxSlideOffset, 0)
215+
PanelState.HIDDEN -> {
216+
val newTop = computePanelTopPosition(0.0f) + if (isSlidingUp) +panelHeight else -panelHeight
217+
smoothSlideTo(computeSlideOffset(newTop), 0)
218+
}
217219

218-
PanelState.DRAGGING -> Unit
220+
PanelState.DRAGGING -> Unit
221+
}
219222
}
220223
}
221-
}
222224

223225
/**
224226
* If the current slide state is DRAGGING, this will store the last non dragging state

0 commit comments

Comments
 (0)