mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-25 21:48:17 +00:00
Update new story button.
This commit is contained in:
@@ -96,7 +96,7 @@ object Stories {
|
||||
|
||||
fun getHeaderAction(onClick: () -> Unit): HeaderAction {
|
||||
return HeaderAction(
|
||||
R.string.ContactsCursorLoader_new_story,
|
||||
R.string.ContactsCursorLoader_add_to,
|
||||
R.drawable.ic_plus_12,
|
||||
onClick
|
||||
)
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package org.thoughtcrime.securesms.stories.settings.story
|
||||
|
||||
import org.thoughtcrime.securesms.databinding.NewStoryItemBinding
|
||||
import org.thoughtcrime.securesms.util.adapter.mapping.BindingFactory
|
||||
import org.thoughtcrime.securesms.util.adapter.mapping.BindingViewHolder
|
||||
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
|
||||
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel
|
||||
|
||||
/**
|
||||
* Entry point for new story creation.
|
||||
*/
|
||||
object NewStoryItem {
|
||||
fun register(mappingAdapter: MappingAdapter) {
|
||||
mappingAdapter.registerFactory(Model::class.java, BindingFactory(::ViewHolder, NewStoryItemBinding::inflate))
|
||||
}
|
||||
|
||||
class Model(val onClick: () -> Unit) : MappingModel<Model> {
|
||||
override fun areItemsTheSame(newItem: Model) = true
|
||||
override fun areContentsTheSame(newItem: Model) = true
|
||||
}
|
||||
|
||||
private class ViewHolder(binding: NewStoryItemBinding) : BindingViewHolder<Model, NewStoryItemBinding>(binding) {
|
||||
override fun bind(model: Model) {
|
||||
binding.root.setOnClickListener {
|
||||
model.onClick()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -69,7 +69,8 @@ class StoriesPrivacySettingsFragment :
|
||||
}
|
||||
}
|
||||
)
|
||||
ContactSearchItems.registerHeaders(middle)
|
||||
|
||||
NewStoryItem.register(top as MappingAdapter)
|
||||
|
||||
middle.setPagingController(viewModel.pagingController)
|
||||
|
||||
@@ -82,10 +83,6 @@ class StoriesPrivacySettingsFragment :
|
||||
viewModel.pagingController.onDataInvalidated()
|
||||
}
|
||||
|
||||
lifecycleDisposable += viewModel.headerActionRequests.subscribe {
|
||||
ChooseStoryTypeBottomSheet().show(childFragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG)
|
||||
}
|
||||
|
||||
lifecycleDisposable += viewModel.state.subscribe { state ->
|
||||
if (state.isUpdatingEnabledState) {
|
||||
progressDisplayManager.show(viewLifecycleOwner, childFragmentManager)
|
||||
@@ -93,7 +90,7 @@ class StoriesPrivacySettingsFragment :
|
||||
progressDisplayManager.hide()
|
||||
}
|
||||
|
||||
(top as MappingAdapter).submitList(getTopConfiguration(state).toMappingModelList())
|
||||
top.submitList(getTopConfiguration(state).toMappingModelList())
|
||||
middle.submitList(getMiddleConfiguration(state).toMappingModelList())
|
||||
(bottom as MappingAdapter).submitList(getBottomConfiguration(state).toMappingModelList())
|
||||
}
|
||||
@@ -113,6 +110,14 @@ class StoriesPrivacySettingsFragment :
|
||||
)
|
||||
|
||||
space(20.dp)
|
||||
|
||||
sectionHeaderPref(R.string.StoriesPrivacySettingsFragment__stories)
|
||||
|
||||
customPref(
|
||||
NewStoryItem.Model {
|
||||
ChooseStoryTypeBottomSheet().show(childFragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG)
|
||||
}
|
||||
)
|
||||
} else {
|
||||
clickPref(
|
||||
title = DSLSettingsText.from(R.string.StoriesPrivacySettingsFragment__turn_on_stories),
|
||||
|
||||
@@ -4,10 +4,8 @@ import androidx.lifecycle.ViewModel
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Observable
|
||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||
import io.reactivex.rxjava3.kotlin.plusAssign
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import org.signal.paging.PagedData
|
||||
import org.signal.paging.PagingConfig
|
||||
import org.signal.paging.ProxyPagingController
|
||||
@@ -17,7 +15,6 @@ import org.thoughtcrime.securesms.contacts.paged.ContactSearchPagedDataSource
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.stories.Stories
|
||||
import org.thoughtcrime.securesms.util.rx.RxStore
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class StoriesPrivacySettingsViewModel : ViewModel() {
|
||||
|
||||
@@ -36,21 +33,16 @@ class StoriesPrivacySettingsViewModel : ViewModel() {
|
||||
.build()
|
||||
|
||||
private val disposables = CompositeDisposable()
|
||||
private val headerActionRequestSubject = PublishSubject.create<Unit>()
|
||||
|
||||
val state: Flowable<StoriesPrivacySettingsState> = store.stateFlowable.observeOn(AndroidSchedulers.mainThread())
|
||||
val userHasActiveStories: Boolean get() = store.state.userHasStories
|
||||
val pagingController = ProxyPagingController<ContactSearchKey>()
|
||||
val headerActionRequests: Observable<Unit> = headerActionRequestSubject.debounce(100, TimeUnit.MILLISECONDS)
|
||||
|
||||
init {
|
||||
val configuration = ContactSearchConfiguration.build {
|
||||
addSection(
|
||||
ContactSearchConfiguration.Section.Stories(
|
||||
includeHeader = true,
|
||||
headerAction = Stories.getHeaderAction {
|
||||
headerActionRequestSubject.onNext(Unit)
|
||||
}
|
||||
includeHeader = false,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user