ICT3214 - Mobile Application Development
Department of Computing - Faculty of Applied Sciences
Rajarata University of Sri Lanka
- About the Project
- Group Members
- Features
- Technologies & Constraints
- Project Structure
- Database Schema
- Security Implementation
- Application Flow
- Individual Contributions
- Installation & Setup
- Screenshots
- Academic Information
CineStack is a native Android application developed as the group project for the module ICT3214 - Mobile Application Development (Year 3, Semester 1).
The app allows registered users to maintain a personal movie watchlist, add movies they have watched, write short reviews, and search through their collection. It features a complete login and registration system with secure password hashing, persistent sessions, and a modern dark-themed Material Design UI.
Project Category: 9. Movie Watchlist & Review App - Focus: Entertainment preferences
| # | Name | Index No. | Registration No. |
|---|---|---|---|
| 1 | R P I P P Gotabhaya | 5664 | ICT/2022/058 |
| 2 | P.G.P.W. Gunathilake | 5662 | ICT/2022/056 |
Batch: 21/22
Academic Year: 2026
- Secure registration with full input validation
- Login using username or email
- SHA-256 password hashing - passwords are never stored in plain text
- "Remember Me" checkbox - controls auto-login on next app launch
- Auto-login for returning users when Remember Me is enabled
- Logout button on the main screen header
- Add movies with title, genre, year, and review
- View personal watchlist in a scrollable RecyclerView
- Edit movie details (title, genre, year, review)
- Delete movies from the watchlist
- Real-time search by movie title using SQLite
LIKEquery - Instant filtering as the user types
- Modern dark theme with lavender & golden-yellow accent palette (matching app icon)
- Material Design 3 components (TextInputLayout, MaterialButton, MaterialCardView)
- Custom vector drawables and clean minimalist design
- Responsive XML layouts with proper input validation feedback
The project strictly follows the module guidelines:
| Requirement | Implementation |
|---|---|
| Language | Java (no Kotlin) |
| UI | XML Layouts (no Jetpack Compose) |
| Database | SQLiteOpenHelper (no Room, no Firebase) |
| Session | SharedPreferences |
| Security | SHA-256 password hashing |
| Architecture | Simple activity-based (no MVVM) |
| Min SDK | 24 (Android 7.0) |
| Target SDK | 36 |
com.google.android.material:material:1.12.0- Material Design componentsandroidx.appcompat- backward-compatible AppCompatandroidx.recyclerview- RecyclerView for movie listandroidx.constraintlayout- flexible layouts
app/src/main/
βββ java/com/example/cinestack/
β βββ DatabaseHelper.java # SQLite database (Users + Movies tables)
β βββ SessionManager.java # Login session handling (SharedPreferences)
β βββ LoginActivity.java # User login screen & authentication
β βββ RegisterActivity.java # User registration with validation
β βββ MainActivity.java # Movie watchlist (RecyclerView + search)
β βββ AddMovieActivity.java # Add new movie form
β βββ EditMovieActivity.java # Edit existing movie details
β βββ Movie.java # Movie data model (POJO)
β βββ MovieAdapter.java # RecyclerView adapter for movie cards
β
βββ res/layout/
β βββ activity_login.xml # Login screen layout
β βββ activity_register.xml # Registration screen layout
β βββ activity_main.xml # Main watchlist screen layout
β βββ activity_add_movie.xml # Add movie form layout
β βββ activity_edit_movie.xml # Edit movie form layout
β βββ item_movie.xml # Movie card item for RecyclerView
β
βββ res/drawable/
β βββ bg_search.xml # Search bar background shape
β βββ ic_logout.xml # Logout vector icon
β
βββ res/menu/
β βββ menu_main.xml # Options menu
βββ res/values/
β βββ colors.xml # App color palette
β βββ ids.xml # View ID declarations
β
βββ AndroidManifest.xml # Activity declarations & launcher config
Database Name: CineStack.db
Database Version: 3
| Column | Type | Constraints | Description |
|---|---|---|---|
id |
INTEGER | PRIMARY KEY, AUTOINCREMENT | Unique user identifier |
username |
TEXT | NOT NULL, UNIQUE | Login username (stored lowercase) |
email |
TEXT | NOT NULL, UNIQUE | User email address (stored lowercase) |
password |
TEXT | NOT NULL | SHA-256 hashed password |
full_name |
TEXT | NOT NULL | User's display name |
created_at |
TEXT | NOT NULL | Registration timestamp |
| Column | Type | Constraints | Description |
|---|---|---|---|
movie_id |
INTEGER | PRIMARY KEY, AUTOINCREMENT | Unique movie identifier |
title |
TEXT | NOT NULL | Movie title |
genre |
TEXT | NOT NULL | Movie genre |
year |
INTEGER | NOT NULL | Release year |
review |
TEXT | - | User's short review |
user_id |
INTEGER | NOT NULL, FOREIGN KEY | References users(id) ON DELETE CASCADE |
ββββββββββββ ββββββββββββ
β USERS β 1ββββM β MOVIES β
ββββββββββββ ββββββββββββ
β id (PK) ββββββββββ user_id β
β username β β movie_id β
β email β β title β
β password β β genre β
β full_nameβ β year β
β created β β review β
ββββββββββββ ββββββββββββ
| Feature | Details |
|---|---|
| Password Hashing | SHA-256 via java.security.MessageDigest - passwords are hashed before storage and compared as hashes during login |
| SQL Injection Prevention | All queries use parameterized placeholders (?) with rawQuery() / ContentValues |
| Input Validation | Client-side validation for empty fields, email format, password length (β₯ 6), username format (alphanumeric + underscore), and password confirmation match |
| Unique Constraints | Database enforces UNIQUE on both username and email columns |
| Session Management | SessionManager class wraps SharedPreferences under CineStackSession - stores login state, username, full name, user ID, and remember-me preference |
| Session Security | Session is checked on app launch; unauthorized users are redirected to login; logout clears all session data; without Remember Me, session is cleared on next app restart |
App Launch
β
βΌ
SessionManager.isLoggedIn() && rememberMe?
β
βββ YES βββΊ MainActivity (Watchlist)
β β
β βββ View movies (RecyclerView)
β βββ Search movies (real-time)
β βββ Add Movie βββΊ AddMovieActivity
β βββ Edit Movie βββΊ EditMovieActivity
β βββ Delete Movie
β βββ Logout (header button) βββΊ LoginActivity
β
βββ NO ββββΊ LoginActivity
β
βββ Login (username/email + password)
β βββ SHA-256 hash β compare with DB
β
βββ Register βββΊ RegisterActivity
βββ Validate β Hash password β Insert to DB
| # | Task | Files |
|---|---|---|
| 1 | Database schema design (Users & Movies tables) | DatabaseHelper.java |
| 2 | SQLiteOpenHelper implementation | DatabaseHelper.java |
| 3 | User registration system with input validation | RegisterActivity.java, activity_register.xml |
| 4 | Secure password hashing (SHA-256) | DatabaseHelper.java |
| 5 | Login system with username/email authentication | LoginActivity.java, activity_login.xml |
| 6 | Session management (SharedPreferences) | SessionManager.java |
| 7 | Auto-login & "Remember Me" functionality | LoginActivity.java, SessionManager.java |
| 8 | Logout button on main screen | MainActivity.java, activity_main.xml, ic_logout.xml |
| # | Task | Files |
|---|---|---|
| 1 | Add Movie functionality | AddMovieActivity.java, activity_add_movie.xml |
| 2 | Edit Movie functionality | EditMovieActivity.java, activity_edit_movie.xml |
| 3 | Delete Movie functionality | MovieAdapter.java |
| 4 | RecyclerView implementation for movie list | MovieAdapter.java, Movie.java, item_movie.xml |
| 5 | Movie search (SQLite LIKE query) | MainActivity.java, DatabaseHelper.java |
| 6 | UI/UX design - original layouts & drawables | All layout XMLs, drawable resources |
| 7 | Main screen layout & navigation | activity_main.xml, menu_main.xml |
| 8 | Modern dark theme UI overhaul & Material3 design | All layouts, drawables, colors.xml, themes.xml |
- Android Studio (Arctic Fox or later)
- Android SDK (API Level 24+)
- Java Development Kit (JDK 11+)
-
Clone the repository:
git clone https://github.com/sh13y/CineStack.git
-
Open the project in Android Studio.
-
Sync Gradle files (Android Studio will prompt automatically).
-
Run on an emulator or physical device (min API 24).
./gradlew assembleDebugAPK output: app/build/outputs/apk/debug/app-debug.apk
| Sign In | Sign Up | Home | Add Movie |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Field | Details |
|---|---|
| Module Code | ICT3214 |
| Module Name | Mobile Application Development |
| Project Type | Group Project |
| Batch | 21/22 |
| Semester | Year 3, Semester 1 |
| Academic Year | 2026 |
| University | Rajarata University of Sri Lanka |
| Faculty | Faculty of Applied Sciences |
| Department | Department of Computing |
This project is developed for academic purposes at the Department of Computing, Faculty of Applied Sciences, Rajarata University of Sri Lanka. It is part of the coursework for ICT3214 - Mobile Application Development.
CineStack - Built with β Java & π¬ Passion
ICT3214 Group Project - Rajarata University of Sri Lanka



