📖 Przegląd

Moduł Notifications umożliwia zarządzanie powiadomieniami lokalnymi: tworzenie kanałów, natychmiastowe wyświetlanie oraz planowanie z WorkManager.

Szybki przykład
// Utwórz kanał
ADict.Notifications.createChannel("promo", "Promocje")

// Pokaż natychmiast
ADict.Notifications.show(
    id = 1,
    title = "Nowa oferta!",
    body = "Sprawdź naszą promocję",
    channelId = "promo"
)

// Zaplanuj na później
ADict.Notifications.schedule(
    id = "reminder_24h",
    title = "Wróć do nas!",
    body = "Mamy coś nowego",
    delayMs = 24 * 60 * 60 * 1000L
)

📢 Kanały

createChannel(channelId, channelName, description?, importance?)

Utwórz kanał powiadomień (wymagane na Android 8+).

deleteChannel(channelId: String)

Usuń kanał.

Konfiguracja kanałów
// Domyślny kanał tworzony automatycznie
// Własne kanały:

ADict.Notifications.createChannel(
    channelId = "promo",
    channelName = "Promocje i oferty",
    description = "Powiadomienia o promocjach",
    importance = NotificationManager.IMPORTANCE_DEFAULT
)

ADict.Notifications.createChannel(
    channelId = "urgent",
    channelName = "Ważne powiadomienia",
    importance = NotificationManager.IMPORTANCE_HIGH
)

ADict.Notifications.createChannel(
    channelId = "silent",
    channelName = "Ciche aktualizacje",
    importance = NotificationManager.IMPORTANCE_LOW
)

📲 Natychmiastowe powiadomienia

show(id, title, body, channelId?, smallIcon?, autoCancel?, priority?, intentClass?, extras?)

Pokaż powiadomienie natychmiast.

Pokazywanie powiadomień
// Proste powiadomienie
ADict.Notifications.show(
    id = 1,
    title = "Witaj!",
    body = "Dziękujemy za korzystanie z aplikacji"
)

// Z akcją kliknięcia
ADict.Notifications.show(
    id = 2,
    title = "Nowa wiadomość",
    body = "Masz nową wiadomość od Jana",
    channelId = "messages",
    intentClass = ChatActivity::class.java,
    extras = mapOf("chat_id" to "123")
)

// Wysokie priorytety
ADict.Notifications.show(
    id = 3,
    title = "Zamówienie wysłane!",
    body = "Twoje zamówienie jest w drodze",
    priority = NotificationCompat.PRIORITY_HIGH
)

⏰ Planowanie powiadomień

schedule(id, title, body, delayMs, channelId?, smallIcon?, intentClass?, extras?)

Zaplanuj powiadomienie na później (WorkManager).

scheduleRepeating(id, title, body, intervalMs, channelId?, ...)

Zaplanuj powtarzające się powiadomienie.

cancel(id: String)

Anuluj zaplanowane powiadomienie.

cancelAll()

Anuluj wszystkie zaplanowane.

Planowanie
// Za 24 godziny
ADict.Notifications.schedule(
    id = "comeback_24h",
    title = "Tęsknimy za Tobą!",
    body = "Wróć i sprawdź nowości",
    delayMs = 24 * 60 * 60 * 1000L
)

// Za 7 dni
ADict.Notifications.schedule(
    id = "weekly_reminder",
    title = "Cotygodniowe podsumowanie",
    body = "Zobacz swoje statystyki",
    delayMs = 7 * 24 * 60 * 60 * 1000L,
    intentClass = StatsActivity::class.java
)

// Codzienne przypomnienie (powtarzające się)
ADict.Notifications.scheduleRepeating(
    id = "daily_tip",
    title = "Porada dnia",
    body = "Sprawdź nową poradę!",
    intervalMs = 24 * 60 * 60 * 1000L
)

// Anulowanie
ADict.Notifications.cancel("comeback_24h")
ADict.Notifications.cancelAll()

🔧 Builder

Użycie Buildera
val notification = ADict.Notifications.Builder("promo_123")
    .title("Specjalna oferta!")
    .body("50% zniżki tylko dziś")
    .channelId("promo")
    .priority(NotificationCompat.PRIORITY_HIGH)
    .onClick(PromoActivity::class.java)
    .extras(mapOf("promo_code" to "SAVE50"))
    .build()

ADict.Notifications.show(notification)

🔐 Uprawnienia

hasNotificationPermission(): Boolean

Sprawdź czy aplikacja ma uprawnienie do powiadomień.

⚠️ Android 13+: Wymagane uprawnienie POST_NOTIFICATIONS. Dodaj do manifestu i poproś użytkownika o zgodę.
Sprawdzanie uprawnień
// W Activity
if (!ADict.Notifications.hasNotificationPermission()) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
    }
}