Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import org.session.libsession.utilities.TextSecurePreferences.Companion.DEBUG_SH
import org.session.libsession.utilities.TextSecurePreferences.Companion.ENVIRONMENT
import org.session.libsession.utilities.TextSecurePreferences.Companion.FOLLOW_SYSTEM_SETTINGS
import org.session.libsession.utilities.TextSecurePreferences.Companion.FORCED_SHORT_TTL
import org.session.libsession.utilities.TextSecurePreferences.Companion.HAS_CHECKED_DOZE_WHITELIST
import org.session.libsession.utilities.TextSecurePreferences.Companion.HAS_COPIED_DONATION_URL
import org.session.libsession.utilities.TextSecurePreferences.Companion.HAS_DONATED
import org.session.libsession.utilities.TextSecurePreferences.Companion.HAS_HIDDEN_MESSAGE_REQUESTS
Expand Down Expand Up @@ -114,7 +115,6 @@ interface TextSecurePreferences {
fun setHasSeenGIFMetaDataWarning()
fun isGifSearchInGridLayout(): Boolean
fun setIsGifSearchInGridLayout(isGrid: Boolean)
fun getNotificationPriority(): Int
fun getMessageBodyTextSize(): Int
fun setPreferredCameraDirection(value: CameraSelector)
fun getPreferredCameraDirection(): CameraSelector
Expand Down Expand Up @@ -234,6 +234,8 @@ interface TextSecurePreferences {
fun setSubscriptionProvider(provider: String)
fun getSubscriptionProvider(): String?

fun hasCheckedDozeWhitelist(): Boolean
fun setHasCheckedDozeWhitelist(hasChecked: Boolean)
fun hasDonated(): Boolean
fun setHasDonated(hasDonated: Boolean)
fun hasCopiedDonationURL(): Boolean
Expand Down Expand Up @@ -311,7 +313,6 @@ interface TextSecurePreferences {
const val LOCAL_REGISTRATION_ID_PREF = "pref_local_registration_id"
const val REPEAT_ALERTS_PREF = "pref_repeat_alerts"
const val NOTIFICATION_PRIVACY_PREF = "pref_notification_privacy"
const val NOTIFICATION_PRIORITY_PREF = "pref_notification_priority"
const val MEDIA_DOWNLOAD_MOBILE_PREF = "pref_media_download_mobile"
const val MEDIA_DOWNLOAD_WIFI_PREF = "pref_media_download_wifi"
const val MEDIA_DOWNLOAD_ROAMING_PREF = "pref_media_download_roaming"
Expand Down Expand Up @@ -422,6 +423,8 @@ interface TextSecurePreferences {
const val SUBSCRIPTION_PROVIDER = "session_subscription_provider"
const val DEBUG_AVATAR_REUPLOAD = "debug_avatar_reupload"

const val HAS_CHECKED_DOZE_WHITELIST = "has_checked_doze_whitelist"

// Donation
const val HAS_DONATED = "has_donated"
const val HAS_COPIED_DONATION_URL = "has_copied_donation_url"
Expand Down Expand Up @@ -1198,11 +1201,6 @@ class AppTextSecurePreferences @Inject constructor(
setBooleanPreference(TextSecurePreferences.GIF_GRID_LAYOUT, isGrid)
}

override fun getNotificationPriority(): Int {
return getStringPreference(
TextSecurePreferences.NOTIFICATION_PRIORITY_PREF, NotificationCompat.PRIORITY_HIGH.toString())!!.toInt()
}

override fun getMessageBodyTextSize(): Int {
return getStringPreference(TextSecurePreferences.MESSAGE_BODY_TEXT_SIZE_PREF, "16")!!.toInt()
}
Expand Down Expand Up @@ -1839,6 +1837,14 @@ class AppTextSecurePreferences @Inject constructor(
})
}

override fun hasCheckedDozeWhitelist(): Boolean {
return getBooleanPreference(HAS_CHECKED_DOZE_WHITELIST, false)
}

override fun setHasCheckedDozeWhitelist(hasChecked: Boolean) {
setBooleanPreference(HAS_CHECKED_DOZE_WHITELIST, hasChecked)
}

override fun hasDonated(): Boolean {
return getBooleanPreference(HAS_DONATED, false)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ import org.thoughtcrime.securesms.reviews.ui.InAppReviewViewModel
import org.thoughtcrime.securesms.showSessionDialog
import org.thoughtcrime.securesms.tokenpage.TokenPageNotificationManager
import org.thoughtcrime.securesms.ui.components.Avatar
import org.thoughtcrime.securesms.ui.findActivity
import org.thoughtcrime.securesms.ui.isWhitelistedFromDoze
import org.thoughtcrime.securesms.ui.requestDozeWhitelist
import org.thoughtcrime.securesms.ui.setThemedContent
import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.util.AvatarUtils
Expand Down Expand Up @@ -250,6 +253,10 @@ class HomeActivity : ScreenLockActionBarActivity(),
)
)
}

