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() }
     }
 }