An offline-first Android blog drafting and publishing suite featuring SQLite persistence, internal image storage isolation, FileProvider social sharing, and multi-select bulk operations.
Blogger is a distraction-free, offline-first mobile blogging studio and markdown/article drafting companion for Android. Designed for writers, journalists, and content creators who need to compose, archive, and refine articles on the move without dependence on cloud backends or active internet connections.
The application couples a native SQLite database architecture with the Android Jetpack MVVM pattern. It features an isolated media pipeline that saves selected cover photos to private internal storage, secure system-wide article sharing via FileProvider, real-time title search filtering, and contextual multi-select deletion modes.
- 100% Offline Article Drafting: Create, edit, and organize posts with zero server requirements.
- Private Media Isolation: Imported gallery images are safely copied into private app internal storage, protecting against broken external image URIs.
- Rich Social Sharing: Dispatches formatted post text and attached image media via Android's native share sheet using secure
FileProviderURI grants. - Multi-Select & Bulk Actions: Long-press to activate multi-select mode and batch delete archived drafts.
flowchart TD
subgraph UI_Layer [Presentation & Activity Layer]
MainActivity[MainActivity - Article Archive & Search]
AddEditActivity[AddEditActivity - Compose & Edit]
ViewPostActivity[ViewPostActivity - Reader Screen]
Adapter[BlogAdapter - Multi-Select & Search Filter]
end
subgraph ViewModel_Layer [State & ViewModel Layer]
VM[BlogViewModel]
end
subgraph Data_Layer [Repository & Local Storage]
Repo[BlogRepository]
DBHelper[DatabaseHelper - SQLiteOpenHelper]
SQLite[(SQLite Database\nblog table)]
end
subgraph Media_Storage [Image Pipeline & Sharing]
ImageUtils[ImageUtils]
InternalStorage[(App-Private Internal Storage)]
FileProvider[AndroidX FileProvider]
ShareSheet[Android Share Sheet]
end
MainActivity --> VM
AddEditActivity --> VM
ViewPostActivity --> VM
MainActivity --> Adapter
VM --> Repo
Repo --> DBHelper
DBHelper <--> SQLite
AddEditActivity --> ImageUtils
ImageUtils --> InternalStorage
ViewPostActivity --> FileProvider
FileProvider --> ShareSheet
- Compose articles with custom title, expandable body content, formatted date-time stamps, and custom cover images.
- Full editing and updating capabilities for previously drafted blog entries.
- Automatically copies selected gallery photos to internal sandbox storage (
getFilesDir()), preventing media links from breaking if original files are moved or deleted. - Image loading optimized via Glide with rounded corner transformations and placeholder fallbacks.
- Broadcasts full article text alongside the attached image file to third-party social apps, messaging platforms, and note repositories using
FileProvidercontent URIs.
- Built-in
SearchViewfilters the article archive in real time by title matches. - Long-press contextual multi-selection enabling one-tap bulk deletion of multiple drafts.
| Screen / Component | Class | Description |
|---|---|---|
| Archive Feed | MainActivity |
Displays articles ordered newest first, real-time search bar, Add FAB, and multi-delete action bar. |
| Post Composer | AddEditActivity |
Editor for drafting new posts, attaching photos from gallery, and updating existing records. |
| Reader View | ViewPostActivity |
Full-screen reading mode displaying title, timestamp, cover photo, content body, and share button. |
| List Adapter | BlogAdapter |
RecyclerView adapter supporting selection tracking, search filtering, and Glide image binding. |
| Database Helper | DatabaseHelper |
SQLiteOpenHelper managing schema creation and migrations for blog_app.db. |
| Layer / Concern | Technology / Library | Version / Details |
|---|---|---|
| Platform | Android OS | minSdk 28 (Android 9.0) / targetSdk 35 (Android 15) / compileSdk 35 |
| Language | Java | Java 11 |
| Architecture | MVVM + Repository Pattern | Android Jetpack Lifecycle (ViewModel, LiveData) |
| Database | Native Android SQLiteOpenHelper |
Raw SQLite database engine (blog_app.db) |
| Image Loading | Glide | 4.16.0 image loading with annotation processor |
| File Sharing | androidx.core.content.FileProvider |
Secure temporary URI granting for social sharing |
| UI Components | AndroidX & Material Design | RecyclerView, CardView, FloatingActionButton, SearchView |
| Build System | Gradle Kotlin DSL (build.gradle.kts) |
AGP 8.7+ |
Blogger/
βββ app/
β βββ src/
β β βββ main/
β β β βββ java/com/example/securebloggingapp/
β β β β βββ adapter/
β β β β β βββ BlogAdapter.java # Multi-select RecyclerView adapter
β β β β βββ db/
β β β β β βββ DatabaseHelper.java # SQLiteOpenHelper schema & table definition
β β β β βββ model/
β β β β β βββ BlogPost.java # Data model representing blog posts
β β β β βββ repository/
β β β β β βββ BlogRepository.java # Repository executing SQLite queries
β β β β βββ utils/
β β β β β βββ ImageUtils.java # Bitmap & internal storage copy utility
β β β β βββ view/
β β β β β βββ MainActivity.java # Archive feed & search controller
β β β β β βββ AddEditActivity.java # Article composer & photo picker
β β β β β βββ ViewPostActivity.java # Article reader & social share launcher
β β β β βββ viewmodel/
β β β β βββ BlogViewModel.java # Lifecycle ViewModel
β β β βββ res/
β β β β βββ layout/
β β β β β βββ activity_main.xml # Main archive feed layout
β β β β β βββ activity_add_edit.xml # Composer activity layout
β β β β β βββ activity_view_post.xml # Reader screen layout
β β β β β βββ item_blog_post.xml # Blog card item layout
β β β β βββ xml/
β β β β β βββ file_paths.xml # FileProvider shared paths configuration
β β β β βββ values/ # Dimensions, strings, and themes
β β β βββ AndroidManifest.xml
β βββ build.gradle.kts
β βββ proguard-rules.pro
βββ gradle/
β βββ libs.versions.toml
βββ build.gradle.kts
βββ LICENSE
βββ README.md
- Android Studio (Ladybug 2024.2+ or Hedgehog+).
- JDK 11 or JDK 17.
- Android device or Emulator running API 28 (Android 9.0) or higher.
-
Clone the repository:
git clone https://github.com/shayann07/Blogger.git cd Blogger -
Open in Android Studio:
- Open the directory in Android Studio and let Gradle sync dependencies.
-
Build the APK:
./gradlew assembleDebug
-
Install & Run:
./gradlew installDebug
This project is licensed under the MIT License β see the LICENSE file for complete details.
Copyright (c) 2026 shayann07