Thanks to visit codestin.com
Credit goes to github.com

Skip to content

A productivity app demonstrating complex Room Database relations (1-to-N), Hilt DI, and Jetpack Compose state management. ✅

Notifications You must be signed in to change notification settings

Hakan-kuru/TaskGenerator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Task Generator

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.

Features

  • 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

Tech Stack

Dil

  • Kotlin: Proje tamamen Kotlin ile yazılmıştır

Mimariler

  • 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

UI Framework

  • Jetpack Compose: Modern declarative UI framework
  • Material 3: Material Design 3 bileşenleri ve tema sistemi

Dependency Injection

  • Hilt: Google'ın önerdiği dependency injection kütüphanesi

Navigation

  • Jetpack Navigation Component: Compose Navigation ile ekranlar arası geçiş yönetimi

Asenkron Yapı

  • Kotlin Coroutines: Asenkron işlemler için
  • Flow: Reaktif veri akışı için (StateFlow ile UI state yönetimi)

Local Storage

  • Room Database: SQLite üzerinde çalışan modern Android veritabanı kütüphanesi
  • Room Version: 2.8.4

Diğer Kütüphaneler

  • KSP (Kotlin Symbol Processing): Room ve Hilt için annotation processing
  • KAPT: Hilt için annotation processing (KSP ile birlikte kullanılıyor)

Architecture

Proje, Clean Architecture prensiplerine uygun olarak üç ana katmana ayrılmıştır:

Presentation Layer

  • 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'i
    • Create_main_task_vm.kt: Ana görev oluşturma ViewModel'i
    • Add_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ı

Domain Layer

  • Models: İş mantığına özel domain modelleri
    • Main_task.kt: Ana görev domain modeli
    • Sub_task.kt: Alt görev domain modeli
    • Main_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'i
    • Sub_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şturma
    • Create_sub_task_useCase.kt: Alt görev oluşturma
    • Get_main_tasks_useCase.kt: Ana görevleri getirme
    • Get_main_task_with_sub_tasks_useCase.kt: Ana görev ve alt görevleri birlikte getirme
    • Update_main_task_useCase.kt: Ana görev güncelleme
    • Update_sub_task_progress_useCase.kt: Alt görev ilerleme güncelleme
    • Update_main_task_time_useCase.kt: Ana görev zaman güncelleme
    • Update_sub_task_time_useCase.kt: Alt görev zaman güncelleme
    • Toggle_main_task_done_usecase.kt: Ana görev tamamlandı durumu değiştirme
    • Delete_main_task_useCase.kt: Ana görev silme
    • Delete_sub_task_useCase.kt: Alt görev silme

Data Layer

  • Entities: Room database entity'leri
    • Main_task_entity.kt: Ana görev entity'si
    • Sub_task_entity.kt: Alt görev entity'si
    • Main_task_with_sub_tasks_entity.kt: İlişkisel entity
  • DAOs (Data Access Objects): Room database sorguları
    • Main_task_dao.kt: Ana görev DAO
    • Sub_task_dao.kt: Alt görev DAO
  • Repository Implementations: Domain repository interface'lerinin implementasyonları
    • Main_task_repository_impl.kt: Ana görev repository implementasyonu
    • Sub_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

Mimari Akış

  1. UI (Compose Screen) → ViewModel'e event gönderir
  2. ViewModel → UseCase'i çağırır
  3. UseCase → Repository interface'ini kullanır
  4. Repository Implementation → DAO veya API çağrısı yapar
  5. DAO → Room database'den veri okur/yazar
  6. Veri akışı ters yönde Flow/StateFlow ile UI'ya geri döner

Module Structure

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

Navigation & Screens

Uygulama, Jetpack Navigation Component ile tek Activity, çoklu Compose Screen yapısını kullanır.

Navigation Graph

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})

Ekranlar

1. Main Screen (Main_screen.kt)

  • 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

2. Create Main Task Screen (Create_main_task_screen.kt)

  • 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

3. Add Sub Task Screen (Add_sub_task_screen.kt)

  • 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

4. Time Tracking Screen (Time_tracking_screen.kt)

  • 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

Data Layer & APIs

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 Yapısı

Database Name: task_app.db
Version: 1

Entity'ler

Main_task_entity

  • 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)

Sub_task_entity

  • 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)

DAO İşlemleri

Main_task_dao:

  • getAllMainTasks(): Tüm ana görevleri getirir
  • getMainTaskWithId(id): ID'ye göre ana görev getirir
  • getAllMainTasksWithSubTasks(): Ana görevleri alt görevleriyle birlikte getirir
  • insertMainTask(task): Yeni ana görev ekler
  • updateMainTask(task): Ana görevi günceller
  • deleteMainTask(id): Ana görevi siler
  • toggleMainTaskDone(id): Ana görevin tamamlandı durumunu değiştirir
  • updateMainTaskTime(id, minutes): Time tipi ana görevin zamanını günceller

