SmugView is a premium, high-performance Android application designed for browsing public SmugMug galleries. Built with Kotlin and modern Jetpack Compose, the app delivers a fluid, gesture-driven media exploration experience, support for secure password-protected folders and albums, and advanced client-side tag filtering.
To keep credentials secure, this project uses a build-time configuration system that reads credentials from a local file and compiles them into a secure, non-version-controlled class (BuildConfig). Follow these steps to set up the project:
- Go to the SmugMug Developer Portal.
- Register your application to obtain a developer API Key (also known as a consumer key).
- Locate the local.properties.example template file in the project root.
- Duplicate this file and rename the copy to
local.propertiesin the project root directory. - Open the newly created
local.propertiesand fill in your details:# Your SmugMug API Key smugmug.api.key=YOUR_API_KEY_HERE # Your target SmugMug nickname/profile to load on launch smugmug.nickname=YOUR_NICKNAME_HERE
- Security Check: The root
local.propertiesandapp/local.propertiesare pre-configured in ../.gitignore to ensure they are never accidentally pushed to GitHub.
The project uses Gradle 8.13 (see gradle/wrapper/gradle-wrapper.properties) and is configured with standard Android build wrappers.
- Open Android Studio (Iguana / Jellyfish or newer recommended).
- Select Open and choose the root directory of this project (
SmugView). - Let Gradle sync and compile the project. Android Studio will automatically resolve your local Android SDK location (
sdk.dir) inlocal.properties. - Click the Run button to deploy the app to an emulator or physical device.
Run the following build command from the root directory. Note that you must have JAVA_HOME configured or use the bundled Java runtime from Android Studio:
- Windows (PowerShell):
If
JAVA_HOMEis not set in your environment:$env:JAVA_HOME="C:\Program Files\Android\Android Studio\jbr" .\gradlew.bat assembleDebug
- Windows (CMD):
set JAVA_HOME="C:\Program Files\Android\Android Studio\jbr" gradlew.bat assembleDebug
- macOS / Linux:
chmod +x gradlew ./gradlew assembleDebug
For deeper details on design, mechanics, and integration details, consult the following documents:
- DESIGN.md: Details the UX/UI layout specifications, custom client-side tag exclusion/inclusion formulas, and the Room database schema for custom offline collections.
- SMUGMUG.md: Documents API endpoints, expansion parameters (to prevent N+1 queries), password-unlock logic via POST requests, and Retrofit/OkHttp cookie persistence implementations.
- PUBLISH.md: Google Play store listing content (title/descriptions/graphics/screenshots), the Play Console steps that can't be scripted (data safety, content rating, closed-testing gate), and the publish commands themselves.
- PRIVACY_POLICY.md: The public-facing privacy policy required by Play Console's App Content section. Keep this in sync if data handling (storage, permissions, third-party SDKs) ever changes.
- .gitignore: Standard Android ignore file ensuring cache files, IDE outputs, and credentials stay off public repositories.
- UI Framework: Jetpack Compose with Material 3 (custom dark aesthetic).
- Networking: Retrofit 2 & OkHttp 4, with an automatic 429/5xx retry+backoff interceptor.
- Data Caching: Room DB for offline lists/collections & Coil for smart image loading.
- Concurrency & Flow: Kotlin Coroutines & Flows for reactive state management.
- Media & Casting:
androidx.media3/ExoPlayer for in-gallery video, Google Cast framework for Chromecast, plus a local HTTP server ("Web Companion") for Roku/Fire TV casting — see the "Casting & the Web Companion Server" section in DESIGN.md.
For the fuller picture beyond this quick-reference list — including the ViewModel/controller split, the folder update-indicator feature, and the casting subsystem — see DESIGN.md.