From 6cc92e33f72d9fdebc5cac5467ec84c3d779470f Mon Sep 17 00:00:00 2001
From: Pierre Nicolas <pierre.nicolas@savoirfairelinux.com>
Date: Fri, 22 Sep 2023 15:42:29 -0400
Subject: [PATCH] donation: show card only during campaign

Appears Monday, November 27, 2023 12:00:00 AM
Disappears Wednesday, January 31, 2024 11:59:59.999 PM

GitLab: #1361
GitLab: https://git.jami.net/savoirfairelinux/jami-project/-/issues/1330
Change-Id: I6a49003ae30cb2c02654edaf13690ca7b82583bd
---
 .../cx/ring/account/AccountEditionFragment.kt  | 10 ++++++++--
 .../java/cx/ring/settings/SettingsFragment.kt  | 18 +++++++++++++-----
 .../main/res/layout/frag_account_settings.xml  |  1 +
 .../app/src/main/res/layout/frag_settings.xml  |  2 ++
 .../main/kotlin/net/jami/home/HomePresenter.kt |  5 +++++
 .../kotlin/net/jami/utils/DonationUtils.kt     | 13 +++++++++++++
 6 files changed, 42 insertions(+), 7 deletions(-)
 create mode 100644 jami-android/libjamiclient/src/main/kotlin/net/jami/utils/DonationUtils.kt

diff --git a/jami-android/app/src/main/java/cx/ring/account/AccountEditionFragment.kt b/jami-android/app/src/main/java/cx/ring/account/AccountEditionFragment.kt
index cea5635e6..626f3cb5e 100644
--- a/jami-android/app/src/main/java/cx/ring/account/AccountEditionFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/account/AccountEditionFragment.kt
@@ -39,6 +39,7 @@ import cx.ring.utils.ActionHelper.openJamiDonateWebPage
 import dagger.hilt.android.AndroidEntryPoint
 import net.jami.account.AccountEditionPresenter
 import net.jami.account.AccountEditionView
+import net.jami.utils.DonationUtils
 
 @AndroidEntryPoint
 class AccountEditionFragment : BaseSupportFragment<AccountEditionPresenter, AccountEditionView>(),
@@ -50,9 +51,14 @@ class AccountEditionFragment : BaseSupportFragment<AccountEditionPresenter, Acco
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
         FragAccountSettingsBinding.inflate(inflater, container, false).apply {
             toolbar.setNavigationOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() }
-            donateButton.setOnClickListener {
-                openJamiDonateWebPage(requireContext())
+
+            if (DonationUtils.isDonationPeriod()) {
+                donateButton.visibility = View.VISIBLE
+                donateButton.setOnClickListener {
+                    openJamiDonateWebPage(requireContext())
+                }
             }
+
             mBinding = this
         }.root
 
diff --git a/jami-android/app/src/main/java/cx/ring/settings/SettingsFragment.kt b/jami-android/app/src/main/java/cx/ring/settings/SettingsFragment.kt
index 1e99a23f2..7fd6a0674 100644
--- a/jami-android/app/src/main/java/cx/ring/settings/SettingsFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/settings/SettingsFragment.kt
@@ -51,6 +51,8 @@ import net.jami.model.Settings
 import net.jami.mvp.GenericView
 import net.jami.settings.SettingsPresenter
 import net.jami.settings.SettingsViewModel
+import net.jami.utils.DonationUtils.endDonationTimeMillis
+import net.jami.utils.DonationUtils.startDonationTimeMillis
 
 @AndroidEntryPoint
 class SettingsFragment :
