From a42ea6a31cb92e9121f03b2b45bc728952200457 Mon Sep 17 00:00:00 2001 From: Saalim Quadri Date: Mon, 29 Sep 2025 22:04:47 +0530 Subject: [PATCH] fix: Instant redirect for Play Store deep links in PWA/OSS mode * Also rename observeAppNotFoundAutoRedirect to observeAutoRedirect Signed-off-by: Saalim Quadri --- .../java/foundation/e/apps/ui/MainActivity.kt | 20 ++++++++++++++----- .../ui/application/ApplicationViewModel.kt | 6 ++++-- .../e/apps/utils/eventBus/AppEvent.kt | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/ui/MainActivity.kt b/app/src/main/java/foundation/e/apps/ui/MainActivity.kt index 23057a1cf..d1453ea05 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivity.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivity.kt @@ -260,7 +260,7 @@ class MainActivity : AppCompatActivity() { } launch { - observeAppNotFoundAutoRedirect() + observeAutoRedirect() } } } @@ -598,11 +598,21 @@ class MainActivity : AppCompatActivity() { } } - private suspend fun observeAppNotFoundAutoRedirect() { - EventBus.events.filterIsInstance() - .collectLatest { + private suspend fun observeAutoRedirect() { + EventBus.events.filterIsInstance() + .collectLatest { event -> + event.message?.let { messageResId -> + showSnackbarMessage(getString(messageResId)) + } + try { - findNavController(R.id.fragment).navigateUp() + val navController = findNavController(R.id.fragment) + + if (event.message != null && navController.currentDestination?.id == R.id.applicationFragment) { + navController.navigate(R.id.action_applicationFragment_to_homeFragment) + } else { + navController.navigateUp() + } } catch (e: IllegalArgumentException) { Timber.w(e, "Failed to navigate up from app not found") diff --git a/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt b/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt index 2b0eef0ce..dc873c829 100644 --- a/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt +++ b/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt @@ -90,7 +90,9 @@ class ApplicationViewModel @Inject constructor( * GPlayAuth, it will only have CleanApkAuth. */ if (gPlayObj == null && params.source == Source.PLAY_STORE) { - _errorMessageLiveData.postValue(R.string.gplay_data_for_oss) + viewModelScope.launch { + EventBus.invokeEvent(AppEvent.AutoRedirectHome(R.string.gplay_data_for_oss)) + } return } @@ -240,7 +242,7 @@ class ApplicationViewModel @Inject constructor( private fun scheduleAutoRedirect() { viewModelScope.launch { delay(REDIRECT_DELAY_MS) - EventBus.invokeEvent(AppEvent.AppNotFoundAutoRedirect()) + EventBus.invokeEvent(AppEvent.AutoRedirectHome()) } } diff --git a/app/src/main/java/foundation/e/apps/utils/eventBus/AppEvent.kt b/app/src/main/java/foundation/e/apps/utils/eventBus/AppEvent.kt index 406053e61..c7ca28c07 100644 --- a/app/src/main/java/foundation/e/apps/utils/eventBus/AppEvent.kt +++ b/app/src/main/java/foundation/e/apps/utils/eventBus/AppEvent.kt @@ -41,5 +41,5 @@ sealed class AppEvent(val data: Any) { val onClose: CompletableDeferred? = null ) : AppEvent(type) class SuccessfulLogin(user: User): AppEvent(user) - class AppNotFoundAutoRedirect : AppEvent(Unit) + class AutoRedirectHome(val message: Int? = null) : AppEvent(message ?: Unit) } -- GitLab