Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ configurations.configureEach {
exclude(module = "commons-logging")
}

val canonicalVersionCode = 426
val canonicalVersionName = "1.28.1"
val canonicalVersionCode = 428
val canonicalVersionName = "1.28.2"

val postFixSize = 10
val abiPostFix = mapOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -930,12 +930,6 @@ interface TextSecurePreferences {
setBooleanPreference(context, FINGERPRINT_KEY_GENERATED, true)
}

@JvmStatic
fun clearAll(context: Context) {
getDefaultSharedPreferences(context).edit().clear().commit()
}


// ----- Get / set methods for if we have already warned the user that saving attachments will allow other apps to access them -----
// Note: We only ever show the warning dialog about this ONCE - when the user accepts this fact we write true to the flag & never show again.
@JvmStatic
Expand Down Expand Up @@ -1656,8 +1650,16 @@ class AppTextSecurePreferences @Inject constructor(
return getBooleanPreference(AUTOPLAY_AUDIO_MESSAGES, false)
}

/**
* Clear all prefs and reset or observables
*/
override fun clearAll() {
getDefaultSharedPreferences(context).edit().clear().commit()
pushEnabled.update { false }
localNumberState.update { null }
postProLaunchState.update { false }
hiddenPasswordState.update { false }

getDefaultSharedPreferences(context).edit(commit = true) { clear() }
}

override fun getHidePassword() = getBooleanPreference(HIDE_PASSWORD, false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.attachments

import android.app.Application
import android.os.FileObserver
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
Expand Down Expand Up @@ -95,11 +96,17 @@ class AvatarUploadManager @Inject constructor(
}

Log.d(TAG, "Avatar expired, re-uploading")
uploadAvatar(
pictureData = localEncryptedFileInputStreamFactory.create(localFile)
.use { it.readBytes() },
isReupload = true,
)
try {
uploadAvatar(
pictureData = localEncryptedFileInputStreamFactory.create(localFile)
.use { it.readBytes() },
isReupload = true,
)
} catch (e: CancellationException) {
throw e
} catch (e: Exception) {
Log.w(TAG, "Failed to re-upload avatar", e)
}
}
} else {
emptyFlow()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.map
Expand Down Expand Up @@ -58,6 +59,7 @@ import org.thoughtcrime.securesms.util.castAwayType
import java.util.EnumSet
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import kotlin.math.log

private const val TAG = "ConfigToDatabaseSync"

Expand Down Expand Up @@ -93,17 +95,20 @@ class ConfigToDatabaseSync @Inject constructor(
// Sync conversations from config -> database
scope.launch {
preferences.watchLocalNumber()
.filterNotNull()
.take(1)
.flatMapLatest {
combine(
conversationRepository.conversationListAddressesFlow,
configFactory.userConfigsChanged(EnumSet.of(UserConfigType.CONVO_INFO_VOLATILE))
.castAwayType()
.onStart { emit(Unit) }
.map { _ -> configFactory.withUserConfigs { it.convoInfoVolatile.all() } },
::Pair
)
.map { it != null }
.flatMapLatest { loggedIn ->
if (loggedIn) {
combine(
conversationRepository.conversationListAddressesFlow,
configFactory.userConfigsChanged(EnumSet.of(UserConfigType.CONVO_INFO_VOLATILE))
.castAwayType()
.onStart { emit(Unit) }
.map { _ -> configFactory.withUserConfigs { it.convoInfoVolatile.all() } },
::Pair
)
} else {
emptyFlow()
}
}
.distinctUntilChanged()
.collectLatest { (conversations, convoInfo) ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ import org.thoughtcrime.securesms.dependencies.ConfigFactory
import org.thoughtcrime.securesms.giph.ui.GiphyActivity
import org.thoughtcrime.securesms.groups.GroupMembersActivity
import org.thoughtcrime.securesms.groups.OpenGroupManager
import org.thoughtcrime.securesms.home.HomeActivity
import org.thoughtcrime.securesms.home.search.searchName
import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil
Expand Down Expand Up @@ -284,7 +285,7 @@ class ConversationActivityV2 : ScreenLockActionBarActivity(), InputBarDelegate,

private val address: Address.Conversable by lazy {
requireNotNull(IntentCompat.getParcelableExtra(intent, ADDRESS, Address.Conversable::class.java)) {
"Address must be provided in the intent extras"
"Address must be provided in the intent extras to open a conversation"
}
}

Expand Down Expand Up @@ -522,6 +523,18 @@ class ConversationActivityV2 : ScreenLockActionBarActivity(), InputBarDelegate,

override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) {
super.onCreate(savedInstanceState, isReady)

// Check if address is null before proceeding with initialization
if (IntentCompat.getParcelableExtra(intent, ADDRESS, Address.Conversable::class.java) == null) {
Log.w(TAG, "ConversationActivityV2 launched without ADDRESS extra - Returning home")
val intent = Intent(this, HomeActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
startActivity(intent)
finish()
return
}

binding = ActivityConversationV2Binding.inflate(layoutInflater)
setContentView(binding.root)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
Expand Down Expand Up @@ -43,21 +43,24 @@ class BlindMappingRepository @Inject constructor(
*/
@Suppress("OPT_IN_USAGE")
val mappings: StateFlow<Map<CommunityServerUrl, Map<Address.Blinded, Address.Standard>>> = prefs.watchLocalNumber()
.filterNotNull()
.flatMapLatest { localAddress ->
configFactory
.userConfigsChanged(setOf(UserConfigType.USER_GROUPS, UserConfigType.CONTACTS))
.castAwayType()
.onStart { emit(Unit) }
.map {
configFactory.withUserConfigs { configs ->
Pair(
configs.userGroups.allCommunityInfo().map { it.community },
configs.contacts.all().map { Address.Standard(AccountId(it.id)) }
+ Address.Standard(AccountId(localAddress))
)
if (localAddress.isNullOrBlank()) {
emptyFlow()
} else {
configFactory
.userConfigsChanged(setOf(UserConfigType.USER_GROUPS, UserConfigType.CONTACTS))
.castAwayType()
.onStart { emit(Unit) }
.map {
configFactory.withUserConfigs { configs ->
Pair(
configs.userGroups.allCommunityInfo().map { it.community },
configs.contacts.all().map { Address.Standard(AccountId(it.id)) }
+ Address.Standard(AccountId(localAddress))
)
}
}
}
}
}
.distinctUntilChanged()
.map { (allCommunities, allContacts) ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.filterNotNull
Expand Down Expand Up @@ -93,9 +94,13 @@ class RecipientRepository @Inject constructor(

fun observeSelf(): Flow<Recipient> {
return preferences.watchLocalNumber()
.filterNotNull()
.distinctUntilChanged()
.flatMapLatest { observeRecipient(it.toAddress()) }
.flatMapLatest {
if (it.isNullOrBlank()) {
emptyFlow()
} else {
observeRecipient(it.toAddress())
}
}
}

fun getSelf(): Recipient {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ class ClearDataUtils @Inject constructor(
application.deleteDatabase(DatabaseMigrationManager.CIPHER4_DB_NAME)
application.deleteDatabase(DatabaseMigrationManager.CIPHER3_DB_NAME)

TextSecurePreferences.clearAll(application)
// clear all prefs
prefs.clearAll()

application.getSharedPreferences(ApplicationContext.PREFERENCES_NAME, 0).edit(commit = true) { clear() }
application.cacheDir.deleteRecursively()
application.filesDir.deleteRecursively()
Expand Down