An Android study assistant that answers students' questions only from teacher-approved course material. If the approved material doesn't cover a question, the app declines instead of guessing.
Built for CSE 346 (Software Engineering) as the native Android evolution (SRS Β§8) of the project defined in the Problem Definition Document, SRS and Cost Finding Report.
| Feature | Description |
|---|---|
| ViVi assistant | A chatbot that answers anything. Course questions are answered from approved material across all your courses with a "π From your courses" label; everything else gets a "β¨ General knowledge" label. |
| Floating glass navigation | Pill-shaped frosted-glass bar (Home, Search, Saved, Progress, Settings) with a round ViVi button, edge-to-edge layout, light and dark themes. |
| Content Lock | Answers come only from material the teacher has approved. If the material does not cover a question, the app declines instead of guessing. |
| Source citations | Every answer cites the passages it used, like [1] and [2], and each source opens the original file. |
| Original files | PDF, PowerPoint and Word uploads are shown to students as real pages and slides. |
| Accounts | Firebase sign-in with email verification, password reset, change password, and Google sign-in. |
| Lecture Connection Finder | Lists related lectures, assignments and quizzes from the same course alongside each answer. |
| Teacher workflow | Create courses, upload PDF material, approve or revoke it, share join codes, view analytics. |
| Student workflow | Join courses by code, ask questions, search, bookmark materials, track progress. |
| Free and paid tiers | Daily question counter for the free tier, with an upgrade and payment flow. |
| Bilingual UI | English and Bangla (বাΰ¦ΰ¦²ΰ¦Ύ), with light and dark themes. |
The Figma designs are in Figma_Screens/ as editable SVG files.
- A teacher uploads material. It is text-extracted and chunked, and starts as Pending.
- A student asks a question. The app retrieves matching chunks from approved material only.
- If the approved passages cover the question, the AI answers from them only and cites them. Otherwise the app declines instead of guessing.
- When the teacher approves the material, the same question gets an answer.
- Language: Java, with XML layouts
- Backend: Firebase Authentication (email and password) and Cloud Firestore, mirrored into SQLite on the device
- UI: Material Components, RecyclerView, bottom navigation
- PDF parsing: PdfBox-Android
- Networking: OkHttp (OpenAI API for general answers)
- Build: Gradle (Kotlin DSL), Android Gradle Plugin 9, JDK 21
- SDK: minSdk 24, targetSdk 37
- Android Studio (recent version) with Android SDK 37
- JDK 21
- An Android device or emulator running Android 7.0 (API 24) or newer
- Clone the repository:
git clone https://github.com/Muktaditbf/Course-Grounded-Study-Assistant.git
- In Android Studio, choose File β Open and select the
StudyAssistantfolder (not the repo root). - (Optional) To enable general AI answers, add your key to
StudyAssistant/local.properties:This file is git-ignored, so the key stays on your machine. Without a key, the app still works and shows a "key not set" message for AI-only features.OPENAI_API_KEY=your_key_here - Wait for Gradle sync, then press Run βΆ.
A prebuilt debug APK is included as StudyAssistant.apk for quick installation.
Accounts and course data live in Firebase, so the app needs a Firebase project:
- In the Firebase console create a project and add an Android app with package name
com.seu.studyassistant. - Enable Authentication β Sign-in method β Email/Password.
- Create a Firestore Database (production mode).
- Download
google-services.jsonand put it atStudyAssistant/app/google-services.json(it is git-ignored). - Publish the security rules:
firebase deploy --only firestore:rules, or pasteStudyAssistant/firestore.rulesinto Firestore β Rules.
Without google-services.json the project still builds, and Login shows "Firebase is not set up".
Teachers' original files (PDF, PPTX, DOCX, up to 15 MB) are stored inside Firestore in pieces, so no paid Cloud Storage plan is needed and the same security rules protect them. Students see them in the app's own viewer: PDF pages exactly, PowerPoint as rendered slides, and Word as a formatted page. An Open in⦠button hands the file to another app (PowerPoint, WPS, Google Slides) when one is installed. Charts, SmartArt and animations are not drawn by the built-in slide viewer, so a deck that relies on them should be uploaded as PDF.
There are no built-in accounts. Sign up as a teacher and verify your email, create a course, and upload material with Approve now ticked. On a second phone, sign up as a student, verify, and Join course with the code shown on the teacher dashboard.
- Upload a lecture but leave Approve now unticked.
- As the student, ask a question that lecture answers. The app declines: no approved material covers it.
- As the teacher, tap Approve on the lecture.
- Ask again. The app answers from the lecture and cites it.
.
βββ StudyAssistant/ # Android Studio project
β βββ app/src/main/
β βββ java/com/seu/studyassistant/
β β βββ adapter/ # RecyclerView adapters
β β βββ data/ # Local data and storage
β β βββ engine/ # Retrieval, coverage and OpenAI client
β β βββ model/ # Data models
β β βββ ui/ # Activities
β βββ res/ # Layouts, strings (en, bn), themes
βββ Figma_Screens/ # Exported UI designs (SVG)
βββ HOW_TO_RUN.md # Setup, build and troubleshooting
βββ REQUIREMENTS_TRACEABILITY.md # SRS requirements mapped to code
βββ StudyAssistant.apk # Prebuilt debug APK
- How to run
- Design prompt: the UI direction, written for AI design tools
- Requirements traceability: maps FR1βFR10, NFR11βNFR16 and UC1βUC10 to the code
- Project guide (PDF)
- Never commit
local.propertiesor APKs built with a real API key. - The app is a coursework project, and the payment flow is simulated.