A modern Android application built with Jetpack Compose that allows users to discover, search, and manage their favorite artists using the Artsy API. The app provides a seamless experience for art enthusiasts to explore artist profiles, view artworks, and maintain a personalized favorites collection.
- ๐ฑ Features
- ๐๏ธ Architecture
- ๐ ๏ธ Tech Stack
- ๐ฆ Installation & Setup
- ๐ Getting Started
- ๐ฑ Screenshots
- ๐ API Integration
- ๐งช Testing
- ๐ Project Structure
- ๐ง Configuration
- ๐ค Contributing
- ๐ License
- ๐ Acknowledgments
- ๐ Support
- ๐ฎ Future Enhancements
- Search Functionality: Search for artists by name with real-time results
- Artist Profiles: Detailed artist information including biography, nationality, and birth year
- Artwork Gallery: View artist's artworks with high-quality images
- Similar Artists: Discover related artists based on your interests
- Personal Collection: Save and organize your favorite artists
- Real-time Updates: Live timestamps showing when artists were added
- Quick Access: Easy navigation to favorite artist profiles
- Persistent Storage: Favorites are saved and synchronized across sessions
- Secure Login: Email and password authentication
- User Registration: Create new accounts with profile management
- Session Management: Persistent login with automatic session validation
- Account Management: Logout and account deletion options
- Material Design 3: Latest Material Design components and theming
- Jetpack Compose: Modern declarative UI framework
- Responsive Design: Optimized for various screen sizes
- Dark/Light Theme: Adaptive theming support
- Smooth Animations: Fluid transitions and micro-interactions
The app follows the Model-View-ViewModel architecture pattern for clean separation of concerns:
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ UI Layer โ โ ViewModel โ โ Data Layer โ
โ (Compose) โโโโโบโ (State Mgmt) โโโโโบโ (API/Models) โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
- UI Screens: Jetpack Compose-based screens for each feature
- Navigation: Type-safe navigation with Compose Navigation
- State Management: Reactive state management with Compose state
- API Integration: Retrofit-based REST API client
- Dependency Injection: Koin for lightweight DI
- Language: Kotlin 2.0.21
- UI Framework: Jetpack Compose
- Architecture: MVVM with Compose
- Navigation: Navigation Compose 2.8.9
- Dependency Injection: Koin 3.3.3
- HTTP Client: Retrofit 2.9.0
- JSON Serialization: Kotlinx Serialization 1.6.3
- Image Loading: Coil 2.6.0
- Cookie Management: PersistentCookieJar
- Logging: OkHttp Logging Interceptor
- Core: AndroidX Core KTX 1.16.0
- Lifecycle: Lifecycle Runtime KTX 2.8.7
- Material Design: Material 3 1.1.0
- Coroutines: Kotlinx Coroutines Android 1.7.3
- Android Studio Hedgehog (2023.1.1) or later
- JDK 11 or later
- Android SDK 24+ (minimum), 35 (target)
- Git
git clone https://github.com/yourusername/artsy-android-app.git
cd artsy-android-app- Open the project in Android Studio
- Sync the project with Gradle files
- Ensure all dependencies are resolved
- Build the project (Ctrl+F9 / Cmd+F9)
- Connect an Android device or start an emulator
- Click the "Run" button in Android Studio
- The app will install and launch automatically
- Welcome Screen: The app opens to the home screen showing today's date
- Authentication: Tap the profile icon to login or register
- Search Artists: Use the search icon to discover new artists
- Add Favorites: Like artists to add them to your favorites collection
- Search: Enter artist names in the search bar
- Explore: Tap on artist cards to view detailed profiles
- Favorite: Use the heart icon to add artists to favorites
- Manage: Access your favorites from the home screen
Note: Screenshots will be added here showing the app's key screens:
- Home screen with favorites
- Search functionality
- Artist detail view
- Login/Register screens
- User profile management
The app integrates with the Artsy API for artist data:
| Endpoint | Method | Description |
|---|---|---|
/search |
GET | Search for artists by query |
/artist/{id} |
GET | Get detailed artist information |
/artwork/{id} |
GET | Get artwork details |
/gene/{id} |
GET | Get genre/category information |
/artist/smlr/{id} |
GET | Get similar artists |
| Endpoint | Method | Description |
|---|---|---|
/auth/login |
POST | User login |
/user/signup |
POST | User registration |
/auth/logout |
POST | User logout |
/user/me |
GET | Get current user data |
/user/liked/{id} |
POST | Like an artist |
/user/rmliked/{id} |
DELETE | Remove artist from favorites |
/user |
DELETE | Delete user account |
// Core artist data structure
data class Artist(
val id: String,
val name: String,
val nationality: String?,
val birthday: String?,
val deathday: String?,
val biography: String?,
val imageUrl: String?
)
// User favorites
data class Favorite(
val artistId: String,
val name: String,
val nationality: String?,
val birthday: String?,
val likedAt: String?
)# Unit tests
./gradlew test
# Instrumented tests
./gradlew connectedAndroidTest
# All tests
./gradlew check- Unit tests for data models and API services
- UI tests for critical user flows
- Integration tests for API endpoints
app/
โโโ src/main/
โ โโโ java/com/example/hw4/
โ โ โโโ data/
โ โ โ โโโ api/ # API client and services
โ โ โ โโโ model/ # Data models and DTOs
โ โ โโโ ui/
โ โ โ โโโ theme/ # Material Design theming
โ โ โ โโโ HomeScreen.kt # Main favorites screen
โ โ โ โโโ SearchScreen.kt # Artist search
โ โ โ โโโ ArtistScreen.kt # Artist details
โ โ โ โโโ LoginScreen.kt # Authentication
โ โ โ โโโ RegisterScreen.kt # User registration
โ โ โโโ MainActivity.kt # Main activity and navigation
โ โโโ res/ # Resources (layouts, strings, etc.)
โโโ build.gradle.kts # App-level build configuration
โโโ proguard-rules.pro # ProGuard configuration
- Debug: Development build with logging enabled
- Release: Production build with optimizations
The app uses the following configuration:
- API Base URL: Configured in
ApiClient.kt - Network Timeout: 30 seconds
- Image Cache: 50MB disk cache
We welcome contributions! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow Kotlin coding conventions
- Use meaningful variable and function names
- Add comments for complex logic
- Ensure all tests pass
- Provide a clear description of changes
- Include screenshots for UI changes
- Update documentation as needed
- Ensure CI/CD checks pass
This project is licensed under the MIT License - see the LICENSE file for details.
- Artsy: For providing the comprehensive art API
- Google: For Jetpack Compose and Material Design
- Open Source Community: For the amazing libraries that made this possible
If you encounter any issues or have questions:
- Check the Issues: Look through existing GitHub issues
- Create an Issue: Provide detailed information about the problem
- Contact: Reach out to the maintainers
- Offline Support: Cache artist data for offline viewing
- Push Notifications: Notify users about new artworks from favorite artists
- Social Features: Share favorite artists with friends
- Advanced Search: Filter by nationality, birth year, art movements
- Artwork Collections: Create custom collections of artworks
- Dark Mode: Enhanced dark theme support
- Accessibility: Improved accessibility features
- Performance: Image optimization and lazy loading
- Database: Local Room database for offline storage
- Caching: Advanced caching strategies
- Analytics: User behavior tracking
- CI/CD: Automated testing and deployment
- Security: Enhanced authentication and data protection
Built with โค๏ธ using Jetpack Compose and the Artsy API
Last updated: December 2024