Task Generator, kullanıcıların ana görevler ve alt görevler oluşturup takip edebileceği, modern ve kullanıcı dostu bir Android görev yönetim uygulamasıdır. Uygulama, farklı görev tiplerini destekleyerek kullanıcıların günlük aktivitelerini, çalışma hedeflerini ve projelerini organize etmelerine yardımcı olur.
Uygulama, görevleri üç farklı tipte yönetir: Tamamlandı/Tamamlanmadı (Done), Sayıya bağlı (Count - örn: 20 soru çöz) ve Zamana bağlı (Time - dakika cinsinden). Her ana görev, birden fazla alt görev içerebilir ve kullanıcılar ilerlemelerini gerçek zamanlı olarak takip edebilir. Görevler, bitiş tarihine göre "Aktif" ve "Geçmiş" olarak kategorize edilir, böylece kullanıcılar önceliklerini daha iyi yönetebilir.
Hedef kullanıcı kitlesi, görevlerini organize etmek isteyen öğrenciler, profesyoneller ve günlük aktivitelerini takip etmek isteyen bireylerdir. Temel kullanım senaryoları arasında görev oluşturma, alt görev ekleme, ilerleme takibi, zamanlayıcı kullanımı ve görev silme/düzenleme işlemleri yer alır.
-
Ana Görev Yönetimi
- Ana görev oluşturma, düzenleme ve silme
- Görev başlığı, açıklama ve bitiş tarihi belirleme
- Üç farklı görev tipi desteği (Done, Count, Time)
-
Alt Görev Yönetimi
- Ana görevlere alt görev ekleme
- Alt görevler için ilerleme takibi
- Alt görev silme ve düzenleme
-
Görev Tipleri
- Done: Tamamlandı/Tamamlanmadı kontrolü
- Count: Sayıya bağlı görevler (örn: 20 soru çöz, 5 sayfa oku)
- Time: Zamana bağlı görevler (dakika cinsinden)
-
İlerleme Takibi
- Gerçek zamanlı ilerleme çubukları
- Count tipi görevler için artır/azalt butonları
- Time tipi görevler için zamanlayıcı ekranı
-
Görev Filtreleme
- Aktif görevler (bitiş tarihi geçmemiş veya tarih belirtilmemiş)
- Geçmiş görevler (bitiş tarihi geçmiş)
-
Zamanlayıcı
- Time tipi görevler için özel zaman takip ekranı
- Gerçek zamanlı sayaç ve kalan süre gösterimi
- Oturum bazlı zaman takibi
-
Kullanıcı Arayüzü
- Modern Material 3 tasarımı
- Swipe to delete/düzenle özelliği
- Dark theme desteği
- Responsive ve kullanıcı dostu arayüz
-
Offline Destek
- Tüm veriler yerel Room veritabanında saklanır
- İnternet bağlantısı gerektirmez
- Kotlin: Proje tamamen Kotlin ile yazılmıştır
- Clean Architecture: Proje, Data, Domain ve Presentation katmanlarına ayrılmıştır
- MVVM (Model-View-ViewModel): Presentation katmanında MVVM pattern kullanılmıştır
- Jetpack Compose: Modern declarative UI framework
- Material 3: Material Design 3 bileşenleri ve tema sistemi
- Hilt: Google'ın önerdiği dependency injection kütüphanesi
- Jetpack Navigation Component: Compose Navigation ile ekranlar arası geçiş yönetimi
- Kotlin Coroutines: Asenkron işlemler için
- Flow: Reaktif veri akışı için (StateFlow ile UI state yönetimi)
- Room Database: SQLite üzerinde çalışan modern Android veritabanı kütüphanesi
- Room Version: 2.8.4
- KSP (Kotlin Symbol Processing): Room ve Hilt için annotation processing
- KAPT: Hilt için annotation processing (KSP ile birlikte kullanılıyor)
Proje, Clean Architecture prensiplerine uygun olarak üç ana katmana ayrılmıştır:
- Screens: Jetpack Compose ile oluşturulmuş UI ekranları
Main_screen.kt: Ana görev listesi ekranıCreate_main_task_screen.kt: Ana görev oluşturma ekranıAdd_sub_task_screen.kt: Alt görev ekleme ekranıTime_tracking_screen.kt: Zaman takip ekranı
- ViewModels: UI state yönetimi ve business logic koordinasyonu
Main_vm.kt: Ana ekran ViewModel'iCreate_main_task_vm.kt: Ana görev oluşturma ViewModel'iAdd_sub_task_vm.kt: Alt görev ekleme ViewModel'i
- UI Models: Presentation katmanına özel veri modelleri
- UI States: Ekranların state yapıları
- Models: İş mantığına özel domain modelleri
Main_task.kt: Ana görev domain modeliSub_task.kt: Alt görev domain modeliMain_with_sub_tasks.kt: Ana görev ve alt görevlerin birlikte temsil edildiği model
- Repositories (Interfaces): Data katmanından bağımsız repository arayüzleri
Main_repository.kt: Ana görev repository interface'iSub_repository.kt: Alt görev repository interface'i
- Use Cases: Tek bir iş mantığı işlemini temsil eden use case'ler
Create_main_task_useCase.kt: Ana görev oluşturmaCreate_sub_task_useCase.kt: Alt görev oluşturmaGet_main_tasks_useCase.kt: Ana görevleri getirmeGet_main_task_with_sub_tasks_useCase.kt: Ana görev ve alt görevleri birlikte getirmeUpdate_main_task_useCase.kt: Ana görev güncellemeUpdate_sub_task_progress_useCase.kt: Alt görev ilerleme güncellemeUpdate_main_task_time_useCase.kt: Ana görev zaman güncellemeUpdate_sub_task_time_useCase.kt: Alt görev zaman güncellemeToggle_main_task_done_usecase.kt: Ana görev tamamlandı durumu değiştirmeDelete_main_task_useCase.kt: Ana görev silmeDelete_sub_task_useCase.kt: Alt görev silme
- Entities: Room database entity'leri
Main_task_entity.kt: Ana görev entity'siSub_task_entity.kt: Alt görev entity'siMain_task_with_sub_tasks_entity.kt: İlişkisel entity
- DAOs (Data Access Objects): Room database sorguları
Main_task_dao.kt: Ana görev DAOSub_task_dao.kt: Alt görev DAO
- Repository Implementations: Domain repository interface'lerinin implementasyonları
Main_task_repository_impl.kt: Ana görev repository implementasyonuSub_task_repository_impl.kt: Alt görev repository implementasyonu
- Database: Room database tanımı
App_database.kt: Ana veritabanı sınıfı
- DI Modules: Hilt dependency injection modülleri
DatabaseModule.kt: Database ve DAO sağlayıcılarıRepositoryModule.kt: Repository binding'leri
- UI (Compose Screen) → ViewModel'e event gönderir
- ViewModel → UseCase'i çağırır
- UseCase → Repository interface'ini kullanır
- Repository Implementation → DAO veya API çağrısı yapar
- DAO → Room database'den veri okur/yazar
- Veri akışı ters yönde Flow/StateFlow ile UI'ya geri döner
Proje şu anda tek modüllü bir yapıdadır (app modülü). Tüm katmanlar (data, domain, presentation) aynı modül içinde paketler halinde organize edilmiştir:
app/
├── src/main/java/com/example/taskgenerator/
│ ├── data/ # Data katmanı
│ ├── domain/ # Domain katmanı
│ ├── presentation/ # Presentation katmanı
│ ├── utils/ # Yardımcı fonksiyonlar (Mapper'lar)
│ ├── MainActivity.kt # Ana Activity
│ ├── TaskGeneratorApp.kt # Application sınıfı
│ ├── Routes.kt # Navigation route'ları
│ └── Task_nav_rot.kt # Navigation graph
Uygulama, Jetpack Navigation Component ile tek Activity, çoklu Compose Screen yapısını kullanır.
Main Screen (Routes.MAIN)
├── Create Main Task (Routes.CREATE_MAIN_TASK)
├── Add Sub Task (Routes.ADD_SUB_TASK_ROUTE)
└── Time Tracking
├── Main Task Time (Routes.TIME_MAIN/{id})
└── Sub Task Time (Routes.TIME_SUB/{id})
- Açıklama: Ana görev listesi ekranı. Tüm ana görevler burada listelenir.
- Özellikler:
- Aktif ve Geçmiş görevler arasında tab geçişi
- Görev kartlarına tıklayarak genişletme/daraltma
- Swipe to delete/düzenle
- Alt görev paneli (seçili görevin alt görevleri)
- Yeni görev ekleme FAB butonu
- Açıklama: Yeni ana görev oluşturma ekranı.
- Özellikler:
- Başlık ve açıklama girişi
- Görev tipi seçimi (Done, Count, Time)
- Bitiş tarihi seçimi (DatePicker)
- Count/Time tipi için hedef değer girişi
- Açıklama: Ana göreve alt görev ekleme ekranı.
- Özellikler:
- Ana görev bilgisi gösterimi
- Alt görev başlık ve açıklama girişi
- Görev tipi seçimi
- Count/Time tipi için hedef değer girişi
- Açıklama: Time tipi görevler için zamanlayıcı ekranı.
- Özellikler:
- Gerçek zamanlı sayaç
- Kalan süre gösterimi (saat, dakika, saniye)
- Başlat/Durdur butonları
- İlerleme çubuğu
- Her tam dakikada otomatik kayıt
Uygulama şu anda offline-first bir yaklaşım benimser ve herhangi bir backend API kullanmaz. Tüm veriler yerel Room veritabanında saklanır.
Database Name: task_app.db
Version: 1
mainTaskId(Primary Key, AutoGenerate)title(String)description(String)taskType(String? - "done", "count", "time")isDone(Boolean)targetCount(Int? - Count/Time tipi için hedef)currentCount(Int? - Mevcut ilerleme)createdAt(Long)updatedAt(Long)
id(Primary Key, AutoGenerate)mainTaskId(Foreign Key → Main_task_entity.mainTaskId, CASCADE DELETE)title(String)description(String)taskType(String?)isDone(Boolean)targetCount(Int?)currentCount(Int?)orderInTask(Int)createdAt(Long)updatedAt(Long)
Main_task_dao:
getAllMainTasks(): Tüm ana görevleri getirirgetMainTaskWithId(id): ID'ye göre ana görev getirirgetAllMainTasksWithSubTasks(): Ana görevleri alt görevleriyle birlikte getiririnsertMainTask(task): Yeni ana görev eklerupdateMainTask(task): Ana görevi güncellerdeleteMainTask(id): Ana görevi silertoggleMainTaskDone(id): Ana görevin tamamlandı durumunu değiştirirupdateMainTaskTime(id, minutes): Time tipi ana görevin zamanını günceller
Sub_task_dao:
- Benzer CRUD işlemleri alt görevler için
Uygulama, Room Database kullanarak tüm verileri yerel olarak saklar. Bu yaklaşımın avantajları:
- Offline Çalışma: İnternet bağlantısı gerektirmez
- Hızlı Erişim: Yerel SQLite veritabanı sayesinde hızlı veri okuma/yazma
- Veri Bütünlüğü: Foreign key constraints ile veri bütünlüğü sağlanır
- Cascade Delete: Ana görev silindiğinde alt görevler otomatik silinir
- Ana Görevler:
main_tasktablosunda saklanır - Alt Görevler:
sub_tasktablosunda saklanır vemainTaskIdile ana göreve bağlanır - İlişkiler: Room'un
@Transactionve@Relationannotation'ları ile ilişkisel sorgular yapılır
Uygulama, AndroidManifest.xml dosyasında özel bir izin tanımlamaz. Standart Android izinleri yeterlidir:
- İnternet İzni: Gerekli değil (offline uygulama)
- Storage İzni: Gerekli değil (Room database uygulama özel dizininde saklanır)
- Kamera/Medya İzni: Gerekli değil
Uygulama, Android'in varsayılan izinlerini kullanır ve kullanıcıdan ek izin talep etmez.
- Android Studio: Hedgehog (2023.1.1) veya üzeri
- JDK: 11 veya üzeri
- Android SDK:
minSdk: 26 (Android 8.0 - Oreo)targetSdk: 35 (Android 15)compileSdk: 36
- Gradle: 8.10.0
- Kotlin: 2.0.21
-
Projeyi Klonlayın
git clone <repository-url> cd taskgenerator
-
Android Studio'da Açın
- Android Studio'yu açın
- "Open an Existing Project" seçeneğini seçin
- Proje dizinini seçin
-
Gradle Sync
- Android Studio otomatik olarak Gradle sync yapacaktır
- Eğer yapmazsa, "Sync Project with Gradle Files" butonuna tıklayın
-
SDK Yapılandırması
- Android Studio, gerekli SDK'ları otomatik olarak indirecektir
- Eğer sorun yaşarsanız, SDK Manager'dan Android SDK 36'yı indirin
-
Uygulamayı Çalıştırın
- Bir Android cihaz veya emülatör bağlayın
- "Run" butonuna tıklayın veya
Shift + F10tuşlarına basın
Uygulama, özel bir yapılandırma dosyası gerektirmez. Tüm ayarlar varsayılan değerlerle çalışır:
- Database: Otomatik olarak uygulama özel dizininde oluşturulur
- API Base URL: Gerekli değil (offline uygulama)
- API Keys: Gerekli değil
Proje şu anda sadece debug ve release build type'larını destekler:
- debug: Geliştirme için, ProGuard kapalı
- release: Production için, ProGuard kapalı (gelecekte açılabilir)
Farklı environment'lar (dev, staging, prod) için productFlavor tanımlanmamıştır.
Proje şu anda temel test yapısına sahiptir:
- Test Dizinleri:
app/src/test/: Unit testler içinapp/src/androidTest/: Instrumentation testler için
Unit Testler:
./gradlew testInstrumentation Testler:
./gradlew connectedAndroidTestTüm Testler:
./gradlew checkŞu anda test coverage düşüktür. Gelecekte aşağıdaki alanlar için testler eklenebilir:
- ViewModel unit testleri
- UseCase unit testleri
- Repository unit testleri
- UI testleri (Compose Testing)
-
Pagination Yok: Tüm görevler tek seferde yüklenir. Çok sayıda görev olduğunda performans sorunları yaşanabilir.
-
Arama/Filtreleme Eksik: Görevlerde arama veya gelişmiş filtreleme özelliği bulunmuyor.
-
Görev Düzenleme Ekranı Eksik: Ana görevler için düzenleme ekranı henüz tamamlanmamış (swipe to edit sadece placeholder).
-
Alt Görev Düzenleme Eksik: Alt görevler için düzenleme ekranı henüz implement edilmemiş.
-
Bildirimler Yok: Bitiş tarihi yaklaşan görevler için bildirim sistemi yok.
-
Veri Export/Import Yok: Görevleri dışa aktarma veya içe aktarma özelliği yok.
-
Çoklu Dil Desteği Yok: Uygulama sadece Türkçe dil desteğine sahip.
-
Tema Seçenekleri Sınırlı: Dark theme sabit olarak ayarlanmış, kullanıcı tercihi yok.
-
Hata Mesajları Standardize Edilmemiş: Hata mesajları farklı formatlarda gösteriliyor.
-
Unit Test Coverage Düşük: Çoğu business logic için unit test yazılmamış.
-
Pagination & Lazy Loading
- Büyük görev listeleri için pagination eklenebilir
- Infinite scroll veya sayfalama implementasyonu
-
Arama & Filtreleme
- Görev başlığına göre arama
- Tarih aralığına göre filtreleme
- Görev tipine göre filtreleme
-
Görev Düzenleme
- Ana görev düzenleme ekranı tamamlanmalı
- Alt görev düzenleme ekranı eklenmeli
-
Bildirim Sistemi
- WorkManager ile zamanlanmış bildirimler
- Bitiş tarihi yaklaşan görevler için hatırlatıcılar
-
Veri Yedekleme & Senkronizasyon
- Cloud backup entegrasyonu (Firebase, Google Drive)
- Export/Import özelliği (JSON, CSV)
-
Çoklu Dil Desteği
- String resources'ların çevrilmesi
- Locale yönetimi
-
Tema Yönetimi
- Kullanıcı tercihine göre light/dark theme seçimi
- Özel renk paletleri
-
İstatistikler & Raporlama
- Tamamlanan görev istatistikleri
- Zaman takibi raporları
- Grafik ve görselleştirmeler
-
Widget Desteği
- Ana ekran widget'ı
- Hızlı görev ekleme widget'ı
-
Unit Test Coverage Artırma
- ViewModel testleri
- UseCase testleri
- Repository testleri
- UI testleri (Compose Testing)
-
Error Handling İyileştirmeleri
- Standardize edilmiş hata mesajları
- Retry mekanizmaları
- Offline durum yönetimi
-
Performance Optimizasyonları
- Database query optimizasyonları
- Image caching (gelecekte resim desteği eklendiğinde)
- Memory leak önleme
Bu proje şu anda lisans bilgisi içermemektedir. Kullanım için proje sahibiyle iletişime geçin.
Katkılarınızı bekliyoruz! Lütfen önce bir issue açın veya mevcut issue'ları inceleyin.
Not: Bu README, projenin mevcut durumunu yansıtmaktadır. Proje geliştikçe bu dokümantasyon güncellenecektir.