Skip to content

Android integrations: install/connect/uninstall stubs return not-implemented #78

Description

@itsdestin

Summary

The marketplace's "Connect your stuff" rail now renders on Android (mp-mobile branch). The catalog browse works, but every action button on an integration card fails with a not-implemented stub error.

Repro

  1. Install the latest debug APK from a mp-mobile-derived build.
  2. Open Marketplace → scroll to "Connect your stuff" rail.
  3. Tap any integration (Gmail, Drive, Spotify, etc.).
  4. Tap Install (or Connect / Uninstall if the card shows them).
  5. Card status flips to Error, detail overlay shows: not-implemented: integrations available on Android in a follow-up.

What's working

  • integrations:list — fetches catalog from https://raw.githubusercontent.com/itsdestin/wecoded-marketplace/master/integrations/index.json (24h cached). Implemented in app/src/main/kotlin/com/youcoded/app/skills/MarketplaceFetcher.kt::fetchIntegrations() and LocalSkillProvider.kt::listIntegrations(). Cards render correctly with platform-locked badges (e.g. macOS Only).

What's stubbed

In app/src/main/kotlin/com/youcoded/app/runtime/SessionService.kt (currently the case block matching "integrations:status", "integrations:install", "integrations:uninstall", "integrations:connect", "integrations:configure"):

IPC Behavior
integrations:install Returns { error: "not-implemented..." }
integrations:connect Returns { error: "not-implemented..." }
integrations:uninstall Returns { error: "not-implemented..." }
integrations:status Returns { error: "not-implemented..." }
integrations:configure Returns { error: "not-implemented..." } (also "Coming soon" on desktop — out of scope)

Implementation notes

Three pieces, in order:

  1. Install (plugin-wrapped integrations) — port desktop/src/main/integration-installer.ts::install() to a Kotlin IntegrationInstaller. For setup.type === "plugin" entries (Google Workspace, Spotify, etc.) it should look up the entry via LocalSkillProvider/MarketplaceFetcher, route through the existing Android PluginInstaller (which already handles clone + four-registry write for skills), then mirror setup.postInstallCommand back so the renderer can show the SetupHintBanner.

  2. Connect (OAuth) — Android has no Electron safeStorage equivalent. Reuse the EncryptedSharedPreferences already wired for marketplace:auth (see MasterKeys usage in SessionService.kt) for token-at-rest. Start with one provider (Google Workspace) and copy the desktop flow's redirect-uri / device-code handling. The desktop flow currently uses an OAuth web flow against the Cloudflare Worker, which has a separate bug filed about redirect_uri mismatch — that needs fixing first or in parallel.

  3. Uninstall + Status — uninstall is the inverse of install + clear the encrypted token. Status reads the integrations manifest (~/.claude/integrations.json on desktop). Either mirror that path on Android or fold into the existing youcoded-skills.json.

Branch / commit context

  • Branch: mp-mobile (mobile-responsive marketplace work)
  • Catalog wiring commit: 9f027d0e (feat(marketplace): icon nav buttons, Library mobile top bar, Android integrations list)
  • Worktree: youcoded/.worktrees/marketplace-mobile/

Tracked in youcoded-dev/docs/knowledge-debt.md under "Android integrations install/connect/uninstall not implemented".

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions