"Share to NikoGPT" now accepts any file type (single or multiple): the
stream is read through the content resolver and pushed into the web
composer as base64 chunks, so photos and documents land next to the
keyboard ready to send. Oversized files are refused with a clear
message (the chat takes up to 16 MB).
The swipe gesture no longer reloads the page while a presentation, the
canvas, a dialog or any other scrolled list is on screen: the web app
reports a single pull-allowed flag (overlays + every scroller), the shell
starts from 'forbidden' until the page says otherwise and the WebView
drops its overscroll glow.
The web chat moved from the in-app Google flow to NikoAuth (auth.n1ko.dev);
the old bridge no longer exists, so sign-in was impossible: the WebView
follows /api/auth/start out to the SSO host, and every non-chat host opens
in the system browser.
Sign-in now leaves for the system browser on purpose: the app intercepts
/api/auth/start and appends app=1, and the server answers the finished
callback with the /app-auth App Link, which hands the fresh session back
into the app's WebView (google blocks its own login inside WebViews, so
that round trip cannot happen in-app).
- the web app reports the message list's scroll position through the bridge,
so pull-to-refresh only fires when the list is really at the top; the
trigger distance is bigger (the WebView itself never scrolls)
- settings tabs scroll horizontally on narrow screens (all tabs reachable)
- version 1.2.2
- show the ApiException status code (e.g. DEVELOPER_ERROR 10) instead of
silently falling back to the browser
- do not leave the app when the picker is cancelled (12501/16)
- report a missing ID token explicitly (Android OAuth client / SHA-1 hint)
- version 1.2.1
- RECORD_AUDIO permission granted to the WebView (onPermissionRequest)
- the chat's single composer button becomes a microphone when the input is
empty and voice input is available; recording stops into server-side ASR
(/api/transcribe) when the browser has no Web Speech API
- version 1.2.0
- signed release builds via keystore.properties (gitignored)
- Android App Links (https://chat.n1ko.dev/app-auth) verified through
/.well-known/assetlinks.json; nikogpt:// stays as fallback
- attach sheet with File/Camera (FileProvider)
- Share to NikoGPT (ACTION_SEND text)
- user agent carries the app version so the web UI can offer updates
- try Credential Manager first; on any failure fall back to the legacy
GoogleSignIn API, which microG implements
- only when no Google provider is available (isGooglePlayServicesAvailable
fails) use the browser flow with the nikogpt:// hand-back
- README: document the order and the Android OAuth client requirements
- version 1.0.4
- window.NikoGPTAndroid bridge: the web app asks the app for the native
account picker; the returned ID token is posted through the WebView
- falls back to the browser flow (nikogpt:// deep link handoff) when the
provider is missing (microG) or the user cancels
- version 1.0.3
- flush the WebView cookie store in onStop/onPageFinished: Chromium batches
cookie writes, so the session could be lost when Android killed the process
- English default strings + values-ru translations
- bump to 1.0.1
- Android 10+ (minSdk 29), target/compile SDK 35
- chat.n1ko.dev only; other links open in the system browser
- system file picker for attachments, DownloadManager for files
- TLS never bypassed, no cleartext, no analytics
- pull-to-refresh, back navigation, progress and retry screen