CP-670 / Master's Android course project
Android lecture companion: record → transcribe → structured notes → Ask AI → search → export / share.
| Package | com.lecturelens |
| Language | Java (Views + ViewBinding, no Compose) |
| Min SDK | 29 (Android 10+) |
| Demo guide | docs/DEMO_GUIDE.md |
| Architecture | docs/LectureLens_Architecture.md |
| Name | Role / track |
|---|---|
| Muhammad Umer Amir | Transcription + notes (cloud), RAG, integration |
| Zeeshan Mahmood | Foundation, data layer & auth |
| Daniel Monday-Ogidi | Library UI |
| Adeniyi Ridwan Adetunji | Record + upload pipeline |
| Aaron Gullraiz Cecil | Lecture view + search |
Fill these before submission and keep this table updated.
| Field | Value |
|---|---|
________________@______.com |
|
| Password | ________________ |
| How to create | App → Create account (username + university required) |
APK (local build): run ./gradlew assembleDebug → app/build/outputs/apk/debug/app-debug.apk
Demo walkthrough script: docs/DEMO_GUIDE.md
- Record / import lecture audio (foreground mic service)
- Cloud pipeline — Google Speech-to-Text → Gemini notes → RAG embeddings (WorkManager)
- Ask AI (RAG) — embeddings + cosine search + Gemini answers with timestamp citations; prior chat used as context
- Library — courses/categories (with professor), lectures, filters, add/rename/delete
- Lecture view — Player (ExoPlayer), Transcript (seek), Notes (summary / key terms / actions)
- Handouts — attach images/PDF/docs; OCR / extract; open & delete
- Search — FTS + notes/chat; filters; autocomplete
- Share / export — Markdown, PDF, Word, WhatsApp/text, 6-character Firebase share codes (notes + handout files)
- Home dashboard — stats, shortcuts, recent lectures, import shared code
- Firebase email/password sign-in
- Create account screen with student profile (username, university, program, etc.)
- Cloud consent + optional API key in Settings
- Section Fragments + dedicated Activities (Library, Search, Upload, Settings, Lecture)
- ListView lists on Home / Library / Search
- AsyncTask wrappers for background work (
BgAsyncTask) - Progress bars, buttons, EditTexts, Toast + Snackbar + dialogs
- Help menu — authors, version, how-to
- French UI (
Settings → App language → Français) - Animations — screen enter, navigation transitions, list stagger, button press
- Firebase Auth / Firestore sync / Storage (encouraged)
- Processing modes: Cloud / On-device / Auto
- On-device extractive notes & Ask AI when offline or selected
- Room persistence + non-destructive migrations (v7+)
- Release minify + ProGuard keep rules
- Usage limits / rate-limit handling for cloud APIs
Add device screenshots under docs/screenshots/ and link them here after the demo recording.
| Screen | File |
|---|---|
| Home | docs/screenshots/home.png |
| Library | docs/screenshots/library.png |
| Notes / Ask AI | docs/screenshots/notes.png |
| Search | docs/screenshots/search.png |
- Clone this repository and open the root folder in Android Studio (JDK 17).
- Ensure Firebase config exists at
app/google-services.json(packagecom.lecturelens). - Add keys to
local.properties(gitignored — never commit):
sdk.dir=/path/to/Android/sdk
STT_API_KEY=your_speech_to_text_key
GEMINI_API_KEY=your_ai_studio_key
# Optional long-audio path:
# GCS_BUCKET=your-bucket
# GCS_OAUTH_TOKEN=ya29....- Firebase Console (project must match
google-services.json):- Enable Email/Password authentication
- Enable Firestore + collection
shared_notesfor share codes - Enable Storage — sample rules:
docs/firebase-storage.rules
- Build & run:
./gradlew assembleDebug
./gradlew testDebugUnitTestInstall debug APK:
adb install -r app/build/outputs/apk/debug/app-debug.apkui/ → domain/ (use cases, models, repos) → data/ + processing/workers
| Concern | Choice |
|---|---|
| UI | Fragments, XML, ViewBinding, Navigation Component |
| DI | Hilt |
| Local DB | Room (+ FTS4, embeddings) |
| Background | WorkManager: TranscribeWorker → SummarizeWorker → EmbeddingsWorker |
| Auth | Firebase Auth |
| Cloud AI | Google STT + Gemini |
| Sync | Firestore library sync |
Routers: TranscriptionRouter / LlmRouter (cloud vs on-device).
More detail: docs/LectureLens_Architecture.md · work split: docs/WORK_BREAKDOWN.md
| Path | Description |
|---|---|
docs/DEMO_GUIDE.md |
Video script + full feature checklist for markers |
docs/LectureLens_Architecture.md |
System architecture |
docs/WORK_BREAKDOWN.md |
Team tracks |
docs/firebase-storage.rules |
Suggested Storage security rules |
app/ |
Android application module |
- End-to-end mobile AI pipeline (record → STT → Gemini → RAG Ask AI).
- Answers grounded in the lecture with citations, not a generic chatbot.
- Classmates can import notes via share codes.
- Privacy path: consent + on-device mode.
- Course extras: Help, French, ListView, AsyncTask, Activities, animations.
Course project — educational use only. Do not publish API keys or production Firebase credentials.