Skip to content

Commit

Permalink
android native intent fixes
Browse files Browse the repository at this point in the history
Signed-off-by: Timo Glastra <[email protected]>
  • Loading branch information
TimoGlastra committed Nov 25, 2024
1 parent d1782c0 commit 160ae6d
Showing 1 changed file with 19 additions and 4 deletions.
23 changes: 19 additions & 4 deletions apps/easypid/src/app/+native-intent.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { parseInvitationUrl } from '@package/agent'
import { deeplinkSchemes } from '@package/app'
import * as Haptics from 'expo-haptics'
import { Platform } from 'react-native'
import { router } from 'expo-router'

export async function redirectSystemPath({ path }: { path: string; initial: boolean }) {
export async function redirectSystemPath({ path, initial }: { path: string; initial: boolean }) {
const isRecognizedDeeplink = deeplinkSchemes.some((scheme) => path.startsWith(scheme))
if (!isRecognizedDeeplink) return path

Expand All @@ -15,14 +17,27 @@ export async function redirectSystemPath({ path }: { path: string; initial: bool

const invitationData = parseResult.result

let redirectPath: string | undefined = undefined

if (invitationData.type === 'openid-credential-offer') {
return `/notifications/openIdCredential?${invitationData.format === 'url' ? 'uri' : 'data'}=${encodeURIComponent(invitationData.format === 'parsed' ? JSON.stringify(invitationData.data) : (invitationData.data as string))}`
redirectPath = `/(app)/notifications/openIdCredential?${invitationData.format === 'url' ? 'uri' : 'data'}=${encodeURIComponent(invitationData.format === 'parsed' ? JSON.stringify(invitationData.data) : (invitationData.data as string))}`
}
if (invitationData.type === 'openid-authorization-request') {
return `//notifications/openIdPresentation?${invitationData.format === 'url' ? 'uri' : 'data'}=${encodeURIComponent(invitationData.format === 'parsed' ? JSON.stringify(invitationData.data) : (invitationData.data as string))}`
redirectPath = `/(app)/notifications/openIdPresentation?${invitationData.format === 'url' ? 'uri' : 'data'}=${encodeURIComponent(invitationData.format === 'parsed' ? JSON.stringify(invitationData.data) : (invitationData.data as string))}`
}
if (invitationData.type === 'didcomm') {
return `/(app)/notifications/didcomm?${invitationData.format === 'url' ? 'invitationUrl' : 'invitation'}=${encodeURIComponent(invitationData.format === 'parsed' ? JSON.stringify(invitationData.data) : (invitationData.data as string))}`
redirectPath = `/notifications/didcomm?${invitationData.format === 'url' ? 'invitationUrl' : 'invitation'}=${encodeURIComponent(invitationData.format === 'parsed' ? JSON.stringify(invitationData.data) : (invitationData.data as string))}`
}

if (redirectPath) {
// NOTE: on android it somehow doesn't handle the intent if the app is already open
// so we replace the router to the path. I think it can break easily though if e.g.
// the wallet is locked in the background. Not sure how to proceed, this is best effort fix
if (Platform.OS === 'android' && !initial) {
router.replace(redirectPath)
return null
}
return redirectPath
}

void Haptics.notificationAsync(Haptics.NotificationFeedbackType.Error)
Expand Down

0 comments on commit 160ae6d

Please sign in to comment.