Created Shuffle table to store the shuffle settings #34
This commit is contained in:
committed by
amazing-username
parent
22cd42dd69
commit
92d3270d91
@@ -34,6 +34,8 @@ import com.example.mear.listeners.TrackElaspingChange
|
||||
import com.example.mear.playback.service.MusicService
|
||||
import com.example.mear.models.PlayControls
|
||||
import com.example.mear.R
|
||||
import com.example.mear.constants.ControlTypes
|
||||
import com.example.mear.repositories.ShuffleRepository
|
||||
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
@@ -82,6 +84,7 @@ class MainActivity : AppCompatActivity() {
|
||||
TrackElapsing.max = 100
|
||||
|
||||
try {
|
||||
initializeShuffle()
|
||||
initializeServices()
|
||||
initializeClickListeners()
|
||||
}
|
||||
@@ -115,18 +118,23 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
SettingsLink.setOnClickListener {
|
||||
val intent = Intent(this, SettingsActivity::class.java)
|
||||
try {
|
||||
startActivity(intent)
|
||||
}
|
||||
catch (ex: Exception) {
|
||||
val exMsg = ex.message
|
||||
println(exMsg)
|
||||
}
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
private fun initializeServices() {
|
||||
doBindService()
|
||||
}
|
||||
private fun initializeShuffle() {
|
||||
val shuffleMode = ShuffleRepository(this).getShuffleMode()
|
||||
when (shuffleMode) {
|
||||
ControlTypes.SHUFFLE_ON -> {
|
||||
ShuffleTracks.setText(R.string.shuffle_on)
|
||||
}
|
||||
ControlTypes.SHUFFLE_OFF -> {
|
||||
ShuffleTracks.setText(R.string.shuffle_off)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun toggleShuffle() {
|
||||
val shuffleText = ShuffleTracks.text.toString()
|
||||
@@ -146,6 +154,8 @@ class MainActivity : AppCompatActivity() {
|
||||
ShuffleTracks.setText(R.string.shuffle_off)
|
||||
}
|
||||
}
|
||||
val playC = PlayControls(shuffleOn!!, null)
|
||||
ShuffleRepository(this).updateShuffleMode(playC)
|
||||
}
|
||||
private fun toggleRepeat() {
|
||||
val repeatText = RepeatTrack.text.toString()
|
||||
@@ -185,8 +195,9 @@ class MainActivity : AppCompatActivity() {
|
||||
private fun playNextSongTrack() {
|
||||
NextTrack.isEnabled = false
|
||||
try {
|
||||
val controls = PlayControls(shuffleOn!!, repeatOn!!)
|
||||
musicService!!.playNextTrack(controls)
|
||||
//val controls = PlayControls(shuffleOn!!, repeatOn!!)
|
||||
//musicService!!.playNextTrack(controls)
|
||||
musicService!!.playNextTrack()
|
||||
|
||||
configureTrackDisplay()
|
||||
}
|
||||
@@ -199,8 +210,9 @@ class MainActivity : AppCompatActivity() {
|
||||
private fun playPreviousSongTrack() {
|
||||
PreviousTrack.isEnabled = false
|
||||
try {
|
||||
val controls = PlayControls(shuffleOn!!, repeatOn!!)
|
||||
musicService!!.playPreviousTrack(controls)
|
||||
//val controls = PlayControls(shuffleOn!!, repeatOn!!)
|
||||
//musicService!!.playPreviousTrack(controls)
|
||||
musicService!!.playPreviousTrack()
|
||||
|
||||
configureTrackDisplay()
|
||||
}
|
||||
@@ -231,7 +243,6 @@ class MainActivity : AppCompatActivity() {
|
||||
if (mmr.embeddedPicture != null) {
|
||||
trackCover = mmr.embeddedPicture
|
||||
}
|
||||
updateTrackProgress()
|
||||
|
||||
resetControls()
|
||||
|
||||
@@ -259,7 +270,7 @@ class MainActivity : AppCompatActivity() {
|
||||
TrackCover!!.imageBitmap = null
|
||||
}
|
||||
private fun updateTrackProgress() {
|
||||
musicHandler!!.postDelayed(musicTrackTimeUpdateTask, 250)
|
||||
musicHandler!!.postDelayed(musicTrackTimeUpdateTask, 100)
|
||||
}
|
||||
private fun configurePlayControlsDisplay() {
|
||||
PlayTrack.background = null
|
||||
@@ -301,7 +312,7 @@ class MainActivity : AppCompatActivity() {
|
||||
configureTrackDisplay()
|
||||
}
|
||||
|
||||
musicHandler!!.postDelayed(this, 250)
|
||||
musicHandler!!.postDelayed(this, 100)
|
||||
}
|
||||
catch (ex: Exception) {
|
||||
val exMsg = ex.message
|
||||
@@ -317,6 +328,7 @@ class MainActivity : AppCompatActivity() {
|
||||
val demo = launch {
|
||||
musicService = (service as MusicService.LocalBinder).service
|
||||
initializeChangeListeners()
|
||||
updateTrackProgress()
|
||||
}
|
||||
demo.start()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.example.mear.constants
|
||||
|
||||
object ControlTypes {
|
||||
const val SHUFFLE_ON = "Shuffle On"
|
||||
const val SHUFFLE_OFF = "Shuffle Off"
|
||||
}
|
||||
@@ -2,10 +2,15 @@ package com.example.mear.management
|
||||
|
||||
import android.content.Context
|
||||
import android.database.sqlite.SQLiteDatabase
|
||||
import com.example.mear.constants.ControlTypes
|
||||
|
||||
import java.lang.Exception
|
||||
|
||||
import org.jetbrains.anko.db.*
|
||||
import org.jetbrains.anko.db.ManagedSQLiteOpenHelper
|
||||
import java.lang.Exception
|
||||
|
||||
import com.example.mear.models.PlayControls
|
||||
import com.example.mear.repositories.ShuffleRepository
|
||||
|
||||
class DatabaseManager(ctx: Context): ManagedSQLiteOpenHelper(ctx, "Mear",
|
||||
null, 1) {
|
||||
@@ -42,13 +47,19 @@ class DatabaseManager(ctx: Context): ManagedSQLiteOpenHelper(ctx, "Mear",
|
||||
"TrackId" to INTEGER
|
||||
)
|
||||
db!!.createTable(
|
||||
"SettingsActivity", true,
|
||||
"Settings", true,
|
||||
"Id" to INTEGER + PRIMARY_KEY + UNIQUE,
|
||||
"DarkTheme" to org.jetbrains.anko.db.REAL
|
||||
)
|
||||
db!!.createTable(
|
||||
"Shuffle", true,
|
||||
"Id" to INTEGER + PRIMARY_KEY + UNIQUE,
|
||||
"Mode" to TEXT
|
||||
)
|
||||
}
|
||||
catch (ex: Exception) {
|
||||
}
|
||||
initializeShuffle(db)
|
||||
}
|
||||
|
||||
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
|
||||
@@ -56,11 +67,22 @@ class DatabaseManager(ctx: Context): ManagedSQLiteOpenHelper(ctx, "Mear",
|
||||
db!!.dropTable("Track")
|
||||
db!!.dropTable("TrackCount")
|
||||
db!!.dropTable("PlayCount")
|
||||
db!!.dropTable("SettingsActivity")
|
||||
|
||||
db!!.dropTable("Settings")
|
||||
db!!.dropTable("Shuffle")
|
||||
}
|
||||
catch (ex: Exception) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun initializeShuffle(db: SQLiteDatabase?) {
|
||||
try {
|
||||
db!!.insert("Shuffle",
|
||||
"Mode" to ControlTypes.SHUFFLE_OFF)
|
||||
}
|
||||
catch (ex: Exception) {
|
||||
val exMsg = ex.message
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mear.models
|
||||
|
||||
data class PlayControls(val shuffleOn: Boolean, val repeatOn: Boolean) {
|
||||
data class PlayControls(val shuffleOn: Boolean?, val repeatOn: Boolean?) {
|
||||
}
|
||||
@@ -10,10 +10,12 @@ import android.widget.Toast
|
||||
import java.lang.Exception
|
||||
import kotlin.random.Random
|
||||
|
||||
import com.example.mear.constants.ControlTypes
|
||||
import com.example.mear.management.MusicFiles
|
||||
import com.example.mear.management.TrackManager
|
||||
import com.example.mear.models.PlayControls
|
||||
import com.example.mear.models.Track
|
||||
import com.example.mear.repositories.ShuffleRepository
|
||||
import com.example.mear.repositories.TrackRepository
|
||||
|
||||
|
||||
@@ -21,7 +23,7 @@ class MusicService: Service() {
|
||||
|
||||
private var trackPlayer: MediaPlayer? = null
|
||||
private var currentSongIndex: Int? = null
|
||||
private var shuffleOn: Boolean? = false
|
||||
private var shuffleOn: Boolean? = null
|
||||
private var repeatOn: Boolean? = false
|
||||
private val mBinder = LocalBinder()
|
||||
private val seconds = 4
|
||||
@@ -84,7 +86,21 @@ class MusicService: Service() {
|
||||
}
|
||||
fun playPreviousTrack() {
|
||||
try {
|
||||
|
||||
val duration = trackPlayer!!.currentPosition / 1000
|
||||
shuffleOn = retrieveShuffleMode()
|
||||
trackPlayer!!.reset()
|
||||
if (duration > seconds) {
|
||||
trackPlayer!!.setDataSource(TrackRepository(this).getTrack(currentSongIndex!!).songPath)
|
||||
trackPlayer!!.prepare()
|
||||
trackPlayer!!.start()
|
||||
}
|
||||
else {
|
||||
val previousTrackNumber = fetchSongIndex(PlayTypes.PlayPreviousSong)
|
||||
val track = TrackRepository(this).getTrack(previousTrackNumber)
|
||||
trackPlayer!!.setDataSource(track.songPath)
|
||||
trackPlayer!!.prepare()
|
||||
trackPlayer!!.start()
|
||||
}
|
||||
}
|
||||
catch (ex: Exception) {
|
||||
val exMsg = ex.message
|
||||
@@ -93,6 +109,7 @@ class MusicService: Service() {
|
||||
fun playNextTrack() {
|
||||
try {
|
||||
trackPlayer!!.reset()
|
||||
shuffleOn = retrieveShuffleMode()
|
||||
var nextTrack = fetchSongIndex(PlayTypes.PlayNextSong)
|
||||
val track = TrackRepository(this).getTrack(nextTrack)
|
||||
trackPlayer!!.setDataSource(track.songPath)
|
||||
@@ -243,9 +260,47 @@ class MusicService: Service() {
|
||||
val paths = mp3Paths.allSongs
|
||||
val trackMgr = TrackManager(paths!!)
|
||||
trackMgr.configureTracks(this)
|
||||
initializeShuffleMode()
|
||||
}
|
||||
private fun initializeShuffleMode() {
|
||||
try {
|
||||
val shuffleMode = ShuffleRepository(this).getShuffleMode()
|
||||
when (shuffleMode) {
|
||||
ControlTypes.SHUFFLE_ON -> {
|
||||
shuffleOn = true
|
||||
}
|
||||
ControlTypes.SHUFFLE_OFF -> {
|
||||
shuffleOn = false
|
||||
}
|
||||
null -> {
|
||||
shuffleOn = false
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (ex: Exception) {
|
||||
val exMsg = ex.message
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun retrieveShuffleMode(): Boolean? {
|
||||
val shuffleMode = ShuffleRepository(this).getShuffleMode()
|
||||
when (shuffleMode) {
|
||||
ControlTypes.SHUFFLE_ON -> {
|
||||
return true
|
||||
}
|
||||
ControlTypes.SHUFFLE_OFF -> {
|
||||
return false
|
||||
}
|
||||
null -> {
|
||||
return null
|
||||
}
|
||||
else -> {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun trackRepositoryEmpty(): Boolean? {
|
||||
val trackCount = retrieveSongCount()
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.example.mear.repositories
|
||||
|
||||
import android.content.Context
|
||||
|
||||
import org.jetbrains.anko.db.*
|
||||
|
||||
import com.example.mear.constants.ControlTypes
|
||||
import com.example.mear.database
|
||||
import com.example.mear.models.PlayControls
|
||||
|
||||
class ShuffleRepository {
|
||||
private var context: Context? = null
|
||||
|
||||
|
||||
constructor(context: Context) {
|
||||
this.context = context
|
||||
}
|
||||
|
||||
|
||||
fun getShuffleMode(): String = context!!.database.use {
|
||||
select("Shuffle").limit(1)
|
||||
.parseSingle(object : MapRowParser<String> {
|
||||
override fun parseRow(columns: Map<String, Any?>): String {
|
||||
|
||||
return columns.getValue("Mode").toString()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fun insertShuffleMode(shuffleControls: PlayControls) = context!!.database.use {
|
||||
var shuffleMode: String? = ControlTypes.SHUFFLE_OFF
|
||||
if (shuffleControls.shuffleOn!!) {
|
||||
shuffleMode = ControlTypes.SHUFFLE_ON
|
||||
}
|
||||
insert("Shuffle",
|
||||
"Mode" to shuffleMode)
|
||||
}
|
||||
|
||||
fun updateShuffleMode(shuffleControls: PlayControls) = context!!.database.use {
|
||||
var shuffleMode: String? = ControlTypes.SHUFFLE_OFF
|
||||
if (shuffleControls.shuffleOn!!) {
|
||||
shuffleMode = ControlTypes.SHUFFLE_ON
|
||||
}
|
||||
update("Shuffle",
|
||||
"Mode" to shuffleMode).exec()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user