Compare commits

...

5 Commits

Author SHA1 Message Date
Alex Hart
2e7e3d04a1 Bump version to 5.53.8 2022-10-26 11:16:53 -03:00
Alex Hart
a314b71a5f Fix comparison causing hot loop on API25. 2022-10-26 11:10:47 -03:00
Greyson Parrelli
8ea1e1acf9 Fix stories index migration. 2022-10-25 16:43:11 -04:00
Alex Hart
e2ef8a14f1 Bump version to 5.53.7 2022-10-25 13:17:35 -03:00
Alex Hart
b6a53e673c Fix crash when viewing views of a group story. 2022-10-25 09:47:42 -03:00
7 changed files with 29 additions and 18 deletions

View File

@@ -58,14 +58,14 @@ ktlint {
}
def canonicalVersionCode = 1149
def canonicalVersionName = "5.53.6"
def canonicalVersionName = "5.53.8"
def postFixSize = 100
def abiPostFix = ['universal' : 0,
'armeabi-v7a' : 1,
'arm64-v8a' : 2,
'x86' : 3,
'x86_64' : 4]
def abiPostFix = ['universal' : 10,
'armeabi-v7a' : 11,
'arm64-v8a' : 12,
'x86' : 13,
'x86_64' : 14]
def keystores = [ 'debug' : loadKeystoreProperties('keystore.debug.properties') ]

View File

@@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.database.helpers.migration.V161_StorySendMessa
*/
object SignalDatabaseMigrations {
const val DATABASE_VERSION = 160
const val DATABASE_VERSION = 161
@JvmStatic
fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {

View File

@@ -8,6 +8,6 @@ import net.zetetic.database.sqlcipher.SQLiteDatabase
*/
object V161_StorySendMessageIdIndex : SignalDatabaseMigration {
override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
db.execSQL("CREATE INDEX story_sends_message_id_distribution_id_index ON story_sends (message_id, distribution_id)")
db.execSQL("CREATE INDEX IF NOT EXISTS story_sends_message_id_distribution_id_index ON story_sends (message_id, distribution_id)")
}
}

View File

@@ -43,7 +43,7 @@ object CreateStoryNameFieldItem {
}
override fun bind(model: Model) {
if (model.body != editText.text) {
if (model.body.toString() != editText.text.toString()) {
editText.setText(model.body)
}

View File

@@ -14,6 +14,7 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment
import org.thoughtcrime.securesms.components.settings.configure
import org.thoughtcrime.securesms.databinding.StoriesCreateWithRecipientsFragmentBinding
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.LifecycleDisposable
import org.thoughtcrime.securesms.util.Material3OnScrollHelper
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
@@ -43,6 +44,7 @@ class CreateStoryWithViewersFragment : DSLSettingsFragment(
)
private val binding by ViewBinderDelegate(StoriesCreateWithRecipientsFragmentBinding::bind)
private val disposables = LifecycleDisposable()
private val recipientIds: Array<RecipientId>
get() = CreateStoryWithViewersFragmentArgs.fromBundle(requireArguments()).recipients
@@ -56,8 +58,9 @@ class CreateStoryWithViewersFragment : DSLSettingsFragment(
viewModel.setLabel(it)
}
disposables.bindTo(viewLifecycleOwner)
adapter.submitList(getConfiguration().toMappingModelList())
viewModel.state.observe(viewLifecycleOwner) { state ->
disposables += viewModel.state.subscribe { state ->
val nameModel = CreateStoryNameFieldItem.Model(
body = state.label,

View File

@@ -1,25 +1,29 @@
package org.thoughtcrime.securesms.stories.settings.create
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import io.reactivex.rxjava3.kotlin.subscribeBy
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.livedata.Store
import org.thoughtcrime.securesms.util.rx.RxStore
class CreateStoryWithViewersViewModel(
private val repository: CreateStoryWithViewersRepository
) : ViewModel() {
private val store = Store(CreateStoryWithViewersState())
private val store = RxStore(CreateStoryWithViewersState())
private val disposables = CompositeDisposable()
val state: LiveData<CreateStoryWithViewersState> = store.stateLiveData
val state: Flowable<CreateStoryWithViewersState> = store.stateFlowable
.distinctUntilChanged()
.observeOn(AndroidSchedulers.mainThread())
override fun onCleared() {
disposables.clear()
store.dispose()
}
fun setLabel(label: CharSequence) {

View File

@@ -34,20 +34,24 @@ class StoryViewsRepository {
fun getViews(storyId: Long): Observable<List<StoryViewItemData>> {
return Observable.create<List<StoryViewItemData>> { emitter ->
val record: MessageRecord = SignalDatabase.mms.getMessageRecord(storyId)
val distributionId: DistributionId = SignalDatabase.distributionLists.getDistributionId(record.recipient.requireDistributionListId())!!
val recipientIds: Set<RecipientId> = SignalDatabase.storySends.getRecipientsForDistributionId(storyId, distributionId)
val filterIds: Set<RecipientId> = if (record.recipient.isDistributionList) {
val distributionId: DistributionId = SignalDatabase.distributionLists.getDistributionId(record.recipient.requireDistributionListId())!!
SignalDatabase.storySends.getRecipientsForDistributionId(storyId, distributionId)
} else {
emptySet()
}
fun refresh() {
emitter.onNext(
SignalDatabase.groupReceipts.getGroupReceiptInfo(storyId).filter {
it.status == GroupReceiptDatabase.STATUS_VIEWED
}.filter {
filterIds.isEmpty() || it.recipientId in filterIds
}.map {
StoryViewItemData(
recipient = Recipient.resolved(it.recipientId),
timeViewedInMillis = it.timestamp
)
}.filter {
it.recipient.id in recipientIds
}
)
}