mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-17 15:33:30 +01:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e7e3d04a1 | ||
|
|
a314b71a5f | ||
|
|
8ea1e1acf9 | ||
|
|
e2ef8a14f1 | ||
|
|
b6a53e673c |
@@ -58,14 +58,14 @@ ktlint {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def canonicalVersionCode = 1149
|
def canonicalVersionCode = 1149
|
||||||
def canonicalVersionName = "5.53.6"
|
def canonicalVersionName = "5.53.8"
|
||||||
|
|
||||||
def postFixSize = 100
|
def postFixSize = 100
|
||||||
def abiPostFix = ['universal' : 0,
|
def abiPostFix = ['universal' : 10,
|
||||||
'armeabi-v7a' : 1,
|
'armeabi-v7a' : 11,
|
||||||
'arm64-v8a' : 2,
|
'arm64-v8a' : 12,
|
||||||
'x86' : 3,
|
'x86' : 13,
|
||||||
'x86_64' : 4]
|
'x86_64' : 14]
|
||||||
|
|
||||||
def keystores = [ 'debug' : loadKeystoreProperties('keystore.debug.properties') ]
|
def keystores = [ 'debug' : loadKeystoreProperties('keystore.debug.properties') ]
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.database.helpers.migration.V161_StorySendMessa
|
|||||||
*/
|
*/
|
||||||
object SignalDatabaseMigrations {
|
object SignalDatabaseMigrations {
|
||||||
|
|
||||||
const val DATABASE_VERSION = 160
|
const val DATABASE_VERSION = 161
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
|
fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ import net.zetetic.database.sqlcipher.SQLiteDatabase
|
|||||||
*/
|
*/
|
||||||
object V161_StorySendMessageIdIndex : SignalDatabaseMigration {
|
object V161_StorySendMessageIdIndex : SignalDatabaseMigration {
|
||||||
override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
|
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)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ object CreateStoryNameFieldItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(model: Model) {
|
override fun bind(model: Model) {
|
||||||
if (model.body != editText.text) {
|
if (model.body.toString() != editText.text.toString()) {
|
||||||
editText.setText(model.body)
|
editText.setText(model.body)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment
|
|||||||
import org.thoughtcrime.securesms.components.settings.configure
|
import org.thoughtcrime.securesms.components.settings.configure
|
||||||
import org.thoughtcrime.securesms.databinding.StoriesCreateWithRecipientsFragmentBinding
|
import org.thoughtcrime.securesms.databinding.StoriesCreateWithRecipientsFragmentBinding
|
||||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||||
|
import org.thoughtcrime.securesms.util.LifecycleDisposable
|
||||||
import org.thoughtcrime.securesms.util.Material3OnScrollHelper
|
import org.thoughtcrime.securesms.util.Material3OnScrollHelper
|
||||||
import org.thoughtcrime.securesms.util.ViewUtil
|
import org.thoughtcrime.securesms.util.ViewUtil
|
||||||
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
|
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
|
||||||
@@ -43,6 +44,7 @@ class CreateStoryWithViewersFragment : DSLSettingsFragment(
|
|||||||
)
|
)
|
||||||
|
|
||||||
private val binding by ViewBinderDelegate(StoriesCreateWithRecipientsFragmentBinding::bind)
|
private val binding by ViewBinderDelegate(StoriesCreateWithRecipientsFragmentBinding::bind)
|
||||||
|
private val disposables = LifecycleDisposable()
|
||||||
|
|
||||||
private val recipientIds: Array<RecipientId>
|
private val recipientIds: Array<RecipientId>
|
||||||
get() = CreateStoryWithViewersFragmentArgs.fromBundle(requireArguments()).recipients
|
get() = CreateStoryWithViewersFragmentArgs.fromBundle(requireArguments()).recipients
|
||||||
@@ -56,8 +58,9 @@ class CreateStoryWithViewersFragment : DSLSettingsFragment(
|
|||||||
viewModel.setLabel(it)
|
viewModel.setLabel(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
disposables.bindTo(viewLifecycleOwner)
|
||||||
adapter.submitList(getConfiguration().toMappingModelList())
|
adapter.submitList(getConfiguration().toMappingModelList())
|
||||||
viewModel.state.observe(viewLifecycleOwner) { state ->
|
disposables += viewModel.state.subscribe { state ->
|
||||||
|
|
||||||
val nameModel = CreateStoryNameFieldItem.Model(
|
val nameModel = CreateStoryNameFieldItem.Model(
|
||||||
body = state.label,
|
body = state.label,
|
||||||
|
|||||||
@@ -1,25 +1,29 @@
|
|||||||
package org.thoughtcrime.securesms.stories.settings.create
|
package org.thoughtcrime.securesms.stories.settings.create
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.ViewModelProvider
|
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.disposables.CompositeDisposable
|
||||||
import io.reactivex.rxjava3.kotlin.plusAssign
|
import io.reactivex.rxjava3.kotlin.plusAssign
|
||||||
import io.reactivex.rxjava3.kotlin.subscribeBy
|
import io.reactivex.rxjava3.kotlin.subscribeBy
|
||||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||||
import org.thoughtcrime.securesms.util.livedata.Store
|
import org.thoughtcrime.securesms.util.rx.RxStore
|
||||||
|
|
||||||
class CreateStoryWithViewersViewModel(
|
class CreateStoryWithViewersViewModel(
|
||||||
private val repository: CreateStoryWithViewersRepository
|
private val repository: CreateStoryWithViewersRepository
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
||||||
private val store = Store(CreateStoryWithViewersState())
|
private val store = RxStore(CreateStoryWithViewersState())
|
||||||
private val disposables = CompositeDisposable()
|
private val disposables = CompositeDisposable()
|
||||||
|
|
||||||
val state: LiveData<CreateStoryWithViewersState> = store.stateLiveData
|
val state: Flowable<CreateStoryWithViewersState> = store.stateFlowable
|
||||||
|
.distinctUntilChanged()
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
|
||||||
override fun onCleared() {
|
override fun onCleared() {
|
||||||
disposables.clear()
|
disposables.clear()
|
||||||
|
store.dispose()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setLabel(label: CharSequence) {
|
fun setLabel(label: CharSequence) {
|
||||||
|
|||||||
@@ -34,20 +34,24 @@ class StoryViewsRepository {
|
|||||||
fun getViews(storyId: Long): Observable<List<StoryViewItemData>> {
|
fun getViews(storyId: Long): Observable<List<StoryViewItemData>> {
|
||||||
return Observable.create<List<StoryViewItemData>> { emitter ->
|
return Observable.create<List<StoryViewItemData>> { emitter ->
|
||||||
val record: MessageRecord = SignalDatabase.mms.getMessageRecord(storyId)
|
val record: MessageRecord = SignalDatabase.mms.getMessageRecord(storyId)
|
||||||
val distributionId: DistributionId = SignalDatabase.distributionLists.getDistributionId(record.recipient.requireDistributionListId())!!
|
val filterIds: Set<RecipientId> = if (record.recipient.isDistributionList) {
|
||||||
val recipientIds: Set<RecipientId> = SignalDatabase.storySends.getRecipientsForDistributionId(storyId, distributionId)
|
val distributionId: DistributionId = SignalDatabase.distributionLists.getDistributionId(record.recipient.requireDistributionListId())!!
|
||||||
|
SignalDatabase.storySends.getRecipientsForDistributionId(storyId, distributionId)
|
||||||
|
} else {
|
||||||
|
emptySet()
|
||||||
|
}
|
||||||
|
|
||||||
fun refresh() {
|
fun refresh() {
|
||||||
emitter.onNext(
|
emitter.onNext(
|
||||||
SignalDatabase.groupReceipts.getGroupReceiptInfo(storyId).filter {
|
SignalDatabase.groupReceipts.getGroupReceiptInfo(storyId).filter {
|
||||||
it.status == GroupReceiptDatabase.STATUS_VIEWED
|
it.status == GroupReceiptDatabase.STATUS_VIEWED
|
||||||
|
}.filter {
|
||||||
|
filterIds.isEmpty() || it.recipientId in filterIds
|
||||||
}.map {
|
}.map {
|
||||||
StoryViewItemData(
|
StoryViewItemData(
|
||||||
recipient = Recipient.resolved(it.recipientId),
|
recipient = Recipient.resolved(it.recipientId),
|
||||||
timeViewedInMillis = it.timestamp
|
timeViewedInMillis = it.timestamp
|
||||||
)
|
)
|
||||||
}.filter {
|
|
||||||
it.recipient.id in recipientIds
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user