Fix PictureInPictureUiState not found crashes.

This commit is contained in:
Cody Henthorne
2026-05-08 15:35:40 -04:00
parent a6816df0e8
commit 6baebfe140
3 changed files with 38 additions and 19 deletions
@@ -122,6 +122,7 @@ class WebRtcCallActivity : BaseActivity(), SafetyNumberChangeDialog.Callback, Re
private var answeredFromNotification: Boolean = false
private var ephemeralStateDisposable = Disposable.empty()
private val callPermissionsDialogController = CallPermissionsDialogController()
private val eventBusSubscriber = EventBusSubscriber()
override fun attachBaseContext(newBase: Context) {
delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES
@@ -240,8 +241,8 @@ class WebRtcCallActivity : BaseActivity(), SafetyNumberChangeDialog.Callback, Re
initializeScreenshotSecurity()
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this)
if (!EventBus.getDefault().isRegistered(eventBusSubscriber)) {
EventBus.getDefault().register(eventBusSubscriber)
}
val rtcViewModel = EventBus.getDefault().getStickyEvent(WebRtcViewModel::class.java)
@@ -285,7 +286,7 @@ class WebRtcCallActivity : BaseActivity(), SafetyNumberChangeDialog.Callback, Re
disableIncomingRingingVanity()
if (!isInPipMode() || isFinishing) {
EventBus.getDefault().unregister(this)
EventBus.getDefault().unregister(eventBusSubscriber)
}
if (!callPermissionsDialogController.isAskingForPermission && !viewModel.isCallStarting && !isChangingConfigurations) {
@@ -307,7 +308,7 @@ class WebRtcCallActivity : BaseActivity(), SafetyNumberChangeDialog.Callback, Re
ephemeralStateDisposable.dispose()
if (!isInPipMode() || isFinishing) {
EventBus.getDefault().unregister(this)
EventBus.getDefault().unregister(eventBusSubscriber)
requestNewSizesThrottle.clear()
}
@@ -329,7 +330,7 @@ class WebRtcCallActivity : BaseActivity(), SafetyNumberChangeDialog.Callback, Re
Log.d(TAG, "onDestroy")
super.onDestroy()
windowInfoTrackerCallbackAdapter.removeWindowLayoutInfoListener(windowLayoutInfoConsumer)
EventBus.getDefault().unregister(this)
EventBus.getDefault().unregister(eventBusSubscriber)
}
@SuppressLint("MissingSuperCall")
@@ -387,13 +388,11 @@ class WebRtcCallActivity : BaseActivity(), SafetyNumberChangeDialog.Callback, Re
AppDependencies.signalCallManager.resendMediaKeys()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRecaptchaRequiredEvent(recaptchaRequiredEvent: RecaptchaRequiredEvent) {
private fun onRecaptchaRequiredEvent(recaptchaRequiredEvent: RecaptchaRequiredEvent) {
RecaptchaProofBottomSheetFragment.show(supportFragmentManager)
}
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
fun onEventMainThread(event: WebRtcViewModel) {
private fun onEventMainThread(event: WebRtcViewModel) {
Log.i(TAG, "Got message from service: ${event.describeDifference(previousEvent)}")
val previousCallState: WebRtcViewModel.State? = previousEvent?.state
@@ -582,8 +581,8 @@ class WebRtcCallActivity : BaseActivity(), SafetyNumberChangeDialog.Callback, Re
if (info.isInPictureInPictureMode) {
callScreen.maybeDismissAudioPicker()
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this)
if (!EventBus.getDefault().isRegistered(eventBusSubscriber)) {
EventBus.getDefault().register(eventBusSubscriber)
}
}
viewModel.setIsLandscapeEnabled(info.isInPictureInPictureMode)
@@ -1410,4 +1409,16 @@ class WebRtcCallActivity : BaseActivity(), SafetyNumberChangeDialog.Callback, Re
PendingParticipantsBottomSheet().show(supportFragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG)
}
}
private inner class EventBusSubscriber {
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRecaptchaRequiredEvent(recaptchaRequiredEvent: RecaptchaRequiredEvent) {
this@WebRtcCallActivity.onRecaptchaRequiredEvent(recaptchaRequiredEvent)
}
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
fun onEventMainThread(event: WebRtcViewModel) {
this@WebRtcCallActivity.onEventMainThread(event)
}
}
}
@@ -113,6 +113,8 @@ class RemoteRestoreActivity : BaseActivity() {
private lateinit var wakeLock: RemoteRestoreWakeLock
private val eventBusSubscriber = EventBusSubscriber()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -235,12 +237,14 @@ class RemoteRestoreActivity : BaseActivity() {
}
}
EventBus.getDefault().registerForLifecycle(subscriber = this, lifecycleOwner = this)
EventBus.getDefault().registerForLifecycle(subscriber = eventBusSubscriber, lifecycleOwner = this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEvent(restoreEvent: RestoreV2Event) {
viewModel.updateRestoreProgress(restoreEvent)
private inner class EventBusSubscriber {
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEvent(restoreEvent: RestoreV2Event) {
viewModel.updateRestoreProgress(restoreEvent)
}
}
private fun showUnregisteredDialog() {
@@ -75,6 +75,8 @@ class QuickstartRestoreActivity : BaseActivity() {
private var restoreStatus by mutableStateOf("Restoring data...")
private val eventBusSubscriber = EventBusSubscriber()
private val manageStorageLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (hasStorageAccess()) {
startRestore()
@@ -110,7 +112,7 @@ class QuickstartRestoreActivity : BaseActivity() {
}
}
org.greenrobot.eventbus.EventBus.getDefault().registerForLifecycle(subscriber = this, lifecycleOwner = this)
org.greenrobot.eventbus.EventBus.getDefault().registerForLifecycle(subscriber = eventBusSubscriber, lifecycleOwner = this)
if (hasStorageAccess()) {
startRestore()
@@ -195,8 +197,10 @@ class QuickstartRestoreActivity : BaseActivity() {
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEvent(restoreEvent: RestoreV2Event) {
restoreStatus = "${restoreEvent.type}: ${restoreEvent.count} / ${restoreEvent.estimatedTotalCount}"
private inner class EventBusSubscriber {
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEvent(restoreEvent: RestoreV2Event) {
restoreStatus = "${restoreEvent.type}: ${restoreEvent.count} / ${restoreEvent.estimatedTotalCount}"
}
}
}