Newer
Older
OverlayMultiCounter / app / src / main / kotlin / jackall / overlaymulticounter / utils / MySharedPref.kt
MatsumotoKeiju on 8 Nov 2017 2 KB [add] SharedPreferences manager
package jackall.overlaymulticounter.utils

import android.content.Context
import android.content.SharedPreferences
import android.preference.PreferenceManager
import jackall.overlaymulticounter.common.PreferenceKeys
import jackall.overlaymulticounter.common.PreferenceNames

/**
 * SharedPreferencesを管理するクラス
 *
 * Created by matsumoto_k on 2017/11/08.
 */
class MySharedPref(context: Context, val preferenceNames: PreferenceNames) {
    private var sp: SharedPreferences

    init {
        if (preferenceNames == PreferenceNames.DEFAULT) {
            this.sp = PreferenceManager.getDefaultSharedPreferences(context)
        } else {
            this.sp = context.getSharedPreferences(preferenceNames.name, Context.MODE_PRIVATE)
        }
    }

    /**
     * SharedPreferencesから値を取得する
     *
     * @param preferenceKeys 取得する値のkey
     * @param valueClass 取得する値のClass
     * @param defaultValue 取得する値のデフォルトの値
     * @return
     */
    fun getValue(preferenceKeys: PreferenceKeys, valueClass: Class<*>, defaultValue: Any): Any {
        if (preferenceKeys.preferenceNames == preferenceNames) {
            when (valueClass) {
                Int::class.java -> return sp.getInt(preferenceKeys.key, defaultValue as Int)
                String::class.java -> return sp.getString(preferenceKeys.key, defaultValue as String)
                Boolean::class.java -> return sp.getBoolean(preferenceKeys.key, defaultValue as Boolean)
                Float::class.java -> return sp.getFloat(preferenceKeys.key, defaultValue as Float)
            }
        } else {
            throw IllegalArgumentException()
        }
        return -1
    }

    /**
     * SharedPreferencesに値を保存する
     *
     * @param preferenceKeys 保存する値のkey
     * @param valueClass 保存する値のClass
     * @param value 保存する値
     */
    fun putValue(preferenceKeys: PreferenceKeys, valueClass: Class<*>, value: Any) {
        if (preferenceKeys.preferenceNames == preferenceNames) {
            when (valueClass) {
                Int::class.java -> sp.edit().putInt(preferenceKeys.key, value as Int).apply()
                String::class.java -> sp.edit().putString(preferenceKeys.key, value as String).apply()
                Boolean::class.java -> sp.edit().putBoolean(preferenceKeys.key, value as Boolean).apply()
                Float::class.java -> sp.edit().putFloat(preferenceKeys.key, value as Float).apply()
            }
        } else {
            throw IllegalArgumentException()
        }
    }
}