Skip to content
Open
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
117 changes: 29 additions & 88 deletions .well-known/apple-app-site-association
Original file line number Diff line number Diff line change
Expand Up @@ -5,112 +5,53 @@
"appIDs": ["368M544MTT.com.chat.expensify.chat", "452835FXHF.com.expensify.expensifylite"],
"components": [
{
"/": "/r/*",
"comment": "Reports"
"/": "/",
"exclude": true,
"comment": "Site root, opened in the browser from the app"
},
{
"/": "/a/*",
"comment": "Profile Page"
"/": "/NewExpensify.dmg",
"exclude": true,
"comment": "Desktop app download, see CONST.PATHS_TO_TREAT_AS_EXTERNAL"
},
{
"/": "/home/*",
"comment": "Home Page"
"/": "/docs/*",
"exclude": true,
"comment": "Storybook, see CONST.PATHS_TO_TREAT_AS_EXTERNAL"
},
{
"/": "/workspaces/*",
"comment": "Workspaces List Page"
"/": "/pdfs/*",
"exclude": true,
"comment": "Static PDFs, e.g. the PDS and FSG paperwork"
},
{
"/": "/settings/*",
"comment": "Profile and app settings"
"/": "/oauth/callback",
"exclude": true,
"comment": "Web Cloudflare Access sign-in callback, see CONST.CLOUDFLARE_ACCESS"
},
{
"/": "/details/*",
"comment": "Details of another users"
"?": {"oauth_state_id": "?*"},
"exclude": true,
"comment": "Web Plaid OAuth return, the Plaid session lives in the browser tab"
},
{
"/": "/v/*",
"comment": "Account validation"
"/": "/transition",
"exclude": true,
"comment": "Browser sign-in handoff (web SAML, Supportal, OldDot web), carries a short-lived auth token"
},
{
"/": "/bank-account/*",
"comment": "Bank account setup and its steps"
"/": "/connection-complete",
"exclude": true,
"comment": "Final page of web accounting connection flows, native flows detect it in a WebView"
},
{
"/": "/iou/*",
"comment": "I Owe You reports"
"/": "/bank-connection-complete",
"exclude": true,
"comment": "Final page of web bank connection flows, native flows detect it in a WebView"
},
{
"/": "/enable-payments/*",
"comment": "Payments setup"
},
{
"/": "/partners/plaid/oauth_ios",
"comment": "Plaid setup"
},
{
"/": "/oauth/native-callback",
"comment": "Native-only Cloudflare Access OAuth callback, no web route"
},
{
"/": "/statements/*",
"comment": "Wallet statements"
},
{
"/": "/concierge/*",
"comment": "Concierge"
},
{
"/": "/split/*",
"comment": "Split Expense"
},
{
"/": "/submit/*",
"comment": "Submit Expense"
},
{
"/": "/request/*",
"comment": "Submit Expense"
},
{
"/": "/new/*",
"comment": "New Chat"
},
{
"/": "/workspace/*",
"comment": "Workspace Details"
},
{
"/": "/get-assistance/*",
"comment": "Get Assistance Pages"
},
{
"/": "/teachersunite/*",
"comment": "Teachers Unite!"
},
{
"/": "/search/*",
"comment": "Search"
},
{
"/": "/pay/*",
"comment": "Pay someone"
},
{
"/": "/send/*",
"comment": "Pay someone"
},
{
"/": "/money2020/*",
"comment": "Money 2020"
},
{
"/": "/track-expense/*",
"comment": "Track Expense"
},
{
"/": "/submit-expense/*",
"comment": "Submit Expense"
"/": "*",
"comment": "Every other path on this domain"
}
]
},
Expand Down
164 changes: 115 additions & 49 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,120 @@
<data android:scheme="new-expensify" />
</intent-filter>

<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />

<!-- Images -->
<data android:mimeType="image/jpg" />
<data android:mimeType="image/jpeg" />
<data android:mimeType="image/gif" />
<data android:mimeType="image/png" />
<data android:mimeType="image/tif" />
<data android:mimeType="image/tiff" />

<!-- Documents -->
<data android:mimeType="application/pdf" />
<data android:mimeType="application/msword" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
<data android:mimeType="application/rtf" />
<data android:mimeType="application/zip" />
<data android:mimeType="application/txt" />
<data android:mimeType="message/rfc822" />

<!-- Text / HTML -->
<data android:mimeType="text/plain" />
<data android:mimeType="text/html" />
<data android:mimeType="text/xml" />

<!-- Audio / Video -->
<data android:mimeType="audio/mpeg" />
<data android:mimeType="audio/aac" />
<data android:mimeType="audio/flac" />
<data android:mimeType="audio/wav" />
<data android:mimeType="audio/x-wav" />
<data android:mimeType="audio/mp3" />
<data android:mimeType="audio/vorbis" />
<data android:mimeType="audio/x-vorbis" />
<data android:mimeType="audio/opus" />

