From a99e742472e25d74eaeb4404436117306d7b5ae6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= <m.pich@outlook.com> Date: Mon, 11 Jan 2021 10:41:17 +0100 Subject: [PATCH] Handle URLs from FCM push notification (#1070) --- app/src/main/AndroidManifest.xml | 14 ++++++++++++-- .../wulkanowy/ui/modules/splash/SplashActivity.kt | 8 +++++++- .../wulkanowy/ui/modules/splash/SplashPresenter.kt | 7 ++++++- .../wulkanowy/ui/modules/splash/SplashView.kt | 2 ++ .../ui/modules/splash/SplashPresenterTest.kt | 4 ++-- 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a8d2b49e..eaef4369 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,6 +9,17 @@ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.VIBRATE" /> + <queries> + <intent> + <action android:name="android.intent.action.VIEW" /> + <data android:scheme="http" /> + </intent> + <intent> + <action android:name="android.intent.action.VIEW" /> + <data android:scheme="https" /> + </intent> + </queries> + <application android:name=".WulkanowyApp" android:allowBackup="false" @@ -112,8 +123,7 @@ <meta-data android:name="install_channel" - android:value="${install_channel}"> - </meta-data> + android:value="${install_channel}" /> <!-- workaround for https://github.com/firebase/firebase-android-sdk/issues/473 enabled:false --> <!-- https://firebase.googleblog.com/2017/03/take-control-of-your-firebase-init-on.html --> diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashActivity.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashActivity.kt index 7fc20d23..80138175 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashActivity.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashActivity.kt @@ -8,6 +8,7 @@ import dagger.hilt.android.AndroidEntryPoint import io.github.wulkanowy.ui.base.BaseActivity import io.github.wulkanowy.ui.modules.login.LoginActivity import io.github.wulkanowy.ui.modules.main.MainActivity +import io.github.wulkanowy.utils.openInternetBrowser import javax.inject.Inject @AndroidEntryPoint @@ -18,7 +19,7 @@ class SplashActivity : BaseActivity<SplashPresenter, ViewBinding>(), SplashView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - presenter.onAttachView(this) + presenter.onAttachView(this, intent?.getStringExtra("external_url")) } override fun openLoginView() { @@ -31,6 +32,11 @@ class SplashActivity : BaseActivity<SplashPresenter, ViewBinding>(), SplashView finish() } + override fun openExternalUrlAndFinish(url: String) { + openInternetBrowser(url, ::showMessage) + finish() + } + override fun showError(text: String, error: Throwable) { Toast.makeText(this, text, LENGTH_LONG).show() } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashPresenter.kt index 87392b7b..79588917 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashPresenter.kt @@ -14,8 +14,13 @@ class SplashPresenter @Inject constructor( studentRepository: StudentRepository ) : BasePresenter<SplashView>(errorHandler, studentRepository) { - override fun onAttachView(view: SplashView) { + fun onAttachView(view: SplashView, externalUrl: String?) { super.onAttachView(view) + + if (!externalUrl.isNullOrBlank()) { + return view.openExternalUrlAndFinish(externalUrl) + } + flowWithResource { studentRepository.isCurrentStudentSet() }.onEach { when (it.status) { Status.LOADING -> Timber.d("Is current user set check started") diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashView.kt index 9efd8123..a5aa1409 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/splash/SplashView.kt @@ -7,4 +7,6 @@ interface SplashView : BaseView { fun openLoginView() fun openMainView() + + fun openExternalUrlAndFinish(url: String) } diff --git a/app/src/test/java/io/github/wulkanowy/ui/modules/splash/SplashPresenterTest.kt b/app/src/test/java/io/github/wulkanowy/ui/modules/splash/SplashPresenterTest.kt index 7cced3c9..71d17b3b 100644 --- a/app/src/test/java/io/github/wulkanowy/ui/modules/splash/SplashPresenterTest.kt +++ b/app/src/test/java/io/github/wulkanowy/ui/modules/splash/SplashPresenterTest.kt @@ -36,14 +36,14 @@ class SplashPresenterTest { @Test fun testOpenLoginView() { coEvery { studentRepository.isCurrentStudentSet() } returns false - presenter.onAttachView(splashView) + presenter.onAttachView(splashView, null) verify { splashView.openLoginView() } } @Test fun testMainMainView() { coEvery { studentRepository.isCurrentStudentSet() } returns true - presenter.onAttachView(splashView) + presenter.onAttachView(splashView, null) verify { splashView.openMainView() } } }