diff options
Diffstat (limited to 'android/app/src')
| -rw-r--r-- | android/app/src/main/AndroidManifest.xml | 69 | ||||
| -rw-r--r-- | android/app/src/main/java/io/coinos/app/LauncherActivity.java | 27 | ||||
| -rw-r--r-- | android/app/src/main/res/mipmap-hdpi/ic_launcher.png | bin | 0 -> 2208 bytes | |||
| -rw-r--r-- | android/app/src/main/res/mipmap-mdpi/ic_launcher.png | bin | 0 -> 1412 bytes | |||
| -rw-r--r-- | android/app/src/main/res/mipmap-xhdpi/ic_launcher.png | bin | 0 -> 3084 bytes | |||
| -rw-r--r-- | android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png | bin | 0 -> 5131 bytes | |||
| -rw-r--r-- | android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png | bin | 0 -> 7923 bytes | |||
| -rw-r--r-- | android/app/src/main/res/values/strings.xml | 11 |
8 files changed, 107 insertions, 0 deletions
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..c6b7a01 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- TWA wrapper: full-screen Chrome running https://v3.coinos.io (needs the + site's /.well-known/assetlinks.json to name this app's signing cert, or + Android shows a URL bar). The point of the wrapper is the intent + filters: lightning:/bitcoin:/nostr:/lnurl: URIs open this app, and + LauncherActivity forwards them into the web app as ?u=<encoded>. --> +<manifest xmlns:android="http://schemas.android.com/apk/res/android"> + <!-- NFC is a way in (bolt cards, NDEF tags), never a requirement --> + <uses-feature android:name="android.hardware.nfc" android:required="false" /> + <application + android:label="@string/app_name" + android:icon="@mipmap/ic_launcher" + android:supportsRtl="true"> + <meta-data + android:name="asset_statements" + android:resource="@string/asset_statements" /> + <activity + android:name="io.coinos.app.LauncherActivity" + android:exported="true" + android:theme="@android:style/Theme.Translucent.NoTitleBar"> + <meta-data + android:name="android.support.customtabs.trusted.DEFAULT_URL" + android:value="https://v3.coinos.io/" /> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + <!-- own the site's links (verified against assetlinks.json) --> + <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="v3.coinos.io" /> + </intent-filter> + <!-- the payment + nostr schemes: the reason this wrapper exists. + lnurlw/lnurlp ride along — bolt cards and LNURL NFC tags emit + those schemes. --> + <intent-filter> + <action android:name="android.intent.action.VIEW" /> + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> + <data android:scheme="lightning" /> + <data android:scheme="bitcoin" /> + <data android:scheme="nostr" /> + <data android:scheme="lnurl" /> + <data android:scheme="lnurlw" /> + <data android:scheme="lnurlp" /> + </intent-filter> + <!-- NFC: an NDEF tag carrying one of our URIs (a bolt card tap, an + address sticker) dispatches here directly — same forwarding path + as a VIEW intent, no NFC permission needed for NDEF dispatch. --> + <intent-filter> + <action android:name="android.nfc.action.NDEF_DISCOVERED" /> + <category android:name="android.intent.category.DEFAULT" /> + <data android:scheme="lightning" /> + <data android:scheme="bitcoin" /> + <data android:scheme="nostr" /> + <data android:scheme="lnurl" /> + <data android:scheme="lnurlw" /> + <data android:scheme="lnurlp" /> + </intent-filter> + <intent-filter> + <action android:name="android.nfc.action.NDEF_DISCOVERED" /> + <category android:name="android.intent.category.DEFAULT" /> + <data android:scheme="https" android:host="v3.coinos.io" /> + </intent-filter> + </activity> + </application> +</manifest> diff --git a/android/app/src/main/java/io/coinos/app/LauncherActivity.java b/android/app/src/main/java/io/coinos/app/LauncherActivity.java new file mode 100644 index 0000000..d0b56bb --- /dev/null +++ b/android/app/src/main/java/io/coinos/app/LauncherActivity.java @@ -0,0 +1,27 @@ +package io.coinos.app; + +import android.net.Uri; + +/** + * Forwards scheme intents into the web app. A lightning:/bitcoin:/nostr:/ + * lnurl: URI arrives as this activity's data; the web app receives it as + * https://v3.coinos.io/?u=<encoded original URI> and routes it (send form + * for payments, profile for nostr npubs). https links to the site pass + * through untouched, everything else opens the default URL. + */ +public class LauncherActivity + extends com.google.androidbrowserhelper.trusted.LauncherActivity { + + @Override + protected Uri getLaunchingUrl() { + Uri data = getIntent().getData(); + if (data != null) { + String scheme = data.getScheme(); + if (scheme != null && !scheme.equals("https") && !scheme.equals("http")) { + return Uri.parse("https://v3.coinos.io/?u=" + Uri.encode(data.toString())); + } + if ("v3.coinos.io".equals(data.getHost())) return data; + } + return super.getLaunchingUrl(); + } +} diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png Binary files differnew file mode 100644 index 0000000..f80c3c2 --- /dev/null +++ b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png Binary files differnew file mode 100644 index 0000000..3d3df9d --- /dev/null +++ b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png Binary files differnew file mode 100644 index 0000000..e5b9241 --- /dev/null +++ b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png Binary files differnew file mode 100644 index 0000000..4f9cf1d --- /dev/null +++ b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png Binary files differnew file mode 100644 index 0000000..5b08781 --- /dev/null +++ b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..0663994 --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="app_name">coinos</string> + <!-- must match the site's /.well-known/assetlinks.json for URL-bar-less TWA --> + <string name="asset_statements"> + [{ + \"relation\": [\"delegate_permission/common.handle_all_urls\"], + \"target\": { \"namespace\": \"web\", \"site\": \"https://v3.coinos.io\" } + }] + </string> +</resources> |
