use updateRelativeTimePeriodically everywhere (#4916)
This commit is contained in:
parent
759902b280
commit
36a4de9b40
7 changed files with 32 additions and 52 deletions
|
|
@ -26,7 +26,6 @@ import androidx.core.view.MenuProvider
|
|||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.paging.LoadState
|
||||
import androidx.recyclerview.widget.DividerItemDecoration
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
|
|
@ -37,7 +36,6 @@ import com.google.android.material.color.MaterialColors
|
|||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.keylesspalace.tusky.R
|
||||
import com.keylesspalace.tusky.StatusListActivity
|
||||
import com.keylesspalace.tusky.adapter.StatusBaseViewHolder
|
||||
import com.keylesspalace.tusky.appstore.ConversationsLoadingEvent
|
||||
import com.keylesspalace.tusky.appstore.EventHub
|
||||
import com.keylesspalace.tusky.appstore.PreferenceChangedEvent
|
||||
|
|
@ -53,6 +51,7 @@ import com.keylesspalace.tusky.util.ensureBottomPadding
|
|||
import com.keylesspalace.tusky.util.hide
|
||||
import com.keylesspalace.tusky.util.isAnyLoading
|
||||
import com.keylesspalace.tusky.util.show
|
||||
import com.keylesspalace.tusky.util.updateRelativeTimePeriodically
|
||||
import com.keylesspalace.tusky.util.viewBinding
|
||||
import com.keylesspalace.tusky.viewdata.AttachmentViewData
|
||||
import com.mikepenz.iconics.IconicsDrawable
|
||||
|
|
@ -61,9 +60,6 @@ import com.mikepenz.iconics.utils.colorInt
|
|||
import com.mikepenz.iconics.utils.sizeDp
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import javax.inject.Inject
|
||||
import kotlin.time.DurationUnit
|
||||
import kotlin.time.toDuration
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
|
|
@ -91,7 +87,7 @@ class ConversationsFragment :
|
|||
|
||||
val statusDisplayOptions = StatusDisplayOptions(
|
||||
animateAvatars = preferences.getBoolean(PrefKeys.ANIMATE_GIF_AVATARS, false),
|
||||
mediaPreviewEnabled = accountManager.activeAccount?.mediaPreviewEnabled ?: true,
|
||||
mediaPreviewEnabled = accountManager.activeAccount?.mediaPreviewEnabled != false,
|
||||
useAbsoluteTime = preferences.getBoolean(PrefKeys.ABSOLUTE_TIME_VIEW, false),
|
||||
showBotOverlay = preferences.getBoolean(PrefKeys.SHOW_BOT_OVERLAY, true),
|
||||
useBlurhash = preferences.getBoolean(PrefKeys.USE_BLURHASH, true),
|
||||
|
|
@ -177,19 +173,7 @@ class ConversationsFragment :
|
|||
}
|
||||
}
|
||||
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||
val useAbsoluteTime = preferences.getBoolean(PrefKeys.ABSOLUTE_TIME_VIEW, false)
|
||||
while (!useAbsoluteTime) {
|
||||
adapter.notifyItemRangeChanged(
|
||||
0,
|
||||
adapter.itemCount,
|
||||
StatusBaseViewHolder.Key.KEY_CREATED
|
||||
)
|
||||
delay(1.toDuration(DurationUnit.MINUTES))
|
||||
}
|
||||
}
|
||||
}
|
||||
updateRelativeTimePeriodically(preferences, adapter)
|
||||
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
eventHub.events.collect { event ->
|
||||
|
|
|
|||
|
|
@ -47,7 +47,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
|||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.keylesspalace.tusky.BaseActivity
|
||||
import com.keylesspalace.tusky.R
|
||||
import com.keylesspalace.tusky.adapter.StatusBaseViewHolder
|
||||
import com.keylesspalace.tusky.appstore.EventHub
|
||||
import com.keylesspalace.tusky.appstore.PreferenceChangedEvent
|
||||
import com.keylesspalace.tusky.components.notifications.requests.NotificationRequestsActivity
|
||||
|
|
@ -70,15 +69,13 @@ import com.keylesspalace.tusky.util.hide
|
|||
import com.keylesspalace.tusky.util.openLink
|
||||
import com.keylesspalace.tusky.util.show
|
||||
import com.keylesspalace.tusky.util.startActivityWithSlideInAnimation
|
||||
import com.keylesspalace.tusky.util.updateRelativeTimePeriodically
|
||||
import com.keylesspalace.tusky.util.viewBinding
|
||||
import com.keylesspalace.tusky.viewdata.AttachmentViewData
|
||||
import com.keylesspalace.tusky.viewdata.NotificationViewData
|
||||
import com.keylesspalace.tusky.viewdata.TranslationViewData
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import javax.inject.Inject
|
||||
import kotlin.time.DurationUnit
|
||||
import kotlin.time.toDuration
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
|
|
@ -267,19 +264,11 @@ class NotificationsFragment :
|
|||
accountManager.activeAccount?.let { account ->
|
||||
notificationService.clearNotificationsForAccount(account)
|
||||
}
|
||||
|
||||
val useAbsoluteTime = preferences.getBoolean(PrefKeys.ABSOLUTE_TIME_VIEW, false)
|
||||
while (!useAbsoluteTime) {
|
||||
adapter.notifyItemRangeChanged(
|
||||
0,
|
||||
adapter.itemCount,
|
||||
StatusBaseViewHolder.Key.KEY_CREATED
|
||||
)
|
||||
delay(1.toDuration(DurationUnit.MINUTES))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
updateRelativeTimePeriodically(preferences, adapter)
|
||||
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
viewModel.notificationPolicy.collect {
|
||||
notificationsPolicyAdapter.updateState(it)
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import com.keylesspalace.tusky.util.StatusDisplayOptions
|
|||
import com.keylesspalace.tusky.util.copyToClipboard
|
||||
import com.keylesspalace.tusky.util.openLink
|
||||
import com.keylesspalace.tusky.util.startActivityWithSlideInAnimation
|
||||
import com.keylesspalace.tusky.util.updateRelativeTimePeriodically
|
||||
import com.keylesspalace.tusky.view.showMuteAccountDialog
|
||||
import com.keylesspalace.tusky.viewdata.AttachmentViewData
|
||||
import com.keylesspalace.tusky.viewdata.StatusViewData
|
||||
|
|
@ -101,6 +102,14 @@ class SearchStatusesFragment : SearchFragment<StatusViewData.Concrete>(), Status
|
|||
pendingMediaDownloads = savedInstanceState?.getStringArrayList(PENDING_MEDIA_DOWNLOADS_STATE_KEY)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
adapter?.let {
|
||||
updateRelativeTimePeriodically(preferences, it)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
pendingMediaDownloads?.let {
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ import at.connyduck.sparkbutton.helpers.Utils
|
|||
import com.google.android.material.color.MaterialColors
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.keylesspalace.tusky.R
|
||||
import com.keylesspalace.tusky.adapter.StatusBaseViewHolder
|
||||
import com.keylesspalace.tusky.appstore.EventHub
|
||||
import com.keylesspalace.tusky.appstore.PreferenceChangedEvent
|
||||
import com.keylesspalace.tusky.appstore.StatusComposedEvent
|
||||
|
|
@ -296,13 +295,7 @@ class TimelineFragment :
|
|||
}
|
||||
}
|
||||
|
||||
updateRelativeTimePeriodically(preferences) {
|
||||
adapter.notifyItemRangeChanged(
|
||||
0,
|
||||
adapter.itemCount,
|
||||
StatusBaseViewHolder.Key.KEY_CREATED
|
||||
)
|
||||
}
|
||||
updateRelativeTimePeriodically(preferences, adapter)
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
|
|
|
|||
|
|
@ -39,6 +39,9 @@ class ViewThreadActivity : BottomSheetActivity() {
|
|||
setDisplayShowHomeEnabled(true)
|
||||
setDisplayShowTitleEnabled(true)
|
||||
}
|
||||
|
||||
setTitle(R.string.title_view_thread)
|
||||
|
||||
val id = intent.getStringExtra(ID_EXTRA)!!
|
||||
val url = intent.getStringExtra(URL_EXTRA)!!
|
||||
val fragment =
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ import com.keylesspalace.tusky.util.hide
|
|||
import com.keylesspalace.tusky.util.openLink
|
||||
import com.keylesspalace.tusky.util.show
|
||||
import com.keylesspalace.tusky.util.startActivityWithSlideInAnimation
|
||||
import com.keylesspalace.tusky.util.updateRelativeTimePeriodically
|
||||
import com.keylesspalace.tusky.util.viewBinding
|
||||
import com.keylesspalace.tusky.viewdata.AttachmentViewData.Companion.list
|
||||
import com.keylesspalace.tusky.viewdata.StatusViewData
|
||||
|
|
@ -247,6 +248,8 @@ class ViewThreadFragment :
|
|||
}
|
||||
}
|
||||
|
||||
updateRelativeTimePeriodically(preferences, adapter)
|
||||
|
||||
viewModel.loadThread(thisThreadsStatusId)
|
||||
}
|
||||
|
||||
|
|
@ -289,11 +292,6 @@ class ViewThreadFragment :
|
|||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
requireActivity().title = getString(R.string.title_view_thread)
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a job to implement a delayed-visible progress bar.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ import androidx.fragment.app.Fragment
|
|||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.coroutineScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.keylesspalace.tusky.adapter.StatusBaseViewHolder
|
||||
import com.keylesspalace.tusky.settings.PrefKeys
|
||||
import kotlin.time.Duration.Companion.minutes
|
||||
import kotlinx.coroutines.delay
|
||||
|
|
@ -19,17 +21,19 @@ private val UPDATE_INTERVAL = 1.minutes
|
|||
* if setting absoluteTimeView is false.
|
||||
* Start updates when the Fragment becomes visible and stop when it is hidden.
|
||||
*/
|
||||
fun Fragment.updateRelativeTimePeriodically(preferences: SharedPreferences, callback: Runnable) {
|
||||
fun Fragment.updateRelativeTimePeriodically(preferences: SharedPreferences, adapter: RecyclerView.Adapter<out RecyclerView.ViewHolder>) {
|
||||
val lifecycle = viewLifecycleOwner.lifecycle
|
||||
lifecycle.coroutineScope.launch {
|
||||
// This child coroutine will launch each time the Fragment moves to the STARTED state
|
||||
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
val useAbsoluteTime = preferences.getBoolean(PrefKeys.ABSOLUTE_TIME_VIEW, false)
|
||||
if (!useAbsoluteTime) {
|
||||
while (true) {
|
||||
callback.run()
|
||||
delay(UPDATE_INTERVAL)
|
||||
}
|
||||
while (!useAbsoluteTime) {
|
||||
adapter.notifyItemRangeChanged(
|
||||
0,
|
||||
adapter.itemCount,
|
||||
StatusBaseViewHolder.Key.KEY_CREATED
|
||||
)
|
||||
delay(UPDATE_INTERVAL)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue