Skip to content

Commit 2f44b45

Browse files
Merge pull request #1701 from session-foundation/feature/ses-4879-donation-CTA
Feature/ses 4879 donation cta
2 parents 7e97f08 + 2c04451 commit 2f44b45

File tree

11 files changed

+534
-26
lines changed

11 files changed

+534
-26
lines changed

app/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,27 @@ import org.session.libsession.utilities.TextSecurePreferences.Companion.AUTOPLAY
2727
import org.session.libsession.utilities.TextSecurePreferences.Companion.CALL_NOTIFICATIONS_ENABLED
2828
import org.session.libsession.utilities.TextSecurePreferences.Companion.CLASSIC_DARK
2929
import org.session.libsession.utilities.TextSecurePreferences.Companion.CLASSIC_LIGHT
30+
import org.session.libsession.utilities.TextSecurePreferences.Companion.DEBUG_HAS_COPIED_DONATION_URL
31+
import org.session.libsession.utilities.TextSecurePreferences.Companion.DEBUG_HAS_DONATED
32+
import org.session.libsession.utilities.TextSecurePreferences.Companion.DEBUG_SEEN_DONATION_CTA_AMOUNT
33+
import org.session.libsession.utilities.TextSecurePreferences.Companion.DEBUG_SHOW_DONATION_CTA_FROM_POSITIVE_REVIEW
3034
import org.session.libsession.utilities.TextSecurePreferences.Companion.ENVIRONMENT
3135
import org.session.libsession.utilities.TextSecurePreferences.Companion.FOLLOW_SYSTEM_SETTINGS
3236
import org.session.libsession.utilities.TextSecurePreferences.Companion.FORCED_SHORT_TTL
37+
import org.session.libsession.utilities.TextSecurePreferences.Companion.HAS_COPIED_DONATION_URL
38+
import org.session.libsession.utilities.TextSecurePreferences.Companion.HAS_DONATED
3339
import org.session.libsession.utilities.TextSecurePreferences.Companion.HAS_HIDDEN_MESSAGE_REQUESTS
3440
import org.session.libsession.utilities.TextSecurePreferences.Companion.HAS_SEEN_PRO_EXPIRED
3541
import org.session.libsession.utilities.TextSecurePreferences.Companion.HAS_SEEN_PRO_EXPIRING
3642
import org.session.libsession.utilities.TextSecurePreferences.Companion.HAVE_SHOWN_A_NOTIFICATION_ABOUT_TOKEN_PAGE
3743
import org.session.libsession.utilities.TextSecurePreferences.Companion.HIDE_PASSWORD
44+
import org.session.libsession.utilities.TextSecurePreferences.Companion.LAST_SEEN_DONATION_CTA
3845
import org.session.libsession.utilities.TextSecurePreferences.Companion.LAST_VACUUM_TIME
3946
import org.session.libsession.utilities.TextSecurePreferences.Companion.LAST_VERSION_CHECK
4047
import org.session.libsession.utilities.TextSecurePreferences.Companion.LEGACY_PREF_KEY_SELECTED_UI_MODE
4148
import org.session.libsession.utilities.TextSecurePreferences.Companion.OCEAN_DARK
4249
import org.session.libsession.utilities.TextSecurePreferences.Companion.OCEAN_LIGHT
50+
import org.session.libsession.utilities.TextSecurePreferences.Companion.SEEN_DONATION_CTA_AMOUNT
4351
import org.session.libsession.utilities.TextSecurePreferences.Companion.SELECTED_ACCENT_COLOR
4452
import org.session.libsession.utilities.TextSecurePreferences.Companion.SELECTED_STYLE
4553
import org.session.libsession.utilities.TextSecurePreferences.Companion.SET_FORCE_CURRENT_USER_PRO
@@ -48,6 +56,7 @@ import org.session.libsession.utilities.TextSecurePreferences.Companion.SET_FORC
4856
import org.session.libsession.utilities.TextSecurePreferences.Companion.SET_FORCE_POST_PRO
4957
import org.session.libsession.utilities.TextSecurePreferences.Companion.SHOWN_CALL_NOTIFICATION
5058
import org.session.libsession.utilities.TextSecurePreferences.Companion.SHOWN_CALL_WARNING
59+
import org.session.libsession.utilities.TextSecurePreferences.Companion.SHOW_DONATION_CTA_FROM_POSITIVE_REVIEW
5160
import org.session.libsession.utilities.TextSecurePreferences.Companion._events
5261
import org.session.libsignal.utilities.Log
5362
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel
@@ -221,6 +230,26 @@ interface TextSecurePreferences {
221230
fun setSubscriptionProvider(provider: String)
222231
fun getSubscriptionProvider(): String?
223232

233+
fun hasDonated(): Boolean
234+
fun setHasDonated(hasDonated: Boolean)
235+
fun hasCopiedDonationURL(): Boolean
236+
fun setHasCopiedDonationURL(hasCopied: Boolean)
237+
fun seenDonationCTAAmount(): Int
238+
fun setSeenDonationCTAAmount(amount: Int)
239+
fun lastSeenDonationCTA(): Long
240+
fun setLastSeenDonationCTA(timestamp: Long)
241+
fun showDonationCTAFromPositiveReview(): Boolean
242+
fun setShowDonationCTAFromPositiveReview(show: Boolean)
243+
244+
fun hasDonatedDebug(): String?
245+
fun setHasDonatedDebug(hasDonated: String?)
246+
fun hasCopiedDonationURLDebug(): String?
247+
fun setHasCopiedDonationURLDebug(hasCopied: String?)
248+
fun seenDonationCTAAmountDebug(): String?
249+
fun setSeenDonationCTAAmountDebug(amount: String?)
250+
fun showDonationCTAFromPositiveReviewDebug(): String?
251+
fun setShowDonationCTAFromPositiveReviewDebug(show: String?)
252+
224253
var deprecationStateOverride: String?
225254
var deprecatedTimeOverride: ZonedDateTime?
226255
var deprecatingStartTimeOverride: ZonedDateTime?
@@ -388,6 +417,18 @@ interface TextSecurePreferences {
388417
const val SUBSCRIPTION_PROVIDER = "session_subscription_provider"
389418
const val DEBUG_AVATAR_REUPLOAD = "debug_avatar_reupload"
390419

420+
// Donation
421+
const val HAS_DONATED = "has_donated"
422+
const val HAS_COPIED_DONATION_URL = "has_copied_donation_url"
423+
const val SEEN_DONATION_CTA_AMOUNT = "seen_donation_cta_amount"
424+
const val LAST_SEEN_DONATION_CTA = "last_seen_donation_cta"
425+
const val SHOW_DONATION_CTA_FROM_POSITIVE_REVIEW = "show_donation_cta_from_positive_review"
426+
427+
const val DEBUG_HAS_DONATED = "debug_has_donated"
428+
const val DEBUG_HAS_COPIED_DONATION_URL = "debug_has_copied_donation_url"
429+
const val DEBUG_SEEN_DONATION_CTA_AMOUNT = "debug_seen_donation_cta_amount"
430+
const val DEBUG_SHOW_DONATION_CTA_FROM_POSITIVE_REVIEW = "debug_show_donation_cta_from_positive_review"
431+
391432
@JvmStatic
392433
fun getConfigurationMessageSynced(context: Context): Boolean {
393434
return getBooleanPreference(context, CONFIGURATION_SYNCED, false)
@@ -1788,4 +1829,67 @@ class AppTextSecurePreferences @Inject constructor(
17881829
json.encodeToString(it)
17891830
})
17901831
}
1832+
1833+
override fun hasDonated(): Boolean {
1834+
return getBooleanPreference(HAS_DONATED, false)
1835+
}
1836+
override fun setHasDonated(hasDonated: Boolean) {
1837+
setBooleanPreference(HAS_DONATED, hasDonated)
1838+
}
1839+
1840+
override fun hasCopiedDonationURL(): Boolean {
1841+
return getBooleanPreference(HAS_COPIED_DONATION_URL, false)
1842+
}
1843+
override fun setHasCopiedDonationURL(hasCopied: Boolean) {
1844+
setBooleanPreference(HAS_COPIED_DONATION_URL, hasCopied)
1845+
}
1846+
1847+
override fun seenDonationCTAAmount(): Int {
1848+
return getIntegerPreference(SEEN_DONATION_CTA_AMOUNT, 0)
1849+
}
1850+
override fun setSeenDonationCTAAmount(amount: Int) {
1851+
setIntegerPreference(SEEN_DONATION_CTA_AMOUNT, amount)
1852+
}
1853+
1854+
override fun lastSeenDonationCTA(): Long {
1855+
return getLongPreference(LAST_SEEN_DONATION_CTA, 0)
1856+
}
1857+
override fun setLastSeenDonationCTA(timestamp: Long) {
1858+
setLongPreference(LAST_SEEN_DONATION_CTA, timestamp)
1859+
}
1860+
1861+
override fun showDonationCTAFromPositiveReview(): Boolean {
1862+
return getBooleanPreference(SHOW_DONATION_CTA_FROM_POSITIVE_REVIEW, false)
1863+
}
1864+
override fun setShowDonationCTAFromPositiveReview(show: Boolean) {
1865+
setBooleanPreference(SHOW_DONATION_CTA_FROM_POSITIVE_REVIEW, show)
1866+
}
1867+
1868+
override fun hasDonatedDebug(): String? {
1869+
return getStringPreference(DEBUG_HAS_DONATED, null)
1870+
}
1871+
override fun setHasDonatedDebug(hasDonated: String?) {
1872+
setStringPreference(DEBUG_HAS_DONATED, hasDonated)
1873+
}
1874+
1875+
override fun hasCopiedDonationURLDebug(): String? {
1876+
return getStringPreference(DEBUG_HAS_COPIED_DONATION_URL, null)
1877+
}
1878+
override fun setHasCopiedDonationURLDebug(hasCopied: String?) {
1879+
setStringPreference(DEBUG_HAS_COPIED_DONATION_URL, hasCopied)
1880+
}
1881+
1882+
override fun seenDonationCTAAmountDebug(): String? {
1883+
return getStringPreference(DEBUG_SEEN_DONATION_CTA_AMOUNT, null)
1884+
}
1885+
override fun setSeenDonationCTAAmountDebug(amount: String?) {
1886+
setStringPreference(DEBUG_SEEN_DONATION_CTA_AMOUNT, amount)
1887+
}
1888+
1889+
override fun showDonationCTAFromPositiveReviewDebug(): String? {
1890+
return getStringPreference(DEBUG_SHOW_DONATION_CTA_FROM_POSITIVE_REVIEW, null)
1891+
}
1892+
override fun setShowDonationCTAFromPositiveReviewDebug(show: String?) {
1893+
setStringPreference(DEBUG_SHOW_DONATION_CTA_FROM_POSITIVE_REVIEW, show)
1894+
}
17911895
}

