Files
BizGaze_Remote/mobile
SravanandClaude Opus 4.8 b60ce6cda3 Android native calling — Increment 1: full-screen incoming ring + answer
First slice of Android Phase C (full LiveKit parity), mirroring how iOS
started: native full-screen incoming call UI that wakes the app from
closed, with call MEDIA still in the WebView (foreground). Native LiveKit
media + a foreground service for true background audio are Increment 2.

Native (new Android side of the native-call plugin, Java to match the
proven official-plugin module layout):
- NativeCallPlugin: registered as window.Capacitor.Plugins.NativeCall
  (same jsName as iOS, so the shared web bridge drives both). getToken
  (FCM token), reportIncomingCall (ring), reportOutgoingCall, endCall,
  setMuted; video/screen/hole-punch/transcript methods are safe no-ops
  until later increments so the shared bridge never rejects.
- BzCallMessagingService: extends @capacitor/push-notifications'
  MessagingService — handles high-priority call-wake DATA messages
  (data.bzcall==1) to ring when closed, forwards all other push via super.
- IncomingCallActivity: full-screen call screen over the lock screen
  (showWhenLocked/turnScreenOn), Accept/Decline, looping ringtone.
- CallStore: incoming-call notification (channel, full-screen-intent,
  actions) + UUID dedup so the FCM and WebSocket paths don't double-ring.
- Plugin manifest: BzCallMessagingService + IncomingCallActivity + call
  perms (USE_FULL_SCREEN_INTENT/VIBRATE/WAKE_LOCK).
- android-patch.js: removes Capacitor's MessagingService in the APP
  manifest (highest merge priority) so ours is the sole MESSAGING_EVENT
  receiver; ensures the tools namespace. Idempotent.
- package.json: capacitor.android.src wired.

Server (dormant until ANDROID_CALLS=1):
- push.js sendFcmData: high-priority data-only FCM (rings when closed).
  sendCallNotification rings 'android' tokens via it; sendCallCancel too.
- config.js ANDROID_CALLS flag; /api/meetings/config exposes androidCall.

Web (home.html) — platform-aware, iOS/web behavior byte-for-byte unchanged:
- setupNativeCall: Android gated on cfg.androidCall, sets _callWebViewMedia
  (native ring, WebView media); iOS keeps CallKit native-media path.
- answerCall + both outgoing sites branch on _callWebViewMedia so Android
  joins the meeting normally while the callee still rings via the server.

Safe to deploy now: dormant until ANDROID_CALLS=1 AND an APK carrying the
plugin is installed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-25 11:44:52 +05:30
..

Biz Connect — Mobile app (Capacitor)

A Capacitor shell that loads the live Connect web UI (server.url in capacitor.config.json) and adds native push, camera/mic, and store distribution. See the overall plan in ../CLIENTS.md.

Android: follow the step-by-step in ANDROID_SETUP.md (project generation, icons/splash, permissions, Firebase/FCM, run, and Play Store build).

Prerequisites

  • Node + npm install here.
  • Android: Android Studio + SDK.
  • iOS: macOS + Xcode (+ an Apple Developer account to run on device / ship).

Setup

npm install
npm run assets           # generate app icons + splash from resources/
npx cap add android
npx cap add ios          # macOS only
npx cap sync

Run / build

npx cap open android     # build & run from Android Studio
npx cap open ios         # build & run from Xcode

Server origin

The app loads server.url from capacitor.config.json (default https://remote.bizgaze.com). For a local device test against a dev server, set it to your machine's LAN URL (and allow cleartext for plain http).

Native push (next step)

Native push uses the Capacitor Push Notifications plugin (FCM on Android, APNs on iOS) and a server endpoint to register device tokens — tracked in ../CLIENTS.md Phase B. This is separate from the existing Web Push (VAPID) the PWA already uses. Needs Google/Apple credentials to test end-to-end.

Shipping (gated on accounts)

  • Google Play: one-time $25; upload an AAB; signing key.
  • App Store: Apple Developer $99/yr; archive via Xcode; App Store Connect listing.