is HomeViewModel.UiEvent.ShowWhiteListSystemDialog -> {
requestDozeWhitelist()
}
}
}
}
Expand Down
41 changes: 41 additions & 0 deletions app/src/main/java/org/thoughtcrime/securesms/home/HomeDialogs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,17 @@ import org.session.libsession.utilities.StringSubstitutionConstants.TIME_KEY
import org.thoughtcrime.securesms.home.HomeViewModel.Commands.*
import org.thoughtcrime.securesms.home.startconversation.StartConversationSheet
import org.thoughtcrime.securesms.preferences.prosettings.ProSettingsDestination
import org.thoughtcrime.securesms.ui.AlertDialog
import org.thoughtcrime.securesms.ui.AnimatedSessionProCTA
import org.thoughtcrime.securesms.ui.CTAFeature
import org.thoughtcrime.securesms.ui.DialogButtonData
import org.thoughtcrime.securesms.ui.GetString
import org.thoughtcrime.securesms.ui.OpenURLAlertDialog
import org.thoughtcrime.securesms.ui.PinProCTA
import org.thoughtcrime.securesms.ui.SimpleSessionProCTA
import org.thoughtcrime.securesms.ui.UserProfileModal
import org.thoughtcrime.securesms.ui.components.annotatedStringResource
import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.theme.SessionMaterialTheme