Sub_task_dao:

  • Benzer CRUD işlemleri alt görevler için

Local Storage

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

Veri Saklama Stratejisi

  • Ana Görevler: main_task tablosunda saklanır
  • Alt Görevler: sub_task tablosunda saklanır ve mainTaskId ile ana göreve bağlanır
  • İlişkiler: Room'un @Transaction ve @Relation annotation'ları ile ilişkisel sorgular yapılır

Permissions

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.

Getting Started

Gereksinimler

  • 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

Kurulum Adımları

  1. Projeyi Klonlayın

    git clone <repository-url>
    cd taskgenerator
  2. Android Studio'da Açın

    • Android Studio'yu açın
    • "Open an Existing Project" seçeneğini seçin
    • Proje dizinini seçin
  3. Gradle Sync

    • Android Studio otomatik olarak Gradle sync yapacaktır
    • Eğer yapmazsa, "Sync Project with Gradle Files" butonuna tıklayın
  4. 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
  5. Uygulamayı Çalıştırın

    • Bir Android cihaz veya emülatör bağlayın
    • "Run" butonuna tıklayın veya Shift + F10 tuşlarına basın

Yapılandırma

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

Build Variants

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.

Testing

Proje şu anda temel test yapısına sahiptir:

  • Test Dizinleri:
    • app/src/test/: Unit testler için
    • app/src/androidTest/: Instrumentation testler için

Test Çalıştırma

Unit Testler:

./gradlew test

Instrumentation Testler:

./gradlew connectedAndroidTest

Tüm Testler:

./gradlew check

Test Coverage

Ş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)

Known Issues & Limitations

  1. Pagination Yok: Tüm görevler tek seferde yüklenir. Çok sayıda görev olduğunda performans sorunları yaşanabilir.

  2. Arama/Filtreleme Eksik: Görevlerde arama veya gelişmiş filtreleme özelliği bulunmuyor.

  3. Görev Düzenleme Ekranı Eksik: Ana görevler için düzenleme ekranı henüz tamamlanmamış (swipe to edit sadece placeholder).

  4. Alt Görev Düzenleme Eksik: Alt görevler için düzenleme ekranı henüz implement edilmemiş.

  5. Bildirimler Yok: Bitiş tarihi yaklaşan görevler için bildirim sistemi yok.

  6. Veri Export/Import Yok: Görevleri dışa aktarma veya içe aktarma özelliği yok.

  7. Çoklu Dil Desteği Yok: Uygulama sadece Türkçe dil desteğine sahip.

  8. Tema Seçenekleri Sınırlı: Dark theme sabit olarak ayarlanmış, kullanıcı tercihi yok.

  9. Hata Mesajları Standardize Edilmemiş: Hata mesajları farklı formatlarda gösteriliyor.

  10. Unit Test Coverage Düşük: Çoğu business logic için unit test yazılmamış.

Future Improvements

  1. Pagination & Lazy Loading

    • Büyük görev listeleri için pagination eklenebilir
    • Infinite scroll veya sayfalama implementasyonu
  2. Arama & Filtreleme

    • Görev başlığına göre arama
    • Tarih aralığına göre filtreleme
    • Görev tipine göre filtreleme
  3. Görev Düzenleme

    • Ana görev düzenleme ekranı tamamlanmalı
    • Alt görev düzenleme ekranı eklenmeli
  4. Bildirim Sistemi

    • WorkManager ile zamanlanmış bildirimler
    • Bitiş tarihi yaklaşan görevler için hatırlatıcılar
  5. Veri Yedekleme & Senkronizasyon

    • Cloud backup entegrasyonu (Firebase, Google Drive)
    • Export/Import özelliği (JSON, CSV)
  6. Çoklu Dil Desteği

    • String resources'ların çevrilmesi
    • Locale yönetimi
  7. Tema Yönetimi

    • Kullanıcı tercihine göre light/dark theme seçimi
    • Özel renk paletleri
  8. İstatistikler & Raporlama

    • Tamamlanan görev istatistikleri
    • Zaman takibi raporları
    • Grafik ve görselleştirmeler
  9. Widget Desteği

    • Ana ekran widget'ı
    • Hızlı görev ekleme widget'ı
  10. Unit Test Coverage Artırma

    • ViewModel testleri
    • UseCase testleri
    • Repository testleri
    • UI testleri (Compose Testing)
  11. Error Handling İyileştirmeleri

    • Standardize edilmiş hata mesajları
    • Retry mekanizmaları
    • Offline durum yönetimi
  12. Performance Optimizasyonları

    • Database query optimizasyonları
    • Image caching (gelecekte resim desteği eklendiğinde)
    • Memory leak önleme

Lisans

Bu proje şu anda lisans bilgisi içermemektedir. Kullanım için proje sahibiyle iletişime geçin.

Katkıda Bulunma

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.

About

A productivity app demonstrating complex Room Database relations (1-to-N), Hilt DI, and Jetpack Compose state management. ✅

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages