Created Shuffle table to store the shuffle settings #34

This commit is contained in:
amazing-username
2019-03-12 00:45:30 -04:00
committed by amazing-username
parent 22cd42dd69
commit 92d3270d91
6 changed files with 163 additions and 21 deletions
@@ -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)
}
}
}
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()
}
}