<data android:mimeType="video/mp4" />
<data android:mimeType="video/mpeg" />
<data android:mimeType="video/mp2t" />
<data android:mimeType="video/webm" />
<data android:mimeType="video/avc" />
<data android:mimeType="video/hevc" />
<data android:mimeType="video/x-vnd.on2.vp8" />
<data android:mimeType="video/x-vnd.on2.vp9" />
<data android:mimeType="video/av01" />

</intent-filter>
</activity>

<!--
NewDot web links live on aliases so they can be switched per API level via android:enabled.
uri-relative-filter-group needs API 35; older versions ignore it and would claim every path,
so they keep the path allowlist instead. See res/values*/new_dot_links.xml.
-->
<activity-alias
android:name=".NewDotLinksActivity"
android:targetActivity=".MainActivity"
android:enabled="@bool/new_dot_wildcard_links_enabled"
android:exported="true">
<!-- Web URL handlers. Used to intercept web links. -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="https" android:host="new.expensify.com" />
<data android:scheme="https" android:host="staging.new.expensify.com" />

<!-- Browser-only paths, keep in sync with .well-known/apple-app-site-association. -->
<uri-relative-filter-group android:allow="false">
<!-- Site root, matches both "" and "/" -->
<data android:pathPattern="/*" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:path="/NewExpensify.dmg" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/docs/" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/pdfs/" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:path="/oauth/callback" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:queryPrefix="oauth_state_id=" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:path="/transition" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:path="/connection-complete" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:path="/bank-connection-complete" />
</uri-relative-filter-group>
<!--
Groups are checked in order and the first match decides.
A URI matching no group is rejected, so this catch-all must stay last.
-->
<uri-relative-filter-group android:allow="true">
<data android:pathPattern=".*" />
</uri-relative-filter-group>
</intent-filter>
</activity-alias>

<activity-alias
android:name=".NewDotLegacyLinksActivity"
android:targetActivity=".MainActivity"
android:enabled="@bool/new_dot_legacy_links_enabled"
android:exported="true">
<!-- Web URL handlers. Used to intercept web links. -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
Expand Down Expand Up @@ -118,55 +232,7 @@
<data android:scheme="https" android:host="staging.new.expensify.com" android:pathPrefix="/track-expense"/>
<data android:scheme="https" android:host="staging.new.expensify.com" android:pathPrefix="/submit-expense"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />

<!-- Images -->
<data android:mimeType="image/jpg" />
<data android:mimeType="image/jpeg" />
<data android:mimeType="image/gif" />
<data android:mimeType="image/png" />
<data android:mimeType="image/tif" />
<data android:mimeType="image/tiff" />

<!-- Documents -->
<data android:mimeType="application/pdf" />
<data android:mimeType="application/msword" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
<data android:mimeType="application/rtf" />
<data android:mimeType="application/zip" />
<data android:mimeType="application/txt" />
<data android:mimeType="message/rfc822" />

<!-- Text / HTML -->
<data android:mimeType="text/plain" />
<data android:mimeType="text/html" />
<data android:mimeType="text/xml" />

<!-- Audio / Video -->
<data android:mimeType="audio/mpeg" />
<data android:mimeType="audio/aac" />
<data android:mimeType="audio/flac" />
<data android:mimeType="audio/wav" />
<data android:mimeType="audio/x-wav" />
<data android:mimeType="audio/mp3" />
<data android:mimeType="audio/vorbis" />
<data android:mimeType="audio/x-vorbis" />
<data android:mimeType="audio/opus" />

<data android:mimeType="video/mp4" />
<data android:mimeType="video/mpeg" />
<data android:mimeType="video/mp2t" />
<data android:mimeType="video/webm" />
<data android:mimeType="video/avc" />
<data android:mimeType="video/hevc" />
<data android:mimeType="video/x-vnd.on2.vp8" />
<data android:mimeType="video/x-vnd.on2.vp9" />
<data android:mimeType="video/av01" />

</intent-filter>
</activity>
</activity-alias>

<activity
android:name="com.plaid.internal.link.LinkActivity"
Expand Down
6 changes: 6 additions & 0 deletions android/app/src/main/res/values-v35/new_dot_links.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- First API level that honours uri-relative-filter-group -->
<bool name="new_dot_wildcard_links_enabled">true</bool>
<bool name="new_dot_legacy_links_enabled">false</bool>
</resources>
5 changes: 5 additions & 0 deletions android/app/src/main/res/values/new_dot_links.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="new_dot_wildcard_links_enabled">false</bool>
<bool name="new_dot_legacy_links_enabled">true</bool>
</resources>
Loading