From 89f15fc95da7d1babd53e906686f013c3f5f5925 Mon Sep 17 00:00:00 2001
From: AbigailLabanok <113201330+AbigailLabanok@users.noreply.github.com>
Date: Wed, 25 Mar 2026 22:38:10 -0400
Subject: [PATCH 1/8] working on deeplinking
---
app/src/main/AndroidManifest.xml | 4 +++
.../components/home/EateryDetailsContent.kt | 29 ++++++++++++++++++-
.../transit/ui/viewmodels/HomeViewModel.kt | 4 +--
3 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ed5633a..6c420dd5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,4 +37,8 @@
android:value="${BACKEND_URL}" />
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt b/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt
index de6a68eb..1d5ca0c6 100644
--- a/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt
+++ b/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt
@@ -1,5 +1,8 @@
package com.cornellappdev.transit.ui.components.home
+import android.content.ActivityNotFoundException
+import android.content.Intent
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
@@ -13,9 +16,11 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
+import androidx.core.content.ContextCompat.startActivity
import com.cornellappdev.transit.R
import com.cornellappdev.transit.models.ecosystem.Eatery
import com.cornellappdev.transit.ui.theme.DividerGray
@@ -28,6 +33,7 @@ import com.cornellappdev.transit.util.StringUtils.createDeepLink
import com.cornellappdev.transit.util.TimeUtils.isOpenAnnotatedStringFromOperatingHours
import com.cornellappdev.transit.util.TimeUtils.rotateOperatingHours
import com.cornellappdev.transit.util.getAboutContent
+import androidx.core.net.toUri
@Composable
fun EateryDetailsContent(
@@ -88,11 +94,32 @@ fun EateryDetailsContent(
val (annotatedString, inlineContent) =
stringResource(R.string.view_menu).createDeepLink(R.drawable.eaterylink)
+ val context = LocalContext.current
+
Text(
text = annotatedString,
inlineContent = inlineContent,
style = Style.heading2,
- color = TransitBlue
+ color = TransitBlue,
+ modifier = Modifier.clickable(
+ onClick = {
+ val eateryPackage = "com.cornellappdev.eatery"
+ val eateryUri = "eatery://open-eatery?id=${eatery.id}".toUri()
+ val deepLinkIntent = Intent(Intent.ACTION_VIEW,eateryUri)
+
+ try {
+ context.startActivity(deepLinkIntent)
+ } catch (e1: ActivityNotFoundException) {
+ val playStoreIntent = Intent(Intent.ACTION_VIEW, "market://details?id=$eateryPackage".toUri())
+
+ try {
+ context.startActivity(playStoreIntent)
+ } catch (e2: ActivityNotFoundException) {
+
+ }
+ }
+ }
+ )
)
Spacer(modifier = Modifier.height(24.dp))
diff --git a/app/src/main/java/com/cornellappdev/transit/ui/viewmodels/HomeViewModel.kt b/app/src/main/java/com/cornellappdev/transit/ui/viewmodels/HomeViewModel.kt
index 6e6a7865..8bc02807 100644
--- a/app/src/main/java/com/cornellappdev/transit/ui/viewmodels/HomeViewModel.kt
+++ b/app/src/main/java/com/cornellappdev/transit/ui/viewmodels/HomeViewModel.kt
@@ -128,10 +128,10 @@ class HomeViewModel @Inject constructor(
getLongitude = { it.longitude }
),
libraries = sortApiResponse(
- response = libraries,
+ response = libraries.withExcludedLibrariesRemoved(),
getLatitude = { it.latitude },
getLongitude = { it.longitude }
- ).withExcludedLibrariesRemoved(),
+ ),
eateries = sortApiResponse(
response = eateries,
getLatitude = { it.latitude },
From 45a6488d9f8d987c167ab44e7379bb6b86b7d3a7 Mon Sep 17 00:00:00 2001
From: AbigailLabanok <113201330+AbigailLabanok@users.noreply.github.com>
Date: Wed, 25 Mar 2026 23:09:41 -0400
Subject: [PATCH 2/8] fixed sorting for the libraries
---
.../transit/ui/viewmodels/HomeViewModel.kt | 41 +++++++++++++------
1 file changed, 28 insertions(+), 13 deletions(-)
diff --git a/app/src/main/java/com/cornellappdev/transit/ui/viewmodels/HomeViewModel.kt b/app/src/main/java/com/cornellappdev/transit/ui/viewmodels/HomeViewModel.kt
index 8bc02807..190fb580 100644
--- a/app/src/main/java/com/cornellappdev/transit/ui/viewmodels/HomeViewModel.kt
+++ b/app/src/main/java/com/cornellappdev/transit/ui/viewmodels/HomeViewModel.kt
@@ -53,11 +53,18 @@ class HomeViewModel @Inject constructor(
) : ViewModel() {
val libraryCardsFlow: StateFlow>> =
- routeRepository.libraryFlow.map { response ->
+ combine(
+ routeRepository.libraryFlow,
+ locationRepository.currentLocation
+ ) { response, location ->
+ val usersLocation = location?.let { LatLng(it.latitude, it.longitude) }
when (val filteredResponse = response.withExcludedLibrariesRemoved()) {
is ApiResponse.Success -> {
+ val sortedLibraries = filteredResponse.data.sortedBy {
+ numericalDistanceToPlace(it.latitude, it.longitude, usersLocation)
+ }
ApiResponse.Success(
- filteredResponse.data
+ sortedLibraries
.map { it.toLibraryCardUiState() }
)
}
@@ -117,6 +124,9 @@ class HomeViewModel @Inject constructor(
gymRepository.gymFlow,
locationRepository.currentLocation
) { printers, libraries, eateries, gyms, location ->
+ val userLocation = location?.let { LatLng(it.latitude, it.longitude) }
+
+
StaticPlaces(
printers = sortApiResponse(
response = if (printers is ApiResponse.Success) {
@@ -125,23 +135,27 @@ class HomeViewModel @Inject constructor(
printers
},
getLatitude = { it.latitude },
- getLongitude = { it.longitude }
+ getLongitude = { it.longitude },
+ userLocation = userLocation
),
libraries = sortApiResponse(
response = libraries.withExcludedLibrariesRemoved(),
getLatitude = { it.latitude },
- getLongitude = { it.longitude }
+ getLongitude = { it.longitude },
+ userLocation = userLocation
),
eateries = sortApiResponse(
response = eateries,
getLatitude = { it.latitude },
getLongitude = { it.longitude },
+ userLocation = userLocation,
getIsOpen = { TimeUtils.getOpenStatus(it.operatingHours()).isOpen }
),
gyms = sortApiResponse(
response = gyms,
getLatitude = { it.latitude },
getLongitude = { it.longitude },
+ userLocation = userLocation,
getIsOpen = { TimeUtils.getOpenStatus(it.operatingHours()).isOpen }
)
)
@@ -453,14 +467,14 @@ class HomeViewModel @Inject constructor(
/**
* Returns a numerical distance from a location to the current location if both exist, otherwise returns Double.MAX_VALUE
*/
- fun numericalDistanceToPlace(latitude: Double?, longitude: Double?): Double {
- val currentLocationSnapshot = currentLocation.value
- return if (currentLocationSnapshot != null && latitude != null && longitude != null) {
+ fun numericalDistanceToPlace(
+ latitude: Double?,
+ longitude: Double?,
+ userLocation: LatLng?
+ ): Double {
+ return if (userLocation != null && latitude != null && longitude != null) {
calculateDistance(
- LatLng(
- currentLocationSnapshot.latitude,
- currentLocationSnapshot.longitude
- ), LatLng(latitude, longitude)
+ userLocation, LatLng(latitude, longitude)
)
} else {
Double.MAX_VALUE
@@ -474,15 +488,16 @@ class HomeViewModel @Inject constructor(
response: ApiResponse>,
getLatitude: (T) -> Double?,
getLongitude: (T) -> Double?,
+ userLocation: LatLng?,
getIsOpen: ((T) -> Boolean)? = null
): ApiResponse> {
if (response is ApiResponse.Success) {
val sortedData = response.data.sortedWith(
if (getIsOpen != null) {
compareByDescending { getIsOpen(it) }
- .thenBy { numericalDistanceToPlace(getLatitude(it),getLongitude(it)) }
+ .thenBy { numericalDistanceToPlace(getLatitude(it),getLongitude(it), userLocation) }
} else {
- compareBy { numericalDistanceToPlace(getLatitude(it),getLongitude(it)) }
+ compareBy { numericalDistanceToPlace(getLatitude(it),getLongitude(it), userLocation) }
}
)
return ApiResponse.Success(sortedData)
From d318e93d226ad05c643b10a4847364b8e51fd1ef Mon Sep 17 00:00:00 2001
From: AbigailLabanok <113201330+AbigailLabanok@users.noreply.github.com>
Date: Mon, 13 Apr 2026 02:10:41 -0400
Subject: [PATCH 3/8] added general linking + fixed filtering
---
app/src/main/AndroidManifest.xml | 9 ++++-----
.../ui/components/home/EateryDetailsContent.kt | 17 +++++++++--------
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6c420dd5..60c15c16 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,6 +6,10 @@
+
+
+
+
-
@@ -37,8 +40,4 @@
android:value="${BACKEND_URL}" />
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt b/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt
index 1d5ca0c6..fc2fe130 100644
--- a/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt
+++ b/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt
@@ -20,7 +20,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
-import androidx.core.content.ContextCompat.startActivity
import com.cornellappdev.transit.R
import com.cornellappdev.transit.models.ecosystem.Eatery
import com.cornellappdev.transit.ui.theme.DividerGray
@@ -103,18 +102,20 @@ fun EateryDetailsContent(
color = TransitBlue,
modifier = Modifier.clickable(
onClick = {
- val eateryPackage = "com.cornellappdev.eatery"
- val eateryUri = "eatery://open-eatery?id=${eatery.id}".toUri()
- val deepLinkIntent = Intent(Intent.ACTION_VIEW,eateryUri)
+ val eateryPackage = "com.cornellappdev.android.eatery"
try {
- context.startActivity(deepLinkIntent)
- } catch (e1: ActivityNotFoundException) {
- val playStoreIntent = Intent(Intent.ACTION_VIEW, "market://details?id=$eateryPackage".toUri())
-
+ val intent = context.packageManager.getLaunchIntentForPackage(eateryPackage)
+ if (intent != null) {
+ context.startActivity(intent)
+ }
+ } catch (e: ActivityNotFoundException) {
try {
+ val playStoreIntent = Intent(Intent.ACTION_VIEW, "market://details?id=$eateryPackage".toUri())
+ playStoreIntent.setPackage("com.android.vending")
context.startActivity(playStoreIntent)
} catch (e2: ActivityNotFoundException) {
+ context.startActivity(Intent(Intent.ACTION_VIEW, "https://play.google.com/store/apps/details?id=$eateryPackage}".toUri()))
}
}
From 28c11cc61a3d13c85318a84209fc71e62c8e2cf9 Mon Sep 17 00:00:00 2001
From: AbigailLabanok <113201330+AbigailLabanok@users.noreply.github.com>
Date: Mon, 13 Apr 2026 02:22:25 -0400
Subject: [PATCH 4/8] added general linking for uplift
---
app/src/main/AndroidManifest.xml | 1 +
.../components/home/EateryDetailsContent.kt | 10 +++----
.../ui/components/home/GymDetailsContent.kt | 28 ++++++++++++++++++-
3 files changed, 32 insertions(+), 7 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60c15c16..3d5551e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,6 +8,7 @@
+
Date: Sun, 26 Apr 2026 20:04:38 -0400
Subject: [PATCH 5/8] made shared function for deeplinking
---
.../home/DetailedPlaceSheetContent.kt | 10 ++++++++
.../components/home/EateryDetailsContent.kt | 21 ++--------------
.../ui/components/home/GymDetailsContent.kt | 21 ++--------------
.../cornellappdev/transit/util/IntentUtils.kt | 25 +++++++++++++++++++
uplift-android | 1 +
5 files changed, 40 insertions(+), 38 deletions(-)
create mode 100644 app/src/main/java/com/cornellappdev/transit/util/IntentUtils.kt
create mode 160000 uplift-android
diff --git a/app/src/main/java/com/cornellappdev/transit/ui/components/home/DetailedPlaceSheetContent.kt b/app/src/main/java/com/cornellappdev/transit/ui/components/home/DetailedPlaceSheetContent.kt
index cc8ddb87..193be0a7 100644
--- a/app/src/main/java/com/cornellappdev/transit/ui/components/home/DetailedPlaceSheetContent.kt
+++ b/app/src/main/java/com/cornellappdev/transit/ui/components/home/DetailedPlaceSheetContent.kt
@@ -24,6 +24,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
@@ -40,6 +41,7 @@ import com.cornellappdev.transit.ui.theme.SecondaryText
import com.cornellappdev.transit.ui.theme.Style
import com.cornellappdev.transit.ui.theme.TransitBlue
import com.cornellappdev.transit.util.BOTTOM_SHEET_MAX_HEIGHT_PERCENT
+import com.cornellappdev.transit.util.IntentUtils.openDeepLink
@Composable
fun DetailedPlaceSheetContent(
@@ -51,6 +53,8 @@ fun DetailedPlaceSheetContent(
modifier: Modifier = Modifier,
distanceStringToPlace: (Double?, Double?) -> String
) {
+ val context = LocalContext.current
+
Column(
modifier = modifier
.fillMaxWidth()
@@ -98,6 +102,9 @@ fun DetailedPlaceSheetContent(
onFavoriteClick = {
onFavoriteStarClick(ecosystemPlace.toPlace())
},
+ onDeepLinkClick = {
+ context.openDeepLink("com.cornellappdev.android.eatery")
+ },
distanceString = distanceStringToPlace(
ecosystemPlace.latitude,
ecosystemPlace.longitude
@@ -122,6 +129,9 @@ fun DetailedPlaceSheetContent(
onFavoriteClick = {
onFavoriteStarClick(ecosystemPlace.toPlace())
},
+ onDeepLinkClick = {
+ context.openDeepLink("com.cornellappdev.uplift")
+ },
distanceString = distanceStringToPlace(
ecosystemPlace.latitude,
ecosystemPlace.longitude
diff --git a/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt b/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt
index 00e02fb9..33b0b412 100644
--- a/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt
+++ b/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt
@@ -39,6 +39,7 @@ fun EateryDetailsContent(
eatery: Eatery,
isFavorite: Boolean,
onFavoriteClick: () -> Unit,
+ onDeepLinkClick: () -> Unit,
distanceString: String,
) {
Column(
@@ -93,31 +94,13 @@ fun EateryDetailsContent(
val (annotatedString, inlineContent) =
stringResource(R.string.view_menu).createDeepLink(R.drawable.eaterylink)
- val context = LocalContext.current
-
Text(
text = annotatedString,
inlineContent = inlineContent,
style = Style.heading2,
color = TransitBlue,
modifier = Modifier.clickable(
- onClick = {
- val eateryPackage = "com.cornellappdev.android.eatery"
- val eateryIntent = context.packageManager.getLaunchIntentForPackage(eateryPackage)
-
- if (eateryIntent != null) {
- context.startActivity(eateryIntent)
- } else {
- try {
- val playStoreIntent = Intent(Intent.ACTION_VIEW, "market://details?id=$eateryPackage".toUri())
- playStoreIntent.setPackage("com.android.vending")
- context.startActivity(playStoreIntent)
- } catch (e2: ActivityNotFoundException) {
- context.startActivity(Intent(Intent.ACTION_VIEW, "https://play.google.com/store/apps/details?id=$eateryPackage}".toUri()))
-
- }
- }
- }
+ onClick = onDeepLinkClick
)
)
diff --git a/app/src/main/java/com/cornellappdev/transit/ui/components/home/GymDetailsContent.kt b/app/src/main/java/com/cornellappdev/transit/ui/components/home/GymDetailsContent.kt
index baeb3ab9..a26c1871 100644
--- a/app/src/main/java/com/cornellappdev/transit/ui/components/home/GymDetailsContent.kt
+++ b/app/src/main/java/com/cornellappdev/transit/ui/components/home/GymDetailsContent.kt
@@ -44,6 +44,7 @@ fun GymDetailsContent(
gym: UpliftGym,
isFavorite: Boolean,
onFavoriteClick: () -> Unit,
+ onDeepLinkClick: () -> Unit,
distanceString: String
) {
val isOpen = getOpenStatus(gym.operatingHours()).isOpen
@@ -102,31 +103,13 @@ fun GymDetailsContent(
val (annotatedString, inlineContent) =
stringResource(R.string.view_gym).createDeepLink(R.drawable.upliftlink)
- val context = LocalContext.current
-
Text(
text = annotatedString,
inlineContent = inlineContent,
style = Style.heading2,
color = TransitBlue,
modifier = Modifier.clickable(
- onClick = {
- val upliftPackage = "com.cornellappdev.uplift"
- val upliftIntent = context.packageManager.getLaunchIntentForPackage(upliftPackage)
-
- if (upliftIntent != null ) {
- context.startActivity(upliftIntent)
- } else {
- try {
- val playStoreIntent = Intent(Intent.ACTION_VIEW, "market://details?id=$upliftPackage".toUri())
- playStoreIntent.setPackage("com.android.vending")
- context.startActivity(playStoreIntent)
- } catch (e: ActivityNotFoundException) {
- context.startActivity(Intent(Intent.ACTION_VIEW, "https://play.google.com/store/apps/details?id=$upliftPackage}".toUri()))
-
- }
- }
- }
+ onClick = onDeepLinkClick
)
)
diff --git a/app/src/main/java/com/cornellappdev/transit/util/IntentUtils.kt b/app/src/main/java/com/cornellappdev/transit/util/IntentUtils.kt
new file mode 100644
index 00000000..65b064a7
--- /dev/null
+++ b/app/src/main/java/com/cornellappdev/transit/util/IntentUtils.kt
@@ -0,0 +1,25 @@
+package com.cornellappdev.transit.util
+
+import android.content.ActivityNotFoundException
+import android.content.Context
+import android.content.Intent
+import androidx.core.net.toUri
+
+object IntentUtils {
+ fun Context.openDeepLink(packageName: String) {
+ val launchIntent = packageManager.getLaunchIntentForPackage(packageName)
+
+ if (launchIntent != null) {
+ startActivity(launchIntent)
+ } else {
+ try {
+ val playStoreIntent = Intent(Intent.ACTION_VIEW, "market://details?id=$packageName".toUri())
+ playStoreIntent.setPackage("com.android.vending")
+ startActivity(playStoreIntent)
+ } catch (e2: ActivityNotFoundException) {
+ startActivity(Intent(Intent.ACTION_VIEW, "https://play.google.com/store/apps/details?id=$packageName}".toUri()))
+
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uplift-android b/uplift-android
new file mode 160000
index 00000000..4e814635
--- /dev/null
+++ b/uplift-android
@@ -0,0 +1 @@
+Subproject commit 4e814635671da30990bea4d07ac603510ca29dbc
From f1a2fb473bd3a57246ec60f9eeb1b562c6ffb447 Mon Sep 17 00:00:00 2001
From: AbigailLabanok <113201330+AbigailLabanok@users.noreply.github.com>
Date: Sun, 26 Apr 2026 20:49:24 -0400
Subject: [PATCH 6/8] fixed minor issues in intentUtils
---
.../cornellappdev/transit/util/IntentUtils.kt | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/com/cornellappdev/transit/util/IntentUtils.kt b/app/src/main/java/com/cornellappdev/transit/util/IntentUtils.kt
index 65b064a7..e557aa70 100644
--- a/app/src/main/java/com/cornellappdev/transit/util/IntentUtils.kt
+++ b/app/src/main/java/com/cornellappdev/transit/util/IntentUtils.kt
@@ -3,6 +3,7 @@ package com.cornellappdev.transit.util
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
+import android.util.Log
import androidx.core.net.toUri
object IntentUtils {
@@ -12,13 +13,19 @@ object IntentUtils {
if (launchIntent != null) {
startActivity(launchIntent)
} else {
+ val playStoreIntent = Intent(Intent.ACTION_VIEW, "market://details?id=$packageName".toUri())
+ .setPackage("com.android.vending")
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
try {
- val playStoreIntent = Intent(Intent.ACTION_VIEW, "market://details?id=$packageName".toUri())
- playStoreIntent.setPackage("com.android.vending")
startActivity(playStoreIntent)
- } catch (e2: ActivityNotFoundException) {
- startActivity(Intent(Intent.ACTION_VIEW, "https://play.google.com/store/apps/details?id=$packageName}".toUri()))
-
+ } catch (e: ActivityNotFoundException) {
+ val webStoreIntent = Intent(Intent.ACTION_VIEW, "https://play.google.com/store/apps/details?id=$packageName".toUri())
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ try {
+ startActivity(webStoreIntent)
+ } catch (e2: ActivityNotFoundException) {
+ Log.e("IntentUtils","no handler for play store web URL" ,e2)
+ }
}
}
}
From d0bc7a301b00a601732b2d3837217989ed33ed85 Mon Sep 17 00:00:00 2001
From: AbigailLabanok <113201330+AbigailLabanok@users.noreply.github.com>
Date: Sun, 26 Apr 2026 22:22:41 -0400
Subject: [PATCH 7/8] deleted random folder + made TextButtons
---
.../ui/components/home/EateryDetailsContent.kt | 18 ++++++++++--------
.../ui/components/home/GymDetailsContent.kt | 18 ++++++++++--------
uplift-android | 1 -
3 files changed, 20 insertions(+), 17 deletions(-)
delete mode 160000 uplift-android
diff --git a/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt b/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt
index 33b0b412..7000afc7 100644
--- a/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt
+++ b/app/src/main/java/com/cornellappdev/transit/ui/components/home/EateryDetailsContent.kt
@@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.size
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
+import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -94,15 +95,16 @@ fun EateryDetailsContent(
val (annotatedString, inlineContent) =
stringResource(R.string.view_menu).createDeepLink(R.drawable.eaterylink)
- Text(
- text = annotatedString,
- inlineContent = inlineContent,
- style = Style.heading2,
- color = TransitBlue,
- modifier = Modifier.clickable(
- onClick = onDeepLinkClick
+ TextButton(
+ onClick = onDeepLinkClick
+ ) {
+ Text(
+ text = annotatedString,
+ inlineContent = inlineContent,
+ style = Style.heading2,
+ color = TransitBlue,
)
- )
+ }
Spacer(modifier = Modifier.height(24.dp))
diff --git a/app/src/main/java/com/cornellappdev/transit/ui/components/home/GymDetailsContent.kt b/app/src/main/java/com/cornellappdev/transit/ui/components/home/GymDetailsContent.kt
index a26c1871..519dfccc 100644
--- a/app/src/main/java/com/cornellappdev/transit/ui/components/home/GymDetailsContent.kt
+++ b/app/src/main/java/com/cornellappdev/transit/ui/components/home/GymDetailsContent.kt
@@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.size
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
+import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -103,15 +104,16 @@ fun GymDetailsContent(
val (annotatedString, inlineContent) =
stringResource(R.string.view_gym).createDeepLink(R.drawable.upliftlink)
- Text(
- text = annotatedString,
- inlineContent = inlineContent,
- style = Style.heading2,
- color = TransitBlue,
- modifier = Modifier.clickable(
- onClick = onDeepLinkClick
+ TextButton(
+ onClick = onDeepLinkClick
+ ) {
+ Text(
+ text = annotatedString,
+ inlineContent = inlineContent,
+ style = Style.heading2,
+ color = TransitBlue,
)
- )
+ }
Spacer(modifier = Modifier.height(24.dp))
diff --git a/uplift-android b/uplift-android
deleted file mode 160000
index 4e814635..00000000
--- a/uplift-android
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 4e814635671da30990bea4d07ac603510ca29dbc
From f994c10b80d0772712500596cb06b30fd2531769 Mon Sep 17 00:00:00 2001
From: Ryan Cheung
Date: Mon, 27 Apr 2026 00:21:10 -0400
Subject: [PATCH 8/8] no more grace period for arrive by
---
app/build.gradle.kts | 4 ++--
.../transit/util/RouteOptionsDisplayProcessor.kt | 12 +++++-------
.../cornellappdev/transit/util/TransitConstants.kt | 1 -
3 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index ee748569..75727174 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -25,8 +25,8 @@ android {
applicationId = "com.cornellappdev.transit"
minSdk = 26
targetSdk = 36
- versionCode = 10
- versionName = "2.0"
+ versionCode = 11
+ versionName = "2.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
diff --git a/app/src/main/java/com/cornellappdev/transit/util/RouteOptionsDisplayProcessor.kt b/app/src/main/java/com/cornellappdev/transit/util/RouteOptionsDisplayProcessor.kt
index 307f33e1..8b03d060 100644
--- a/app/src/main/java/com/cornellappdev/transit/util/RouteOptionsDisplayProcessor.kt
+++ b/app/src/main/java/com/cornellappdev/transit/util/RouteOptionsDisplayProcessor.kt
@@ -258,13 +258,13 @@ private fun Route.effectiveArrivalInstantOrNull(
return endInstant.plusSeconds(delaySeconds.toLong())
}
-/** True when route arrives on or before provided cutoff (including grace already applied by caller). */
+/** True when route arrives on or before provided cutoff (strict, no grace period). */
private fun Route.arrivesBy(
- cutoffWithGrace: Instant,
+ cutoff: Instant,
diagnostics: RouteProcessingDiagnostics? = null,
): Boolean {
val arrivalInstant = effectiveArrivalInstantOrNull(diagnostics) ?: return false
- return !arrivalInstant.isAfter(cutoffWithGrace)
+ return !arrivalInstant.isAfter(cutoff)
}
/** Comparator for Arrive By ordering: latest departure first, then shorter distance. */
@@ -333,7 +333,7 @@ private fun compareByEffectiveLeaveTime(
/**
* Section-level Arrive By filtering and ordering.
- * Keeps routes that arrive by cutoff (with grace), then sorts by latest departure first.
+ * Keeps routes that arrive by cutoff, then sorts by latest departure first.
*/
private fun List?.filterAndSortRoutesForArriveBy(
cutoff: Instant,
@@ -341,10 +341,8 @@ private fun List?.filterAndSortRoutesForArriveBy(
): List? {
if (this == null) return null
- val cutoffWithGrace = cutoff.plus(Duration.ofMinutes(ARRIVE_BY_CUTOFF_GRACE_MINUTES))
-
return this
- .filter { route -> route.arrivesBy(cutoffWithGrace, diagnostics) }
+ .filter { route -> route.arrivesBy(cutoff, diagnostics) }
.sortedWith(::compareArriveByRoutes)
}
diff --git a/app/src/main/java/com/cornellappdev/transit/util/TransitConstants.kt b/app/src/main/java/com/cornellappdev/transit/util/TransitConstants.kt
index 54ba13f0..a49ccfd2 100644
--- a/app/src/main/java/com/cornellappdev/transit/util/TransitConstants.kt
+++ b/app/src/main/java/com/cornellappdev/transit/util/TransitConstants.kt
@@ -22,7 +22,6 @@ const val LEAVE_CUTOFF_HORIZON_MINUTES = 45L
const val LEAVE_CUTOFF_GRACE_MINUTES = 2L
-const val ARRIVE_BY_CUTOFF_GRACE_MINUTES = 2L
// Hide transit options when walking arrives at the same time or sooner (+ tie buffer).
const val WALKING_TRANSIT_TIE_MINUTES = 1L