From 1e8a8d4da03218cbfb5e586e07543b888fd9dd40 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 26 Jul 2022 14:23:11 +0200 Subject: [PATCH 1/5] Display the nightly popup only once a day --- .../im/vector/app/nightly/NightlyProxy.kt | 29 ++++++++++++++++++- .../vector/app/features/home/HomeActivity.kt | 4 +-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt b/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt index 73262e21a9..dd543318ab 100644 --- a/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt +++ b/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt @@ -16,13 +16,21 @@ package im.vector.app.nightly +import android.content.Context +import androidx.core.content.edit import com.google.firebase.appdistribution.FirebaseAppDistribution import com.google.firebase.appdistribution.FirebaseAppDistributionException +import im.vector.app.core.di.DefaultSharedPreferences +import im.vector.app.core.time.Clock import timber.log.Timber import javax.inject.Inject -class NightlyProxy @Inject constructor() { +class NightlyProxy @Inject constructor( + private val clock: Clock, + private val context: Context, +) { fun updateIfNewReleaseAvailable() { + if (!canDisplayPopup()) return val firebaseAppDistribution = FirebaseAppDistribution.getInstance() firebaseAppDistribution.updateIfNewReleaseAvailable() .addOnProgressListener { up -> @@ -44,4 +52,23 @@ class NightlyProxy @Inject constructor() { } } } + + private fun canDisplayPopup(): Boolean { + val sharedPreferences = DefaultSharedPreferences.getInstance(context) + val today = clock.epochMillis() / A_DAY_IN_MILLIS + val lastDisplayPopupDay = sharedPreferences.getLong(SHARED_PREF_KEY, 0) + return (today > lastDisplayPopupDay) + .also { canDisplayPopup -> + if (canDisplayPopup) { + sharedPreferences.edit { + putLong(SHARED_PREF_KEY, today) + } + } + } + } + + companion object { + private const val A_DAY_IN_MILLIS = 8_600_000L + private const val SHARED_PREF_KEY = "LAST_NIGHTLY_POPUP_DAY" + } } diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt index 925e594ce7..f1848e653f 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt @@ -537,9 +537,7 @@ class HomeActivity : serverBackupStatusViewModel.refreshRemoteStateIfNeeded() // Check nightly - if (isFirstCreation()) { - nightlyProxy.updateIfNewReleaseAvailable() - } + nightlyProxy.updateIfNewReleaseAvailable() } override fun getMenuRes() = R.menu.home From c6b9dba041aea182524cc079302052c312732e39 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 26 Jul 2022 11:57:45 +0200 Subject: [PATCH 2/5] Rename fun --- vector/src/fdroid/java/im/vector/app/nightly/NightlyProxy.kt | 2 +- vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt | 2 +- .../src/main/java/im/vector/app/features/home/HomeActivity.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vector/src/fdroid/java/im/vector/app/nightly/NightlyProxy.kt b/vector/src/fdroid/java/im/vector/app/nightly/NightlyProxy.kt index 40375e5760..0b871c7eaf 100644 --- a/vector/src/fdroid/java/im/vector/app/nightly/NightlyProxy.kt +++ b/vector/src/fdroid/java/im/vector/app/nightly/NightlyProxy.kt @@ -19,5 +19,5 @@ package im.vector.app.nightly import javax.inject.Inject class NightlyProxy @Inject constructor() { - fun updateIfNewReleaseAvailable() = Unit + fun mayDisplayFirebasePopup() = Unit } diff --git a/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt b/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt index dd543318ab..a16b1fb6dc 100644 --- a/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt +++ b/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt @@ -29,7 +29,7 @@ class NightlyProxy @Inject constructor( private val clock: Clock, private val context: Context, ) { - fun updateIfNewReleaseAvailable() { + fun mayDisplayFirebasePopup() { if (!canDisplayPopup()) return val firebaseAppDistribution = FirebaseAppDistribution.getInstance() firebaseAppDistribution.updateIfNewReleaseAvailable() diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt index f1848e653f..67fe6897a4 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt @@ -537,7 +537,7 @@ class HomeActivity : serverBackupStatusViewModel.refreshRemoteStateIfNeeded() // Check nightly - nightlyProxy.updateIfNewReleaseAvailable() + nightlyProxy.mayDisplayFirebasePopup() } override fun getMenuRes() = R.menu.home From e5163ad9c31990ec2f2dbcc8c67f91909479c8f3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 26 Jul 2022 11:56:27 +0200 Subject: [PATCH 3/5] Better safe than sorry. This popup should not show up on production version --- vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt b/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt index a16b1fb6dc..8f74c96470 100644 --- a/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt +++ b/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt @@ -20,6 +20,7 @@ import android.content.Context import androidx.core.content.edit import com.google.firebase.appdistribution.FirebaseAppDistribution import com.google.firebase.appdistribution.FirebaseAppDistributionException +import im.vector.app.BuildConfig import im.vector.app.core.di.DefaultSharedPreferences import im.vector.app.core.time.Clock import timber.log.Timber @@ -54,6 +55,7 @@ class NightlyProxy @Inject constructor( } private fun canDisplayPopup(): Boolean { + if (BuildConfig.APPLICATION_ID != "im.vector.app.nightly") return false val sharedPreferences = DefaultSharedPreferences.getInstance(context) val today = clock.epochMillis() / A_DAY_IN_MILLIS val lastDisplayPopupDay = sharedPreferences.getLong(SHARED_PREF_KEY, 0) From 41d35e68a05a6c8cbbb2e006ee947b35f6f83428 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 26 Jul 2022 17:43:38 +0200 Subject: [PATCH 4/5] Inject SharedPreferences --- .../src/gplay/java/im/vector/app/nightly/NightlyProxy.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt b/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt index 8f74c96470..adef016106 100644 --- a/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt +++ b/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt @@ -16,19 +16,20 @@ package im.vector.app.nightly -import android.content.Context +import android.content.SharedPreferences import androidx.core.content.edit import com.google.firebase.appdistribution.FirebaseAppDistribution import com.google.firebase.appdistribution.FirebaseAppDistributionException import im.vector.app.BuildConfig -import im.vector.app.core.di.DefaultSharedPreferences +import im.vector.app.core.di.DefaultPreferences import im.vector.app.core.time.Clock import timber.log.Timber import javax.inject.Inject class NightlyProxy @Inject constructor( private val clock: Clock, - private val context: Context, + @DefaultPreferences + private val sharedPreferences: SharedPreferences, ) { fun mayDisplayFirebasePopup() { if (!canDisplayPopup()) return @@ -56,7 +57,6 @@ class NightlyProxy @Inject constructor( private fun canDisplayPopup(): Boolean { if (BuildConfig.APPLICATION_ID != "im.vector.app.nightly") return false - val sharedPreferences = DefaultSharedPreferences.getInstance(context) val today = clock.epochMillis() / A_DAY_IN_MILLIS val lastDisplayPopupDay = sharedPreferences.getLong(SHARED_PREF_KEY, 0) return (today > lastDisplayPopupDay) From e5773203010f88fa2c05297d0d1cfd51d9448e91 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 26 Jul 2022 17:47:49 +0200 Subject: [PATCH 5/5] Change name of fun. --- vector/src/fdroid/java/im/vector/app/nightly/NightlyProxy.kt | 2 +- vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt | 2 +- .../src/main/java/im/vector/app/features/home/HomeActivity.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vector/src/fdroid/java/im/vector/app/nightly/NightlyProxy.kt b/vector/src/fdroid/java/im/vector/app/nightly/NightlyProxy.kt index 0b871c7eaf..eecf3a24f2 100644 --- a/vector/src/fdroid/java/im/vector/app/nightly/NightlyProxy.kt +++ b/vector/src/fdroid/java/im/vector/app/nightly/NightlyProxy.kt @@ -19,5 +19,5 @@ package im.vector.app.nightly import javax.inject.Inject class NightlyProxy @Inject constructor() { - fun mayDisplayFirebasePopup() = Unit + fun onHomeResumed() = Unit } diff --git a/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt b/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt index adef016106..7c6685f5ce 100644 --- a/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt +++ b/vector/src/gplay/java/im/vector/app/nightly/NightlyProxy.kt @@ -31,7 +31,7 @@ class NightlyProxy @Inject constructor( @DefaultPreferences private val sharedPreferences: SharedPreferences, ) { - fun mayDisplayFirebasePopup() { + fun onHomeResumed() { if (!canDisplayPopup()) return val firebaseAppDistribution = FirebaseAppDistribution.getInstance() firebaseAppDistribution.updateIfNewReleaseAvailable() diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt index 67fe6897a4..bfce33a5e9 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt @@ -537,7 +537,7 @@ class HomeActivity : serverBackupStatusViewModel.refreshRemoteStateIfNeeded() // Check nightly - nightlyProxy.mayDisplayFirebasePopup() + nightlyProxy.onHomeResumed() } override fun getMenuRes() = R.menu.home