Skip to content
This repository was archived by the owner on Sep 6, 2023. It is now read-only.

Commit e0b39aa

Browse files
authored
✨ Added deep link support (#251)
* ✨ Added webURL * ✨ Added `CouldNotCreateDynamicLinkException` * ✨ Added `getDynamicLink` * ✨ Added `escalaralcoiaicomtat.centrexcursionistalcoi.org` as link * ✨ Added `Activity.launch` * ✨ Added `LoadingActivity` launch with `EXTRA_LINK_PATH` * ✨ Added `Activity.getExtra` with default value and null return * ✨ Added `EXTRA_LINK_PATH` * ✨ Added `DYNAMIC_LINKS_DOMAIN` and `ESCALAR_ALCOIA_I_COMTAT_HOSTNAME` * ✨ Added web url search to `DataClass.getIntent` * ✨ Added `EXTRA_LINK_PATH` for redirecting URLs * 🌐 Added strings * 💄 Added progress updates for link loading * ✨ Added back action logic * 🌐 Fixed double string * ✨ Added `EXTRA_STATIC` * ✨ Added `EXTRA_STATIC` support for `onBackPressed`
1 parent 6ca7140 commit e0b39aa

File tree

18 files changed

+272
-20
lines changed

18 files changed

+272
-20
lines changed

base/src/main/AndroidManifest.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,19 @@
5757
android:host="escalaralcoiaicomtat.page.link"
5858
android:scheme="https" />
5959
</intent-filter>
60+
<intent-filter>
61+
<action android:name="android.intent.action.VIEW" />
62+
63+
<category android:name="android.intent.category.DEFAULT" />
64+
<category android:name="android.intent.category.BROWSABLE" />
65+
66+
<data
67+
android:host="escalaralcoiaicomtat.centrexcursionistalcoi.org"
68+
android:scheme="https" />
69+
<data
70+
android:host="escalaralcoiaicomtat.centrexcursionistalcoi.org"
71+
android:scheme="http" />
72+
</intent-filter>
6073
</activity>
6174
<activity
6275
android:name=".activity.isolated.EmailConfirmationActivity"

base/src/main/java/com/arnyminerz/escalaralcoiaicomtat/activity/LoadingActivity.kt

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@ import com.arnyminerz.escalaralcoiaicomtat.activity.isolated.EmailConfirmationAc
1010
import com.arnyminerz.escalaralcoiaicomtat.activity.model.NetworkChangeListenerActivity
1111
import com.arnyminerz.escalaralcoiaicomtat.data.IntroShowReason
1212
import com.arnyminerz.escalaralcoiaicomtat.data.climb.area.loadAreasFromCache
13+
import com.arnyminerz.escalaralcoiaicomtat.data.climb.dataclass.DataClass
1314
import com.arnyminerz.escalaralcoiaicomtat.databinding.ActivityLoadingBinding
1415
import com.arnyminerz.escalaralcoiaicomtat.exception.NoInternetAccessException
1516
import com.arnyminerz.escalaralcoiaicomtat.fragment.preferences.PREF_WAITING_EMAIL_CONFIRMATION
1617
import com.arnyminerz.escalaralcoiaicomtat.fragment.preferences.SETTINGS_ERROR_REPORTING_PREF
1718
import com.arnyminerz.escalaralcoiaicomtat.generic.doAsync
19+
import com.arnyminerz.escalaralcoiaicomtat.generic.getExtra
20+
import com.arnyminerz.escalaralcoiaicomtat.generic.launch
1821
import com.arnyminerz.escalaralcoiaicomtat.generic.uiContext
1922
import com.arnyminerz.escalaralcoiaicomtat.network.base.ConnectivityProvider
2023
import com.arnyminerz.escalaralcoiaicomtat.notification.createNotificationChannels
@@ -23,6 +26,7 @@ import com.arnyminerz.escalaralcoiaicomtat.shared.APP_UPDATE_MAX_TIME_DAYS_KEY
2326
import com.arnyminerz.escalaralcoiaicomtat.shared.AREAS
2427
import com.arnyminerz.escalaralcoiaicomtat.shared.ENABLE_AUTHENTICATION
2528
import com.arnyminerz.escalaralcoiaicomtat.shared.ENABLE_AUTHENTICATION_KEY
29+
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_LINK_PATH
2630
import com.arnyminerz.escalaralcoiaicomtat.shared.PROFILE_IMAGE_SIZE
2731
import com.arnyminerz.escalaralcoiaicomtat.shared.PROFILE_IMAGE_SIZE_KEY
2832
import com.arnyminerz.escalaralcoiaicomtat.shared.REMOTE_CONFIG_DEFAULTS
@@ -54,6 +58,8 @@ class LoadingActivity : NetworkChangeListenerActivity() {
5458
private lateinit var binding: ActivityLoadingBinding
5559
private var loading = false
5660

61+
private var deepLinkPath: String? = null
62+
5763
private lateinit var firestore: FirebaseFirestore
5864

5965
override fun onCreate(savedInstanceState: Bundle?) {
@@ -82,6 +88,8 @@ class LoadingActivity : NetworkChangeListenerActivity() {
8288
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
8389
createNotificationChannels()
8490

91+
deepLinkPath = getExtra(EXTRA_LINK_PATH)
92+
8593
Timber.v("Searching for updates...")
8694
val appUpdateManager = AppUpdateManagerFactory.create(this)
8795
appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo ->
@@ -198,9 +206,26 @@ class LoadingActivity : NetworkChangeListenerActivity() {
198206
}
199207
}
200208
}) {
201-
if (AREAS.size > 0)
202-
startActivity(Intent(this, MainActivity::class.java))
203-
else if (!appNetworkState.hasInternet)
209+
if (AREAS.size > 0) {
210+
if (deepLinkPath != null) {
211+
binding.progressTextView.setText(R.string.status_loading_deep_link)
212+
binding.progressBar.visibility(false)
213+
binding.progressBar.isIndeterminate = true
214+
binding.progressBar.visibility(true)
215+
216+
doAsync {
217+
val intent =
218+
DataClass.getIntent(this@LoadingActivity, deepLinkPath!!, firestore)
219+
uiContext {
220+
if (intent != null)
221+
startActivity(intent)
222+
else
223+
launch(MainActivity::class.java)
224+
}
225+
}
226+
} else
227+
launch(MainActivity::class.java)
228+
} else if (!appNetworkState.hasInternet)
204229
noInternetAccess()
205230
}
206231
} catch (_: NoInternetAccessException) {

base/src/main/java/com/arnyminerz/escalaralcoiaicomtat/activity/climb/AreaActivity.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ import androidx.core.app.ActivityOptionsCompat
77
import androidx.core.view.ViewCompat
88
import androidx.recyclerview.widget.GridLayoutManager
99
import com.arnyminerz.escalaralcoiaicomtat.R
10+
import com.arnyminerz.escalaralcoiaicomtat.activity.MainActivity
1011
import com.arnyminerz.escalaralcoiaicomtat.data.climb.area.Area
1112
import com.arnyminerz.escalaralcoiaicomtat.data.climb.area.ensureGet
1213
import com.arnyminerz.escalaralcoiaicomtat.data.climb.area.has
1314
import com.arnyminerz.escalaralcoiaicomtat.data.climb.zone.Zone
1415
import com.arnyminerz.escalaralcoiaicomtat.data.map.ICON_SIZE_MULTIPLIER
1516
import com.arnyminerz.escalaralcoiaicomtat.exception.NoInternetAccessException
1617
import com.arnyminerz.escalaralcoiaicomtat.generic.getExtra
18+
import com.arnyminerz.escalaralcoiaicomtat.generic.launch
1719
import com.arnyminerz.escalaralcoiaicomtat.generic.put
1820
import com.arnyminerz.escalaralcoiaicomtat.generic.putExtra
1921
import com.arnyminerz.escalaralcoiaicomtat.generic.uiContext
@@ -23,6 +25,7 @@ import com.arnyminerz.escalaralcoiaicomtat.shared.AREAS
2325
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_AREA
2426
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_AREA_TRANSITION_NAME
2527
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_POSITION
28+
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_STATIC
2629
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_ZONE
2730
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_ZONE_TRANSITION_NAME
2831
import timber.log.Timber
@@ -88,6 +91,12 @@ class AreaActivity : DataClassListActivity<Area>(ICON_SIZE_MULTIPLIER, true) {
8891
super.onSaveInstanceState(outState)
8992
}
9093

94+
override fun onBackPressed() {
95+
if (getExtra(EXTRA_STATIC, false))
96+
launch(MainActivity::class.java)
97+
else super.onBackPressed()
98+
}
99+
91100
override fun onResume() {
92101
super.onResume()
93102

base/src/main/java/com/arnyminerz/escalaralcoiaicomtat/activity/climb/SectorActivity.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import com.arnyminerz.escalaralcoiaicomtat.databinding.ActivitySectorBinding
1515
import com.arnyminerz.escalaralcoiaicomtat.fragment.climb.SectorFragment
1616
import com.arnyminerz.escalaralcoiaicomtat.generic.doAsync
1717
import com.arnyminerz.escalaralcoiaicomtat.generic.getExtra
18+
import com.arnyminerz.escalaralcoiaicomtat.generic.launch
19+
import com.arnyminerz.escalaralcoiaicomtat.generic.putExtra
1820
import com.arnyminerz.escalaralcoiaicomtat.generic.uiContext
1921
import com.arnyminerz.escalaralcoiaicomtat.list.adapter.PathsAdapter
2022
import com.arnyminerz.escalaralcoiaicomtat.shared.ARGUMENT_AREA_ID
@@ -26,6 +28,7 @@ import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_POSITION
2628
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_SECTOR_COUNT
2729
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_SECTOR_INDEX
2830
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_SECTOR_TRANSITION_NAME
31+
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_STATIC
2932
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_ZONE
3033
import com.arnyminerz.escalaralcoiaicomtat.shared.RESULT_CODE_MARKED_AS_COMPLETE
3134
import com.arnyminerz.escalaralcoiaicomtat.shared.appNetworkState
@@ -218,6 +221,15 @@ class SectorActivity : LanguageAppCompatActivity() {
218221
super.onSaveInstanceState(outState)
219222
}
220223

224+
override fun onBackPressed() {
225+
if (getExtra(EXTRA_STATIC, false))
226+
launch(ZoneActivity::class.java) {
227+
putExtra(EXTRA_AREA, areaId)
228+
putExtra(EXTRA_ZONE, zoneId)
229+
}
230+
else super.onBackPressed()
231+
}
232+
221233
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
222234
if (resultCode == RESULT_CODE_MARKED_AS_COMPLETE || resultCode == RESULT_CODE_MARKED_AS_COMPLETE) {
223235
Timber.v("Marked path. Getting document.")

base/src/main/java/com/arnyminerz/escalaralcoiaicomtat/activity/climb/ZoneActivity.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import com.arnyminerz.escalaralcoiaicomtat.exception.AlreadyLoadingException
1515
import com.arnyminerz.escalaralcoiaicomtat.exception.NoInternetAccessException
1616
import com.arnyminerz.escalaralcoiaicomtat.generic.doAsync
1717
import com.arnyminerz.escalaralcoiaicomtat.generic.getExtra
18+
import com.arnyminerz.escalaralcoiaicomtat.generic.launch
1819
import com.arnyminerz.escalaralcoiaicomtat.generic.put
1920
import com.arnyminerz.escalaralcoiaicomtat.generic.putExtra
2021
import com.arnyminerz.escalaralcoiaicomtat.generic.uiContext
@@ -26,6 +27,7 @@ import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_POSITION
2627
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_SECTOR_COUNT
2728
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_SECTOR_INDEX
2829
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_SECTOR_TRANSITION_NAME
30+
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_STATIC
2931
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_ZONE
3032
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_ZONE_TRANSITION_NAME
3133
import com.arnyminerz.escalaralcoiaicomtat.shared.appNetworkState
@@ -111,6 +113,14 @@ class ZoneActivity : DataClassListActivity<Zone>() {
111113
super.onSaveInstanceState(outState)
112114
}
113115

116+
override fun onBackPressed() {
117+
if (getExtra(EXTRA_STATIC, false))
118+
launch(AreaActivity::class.java) {
119+
putExtra(EXTRA_AREA, areaId)
120+
}
121+
else super.onBackPressed()
122+
}
123+
114124
override suspend fun onStateChangeAsync(state: ConnectivityProvider.NetworkState) {
115125
super.onStateChangeAsync(state)
116126

base/src/main/java/com/arnyminerz/escalaralcoiaicomtat/activity/isolated/DynamicLinkHandler.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ import android.os.Bundle
77
import com.arnyminerz.escalaralcoiaicomtat.R
88
import com.arnyminerz.escalaralcoiaicomtat.activity.LoadingActivity
99
import com.arnyminerz.escalaralcoiaicomtat.fragment.preferences.PREF_WAITING_EMAIL_CONFIRMATION
10+
import com.arnyminerz.escalaralcoiaicomtat.generic.launch
11+
import com.arnyminerz.escalaralcoiaicomtat.generic.putExtra
1012
import com.arnyminerz.escalaralcoiaicomtat.generic.toast
13+
import com.arnyminerz.escalaralcoiaicomtat.shared.ESCALAR_ALCOIA_I_COMTAT_HOSTNAME
14+
import com.arnyminerz.escalaralcoiaicomtat.shared.EXTRA_LINK_PATH
1115
import com.google.firebase.auth.ktx.auth
1216
import com.google.firebase.dynamiclinks.ktx.dynamicLinks
1317
import com.google.firebase.ktx.Firebase
@@ -31,7 +35,7 @@ class DynamicLinkHandler : Activity() {
3135
return@addOnSuccessListener
3236
}
3337

34-
Timber.v("Got deep link: $deepLink. Path: ${deepLink.path}")
38+
Timber.v("Got deep link: $deepLink. Path: ${deepLink.path}. Host: ${deepLink.host}")
3539

3640
val mode = deepLink.getQueryParameter("mode")
3741
val actionCode = deepLink.getQueryParameter("oobCode")
@@ -49,6 +53,11 @@ class DynamicLinkHandler : Activity() {
4953
finish()
5054
}
5155
}
56+
57+
if (ESCALAR_ALCOIA_I_COMTAT_HOSTNAME == deepLink.host)
58+
launch(LoadingActivity::class.java) {
59+
putExtra(EXTRA_LINK_PATH, deepLink.toString())
60+
}
5261
}
5362
.addOnFailureListener(this) { e ->
5463
Timber.w(e, "getDynamicLink:onFailure")

base/src/main/java/com/arnyminerz/escalaralcoiaicomtat/data/climb/area/Area.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import java.util.*
2727
* @param timestamp The update date of the Area
2828
* @param kmzReferenceUrl The reference url from Firebase Storage for the Area's KMZ file
2929
* @param documentPath The path in Firebase Firestore of the Area
30+
* @param webUrl The url for the Area on the website
3031
*/
3132
class Area(
3233
objectId: String,
@@ -35,6 +36,7 @@ class Area(
3536
image: String,
3637
kmzReferenceUrl: String,
3738
documentPath: String,
39+
webUrl: String?,
3840
) : DataClass<Zone, DataClassImpl>(
3941
displayName,
4042
timestamp,
@@ -47,7 +49,8 @@ class Area(
4749
DataClassMetadata(
4850
objectId,
4951
NAMESPACE,
50-
documentPath
52+
documentPath,
53+
webUrl
5154
)
5255
) {
5356
@WorkerThread
@@ -57,7 +60,8 @@ class Area(
5760
parcel.readString().toTimestamp()!!,
5861
parcel.readString()!!,
5962
parcel.readString()!!,
60-
parcel.readString()!!
63+
parcel.readString()!!,
64+
parcel.readString()
6165
) {
6266
parcel.readList(innerChildren, Zone::class.java.classLoader)
6367
}
@@ -75,7 +79,8 @@ class Area(
7579
data.getDate("created")!!,
7680
data.getString("image")!!,
7781
data.getString("kmz")!!,
78-
documentPath = data.reference.path
82+
documentPath = data.reference.path,
83+
data.getString("webURL")
7984
)
8085

8186
/**
@@ -123,6 +128,7 @@ class Area(
123128
parcel.writeString(kmzReferenceUrl)
124129
parcel.writeString(metadata.documentPath)
125130
parcel.writeList(innerChildren)
131+
parcel.writeString(metadata.webURL)
126132
}
127133

128134
override fun describeContents(): Int = 0

0 commit comments

Comments
 (0)