Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ public final class AlarmKitBridge: NSObject {
startLat: NSNumber?, startLng: NSNumber?,
endLat: NSNumber?, endLng: NSNumber?,
mapProvider: String,
transportType: String,
_ completion: @escaping (String?, String?) -> Void
) {
Task {
Expand All @@ -184,7 +185,8 @@ public final class AlarmKitBridge: NSObject {
endLat: endLat?.doubleValue,
endLng: endLng?.doubleValue,
name: title,
mapProvider: mapProvider
mapProvider: mapProvider,
transportType: transportType
)
}

Expand Down Expand Up @@ -247,7 +249,8 @@ public final class AlarmKitBridge: NSObject {
endLat: endLat?.doubleValue,
endLng: endLng?.doubleValue,
name: title,
mapProvider: mapProvider
mapProvider: mapProvider,
transportType: transportType
) : nil,
secondaryIntent: secondaryIntent,
sound: .default
Expand Down Expand Up @@ -353,6 +356,7 @@ struct OpenMapsIntent: LiveActivityIntent {
@Parameter(title: "End Longitude") var endLng: Double?
@Parameter(title: "Name") var name: String?
@Parameter(title: "Map Provider") var mapProvider: String?
@Parameter(title: "Transport Type") var transportType: String?

init() {}

Expand All @@ -364,7 +368,8 @@ struct OpenMapsIntent: LiveActivityIntent {
endLat: Double?,
endLng: Double?,
name: String?,
mapProvider: String?
mapProvider: String?,
transportType: String?
) {
self.scheduleId = scheduleId
self.alarmId = alarmId
Expand All @@ -374,14 +379,17 @@ struct OpenMapsIntent: LiveActivityIntent {
self.endLng = endLng
self.name = name
self.mapProvider = mapProvider
self.transportType = transportType
}

@MainActor
func perform() async throws -> some IntentResult {
guard let sLat = startLat, let sLng = startLng,
let eLat = endLat, let eLng = endLng, let mapProvider = mapProvider else {
let eLat = endLat, let eLng = endLng else {
return .result()
}
let mapProvider = mapProvider ?? "kakao"
let transportType = transportType ?? "public_transport"

if let ud = UserDefaults(suiteName: "group.com.dh.ondot.shared") {
ud.set(
Expand All @@ -394,7 +402,8 @@ struct OpenMapsIntent: LiveActivityIntent {
"elng": eLng,
"sname": "출발지",
"ename": name ?? "도착지",
"provider": mapProvider
"provider": mapProvider,
"transportType": transportType
],
forKey: "pendingOpenDirections"
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.dh.ondot.core

import com.ondot.domain.model.enums.MapProvider
import com.ondot.domain.model.enums.TransportType
import com.ondot.domain.service.DirectionsOpener
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
Expand All @@ -17,6 +18,28 @@ object DirectionsFacade : KoinComponent {
startName: String,
endName: String,
) {
opener.openDirections(startLat, startLng, endLat, endLng, provider, startName, endName)
openDirections(
startLat = startLat,
startLng = startLng,
endLat = endLat,
endLng = endLng,
provider = provider,
startName = startName,
endName = endName,
transportType = TransportType.PUBLIC_TRANSPORT,
)
}

fun openDirections(
startLat: Double,
startLng: Double,
endLat: Double,
endLng: Double,
provider: MapProvider,
startName: String,
endName: String,
transportType: TransportType,
) {
opener.openDirections(startLat, startLng, endLat, endLng, provider, startName, endName, transportType)
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.ondot.bridge

import com.ondot.domain.model.enums.MapProvider
import com.ondot.domain.model.enums.TransportType
import com.ondot.domain.service.DirectionsOpener
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
Expand All @@ -17,6 +18,28 @@ object DirectionsFacade : KoinComponent {
startName: String,
endName: String,
) {
opener.openDirections(startLat, startLng, endLat, endLng, provider, startName, endName)
openDirections(
startLat = startLat,
startLng = startLng,
endLat = endLat,
endLng = endLng,
provider = provider,
startName = startName,
endName = endName,
transportType = TransportType.PUBLIC_TRANSPORT,
)
}

fun openDirections(
startLat: Double,
startLng: Double,
endLat: Double,
endLng: Double,
provider: MapProvider,
startName: String,
endName: String,
transportType: TransportType,
) {
opener.openDirections(startLat, startLng, endLat, endLng, provider, startName, endName, transportType)
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ fun AlarmInfoItem(
info: Alarm,
type: AlarmType,
scheduleDate: String,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
onClick: () -> Unit = {},
onToggleSwitch: () -> Unit = {},
) {
val (period, time) = DateTimeFormatter.formatAmPmTimePair(info.triggeredAt)
val isYesterday = DateTimeFormatter.isYesterday(scheduleDate, info.triggeredAt)
val interactionSource = remember { MutableInteractionSource() }

Box(
modifier =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,12 @@ fun DateTimeInfoBar(
repeatDays: List<Int> = emptyList(),
date: LocalDate?,
time: LocalTime,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
backgroundColor: Color = Green900,
onClickDate: () -> Unit = {},
onClickTime: () -> Unit = {},
) {
val interactionSource = remember { MutableInteractionSource() }

Row(
modifier =
Modifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import android.net.Uri
import androidx.core.net.toUri
import co.touchlab.kermit.Logger
import com.ondot.domain.model.enums.MapProvider
import com.ondot.domain.model.enums.TransportType
import com.ondot.domain.service.DirectionsOpener

class AndroidDirectionsOpener(
Expand All @@ -20,11 +21,12 @@ class AndroidDirectionsOpener(
provider: MapProvider,
startName: String,
endName: String,
transportType: TransportType,
) {
val mode =
when (provider) {
MapProvider.KAKAO -> "PUBLICTRANSIT"
MapProvider.NAVER -> "public"
MapProvider.KAKAO -> transportType.toKakaoRouteMode()
MapProvider.NAVER -> transportType.toNaverRouteMode()
MapProvider.APPLE -> error("unreachable")
}
val intent =
Expand Down Expand Up @@ -85,4 +87,16 @@ class AndroidDirectionsOpener(
}
}
}

private fun TransportType.toKakaoRouteMode(): String =
when (this) {
TransportType.PUBLIC_TRANSPORT -> "PUBLICTRANSIT"
TransportType.CAR -> "CAR"
}

private fun TransportType.toNaverRouteMode(): String =
when (this) {
TransportType.PUBLIC_TRANSPORT -> "public"
TransportType.CAR -> "car"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ class IosAlarmScheduler : AlarmScheduler {
endLat = info.endLat.toNSNumber(),
endLng = info.endLng.toNSNumber(),
mapProvider = mapProvider.name.lowercase(),
transportType = info.transportType.name.lowercase(),
) { uuid, err ->
if (err != null) {
logger.e { "AlarmKit schedule FAIL: alarmId=${alarm.alarmId}, err=$err" }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.ondot.platform.util

import com.ondot.domain.model.enums.MapProvider
import com.ondot.domain.model.enums.TransportType
import com.ondot.domain.service.DirectionsOpener
import com.ondot.util.toUtf8
import platform.Foundation.NSBundle
Expand All @@ -19,6 +20,7 @@ class IosDirectionsOpener : DirectionsOpener {
provider: MapProvider,
startName: String,
endName: String,
transportType: TransportType,
) {
val app = UIApplication.sharedApplication

Expand All @@ -41,13 +43,13 @@ class IosDirectionsOpener : DirectionsOpener {

when (provider) {
MapProvider.KAKAO -> {
val mode = "publictransit"
val mode = transportType.toKakaoRouteMode()
val url = "kakaomap://route?sp=$startLat,$startLng&ep=$endLat,$endLng&by=$mode"
val web = "https://m.map.kakao.com/scheme/route?sp=$startLat,$startLng&ep=$endLat,$endLng&by=$mode"
open(url, web)
}
MapProvider.NAVER -> {
val mode = "public"
val mode = transportType.toNaverRouteMode()
val bundleId = NSBundle.mainBundle.bundleIdentifier ?: "com.dh.ondot.iosApp"
val url =
"nmap://route/$mode" +
Expand All @@ -58,7 +60,7 @@ class IosDirectionsOpener : DirectionsOpener {
open(url, "http://itunes.apple.com/app/id311867728?mt=8")
}
MapProvider.APPLE -> {
val dir = "r"
val dir = transportType.toAppleDirectionFlag()
// Apple 공식 Map Links
val url = "http://maps.apple.com/?saddr=$startLat,$startLng&daddr=$endLat,$endLng&dirflg=$dir"
open(url)
Expand All @@ -69,4 +71,22 @@ class IosDirectionsOpener : DirectionsOpener {
private fun ensureMain(block: () -> Unit) {
if (NSThread.isMainThread) block() else dispatch_async(dispatch_get_main_queue()) { block() }
}

private fun TransportType.toKakaoRouteMode(): String =
when (this) {
TransportType.PUBLIC_TRANSPORT -> "publictransit"
TransportType.CAR -> "car"
}

private fun TransportType.toNaverRouteMode(): String =
when (this) {
TransportType.PUBLIC_TRANSPORT -> "public"
TransportType.CAR -> "car"
}

private fun TransportType.toAppleDirectionFlag(): String =
when (this) {
TransportType.PUBLIC_TRANSPORT -> "r"
TransportType.CAR -> "d"
}
}
23 changes: 23 additions & 0 deletions core/ui/src/commonMain/kotlin/com/ondot/ui/model/TransportInfo.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.ondot.ui.model

import com.ondot.domain.model.enums.TransportType
import ondot.core.design_system.generated.resources.Res
import ondot.core.design_system.generated.resources.ic_car
import ondot.core.design_system.generated.resources.ic_public_transport
import org.jetbrains.compose.resources.DrawableResource

data class TransportInfo(
val title: String,
val icon: DrawableResource,
)

fun TransportType.toTransportInfo(): TransportInfo =
TransportInfo(
title = if (this == TransportType.PUBLIC_TRANSPORT) "대중교통 이용" else "자가용 이용",
icon =
if (this == TransportType.PUBLIC_TRANSPORT) {
Res.drawable.ic_public_transport
} else {
Res.drawable.ic_car
},
)
Loading
Loading