From 1d2cfed135787b2b398352da0386052b3c1fc9ec Mon Sep 17 00:00:00 2001 From: skydoves Date: Wed, 1 Jan 2020 17:37:33 +0900 Subject: [PATCH] Refactor BalloonPersistence --- .../factory/ProfileBalloonFactory.kt | 2 + .../main/java/com/skydoves/balloon/Balloon.kt | 10 ++--- ...erenceManager.kt => BalloonPersistence.kt} | 44 +++++++++++-------- 3 files changed, 33 insertions(+), 23 deletions(-) rename balloon/src/main/java/com/skydoves/balloon/{BalloonPreferenceManager.kt => BalloonPersistence.kt} (54%) diff --git a/app/src/main/java/com/skydoves/balloondemo/factory/ProfileBalloonFactory.kt b/app/src/main/java/com/skydoves/balloondemo/factory/ProfileBalloonFactory.kt index 5efcedfc..1daa4f55 100644 --- a/app/src/main/java/com/skydoves/balloondemo/factory/ProfileBalloonFactory.kt +++ b/app/src/main/java/com/skydoves/balloondemo/factory/ProfileBalloonFactory.kt @@ -38,6 +38,8 @@ class ProfileBalloonFactory : Balloon.Factory() { setBackgroundColorResource(R.color.background900) setBalloonAnimation(BalloonAnimation.CIRCULAR) setDismissWhenShowAgain(true) + setPreferenceName("profile balloon") + setShowTime(3) setLifecycleOwner(lifecycle) } } diff --git a/balloon/src/main/java/com/skydoves/balloon/Balloon.kt b/balloon/src/main/java/com/skydoves/balloon/Balloon.kt index bf3386f1..531ad316 100644 --- a/balloon/src/main/java/com/skydoves/balloon/Balloon.kt +++ b/balloon/src/main/java/com/skydoves/balloon/Balloon.kt @@ -71,7 +71,7 @@ class Balloon( var onBalloonClickListener: OnBalloonClickListener? = null var onBalloonDismissListener: OnBalloonDismissListener? = null var onBalloonOutsideTouchListener: OnBalloonOutsideTouchListener? = null - private val balloonPreferenceManager = BalloonPreferenceManager(context).getInstance() + private val balloonPersistence = BalloonPersistence.getInstance(context) init { val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater @@ -235,11 +235,11 @@ class Balloon( @MainThread private inline fun show(anchor: View, crossinline block: () -> Unit) { - if (!isShowing) { + if (!this.isShowing) { this.isShowing = true - builder.preferenceName?.let { - if (balloonPreferenceManager.shouldShowUP(it, builder.showTimes)) { - balloonPreferenceManager.putIncrementedTimes(it) + this.builder.preferenceName?.let { + if (balloonPersistence.shouldShowUP(it, builder.showTimes)) { + balloonPersistence.putIncrementedTimes(it) } else return } diff --git a/balloon/src/main/java/com/skydoves/balloon/BalloonPreferenceManager.kt b/balloon/src/main/java/com/skydoves/balloon/BalloonPersistence.kt similarity index 54% rename from balloon/src/main/java/com/skydoves/balloon/BalloonPreferenceManager.kt rename to balloon/src/main/java/com/skydoves/balloon/BalloonPersistence.kt index b22ffa71..444c82bd 100644 --- a/balloon/src/main/java/com/skydoves/balloon/BalloonPreferenceManager.kt +++ b/balloon/src/main/java/com/skydoves/balloon/BalloonPersistence.kt @@ -20,20 +20,7 @@ import android.content.Context import android.content.SharedPreferences /** BalloonPreferenceManager helps to persist showing times. */ -@Suppress("PrivatePropertyName", "MemberVisibilityCanBePrivate") -internal class BalloonPreferenceManager(context: Context) { - - private val SHOWED_UP = "SHOWED_UP" - - init { - balloonPreferenceManager = this - sharedPreferenceManager = context.getSharedPreferences("com.skydoves.balloon", Context.MODE_PRIVATE) - } - - /** get a singleton instance of the [BalloonPreferenceManager]. */ - fun getInstance(): BalloonPreferenceManager { - return balloonPreferenceManager - } +internal class BalloonPersistence { /** should show or not the popup. */ fun shouldShowUP(name: String, times: Int): Boolean { @@ -42,12 +29,12 @@ internal class BalloonPreferenceManager(context: Context) { /** gets show-up times from the preference. */ fun getTimes(name: String): Int { - return sharedPreferenceManager.getInt(SHOWED_UP + name, 0) + return sharedPreferenceManager.getInt(getPersistName(name), 0) } /** puts show-up times to the preference. */ fun putTimes(name: String, times: Int) { - sharedPreferenceManager.edit().putInt(SHOWED_UP + name, times).apply() + sharedPreferenceManager.edit().putInt(getPersistName(name), times).apply() } /** puts a incremented show-up times to the preference. */ @@ -55,8 +42,29 @@ internal class BalloonPreferenceManager(context: Context) { putTimes(name, getTimes(name) + 1) } + /** removes a showed times history from the preference. */ + fun removePersistedData(name: String) = + sharedPreferenceManager.edit().remove(SHOWED_UP + name).apply() + + /** clears all of [Balloon] showed times history on the application. */ + fun clearAllPersistedData() = sharedPreferenceManager.edit().clear().apply() + companion object { - lateinit var balloonPreferenceManager: BalloonPreferenceManager - lateinit var sharedPreferenceManager: SharedPreferences + @Volatile + private var instance: BalloonPersistence? = null + private lateinit var sharedPreferenceManager: SharedPreferences + private const val SHOWED_UP = "SHOWED_UP" + + @JvmStatic + fun getInstance(context: Context): BalloonPersistence = + instance ?: synchronized(this) { + instance ?: BalloonPersistence().also { + instance = it + sharedPreferenceManager = + context.getSharedPreferences("com.skydoves.balloon", Context.MODE_PRIVATE) + } + } + + fun getPersistName(name: String) = SHOWED_UP + name } }