A beautiful Android wallpapers app with AI-generated images
The Play Store version is the full app with Firebase integration and AdMob ads enabled.
- 🎨 AI-Generated Wallpapers - Curated collection of stunning AI-created images
- 📁 Category Browsing - Browse by Dark, Light, Animals, Birds, or All
- ⬇️ Download - Save wallpapers directly to your gallery
- 🖼️ Set as Wallpaper - Apply wallpapers with one tap
- 📤 Share - Share your favorite wallpapers with friends
- 🔄 Pull-to-Refresh - Always see fresh content
- 🌑 Dark Theme - Beautiful dark UI
- ⚡ Optimized Loading - Glide with placeholder and thumbnail preloading
- 🎯 Demo Mode - Works immediately! Includes sample wallpapers from Unsplash
| Screen | Description |
|---|---|
| Home | Main gallery with wallpaper grid and category navigation |
| Light Wallpapers | Browsing the Light category |
| Detail View | Full-size wallpaper with Download, Set, Share buttons |
| Set Wallpaper | System wallpaper picker |
| Share | Share menu for sending wallpapers |
Pixalize/
├── app/
│ ├── src/main/
│ │ ├── java/com/shatrix/pixalize/
│ │ │ ├── MainActivity.kt # Main gallery with categories
│ │ │ ├── DetailActivity.kt # Full image view with actions
│ │ │ ├── PixalizeApp.kt # Application class
│ │ │ ├── Wallpaper.kt # Data model
│ │ │ └── WallpaperAdapter.kt # RecyclerView adapter
│ │ ├── res/
│ │ │ ├── layout/ # XML layouts
│ │ │ ├── drawable/ # Icons and shapes
│ │ │ ├── menu/ # Bottom navigation menu
│ │ │ └── values/ # Colors, strings, themes
│ │ └── AndroidManifest.xml
│ ├── build.gradle.kts
│ └── google-services.json.example # Template for Firebase config
├── build.gradle.kts # Root build configuration
├── gradle/libs.versions.toml # Centralized version catalog
└── settings.gradle.kts
| Component | Technology | Version |
|---|---|---|
| Language | Kotlin | 2.0.21 |
| Min SDK | 24 | Android 7.0 |
| Target SDK | 35 | Android 15 |
| Build Tools | Gradle | 8.13 |
| Backend | Firebase Firestore | 25.1.1 |
| Image Loading | Glide | 4.16.0 |
| UI | XML Layouts + Material Design | 1.12.0 |
- Android Studio Ladybug (2024.2) or newer
- JDK 17 or later
- Firebase project (free tier works fine)
git clone https://github.com/shatrix/pixalize_android.git
cd pixalize_android- Go to Firebase Console
- Click "Create a project" (or use existing)
- Enter project name (e.g., "my-wallpaper-app")
- Disable Google Analytics (optional, not needed)
- Click Create
- In Firebase Console, click "Add app" → Android
- Enter package name:
com.shatrix.pixalize- Or change to your own package name (update in
build.gradle.ktsand all Kotlin files)
- Or change to your own package name (update in
- Enter app nickname (optional): "Pixalize"
- Click Register app
- Download the
google-services.jsonfile - Place it in the
app/folder (same level asbuild.gradle.kts)
Open app/build.gradle.kts and uncomment line 5:
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.jetbrains.kotlin.android)
// To enable Firebase, add google-services.json to app/ folder and uncomment:
id("com.google.gms.google-services") // ← UNCOMMENT THIS LINE
}- In Firebase Console, go to Firestore Database
- Click Create database
- Choose Start in test mode (for development)
- Select a location close to you
- Click Enable
In Firestore, create a collection called wallpapers and add documents like this:
Collection: wallpapers
│
├── Document (auto-ID)
│ ├── name: "Nebula Dreams"
│ ├── imageUrl: "https://example.com/nebula.jpg"
│ └── categories: ["Dark", "Space"]
│
├── Document (auto-ID)
│ ├── name: "Forest Light"
│ ├── imageUrl: "https://example.com/forest.jpg"
│ └── categories: ["Light", "Nature"]
│
└── Document (auto-ID)
├── name: "Mountain Lion"
├── imageUrl: "https://example.com/lion.jpg"
└── categories: ["Animals"]
Field Types:
name→ StringimageUrl→ String (must be a public image URL)categories→ Array of Strings
Valid Categories: All, Dark, Light, Animals, Birds
Tip: Use free image hosting like Imgur, Cloudinary, or Firebase Storage.
./gradlew assembleDebugOr open in Android Studio → Run on emulator/device.
- Update
namespaceandapplicationIdinapp/build.gradle.kts - Rename package folders in
app/src/main/java/ - Update package declaration in all
.ktfiles - Update
package_nameingoogle-services.json
-
Edit
bottom_navigation_menu.xml:<item android:id="@+id/category_nature" android:icon="@drawable/ic_tab_nature" android:title="Nature" />
-
Edit
MainActivity.kt- add to switch:R.id.category_nature -> "Nature"
-
Add icon
ic_tab_nature.xmltores/drawable/
Edit res/values/colors.xml:
<color name="back_dark">#1A1A2E</color> <!-- Main background -->
<color name="back_too_dark">#0F0F1A</color> <!-- Darker background -->
<color name="back_light">#EAEAEA</color> <!-- Text/icons -->-
Add dependency in
app/build.gradle.kts:implementation("com.google.android.gms:play-services-ads:23.6.0") -
Add to
AndroidManifest.xml:<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-XXXXXXXX~XXXXXXXX" />
-
Add AdView to layouts and load ads in Activities
For production, update your Firestore Security Rules:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Allow public read access to wallpapers
match /wallpapers/{wallpaperId} {
allow read: if true;
allow write: if false; // Only admin via console
}
}
}- Entry point of the app
- Displays wallpaper grid using
RecyclerView - Handles category switching via
BottomNavigationView - Fetches data from Firestore based on selected category
- Shows full-size wallpaper image
- Handles Download, Share, and Set Wallpaper actions
- Uses Glide to load original quality image from URL
- Saves to gallery using modern
MediaStoreAPI (Android 10+)
RecyclerView.Adapterfor the wallpaper grid- Uses
DiffUtilfor efficient list updates - Glide with placeholder and thumbnail preloading
- Simple data class:
name,imageUrl,categories
| Requirement | Value |
|---|---|
| Android Version | 7.0 (API 24) or higher |
| Network | Internet required for image loading |
| Storage | ~10MB app size |
- Check Firestore database has data
- Verify
google-services.jsonis inapp/folder - Ensure google-services plugin is uncommented
- Check image URLs are publicly accessible
- Make sure
google-services.jsonexists inapp/ - Sync Gradle files after adding it
- Verify URLs point to actual images (
.jpg,.png) - Check URLs are HTTPS (not HTTP)
- Ensure images are publicly accessible
This project is open source and available under the MIT License.
MIT License
Copyright (c) 2024 Shatrix
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software...
Contributions are welcome! Here's how:
- Fork the repository
- Create feature branch:
git checkout -b feature/AmazingFeature - Commit changes:
git commit -m 'Add AmazingFeature' - Push to branch:
git push origin feature/AmazingFeature - Open a Pull Request
Shatrix
If you find this project useful, please give it a star! ⭐
Made with ❤️ using Kotlin & Firebase





