Skip to content

KavinMK05/Wrap

Repository files navigation

Version 1.0 Min SDK 29 Target SDK 36

Wrapp

A personal file vault & media task board for Android
Upload, annotate, auto-tag, and track completion of images, PDFs, and files — all offline.

Android Java Android Studio SQLite Git


About

Wrapp is an Android application built by Basement Studios that lets you collect images, PDFs, and arbitrary files into a visual, searchable vault. Each item can be annotated with a title and description, automatically tagged using on-device ML, and tracked with a completion status — making it a hybrid between a media organizer and a task board.

The app is entirely offline — no accounts, no servers, no network requests. Everything stays on your device.


Features

  • Upload Anything — Import images from your photo library, capture new photos with the camera, or pick any file from your device (PDFs, documents, etc.).
  • AI-Powered Auto-Tagging — Titles and descriptions are processed by Google ML Kit Entity Extraction to automatically generate relevant tags (dates, addresses, keywords) with a maximum of 6 tags per item.
  • PDF Preview — PDF files are rendered with a first-page thumbnail using Android's native PdfRenderer API.
  • Search & Filter — Live search across titles, descriptions, and auto-generated tags. Filter items by status: All, Completed, or Not Completed.
  • Task Tracking — Mark any wrap as completed or not completed. Completed items display a green checkmark badge on their card.
  • Animated Preview Panel — Tap any card to see a detailed preview with slide-up animations, showing the full image/file, metadata, tags, and action buttons.
  • Open in External Apps — Tap a preview image to open the file in any compatible viewer via secure FileProvider URIs.
  • Dark / Light Mode — Toggle between themes from the settings drawer, with your preference persisted across app restarts.
  • Masonry Grid Layout — Items are displayed in a Pinterest-style staggered 2-column grid using StaggeredGridLayoutManager.
  • Entirely Offline — No networking libraries, no backend, no data leaves your device.

Tech Stack

Layer Technology
Language Java 11
Build System Gradle (Kotlin DSL) with Version Catalog
UI Framework Android Views (XML layouts)
Design System Material Design 3 (Material Components 1.13.0)
Database Room 2.6.1 (SQLite)
ML / AI Google ML Kit Entity Extraction 16.0.0-beta4
PDF Rendering Android native PdfRenderer
File Sharing AndroidX FileProvider
Architecture Single-Activity, Repository pattern
Threading ExecutorService + runOnUiThread callbacks
Min SDK 29 (Android 10)
Target SDK 36 (Android 16)

Project Structure

com.basementstudios.wrapp/
├── WrappApplication.java           # App startup, dark/light mode init
├── MainActivity.java               # Single activity hosting all UI
│   ├── WrapItem                    # In-memory model (inner class)
│   └── WrapAdapter                 # RecyclerView adapter with 3 view types (inner class)
├── BottomSheetFragment.java        # Upload options (Photo Library, Camera, Files)
├── TagGenerator.java               # ML Kit + keyword/bigram tag extraction
├── SquareMaterialCardView.java     # Custom 1:1 aspect ratio card
└── data/
    ├── WrapEntity.java             # Room entity for "wraps" table
    ├── WrapDao.java                # Data access queries (CRUD + filters)
    ├── WrapDatabase.java           # Room database singleton (v3)
    ├── WrapRepository.java         # Repository bridging UI ↔ database
    └── FileStorageManager.java     # Internal file storage & PDF thumbnails

Getting Started

Prerequisites

  • Android Studio Hedgehog (2023.1.1) or later
  • JDK 11
  • Android SDK with API level 29+

Setup

# Clone the repository
git clone <repository-url>
cd Wrapp

# Build the project
./gradlew assembleDebug

# Install on a connected device or emulator
./gradlew installDebug

Or open the project in Android Studio and hit the Run button.


Permissions

Permission Purpose
CAMERA Capture photos directly from the app
READ_MEDIA_IMAGES Access images from the media store (API 33+)
READ_MEDIA_VIDEO Access video from the media store (API 33+)
READ_MEDIA_VISUAL_USER_SELECTED Partial media access (API 34+)
READ_EXTERNAL_STORAGE Legacy file access (API 32 and below)

The camera hardware feature is declared as not required — the app works on devices without a camera.


Build Commands

Action Command
Assemble Debug ./gradlew assembleDebug
Assemble Release ./gradlew assembleRelease
Run Unit Tests ./gradlew app:testDebugUnitTest
Run Lint ./gradlew lintDebug
Full Build ./gradlew build
Clean ./gradlew clean

Contributing

This project uses the Feature Branch Workflow (GitHub Flow).

  1. Pull the latest main branch
  2. Create a branch: feature/your-feature or bugfix/your-fix
  3. Commit your changes with clear messages
  4. Open a Pull Request for review
  5. Merge after approval and delete the branch

PR Title Format

<type>: <short description>

Types: feat, fix, refactor, docs, test, chore


Built by Basement Studios

About

A personal file vault & media task board for Android — upload, annotate, auto-tag with ML Kit, and track completion of images, PDFs, and files. Entirely offline.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages