SplatoonWeaponsApp is a polished Android application that consumes a RESTful API (hosted on Apiary) to display weapon data in a responsive, user-friendly interface. Integrated with Firebase Authentication, this project demonstrates your skills in building a modern mobile app: from networking and dependency management to UI/UX best practices. While Room isn’t part of the core functionality yet, there is a clear path laid out for adding local data persistence in the near future.
Showcases: API integration, clean modular structure, custom fonts, Firebase Auth, and best practices—perfect for a mobile-dev portfolio.
- REST API Consumer: Fetches and displays a list of weapons from a hosted Apiary endpoint using Retrofit.
- Firebase Authentication: Secure login flow with email/password; users can access protected content once authenticated.
- Modular UI: Employs Fragment-based navigation (Splash, Login, List, Detail) with custom animations and splash screen.
- RecyclerView + Adapter: Optimized list of weapons displaying images, names, and brief stats. Taps on an item launch a detail view.
- Image Loading: Integrated Picasso for efficient image fetching, caching, and placeholder/error handling.
- Custom Fonts & Themes: Utilizes blitz_bold.otf, blitz_main.otf, and sp_alterna_regular.otf in res/font/ as Splatoon official fonts.
- Sealed UI States: Gracefully handles loading, success, and error states in both list and detail screens. If API data is missing, UI adapts (e.g., hides unavailable views).
- Clean Project Structure: Clear separation between data/, ui/, auth/, constants/, and utils/ packages—making it easy to onboard new devs or extend functionality.
- Future-proof: Room implementation is planned to enable offline caching and local persistence in a later iteration.
- Programming Language: Kotlin
- Android SDK: API Level 24+ (minSdk 24)
- Retrofit for REST calls
- OkHttp (via Retrofit) for HTTP client
- Dependency Injection / Configuration: Simple manual DI via singletons in RetrofitHelper.kt
- Authentication: Firebase Auth (Email/Password)
- Image Loading: Picasso
- AndroidX Fragments & RecyclerView
- ConstraintLayout for responsive layouts
- Material Design components (Buttons, TextInputLayouts, etc.)
- Persistence (Future): Room (planned)
- Project Build: Gradle Kotlin DSL (build.gradle.kts)
📂 Project Structure
SplatoonWeaponsApp/
│
app/
└── src/
└── main/
├── java/com/tanucode/practica2/
│ ├── application/ # Clase Application y arranque
│ ├── auth/ # Login, registro, sesión
│ ├── constants/ # Constantes globales
│ ├── data/ # Capa de datos
│ │ ├── repository/ # Repositorios
│ │ └── remote/ # API, DTOs, Retrofit
│ ├── ui/ # UI layer
│ │ ├── adapters/ # ViewHolders, Adapters
│ │ └── fragments/ # Pantallas / Fragments
│ └── utils/ # Extensiones, LiveData de red
└── res/
├── layout/ # XML de pantallas y componentes
├── drawable/
└── values/ # Colores, strings, estilosWhy: Enable offline-first behavior, faster load times, and local caching of API responses. Benefit: Demonstrates knowledge of Jetpack components, database design (entities, DAOs), and repository pattern.
Swap manual singletons for Hilt to inject Retrofit, Repository, and ViewModel dependencies automatically.
Extract business logic into ViewModel classes under ui/viewmodel/, observing LiveData/StateFlow to handle UI states more cleanly.
- Add pull-to-refresh on the list.
- Implement shimmer-style loading placeholders.
- Animate transitions between list/detail screens.
- Write tests for the repository (mocking Retrofit).
- Use Espresso for navigation and UI assertions (e.g., list renders correctly).
Made with ❤️ by Chava for App Development for Mobile Devices Course



