A modern and elegant photo viewer application built using Android Jetpack Compose, designed for a smooth and intuitive user experience. This project demonstrates the integration of robust network capabilities with Retrofit, a scalable architecture following the MVVM pattern, and efficient dependency management with Hilt.
This application serves as a dynamic photo viewer, fetching a collection of photos from a remote API and displaying them in a beautifully crafted user interface powered by Jetpack Compose. It's engineered to showcase best practices in Android development, including a clear separation of concerns, reactive UI updates, and robust data handling. Users can browse through a list of images and dive into the details of each photo, offering a comprehensive example of a production-ready Android application.
The application incorporates a variety of modern Android development features:
- Android Jetpack Compose: Declarative UI toolkit for building native Android UIs.
- Retrofit: Type-safe HTTP client for Android and Java to consume RESTful APIs.
- MVVM (Model-View-ViewModel): A clean architectural pattern for separating UI logic from business logic.
- Singleton Pattern: Ensures a single instance of critical classes for resource optimization.
- Hilt: Dependency Injection library built on top of Dagger for simplifying DI in Android apps.
- Navigation Compose: Handles in-app navigation between composable destinations.
- API Integration: Fetches photo data from a remote source.
To get this project up and running on your local machine, follow these steps:
- Clone the Repository:
git clone https://github.com/Software-Guardians/AndroidJetpackComposeRetrofitPhotoViewer.git
- Open in Android Studio: Navigate to the cloned directory and open the project in Android Studio.
- Sync Gradle Project:
Android Studio will automatically prompt you to sync the Gradle project. If not, manually trigger it via
File > Sync Project with Gradle Files. - Build and Run: Select your desired emulator or physical device and click the "Run" button (the green triangle icon) in Android Studio.
Once the application is successfully installed and launched:
- Launch the App: The application will start on the main screen, which displays a grid or list of photos.
- View Photos: Photos fetched from the configured remote API will populate the screen. You can scroll through the list to discover more images.
- Explore Details: Tap on any photo to navigate to a detailed view, where you can see more information or properties related to that specific image.
The project follows a modular and clean architecture, making it easy to understand and maintain. Here's a high-level overview of the key directories:
.
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/emrullaheniscetinkaya/photoapplication/
│ │ │ │ ├── dependencies/ // Hilt application setup and modules
│ │ │ │ ├── entities/ // Data models for photos
│ │ │ │ ├── services/ // API service interfaces, Retrofit client, and repository
│ │ │ │ ├── screens/ // UI composables (MainScreenCompose, PropertiesScreen)
│ │ │ │ ├── ui/ // UI related components like theme, color, type
│ │ │ │ ├── viewmodels/ // ViewModel classes for UI logic and data
│ │ │ │ └── MainActivity.kt // Main entry point of the application
│ │ │ └── res/ // Android resources (layouts, drawables, values)
│ │ └── androidTest/ // Instrumented tests
│ │ └── test/ // Unit tests
│ └── build.gradle.kts // Module-level Gradle build file
├── gradle/ // Gradle wrapper files
├── .gitignore // Git ignore rules
├── build.gradle.kts // Project-level Gradle build file
├── settings.gradle.kts // Gradle settings
├── gradlew // Gradle wrapper executable (Linux/macOS)
├── gradlew.bat // Gradle wrapper executable (Windows)
└── LICENSE // Project license file
Contributions are welcome! If you have suggestions for improvements, new features, or bug fixes, please follow these steps:
- Fork the repository.
- Create a new branch (
git checkout -b feature/AmazingFeature). - Commit your changes (
git commit -m 'Add some AmazingFeature'). - Push to the branch (
git push origin feature/AmazingFeature). - Open a Pull Request.
Please ensure your code adheres to standard Kotlin/Android style guidelines and includes appropriate tests.
This project is licensed under the MIT License - see the LICENSE file for details.
Emrullah Enis Çetinkaya GitHub Profile
Date: 2025
Android Jetpack Compose kullanılarak oluşturulmuş, pürüzsüz ve sezgisel bir kullanıcı deneyimi için tasarlanmış modern ve zarif bir fotoğraf görüntüleyici uygulaması. Bu proje, Retrofit ile güçlü ağ yeteneklerinin, MVVM desenini takip eden ölçeklenebilir bir mimarinin ve Hilt ile verimli bağımlılık yönetiminin entegrasyonunu göstermektedir.
Bu uygulama, uzak bir API'den bir fotoğraf koleksiyonunu alıp Jetpack Compose tarafından desteklenen güzelce hazırlanmış bir kullanıcı arayüzünde görüntüleyerek dinamik bir fotoğraf görüntüleyici olarak hizmet vermektedir. Endişelerin net bir şekilde ayrılması, reaktif UI güncellemeleri ve sağlam veri işleme dahil olmak üzere Android geliştirmede en iyi uygulamaları sergilemek üzere tasarlanmıştır. Kullanıcılar bir görüntü listesinde gezinebilir ve her fotoğrafın detaylarına inerek üretime hazır bir Android uygulamasının kapsamlı bir örneğini sunar.
Uygulama, çeşitli modern Android geliştirme özelliklerini içermektedir:
- Android Jetpack Compose: Yerel Android kullanıcı arayüzleri oluşturmak için bildirimsel UI araç seti.
- Retrofit: RESTful API'leri tüketmek için Android ve Java için tip güvenli HTTP istemcisi.
- MVVM (Model-View-ViewModel): UI mantığını iş mantığından ayırmak için temiz bir mimari desen.
- Singleton Deseni: Kaynak optimizasyonu için kritik sınıfların tek bir örneğini sağlar.
- Hilt: Android uygulamalarında DI'ı basitleştirmek için Dagger üzerine inşa edilmiş Bağımlılık Enjeksiyonu kütüphanesi.
- Navigation Compose: Oluşturulabilir hedefler arasında uygulama içi gezinmeyi yönetir.
- API Entegrasyonu: Uzak bir kaynaktan fotoğraf verilerini çeker.
Bu projeyi yerel makinenizde çalıştırmak için şu adımları izleyin:
- Depoyu Klonlayın:
git clone https://github.com/Software-Guardians/AndroidJetpackComposeRetrofitPhotoViewer.git
- Android Studio'da Açın: Klonlanmış dizine gidin ve projeyi Android Studio'da açın.
- Gradle Projesini Senkronize Edin:
Android Studio otomatik olarak Gradle projesini senkronize etmenizi isteyecektir. İstemezse,
File > Sync Project with Gradle Filesüzerinden manuel olarak tetikleyin. - Derleyin ve Çalıştırın: İstediğiniz emülatörü veya fiziksel cihazı seçin ve Android Studio'da "Çalıştır" düğmesine (yeşil üçgen simgesi) tıklayın.
Uygulama başarıyla yüklendikten ve başlatıldıktan sonra:
- Uygulamayı Başlatın: Uygulama, fotoğrafların bir ızgarasını veya listesini gösteren ana ekranda başlayacaktır.
- Fotoğrafları Görüntüleyin: Yapılandırılan uzak API'den çekilen fotoğraflar ekranı dolduracaktır. Daha fazla görüntü keşfetmek için listede gezinebilirsiniz.
- Detayları Keşfedin: Belirli bir görselle ilgili daha fazla bilgi veya özellik görebileceğiniz detaylı bir görünüme gitmek için herhangi bir fotoğrafa dokunun.
Proje, anlaşılması ve bakımı kolaylaştıran modüler ve temiz bir mimariyi takip eder. İşte ana dizinlerin yüksek seviyeli bir genel bakışı:
.
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/emrullaheniscetinkaya/photoapplication/
│ │ │ │ ├── dependencies/ // Hilt application setup and modules
│ │ │ │ ├── entities/ // Data models for photos
│ │ │ │ ├── services/ // API service interfaces, Retrofit client, and repository
│ │ │ │ ├── screens/ // UI composables (MainScreenCompose, PropertiesScreen)
│ │ │ │ ├── ui/ // UI related components like theme, color, type
│ │ │ │ ├── viewmodels/ // ViewModel classes for UI logic and data
│ │ │ │ └── MainActivity.kt // Main entry point of the application
│ │ │ └── res/ // Android resources (layouts, drawables, values)
│ │ └── androidTest/ // Instrumented tests
│ │ └── test/ // Unit tests
│ └── build.gradle.kts // Module-level Gradle build file
├── gradle/ // Gradle wrapper files
├── .gitignore // Git ignore rules
├── build.gradle.kts // Project-level Gradle build file
├── settings.gradle.kts // Gradle settings
├── gradlew // Gradle wrapper executable (Linux/macOS)
├── gradlew.bat // Gradle wrapper executable (Windows)
└── LICENSE // Project license file
Katkılar memnuniyetle karşılanır! İyileştirmeler, yeni özellikler veya hata düzeltmeleri için önerileriniz varsa, lütfen şu adımları izleyin:
- Depoyu Fork edin.
- Yeni bir dal Oluşturun (
git checkout -b feature/AmazingFeature). - Değişikliklerinizi Commit edin (
git commit -m 'Add some AmazingFeature'). - Dala Push edin (
git push origin feature/AmazingFeature). - Bir Pull Request Açın.
Lütfen kodunuzun standart Kotlin/Android stil yönergelerine uygun olduğundan ve uygun testleri içerdiğinden emin olun.
Bu proje MIT Lisansı altında lisanslanmıştır - ayrıntılar için LICENSE dosyasına bakın.
Emrullah Enis Çetinkaya GitHub Profili
Tarih: 2025
Eine moderne und elegante Foto-Betrachter-Anwendung, die mit Android Jetpack Compose erstellt wurde und für eine reibungslose und intuitive Benutzererfahrung konzipiert ist. Dieses Projekt demonstriert die Integration robuster Netzwerkfunktionen mit Retrofit, einer skalierbaren Architektur nach dem MVVM-Muster und einem effizienten Abhängigkeitsmanagement mit Hilt.
Diese Anwendung dient als dynamischer Foto-Betrachter, der eine Sammlung von Fotos von einer Remote-API abruft und diese in einer wunderschön gestalteten Benutzeroberfläche, die von Jetpack Compose angetrieben wird, anzeigt. Sie wurde entwickelt, um Best Practices in der Android-Entwicklung zu demonstrieren, einschließlich einer klaren Trennung der Belange, reaktiver UI-Updates und robuster Datenverarbeitung. Benutzer können eine Liste von Bildern durchsuchen und in die Details jedes Fotos eintauchen, was ein umfassendes Beispiel für eine produktionsreife Android-Anwendung bietet.
Die Anwendung integriert eine Vielzahl moderner Android-Entwicklungsfunktionen:
- Android Jetpack Compose: Deklaratives UI-Toolkit zum Erstellen nativer Android-UIs.
- Retrofit: Typensicherer HTTP-Client für Android und Java zum Konsumieren von RESTful APIs.
- MVVM (Model-View-ViewModel): Ein sauberes Architekturmuster zur Trennung von UI-Logik und Geschäftslogik.
- Singleton-Muster: Gewährleistet eine einzige Instanz kritischer Klassen zur Ressourcenoptimierung.
- Hilt: Dependency Injection-Bibliothek, die auf Dagger aufbaut, zur Vereinfachung von DI in Android-Apps.
- Navigation Compose: Verwaltet die In-App-Navigation zwischen zusammensetzbaren Zielen.
- API-Integration: Ruft Fotodaten von einer entfernten Quelle ab.
Um dieses Projekt auf Ihrem lokalen Rechner zum Laufen zu bringen, befolgen Sie diese Schritte:
- Das Repository klonen:
git clone https://github.com/Software-Guardians/AndroidJetpackComposeRetrofitPhotoViewer.git
- In Android Studio öffnen: Navigieren Sie in das geklonte Verzeichnis und öffnen Sie das Projekt in Android Studio.
- Gradle-Projekt synchronisieren:
Android Studio wird Sie automatisch auffordern, das Gradle-Projekt zu synchronisieren. Falls nicht, lösen Sie dies manuell über
File > Sync Project with Gradle Filesaus. - Erstellen und Ausführen: Wählen Sie Ihren gewünschten Emulator oder Ihr physisches Gerät aus und klicken Sie in Android Studio auf die Schaltfläche "Run" (das grüne Dreieckssymbol).
Sobald die Anwendung erfolgreich installiert und gestartet wurde:
- App starten: Die Anwendung startet auf dem Hauptbildschirm, der ein Raster oder eine Liste von Fotos anzeigt.
- Fotos ansehen: Von der konfigurierten Remote-API abgerufene Fotos füllen den Bildschirm. Sie können durch die Liste scrollen, um weitere Bilder zu entdecken.
- Details erkunden: Tippen Sie auf ein beliebiges Foto, um zu einer Detailansicht zu navigieren, in der Sie weitere Informationen oder Eigenschaften zu diesem spezifischen Bild sehen können.
Das Projekt folgt einer modularen und sauberen Architektur, die es leicht verständlich und wartbar macht. Hier ist ein Überblick über die wichtigsten Verzeichnisse:
.
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/emrullaheniscetinkaya/photoapplication/
│ │ │ │ ├── dependencies/ // Hilt-Anwendungssetup und Module
│ │ │ │ ├── entities/ // Datenmodelle für Fotos
│ │ │ │ ├── services/ // API-Dienstschnittstellen, Retrofit-Client und Repository
│ │ │ │ ├── screens/ // UI-Composables (MainScreenCompose, PropertiesScreen)
│ │ │ │ ├── ui/ // UI-bezogene Komponenten wie Theme, Farbe, Typ
│ │ │ │ ├── viewmodels/ // ViewModel-Klassen für UI-Logik und Daten
│ │ │ │ └── MainActivity.kt // Haupteinstiegspunkt der Anwendung
│ │ │ └── res/ // Android-Ressourcen (Layouts, Drawables, Werte)
│ │ └── androidTest/ // Instrumentierte Tests
│ │ └── test/ // Unit-Tests
│ └── build.gradle.kts // Modul-spezifische Gradle-Build-Datei
├── gradle/ // Gradle Wrapper-Dateien
├── .gitignore // Git-Ignore-Regeln
├── build.gradle.kts // Projekt-spezifische Gradle-Build-Datei
├── settings.gradle.kts // Gradle-Einstellungen
├── gradlew // Gradle Wrapper-ausführbare Datei (Linux/macOS)
├── gradlew.bat // Gradle Wrapper-ausführbare Datei (Windows)
└── LICENSE // Projekt-Lizenzdatei
Beiträge sind willkommen! Wenn Sie Vorschläge für Verbesserungen, neue Funktionen oder Fehlerbehebungen haben, befolgen Sie bitte diese Schritte:
- Das Repository forken.
- Einen neuen Branch erstellen (
git checkout -b feature/AmazingFeature). - Ihre Änderungen committen (
git commit -m 'Add some AmazingFeature'). - Auf den Branch pushen (
git push origin feature/AmazingFeature). - Einen Pull Request öffnen.
Bitte stellen Sie sicher, dass Ihr Code den standardmäßigen Kotlin/Android-Stilrichtlinien entspricht und entsprechende Tests enthält.
Dieses Projekt ist unter der MIT-Lizenz lizenziert – weitere Details finden Sie in der Datei LICENSE.
Emrullah Enis Çetinkaya GitHub Profile
Date: 2025