12og3r/Oracle

★ 0Forks 0JavaGitHub ↗Compare

README

Oracle

Oracle is a handwriting-first AI experience for Android E Ink devices. Write a question directly on the page and finish with a five-point star. The page clears the original ink and writes the AI-generated answer one stroke at a time.

The app does not present its responses as prophecy and does not make real-world decisions for the user.

Features

  • Write naturally with a stylus and erase complete strokes.
  • Submit automatically by drawing a five-point star. No submit button is required.
  • Generate a new answer for each question with OpenAI, Anthropic, Gemini, or OpenRouter.
  • Render Chinese and English answers as animated handwriting instead of displaying a handwriting font.
  • Preserve visible spaces between English words and use language-appropriate punctuation.
  • Keep the page blank while waiting for the AI response. No loading indicator or progress message is shown.
  • Rewrite, cancel, ask again, and automatically clear an inactive session after 10 minutes.
  • Switch the complete interface between Chinese and English.
  • Configure the AI provider and API key from an in-app settings page.
  • Show saved and APK-provided keys only as masked previews.
  • Support BOOX raw ink, active-stylus Android devices, and touch-only fallback devices.
  • Adapt the page to compact, medium, and large screens in portrait or landscape.
  • Provide accessible actions and descriptions without placing extra guidance at the bottom of the writing page.
  • Store no question, answer, or conversation history on the device.

Supported environment

Development

  • JDK 17
  • Android SDK 35
  • The included Gradle Wrapper
  • Node.js, only for proxy and validation tools
  • ADB, recommended for installation and device testing

Android

  • Minimum Android version: Android 8.0, API 26
  • Target Android version: Android 15, API 35
  • BOOX build: Onyx raw-ink integration
  • Generic E Ink build: configurable E Ink refresh profile
  • Generic Android build: standard Android drawing fallback

BOOX Go 10.3 is the primary verified physical device. A Pixel Tablet API 35 emulator has also been used to verify layout, touch fallback, and the complete question-and-answer flow. Other Android E Ink devices use the generic build and should be verified on their target hardware before release.

AI configuration

Users can configure the following providers inside the app:

  • OpenAI
  • Anthropic
  • Gemini
  • OpenRouter

Provider keys entered in the settings page are encrypted with Android Keystore and stored in the app's private storage. The UI displays only a masked preview.

Optional Gemini preset

For an internal build, add a Gemini key to local.properties. This file is excluded by .gitignore.

gemini.apiKey=replace-with-a-new-restricted-key
gemini.model=gemini-3.5-flash

The preset lets the app use Gemini without requiring the user to enter a key on first launch.

A key embedded in an APK can be extracted. Use this option only for controlled internal distribution. Revoke any key that has appeared in chat, logs, or a repository.

Recommended server-side configuration

For external distribution, keep the provider key on a server and configure the Gemini proxy:

export GEMINI_PROXY_URL=https://example.com/v1/oracle

Alternatively, pass the URL directly to Gradle:

./gradlew :app:assembleBooxDebug \
  -PgeminiProxyUrl=https://example.com/v1/oracle

The repository includes a reference proxy at server/gemini-proxy.mjs.

Build

Build every supported debug variant:

./gradlew :app:assembleGenericDebug \
  :app:assembleGenericEinkDebug \
  :app:assembleBooxDebug

Build outputs:

  • Generic Android: app/build/outputs/apk/generic/debug/app-generic-debug.apk
  • Generic E Ink: app/build/outputs/apk/genericEink/debug/app-genericEink-debug.apk
  • BOOX raw ink: app/build/outputs/apk/boox/debug/app-boox-debug.apk

E Ink refresh profiles

The generic E Ink build defaults to the balanced profile. An explicit profile can be selected at build time:

./gradlew :app:assembleGenericEinkDebug -PeinkProfile=slow

Available values:

  • auto
  • fast
  • balanced
  • slow
  • standard

An unsupported value stops the build.

Install and run

Install the BOOX build:

adb install -r app/build/outputs/apk/boox/debug/app-boox-debug.apk

Launch the app:

adb shell am start -n com.magicboox.oracle/.MainActivity

Debug preview

Deterministic screenshot states are available only in debug builds:

./gradlew :app:assembleBooxDebug -PscreenshotQa=true
adb install -r app/build/outputs/apk/boox/debug/app-boox-debug.apk
adb shell am start -n com.magicboox.oracle/.MainActivity \
  --es demo answer-0 --el qa_seed 1001

Release tasks reject -PscreenshotQa=true. Normal builds still allow AndroMeld previews, ADB screenshots, and screen recording without exposing deterministic QA states.

Privacy and security

  • The app requests network permission only.
  • It does not request storage, camera, microphone, or location permission.
  • Questions, answers, and conversation history are not written to local storage.
  • The current question is uploaded as a cropped handwriting image only when an AI provider is used.
  • Trigger-star strokes are excluded from the uploaded question image.
  • Saved provider keys are encrypted with Android Keystore.
  • Keys, questions, and answers are excluded from application logs.
  • Android backup and device transfer are disabled for stored credentials.
  • If an AI request fails, the app shows a retry state and never substitutes a prepared answer.

Documentation

Additional implementation, handwriting, integration, and verification details are maintained in:

  • PRODUCT.md
  • DESIGN.md
  • docs/GEMINI_INTEGRATION.md
  • docs/HANDWRITING_SYSTEM.md
  • docs/HANDWRITING_BLIND_REVIEW.md
  • docs/VERIFICATION.md

Contributors

12og3r

Issues