diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt index 937d31b966..6926691423 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt @@ -20,6 +20,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController +import androidx.recyclerview.widget.RecyclerView import androidx.transition.TransitionInflater import com.google.android.material.appbar.AppBarLayout import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -32,6 +33,7 @@ import org.signal.core.util.DimensionUnit import org.signal.core.util.concurrent.LifecycleDisposable import org.signal.core.util.concurrent.addTo import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.MainActivity import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.calls.links.details.CallLinkDetailsActivity import org.thoughtcrime.securesms.calls.new.NewCallActivity @@ -124,6 +126,12 @@ class CallLogFragment : Fragment(R.layout.call_log_fragment), CallLogAdapter.Cal val callLogAdapter = CallLogAdapter(this) disposables.bindTo(viewLifecycleOwner) callLogAdapter.setPagingController(viewModel.controller) + callLogAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { + override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { + (requireActivity() as? MainActivity)?.onFirstRender() + callLogAdapter.unregisterAdapterDataObserver(this) + } + }) val scrollToPositionDelegate = ScrollToPositionDelegate( recyclerView = binding.recycler, diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt index 630ff6dce3..b4ec71b525 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt @@ -16,6 +16,7 @@ import androidx.core.app.SharedElementCallback import androidx.core.view.ViewCompat import androidx.fragment.app.viewModels import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver import androidx.transition.TransitionInflater import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.snackbar.Snackbar @@ -26,6 +27,7 @@ import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode import org.signal.core.util.concurrent.LifecycleDisposable +import org.thoughtcrime.securesms.MainActivity import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.Material3SearchToolbar import org.thoughtcrime.securesms.components.reminder.ExpiredBuildReminder @@ -262,6 +264,13 @@ class StoriesLandingFragment : DSLSettingsFragment(layoutId = R.layout.stories_l recyclerView?.scrollToPosition(0) } }) + + this.adapter.registerAdapterDataObserver(object : AdapterDataObserver() { + override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { + (requireActivity() as? MainActivity)?.onFirstRender() + this@StoriesLandingFragment.adapter.unregisterAdapterDataObserver(this) + } + }) } private fun getConfiguration(state: StoriesLandingState): DSLConfiguration {