Skip to content

Commit d63c21c

Browse files
committed
Add Swipe Gestures to change songs
1 parent 17b72e6 commit d63c21c

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed

app/src/main/java/com/naman14/timberx/ui/fragments/NowPlayingFragment.kt

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import android.view.MenuInflater
2626
import android.view.MenuItem
2727
import android.view.View
2828
import android.view.ViewGroup
29+
import android.view.GestureDetector
30+
import android.view.MotionEvent
2931
import com.naman14.timberx.R
3032
import com.naman14.timberx.databinding.FragmentNowPlayingBinding
3133
import com.naman14.timberx.extensions.addFragment
@@ -53,14 +55,19 @@ import kotlinx.android.synthetic.main.fragment_now_playing.songTitle
5355
import kotlinx.android.synthetic.main.fragment_now_playing.upNextAlbumArt
5456
import kotlinx.android.synthetic.main.fragment_now_playing.upNextArtist
5557
import kotlinx.android.synthetic.main.fragment_now_playing.upNextTitle
58+
import kotlinx.android.synthetic.main.fragment_now_playing.frag_now_playing_rl
5659
import org.koin.android.ext.android.inject
60+
import kotlin.math.absoluteValue
5761

58-
class NowPlayingFragment : BaseNowPlayingFragment() {
62+
class NowPlayingFragment : BaseNowPlayingFragment(), GestureDetector.OnGestureListener {
5963
var binding by AutoClearedValue<FragmentNowPlayingBinding>(this)
6064
private var queueData: QueueData? = null
6165

6266
private val songsRepository by inject<SongsRepository>()
6367

68+
private lateinit var gestureDetector: GestureDetector
69+
val MIN_FLING_VELOCITY = 800
70+
6471
override fun onCreateView(
6572
inflater: LayoutInflater,
6673
container: ViewGroup?,
@@ -139,6 +146,8 @@ class NowPlayingFragment : BaseNowPlayingFragment() {
139146
btnBack.setOnClickListener { safeActivity.onBackPressed() }
140147

141148
buildUIControls()
149+
150+
setupSwipeGestures()
142151
}
143152

144153
private fun buildUIControls() {
@@ -152,6 +161,11 @@ class NowPlayingFragment : BaseNowPlayingFragment() {
152161
}
153162
}
154163

164+
private fun setupSwipeGestures() {
165+
gestureDetector = GestureDetector(activity, this)
166+
frag_now_playing_rl.setOnTouchListener(touchListener)
167+
}
168+
155169
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
156170
inflater.inflate(R.menu.menu_main, menu)
157171
super.onCreateOptionsMenu(menu, inflater)
@@ -177,4 +191,42 @@ class NowPlayingFragment : BaseNowPlayingFragment() {
177191
seekBar.disconnectController()
178192
super.onStop()
179193
}
194+
195+
var touchListener: View.OnTouchListener = View.OnTouchListener {
196+
_: View, motionEvent: MotionEvent -> gestureDetector.onTouchEvent(motionEvent)
197+
}
198+
199+
override fun onDown(event: MotionEvent): Boolean {
200+
return true
201+
}
202+
203+
override fun onFling(
204+
e1: MotionEvent,
205+
e2: MotionEvent,
206+
velocityX: Float,
207+
velocityY: Float
208+
): Boolean {
209+
if (velocityX.absoluteValue > MIN_FLING_VELOCITY) {
210+
if (velocityX < 0) {
211+
mainViewModel.transportControls().skipToNext()
212+
} else {
213+
mainViewModel.transportControls().skipToPrevious()
214+
}
215+
}
216+
return true
217+
}
218+
219+
override fun onShowPress(e: MotionEvent?) {
220+
}
221+
222+
override fun onSingleTapUp(e: MotionEvent?): Boolean {
223+
return true
224+
}
225+
226+
override fun onLongPress(e: MotionEvent?) {
227+
}
228+
229+
override fun onScroll(e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, distanceY: Float): Boolean {
230+
return true
231+
}
180232
}

app/src/main/res/layout/fragment_now_playing.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
type="com.naman14.timberx.ui.viewmodels.NowPlayingViewModel" />
1111
</data>
1212

13-
<RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto"
13+
<RelativeLayout
14+
android:id="@+id/frag_now_playing_rl"
15+
xmlns:app="http://schemas.android.com/apk/res-auto"
1416
android:layout_width="match_parent"
1517
android:layout_height="match_parent"
1618
android:layout_gravity="top"

0 commit comments

Comments
 (0)