@@ -79,9 +81,18 @@ class SettingsFragment :
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
         FragSettingsBinding.inflate(inflater, container, false).apply {
-            donateButton.setOnClickListener {
-                openJamiDonateWebPage(requireContext())
+
+            if (System.currentTimeMillis() in startDonationTimeMillis until endDonationTimeMillis) {
+                donateButton.visibility= View.VISIBLE
+                settingsDonateLayout.visibility = View.VISIBLE
+                donateButton.setOnClickListener {
+                    openJamiDonateWebPage(requireContext())
+                }
+                settingsDonateSwitch.setOnCheckedChangeListener { _, _ ->
+                    saveDonationSettings(binding!!)
+                }
             }
+
             settingsPluginsLayout.setOnClickListener {
                 if (JamiService.getPluginsEnabled()) {
                     goToPluginsListSettings()
@@ -106,9 +117,6 @@ class SettingsFragment :
             settingsVideoLayout.setOnClickListener {
                 goToVideoSettings()
             }
-            settingsDonateSwitch.setOnCheckedChangeListener { _, _ ->
-                saveDonationSettings(binding!!)
-            }
 
             val singleItems = arrayOf(
                 getString(R.string.notification_private),
diff --git a/jami-android/app/src/main/res/layout/frag_account_settings.xml b/jami-android/app/src/main/res/layout/frag_account_settings.xml
index 36ad14438..29d972d9d 100644
--- a/jami-android/app/src/main/res/layout/frag_account_settings.xml
+++ b/jami-android/app/src/main/res/layout/frag_account_settings.xml
@@ -49,6 +49,7 @@
             android:outlineProvider="none"
             android:text="@string/donation_donate"
             android:textColor="@color/black"
+            android:visibility="gone"
             app:backgroundTint="@color/donation_card_background_color"
             app:cornerRadius="16dp"
             app:icon="@drawable/baseline_favorite_24"
diff --git a/jami-android/app/src/main/res/layout/frag_settings.xml b/jami-android/app/src/main/res/layout/frag_settings.xml
index ca6edf25d..dcbd10d46 100644
--- a/jami-android/app/src/main/res/layout/frag_settings.xml
+++ b/jami-android/app/src/main/res/layout/frag_settings.xml
@@ -54,6 +54,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
             android:outlineProvider="none"
             android:text="@string/donation_donate"
             android:textColor="@color/black"
+            android:visibility="gone"
             app:backgroundTint="@color/donation_card_background_color"
             app:cornerRadius="16dp"
             app:icon="@drawable/baseline_favorite_24"
@@ -225,6 +226,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
                 android:id="@+id/settings_donate_layout"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:visibility="gone"
                 android:padding="@dimen/padding_large">
 
                 <ImageView
diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/home/HomePresenter.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/home/HomePresenter.kt
index 26e0e2f4c..d55206aae 100644
--- a/jami-android/libjamiclient/src/main/kotlin/net/jami/home/HomePresenter.kt
+++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/home/HomePresenter.kt
@@ -19,6 +19,7 @@ package net.jami.home
 import net.jami.model.DonationSettings
 import net.jami.mvp.RootPresenter
 import net.jami.services.PreferencesService
+import net.jami.utils.DonationUtils
 import javax.inject.Inject
 
 class HomePresenter @Inject constructor(
@@ -26,6 +27,10 @@ class HomePresenter @Inject constructor(
 ) : RootPresenter<HomeView>() {
     override fun bindView(view: HomeView) {
         super.bindView(view)
+
+        if (!DonationUtils.isDonationPeriod())
+            return
+
         mCompositeDisposable.add(mPreferencesService.donationSettings().subscribe { settings ->
             // No need to show the reminder if user specified not to display it anymore
             if (!settings.donationReminderVisibility) {
diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/utils/DonationUtils.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/utils/DonationUtils.kt
new file mode 100644
index 000000000..8ab0779a4
--- /dev/null
+++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/utils/DonationUtils.kt
@@ -0,0 +1,13 @@
+package net.jami.utils
+
+object DonationUtils {
+    // First millisecond of 27 November 2023 GMT
+    const val startDonationTimeMillis = 1701043200000
+
+    // Last millisecond of 31 January 2024 GMT
+    const val endDonationTimeMillis = 1706745599999
+
+    fun isDonationPeriod(): Boolean {
+        return System.currentTimeMillis() in startDonationTimeMillis until endDonationTimeMillis
+    }
+}
\ No newline at end of file
-- 
GitLab