app/src/main/java/org/thoughtcrime/securesms/debugmenu/DebugMenu.kt

Lines changed: 115 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import androidx.compose.foundation.layout.height
1717
import androidx.compose.foundation.layout.heightIn
1818
import androidx.compose.foundation.layout.padding
1919
import androidx.compose.foundation.layout.size
20+
import androidx.compose.foundation.layout.width
2021
import androidx.compose.foundation.rememberScrollState
2122
import androidx.compose.foundation.text.KeyboardOptions
2223
import androidx.compose.foundation.verticalScroll
@@ -56,32 +57,26 @@ import network.loki.messenger.R
5657
import network.loki.messenger.libsession_util.protocol.ProFeature
5758
import network.loki.messenger.libsession_util.protocol.ProFeatures
5859
import org.session.libsession.messaging.groups.LegacyGroupDeprecationManager
59-
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Commands.ChangeEnvironment
60-
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Commands.ClearTrustedDownloads
61-
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Commands.Copy07PrefixedBlindedPublicKey
62-
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Commands.CopyAccountId
63-
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Commands.HideDeprecationChangeDialog
64-
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Commands.HideEnvironmentWarningDialog
65-
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Commands.OverrideDeprecationState
66-
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Commands.ScheduleTokenNotification
67-
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Commands.ShowDeprecationChangeDialog
68-
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Commands.ShowEnvironmentWarningDialog
69-
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Commands.GenerateContacts
60+
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Commands.*
61+
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Companion.FALSE
62+
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Companion.NOT_SET
63+
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Companion.SEEN_1
64+
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Companion.SEEN_2
65+
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Companion.SEEN_3
66+
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Companion.SEEN_4
67+
import org.thoughtcrime.securesms.debugmenu.DebugMenuViewModel.Companion.TRUE
7068
import org.thoughtcrime.securesms.pro.ProStatusManager
7169
import org.thoughtcrime.securesms.ui.AlertDialog
7270
import org.thoughtcrime.securesms.ui.Cell
7371
import org.thoughtcrime.securesms.ui.DialogButtonData
72+
import org.thoughtcrime.securesms.ui.Divider
7473
import org.thoughtcrime.securesms.ui.GetString
7574
import org.thoughtcrime.securesms.ui.LoadingDialog
7675
import org.thoughtcrime.securesms.ui.components.SlimFillButtonRect
7776
import org.thoughtcrime.securesms.ui.components.BackAppBar
78-
import org.thoughtcrime.securesms.ui.components.Button
79-
import org.thoughtcrime.securesms.ui.components.ButtonType
8077
import org.thoughtcrime.securesms.ui.components.DropDown
8178
import org.thoughtcrime.securesms.ui.components.SessionOutlinedTextField
8279
import org.thoughtcrime.securesms.ui.components.SessionSwitch
83-
import org.thoughtcrime.securesms.ui.components.SlimFillButtonRect
84-
import org.thoughtcrime.securesms.ui.components.SlimFillButtonRect
8580
import org.thoughtcrime.securesms.ui.theme.LocalColors
8681
import org.thoughtcrime.securesms.ui.theme.LocalDimensions
8782
import org.thoughtcrime.securesms.ui.theme.LocalType
@@ -223,7 +218,9 @@ fun DebugMenu(
223218
// Debug Logger
224219
DebugCell(
225220
"Debug Logger",
226-
verticalArrangement = Arrangement.spacedBy(0.dp)) {
221+
verticalArrangement = Arrangement.spacedBy(0.dp)
222+
)
223+
{
227224
Spacer(modifier = Modifier.height(LocalDimensions.current.xxsSpacing))
228225

229226
SlimFillButtonRect(
@@ -254,7 +251,8 @@ fun DebugMenu(
254251
// Session Pro
255252
DebugCell(
256253
"Session Pro",
257-
verticalArrangement = Arrangement.spacedBy(0.dp)) {
254+
verticalArrangement = Arrangement.spacedBy(0.dp))
255+
{
258256
Spacer(modifier = Modifier.height(LocalDimensions.current.xsSpacing))
259257

260258
Text(text = "Purchase a plan")
@@ -420,6 +418,71 @@ fun DebugMenu(
420418
}
421419
}
422420

421+
// Donations
422+
DebugCell("Donations") {
423+
Text(
424+
text = "First app install: ${uiState.firstInstall}",
425+
style = LocalType.current.base
426+
)
427+
Text(
428+
text = "Has donated: ${uiState.hasDonated}",
429+
style = LocalType.current.base
430+
)
431+
Text(
432+
text = "Has copied donate URL: ${uiState.hasCopiedDonationURL}",
433+
style = LocalType.current.base
434+
)
435+
Text(
436+
text = "Seen donation CTA amount: ${uiState.seenDonateCTAAmount} times",
437+
style = LocalType.current.base
438+
)
439+
Text(
440+
text = "Last seen donation CTA: ${uiState.lastSeenDonateCTA}",
441+
style = LocalType.current.base
442+
)
443+
Text(
444+
text = "Show CTA from positive review: ${uiState.showDonateCTAFromPositiveReview}",
445+
style = LocalType.current.base
446+
)
447+
448+
Spacer(modifier = Modifier.height(LocalDimensions.current.xxxsSpacing))
449+
Divider()
450+
Spacer(modifier = Modifier.height(LocalDimensions.current.xxxsSpacing))
451+
452+
DebugDropDownRow(
453+
text = "Debug 'Has donated': ",
454+
selectedText = uiState.hasDonatedDebug,
455+
values = listOf(NOT_SET, TRUE, FALSE),
456+
onValueSelected = {
457+
sendCommand(SetDebugHasDonated(it))
458+
}
459+
)
460+
DebugDropDownRow(
461+
text = "Debug 'Has copied link': ",
462+
selectedText = uiState.hasCopiedDonationURLDebug,
463+
values = listOf(NOT_SET, TRUE, FALSE),
464+
onValueSelected = {
465+
sendCommand(SetDebugHasCopiedDonation(it))
466+
}
467+
)
468+
DebugDropDownRow(
469+
text = "Debug 'CTA seen amount': ",
470+
selectedText = uiState.seenDonateCTAAmountDebug,
471+
values = listOf(NOT_SET, SEEN_1, SEEN_2, SEEN_3, SEEN_4),
472+
onValueSelected = {
473+
sendCommand(SetDebugDonationCTAViews(it))
474+
}
475+
)
476+
DebugDropDownRow(
477+
text = "Debug 'Show donation from app review': ",
478+
selectedText = uiState.showDonateCTAFromPositiveReviewDebug,
479+
values = listOf(NOT_SET, TRUE, FALSE),
480+
onValueSelected = {
481+
sendCommand(SetDebugShowDonationFromReview(it))
482+
}
483+
)
484+
}
485+
423486
// Fake contacts
424487
DebugCell("Generate fake contacts") {
425488
var prefix by remember { mutableStateOf("User-") }
@@ -741,14 +804,15 @@ private fun DebugRow(
741804
Row(
742805
modifier = modifier.heightIn(min = minHeight),
743806
verticalAlignment = Alignment.CenterVertically,
744-
horizontalArrangement = Arrangement.spacedBy(LocalDimensions.current.xsSpacing)
745807
) {
746808
Text(
747809
text = title,
748810
style = LocalType.current.base,
749811
modifier = Modifier.weight(1f)
750812
)
751813

814+
Spacer(modifier = Modifier.width(LocalDimensions.current.xsSpacing))
815+
752816
content()
753817
}
754818
}
@@ -799,7 +863,30 @@ fun DebugCheckboxRow(
799863
)
800864
)
801865
}
866+
}
802867

868+
@Composable
869+
fun DebugDropDownRow(
870+
text: String,
871+
selectedText: String,
872+
values: List<String>,
873+
onValueSelected: (String) -> Unit,
874+
modifier: Modifier = Modifier,
875+
minHeight: Dp = LocalDimensions.current.itemButtonIconSpacing,
876+
) {
877+
DebugRow(
878+
title = text,
879+
minHeight = minHeight,
880+
modifier = modifier
881+
.fillMaxWidth(),
882+
) {
883+
DropDown(
884+
modifier = Modifier.weight(1f, fill = false),
885+
selectedText = selectedText,
886+
values = values,
887+
onValueSelected = onValueSelected
888+
)
889+
}
803890
}
804891

805892
@Composable
@@ -862,6 +949,16 @@ fun PreviewDebugMenu() {
862949
withinQuickRefund = true,
863950
forceDeterministicEncryption = false,
864951
debugAvatarReupload = true,
952+
hasDonated = false,
953+
hasCopiedDonationURL = false,
954+
seenDonateCTAAmount = 0,
955+
lastSeenDonateCTA = "-",
956+
showDonateCTAFromPositiveReview = false,
957+
hasDonatedDebug = "",
958+
hasCopiedDonationURLDebug = "",
959+
seenDonateCTAAmountDebug = "",
960+
showDonateCTAFromPositiveReviewDebug = "",
961+
firstInstall = ""
865962
),
866963
sendCommand = {},
867964
onClose = {}

0 commit comments

Comments
 (0)