SharedPreferencesLocalRepository.kt
package chat.rocket.android.infrastructure
import android.content.SharedPreferences
import androidx.core.content.edit
import chat.rocket.common.model.User
import com.squareup.moshi.Moshi
class SharedPreferencesLocalRepository(
private val preferences: SharedPreferences,
moshi: Moshi
) : LocalRepository {
private val userAdapter = moshi.adapter(User::class.java)
override fun getCurrentUser(url: String): User? {
return get("${url}_${LocalRepository.USER_KEY}", null)?.let {
userAdapter.fromJson(it)
}
}
override fun saveCurrentUser(url: String, user: User) {
save("${url}_${LocalRepository.USER_KEY}", userAdapter.toJson(user))
}
override fun saveLastChatroomsRefresh(url: String, timestamp: Long) {
save("$url${LocalRepository.LAST_CHATROOMS_REFRESH}", timestamp)
}
override fun getLastChatroomsRefresh(url: String) =
getLong("$url${LocalRepository.LAST_CHATROOMS_REFRESH}", 0L)
override fun getBoolean(key: String, defValue: Boolean) = preferences.getBoolean(key, defValue)
override fun getFloat(key: String, defValue: Float) = preferences.getFloat(key, defValue)
override fun getInt(key: String, defValue: Int) = preferences.getInt(key, defValue)
override fun getLong(key: String, defValue: Long) = preferences.getLong(key, defValue)
override fun save(key: String, value: Int) = preferences.edit { putInt(key, value) }
override fun save(key: String, value: Float) = preferences.edit { putFloat(key, value) }
override fun save(key: String, value: Long) = preferences.edit { putLong(key, value) }
override fun save(key: String, value: Boolean) = preferences.edit { putBoolean(key, value) }
override fun save(key: String, value: String?) = preferences.edit { putString(key, value) }
override fun get(key: String, defValue: String?): String? = preferences.getString(key, defValue)
override fun clear(key: String) = preferences.edit { remove(key) }
override fun clearAllFromServer(server: String) {
preferences.all.keys.forEach { key ->
if (key.startsWith(server, ignoreCase = true)) {
clear(key)
}
}
}
}