Skip to content
This repository was archived by the owner on Feb 27, 2021. It is now read-only.

Commit

Permalink
starts implementing #75
Browse files Browse the repository at this point in the history
  • Loading branch information
Ivo Berger committed May 8, 2019
1 parent 23d6ca3 commit d9da3fd
Show file tree
Hide file tree
Showing 9 changed files with 73 additions and 20 deletions.
2 changes: 0 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
<activity android:name=".ui.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.SEARCH" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ivoberger.enq.utils
package com.ivoberger.enq.logging

import timber.log.Timber

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ivoberger.enq.utils
package com.ivoberger.enq.logging

import android.content.Context
import android.util.Log
Expand Down
17 changes: 17 additions & 0 deletions app/src/main/java/com/ivoberger/enq/model/ServerInfo.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.ivoberger.enq.model

import com.ivoberger.jmusicbot.model.VersionInfo
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import com.squareup.moshi.Types
import java.lang.reflect.Type

@JsonClass(generateAdapter = true)
data class ServerInfo(
@Json(name = "baseUrl") val baseUrl: String,
@Json(name = "versionInfo") val versionInfo: VersionInfo
) {
companion object {
val listMoshiType: Type = Types.newParameterizedType(List::class.java, ServerInfo::class.java)
}
}
39 changes: 28 additions & 11 deletions app/src/main/java/com/ivoberger/enq/persistence/AppSettings.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import androidx.core.content.edit
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.ivoberger.enq.R
import com.ivoberger.enq.model.ServerInfo
import com.ivoberger.enq.utils.addIfNotExistent
import com.ivoberger.jmusicbot.model.*
import com.squareup.moshi.Moshi
import kotlinx.coroutines.*
Expand All @@ -21,23 +23,26 @@ object AppSettings {
private const val KEY_LAST_PROVIDER = "lastProvider"
private const val KEY_LAST_SUGGESTER = "lastSuggester"
private const val KEY_SAVED_USERS = "savedUsers"
private const val KEY_SAVED_SERVERS = "savedServers"
private const val KEY_FAVORITES = "favorites"

// serialization util vars
private val mMoshi by lazy { Moshi.Builder().build() }
private val mMusicBotPluginAdapter: MusicBotPluginJsonAdapter by lazy { MusicBotPluginJsonAdapter(mMoshi) }
private val mUserListAdapter by lazy { mMoshi.adapter<List<User>>(MoshiTypes.UserList) }
private val mFavoritesAdapter by lazy { mMoshi.adapter<List<Song>>(MoshiTypes.SongList) }
private val mServerInfoAdapter by lazy { mMoshi.adapter<List<ServerInfo>>(ServerInfo.listMoshiType) }

var lastProvider: MusicBotPlugin?
get() = loadString(KEY_LAST_PROVIDER)?.let {
Timber.d("Getting provider")
mMusicBotPluginAdapter.fromJson(it)
}
get() = loadString(KEY_LAST_PROVIDER)?.let { mMusicBotPluginAdapter.fromJson(it) }
set(value) = saveString(KEY_LAST_PROVIDER, mMusicBotPluginAdapter.toJson(value))
var lastSuggester: MusicBotPlugin?
get() = loadString(KEY_LAST_SUGGESTER)?.let { mMusicBotPluginAdapter.fromJson(it) }
set(value) = value?.let { saveString(KEY_LAST_SUGGESTER, mMusicBotPluginAdapter.toJson(it)) } ?: Unit


// favorites management

var favorites: List<Song>
get() = loadString(KEY_FAVORITES)?.let { mFavoritesAdapter.fromJson(it) } ?: listOf()
set(value) {
Expand All @@ -63,22 +68,34 @@ object AppSettings {
}
}


// saved user management

private var savedUsers: List<User>
get() = loadString(KEY_SAVED_USERS)?.let { mUserListAdapter.fromJson(it) } ?: listOf()
set(value) = saveString(KEY_SAVED_USERS, mUserListAdapter.toJson(value))

fun addUser(newUser: User) {
if (!savedUsers.contains(newUser)) {
Timber.d("Adding user ${newUser.name}")
savedUsers = savedUsers + newUser
}
Timber.d("Adding user ${newUser.name}")
savedUsers = savedUsers.addIfNotExistent(newUser)
}

fun getLatestUser(): User? = savedUsers.lastOrNull()

fun clearSavedUsers() {
savedUsers = listOf()
}
fun clearSavedUsers() = run { savedUsers = listOf() }


// saved server management

private var savedServers: List<ServerInfo>
get() = loadString(KEY_SAVED_SERVERS)?.let { mServerInfoAdapter.fromJson(it) } ?: listOf()
set(value) = saveString(KEY_SAVED_SERVERS, mServerInfoAdapter.toJson(value))

fun addServer(newServer: ServerInfo) = run { savedServers = savedServers.addIfNotExistent(newServer) }
fun isServerKnown(toCheck: ServerInfo) = savedServers.contains(toCheck)


// utils

private fun saveString(key: String, value: String) = preferences.edit { putString(key, value) }
private fun loadString(key: String): String? = preferences.getString(key, null)
Expand Down
13 changes: 11 additions & 2 deletions app/src/main/java/com/ivoberger/enq/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,17 @@ import androidx.navigation.fragment.findNavController
import androidx.navigation.ui.setupWithNavController
import com.ivoberger.enq.BuildConfig
import com.ivoberger.enq.R
import com.ivoberger.enq.logging.EnQDebugTree
import com.ivoberger.enq.logging.FirebaseTree
import com.ivoberger.enq.persistence.AppSettings
import com.ivoberger.enq.ui.fragments.PlayerFragment
import com.ivoberger.enq.ui.listener.ConnectionListener
import com.ivoberger.enq.ui.listener.MainNavigationListener
import com.ivoberger.enq.ui.viewmodel.MainViewModel
import com.ivoberger.enq.utils.*
import com.ivoberger.enq.utils.awaitEnd
import com.ivoberger.enq.utils.icon
import com.ivoberger.enq.utils.showLoginDialog
import com.ivoberger.enq.utils.showServerDiscoveryDialog
import com.ivoberger.jmusicbot.JMusicBot
import com.mikepenz.community_material_typeface_library.CommunityMaterial
import com.mikepenz.iconics.typeface.IIcon
Expand Down Expand Up @@ -54,7 +59,11 @@ class MainActivity : AppCompatActivity() {
// general setup
lifecycleScope.launch(Dispatchers.Default) {
// logging (and crash reporting)
Timber.plant(if (BuildConfig.DEBUG) EnQDebugTree() else FirebaseTree(this@MainActivity))
Timber.plant(
if (BuildConfig.DEBUG) EnQDebugTree() else FirebaseTree(
this@MainActivity
)
)
}

mNavController.addOnDestinationChangedListener(MainNavigationListener(this))
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/java/com/ivoberger/enq/utils/List.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.ivoberger.enq.utils

fun <T> List<T>.addIfNotExistent(new: T): List<T> =
if (!contains(new)) this + new
else this
4 changes: 1 addition & 3 deletions jmusicbot/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,7 @@

# don't obfuscate data classes
-keep @kotlin.Metadata class com.ivoberger.jmusicbot.model.**
-keep class com.ivoberger.jmusicbot.model.** {
<fields>;
}
-keep class com.ivoberger.jmusicbot.model.** {*;}

#### RETROFIT ####
# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.ivoberger.jmusicbot.model

import com.squareup.moshi.JsonClass

@JsonClass(generateAdapter = true)
data class VersionInfo(val apiVersion: String, val implementation: ImplementationInfo) {
@JsonClass(generateAdapter = true)
data class ImplementationInfo(val name: String, val version: String, val projectInfo: String? = null)
}

0 comments on commit d9da3fd

Please sign in to comment.