Fix issue where all content would be displayed if thread id was -1.

This commit is contained in:
Alex Hart
2021-06-25 11:28:28 -03:00
parent 3c489ad247
commit 9dac5691f0
4 changed files with 22 additions and 12 deletions

View File

@@ -202,11 +202,11 @@ class ConversationSettingsFragment : DSLSettingsFragment(
}
}
adapter.submitList(getConfiguration(state).toMappingModelList())
if (state.isLoaded) {
(requireView().parent as? ViewGroup)?.doOnPreDraw {
callback.onContentWillRender()
adapter.submitList(getConfiguration(state).toMappingModelList()) {
if (state.isLoaded) {
(requireView().parent as? ViewGroup)?.doOnPreDraw {
callback.onContentWillRender()
}
}
}
}

View File

@@ -23,6 +23,7 @@ import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.recipients.RecipientUtil
import org.thoughtcrime.securesms.util.FeatureFlags
import org.whispersystems.libsignal.util.guava.Optional
import java.io.IOException
private val TAG = Log.tag(ConversationSettingsRepository::class.java)
@@ -32,8 +33,12 @@ class ConversationSettingsRepository(
) {
@WorkerThread
fun getThreadMedia(threadId: Long): Cursor {
return DatabaseFactory.getMediaDatabase(context).getGalleryMediaForThread(threadId, MediaDatabase.Sorting.Newest)
fun getThreadMedia(threadId: Long): Optional<Cursor> {
return if (threadId <= 0) {
Optional.absent()
} else {
Optional.of(DatabaseFactory.getMediaDatabase(context).getGalleryMediaForThread(threadId, MediaDatabase.Sorting.Newest))
}
}
fun getThreadId(recipientId: RecipientId, consumer: (Long) -> Unit) {

View File

@@ -15,10 +15,11 @@ data class ConversationSettingsState(
val disappearingMessagesLifespan: Int = 0,
val canModifyBlockedState: Boolean = false,
val sharedMedia: Cursor? = null,
private val sharedMediaLoaded: Boolean = false,
private val specificSettingsState: SpecificSettingsState,
) {
val isLoaded: Boolean = recipient != Recipient.UNKNOWN && sharedMedia != null && specificSettingsState.isLoaded
val isLoaded: Boolean = recipient != Recipient.UNKNOWN && sharedMediaLoaded && specificSettingsState.isLoaded
fun withRecipientSettingsState(consumer: (SpecificSettingsState.RecipientSettingsState) -> Unit) {
if (specificSettingsState is SpecificSettingsState.RecipientSettingsState) {

View File

@@ -20,6 +20,7 @@ import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.SingleLiveEvent
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil
import org.thoughtcrime.securesms.util.livedata.Store
import org.whispersystems.libsignal.util.guava.Optional
sealed class ConversationSettingsViewModel(
private val repository: ConversationSettingsRepository,
@@ -47,16 +48,19 @@ sealed class ConversationSettingsViewModel(
val threadId: LiveData<Long> = Transformations.distinctUntilChanged(Transformations.map(state) { it.threadId })
val updater: LiveData<Long> = LiveDataUtil.combineLatest(threadId, sharedMediaUpdateTrigger) { tId, _ -> tId }
val sharedMedia: LiveData<Cursor> = LiveDataUtil.mapAsync(SignalExecutors.BOUNDED, updater) { tId ->
val sharedMedia: LiveData<Optional<Cursor>> = LiveDataUtil.mapAsync(SignalExecutors.BOUNDED, updater) { tId ->
repository.getThreadMedia(tId)
}
store.update(sharedMedia) { cursor, state ->
if (!cleared) {
openedMediaCursors.add(cursor)
state.copy(sharedMedia = cursor)
if (cursor.isPresent) {
openedMediaCursors.add(cursor.get())
}
state.copy(sharedMedia = cursor.orNull(), sharedMediaLoaded = true)
} else {
cursor.ensureClosed()
cursor.orNull().ensureClosed()
state.copy(sharedMedia = null)
}
}