@Composable
Expand All @@ -33,6 +38,42 @@ fun HomeDialogs(
sendCommand: (HomeViewModel.Commands) -> Unit
) {
SessionMaterialTheme {
// Simple dialogs
if (dialogsState.showSimpleDialog != null) {
val buttons = mutableListOf<DialogButtonData>()
if(dialogsState.showSimpleDialog.positiveText != null) {
buttons.add(
DialogButtonData(
text = GetString(dialogsState.showSimpleDialog.positiveText),
color = if (dialogsState.showSimpleDialog.positiveStyleDanger) LocalColors.current.danger
else LocalColors.current.text,
qaTag = dialogsState.showSimpleDialog.positiveQaTag,
onClick = dialogsState.showSimpleDialog.onPositive
)
)
}
if(dialogsState.showSimpleDialog.negativeText != null){
buttons.add(
DialogButtonData(
text = GetString(dialogsState.showSimpleDialog.negativeText),
qaTag = dialogsState.showSimpleDialog.negativeQaTag,
onClick = dialogsState.showSimpleDialog.onNegative
)
)
}

AlertDialog(
onDismissRequest = {
// hide dialog
sendCommand(HideSimpleDialog)
},
title = annotatedStringResource(dialogsState.showSimpleDialog.title),
text = annotatedStringResource(dialogsState.showSimpleDialog.message),
showCloseButton = dialogsState.showSimpleDialog.showXIcon,
buttons = buttons
)
}

// pin CTA
if(dialogsState.pinCTA != null){
PinProCTA(
Expand Down
51 changes: 51 additions & 0 deletions app/src/main/java/org/thoughtcrime/securesms/home/HomeViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ import android.content.Context
import androidx.lifecycle.ViewModel
import androidx.lifecycle.asFlow
import androidx.lifecycle.viewModelScope
import com.squareup.phrase.Phrase
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
Expand All @@ -30,6 +32,7 @@ import network.loki.messenger.libsession_util.PRIORITY_HIDDEN
import org.session.libsession.database.StorageProtocol
import org.session.libsession.messaging.groups.GroupManagerV2
import org.session.libsession.utilities.Address
import org.session.libsession.utilities.StringSubstitutionConstants.APP_NAME_KEY
import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsession.utilities.recipients.displayName
import org.session.libsignal.utilities.AccountId
Expand All @@ -40,10 +43,15 @@ import org.thoughtcrime.securesms.database.model.ThreadRecord
import org.thoughtcrime.securesms.debugmenu.DebugLogGroup
import org.thoughtcrime.securesms.dependencies.ConfigFactory
import org.thoughtcrime.securesms.preferences.prosettings.ProSettingsDestination
import org.thoughtcrime.securesms.preferences.prosettings.ProSettingsViewModel
import org.thoughtcrime.securesms.pro.ProStatus
import org.thoughtcrime.securesms.pro.ProStatusManager
import org.thoughtcrime.securesms.repository.ConversationRepository
import org.thoughtcrime.securesms.sskenvironment.TypingStatusRepository
import org.thoughtcrime.securesms.ui.SimpleDialogData
import org.thoughtcrime.securesms.ui.findActivity
import org.thoughtcrime.securesms.ui.isWhitelistedFromDoze
import org.thoughtcrime.securesms.ui.requestDozeWhitelist
import org.thoughtcrime.securesms.util.DateUtils
import org.thoughtcrime.securesms.util.DonationManager
import org.thoughtcrime.securesms.util.DonationManager.Companion.URL_DONATE
Expand Down Expand Up @@ -161,6 +169,41 @@ class HomeViewModel @Inject constructor(
private var userProfileModalUtils: UserProfileUtils? = null

init {
// check for white list status in case of slow mode
if(!prefs.hasCheckedDozeWhitelist() // the user has not yet seen the dialog
&& !prefs.pushEnabled.value // the user is in slow mode
&& !context.isWhitelistedFromDoze() // the user isn't yet whitelisted
){
prefs.setHasCheckedDozeWhitelist(true)
viewModelScope.launch {
delay(1500)
_dialogsState.update {
it.copy(
showSimpleDialog = SimpleDialogData(
title = Phrase.from(context, R.string.runSessionBackground)
.put(APP_NAME_KEY, context.getString(R.string.app_name))
.format().toString(),
message = Phrase.from(context, R.string.runSessionBackgroundDescription)
.put(APP_NAME_KEY, context.getString(R.string.app_name))
.format().toString(),
positiveText = context.getString(R.string.allow),
negativeText = context.getString(R.string.cancel),
positiveQaTag = context.getString(R.string.qa_conversation_settings_dialog_whitelist_confirm),
negativeQaTag = context.getString(R.string.qa_conversation_settings_dialog_whitelist_cancel),
positiveStyleDanger = false,
onPositive = {
// show system whitelist dialog
viewModelScope.launch {
_uiEvents.emit(UiEvent.ShowWhiteListSystemDialog)
}
},
onNegative = {}
)
)
}
}
}

// observe subscription status
viewModelScope.launch {
proStatusManager.proDataState.collect { subscription ->
Expand Down Expand Up @@ -331,6 +374,10 @@ class HomeViewModel @Inject constructor(
}
}

is Commands.HideSimpleDialog -> {
_dialogsState.update { it.copy(showSimpleDialog = null) }
}

is Commands.HideDonationCTADialog -> {
_dialogsState.update { it.copy(donationCTA = false) }
}
Expand Down Expand Up @@ -392,6 +439,7 @@ class HomeViewModel @Inject constructor(
val showStartConversationSheet: StartConversationSheetData? = null,
val proExpiringCTA: ProExpiringCTA? = null,
val proExpiredCTA: Boolean = false,
val showSimpleDialog: SimpleDialogData? = null,
val donationCTA: Boolean = false,
val showUrlDialog: String? = null,
)
Expand All @@ -411,6 +459,7 @@ class HomeViewModel @Inject constructor(

sealed interface UiEvent {
data class OpenProSettings(val start: ProSettingsDestination) : UiEvent
data object ShowWhiteListSystemDialog: UiEvent // once confirmed, this is for the system whitelist dialog
}

sealed interface Commands {
Expand All @@ -430,6 +479,8 @@ class HomeViewModel @Inject constructor(
data object ShowStartConversationSheet : Commands
data object HideStartConversationSheet : Commands

data object HideSimpleDialog: Commands

data class GotoProSettings(
val destination: ProSettingsDestination
): Commands
Expand Down
Loading