/* Copyright 2018 Conny Duck * * This file is a part of Tusky. * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU General Public License as published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * You should have received a copy of the GNU General Public License along with Tusky; if not, * see . */ package com.keylesspalace.tusky.components.preference import android.os.Bundle import androidx.preference.PreferenceFragmentCompat import com.keylesspalace.tusky.R import com.keylesspalace.tusky.components.notifications.NotificationHelper import com.keylesspalace.tusky.db.AccountEntity import com.keylesspalace.tusky.db.AccountManager import com.keylesspalace.tusky.di.Injectable import com.keylesspalace.tusky.settings.PrefKeys import com.keylesspalace.tusky.settings.makePreferenceScreen import com.keylesspalace.tusky.settings.preferenceCategory import com.keylesspalace.tusky.settings.switchPreference import javax.inject.Inject class NotificationPreferencesFragment : PreferenceFragmentCompat(), Injectable { @Inject lateinit var accountManager: AccountManager override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { val activeAccount = accountManager.activeAccount ?: return val context = requireContext() makePreferenceScreen { switchPreference { setTitle(R.string.pref_title_notifications_enabled) key = PrefKeys.NOTIFICATIONS_ENABLED isIconSpaceReserved = false isChecked = activeAccount.notificationsEnabled setOnPreferenceChangeListener { _, newValue -> updateAccount { it.notificationsEnabled = newValue as Boolean } if (NotificationHelper.areNotificationsEnabled(context, accountManager)) { NotificationHelper.enablePullNotifications(context) } else { NotificationHelper.disablePullNotifications(context) } true } } preferenceCategory(R.string.pref_title_notification_filters) { category -> category.dependency = PrefKeys.NOTIFICATIONS_ENABLED category.isIconSpaceReserved = false switchPreference { setTitle(R.string.pref_title_notification_filter_follows) key = PrefKeys.NOTIFICATIONS_FILTER_FOLLOWS isIconSpaceReserved = false isChecked = activeAccount.notificationsFollowed setOnPreferenceChangeListener { _, newValue -> updateAccount { it.notificationsFollowed = newValue as Boolean } true } } switchPreference { setTitle(R.string.pref_title_notification_filter_follow_requests) key = PrefKeys.NOTIFICATION_FILTER_FOLLOW_REQUESTS isIconSpaceReserved = false isChecked = activeAccount.notificationsFollowRequested setOnPreferenceChangeListener { _, newValue -> updateAccount { it.notificationsFollowRequested = newValue as Boolean } true } } switchPreference { setTitle(R.string.pref_title_notification_filter_reblogs) key = PrefKeys.NOTIFICATION_FILTER_REBLOGS isIconSpaceReserved = false isChecked = activeAccount.notificationsReblogged setOnPreferenceChangeListener { _, newValue -> updateAccount { it.notificationsReblogged = newValue as Boolean } true } } switchPreference { setTitle(R.string.pref_title_notification_filter_favourites) key = PrefKeys.NOTIFICATION_FILTER_FAVS isIconSpaceReserved = false isChecked = activeAccount.notificationsFavorited setOnPreferenceChangeListener { _, newValue -> updateAccount { it.notificationsFavorited = newValue as Boolean } true } } switchPreference { setTitle(R.string.pref_title_notification_filter_poll) key = PrefKeys.NOTIFICATION_FILTER_POLLS isIconSpaceReserved = false isChecked = activeAccount.notificationsPolls setOnPreferenceChangeListener { _, newValue -> updateAccount { it.notificationsPolls = newValue as Boolean } true } } switchPreference { setTitle(R.string.pref_title_notification_filter_subscriptions) key = PrefKeys.NOTIFICATION_FILTER_SUBSCRIPTIONS isIconSpaceReserved = false isChecked = activeAccount.notificationsSubscriptions setOnPreferenceChangeListener { _, newValue -> updateAccount { it.notificationsSubscriptions = newValue as Boolean } true } } } preferenceCategory(R.string.pref_title_notification_alerts) { category -> category.dependency = PrefKeys.NOTIFICATIONS_ENABLED category.isIconSpaceReserved = false switchPreference { setTitle(R.string.pref_title_notification_alert_sound) key = PrefKeys.NOTIFICATION_ALERT_SOUND isIconSpaceReserved = false isChecked = activeAccount.notificationSound setOnPreferenceChangeListener { _, newValue -> updateAccount { it.notificationSound = newValue as Boolean } true } } switchPreference { setTitle(R.string.pref_title_notification_alert_vibrate) key = PrefKeys.NOTIFICATION_ALERT_VIBRATE isIconSpaceReserved = false isChecked = activeAccount.notificationVibration setOnPreferenceChangeListener { _, newValue -> updateAccount { it.notificationVibration = newValue as Boolean } true } } switchPreference { setTitle(R.string.pref_title_notification_alert_light) key = PrefKeys.NOTIFICATION_ALERT_LIGHT isIconSpaceReserved = false isChecked = activeAccount.notificationLight setOnPreferenceChangeListener { _, newValue -> updateAccount { it.notificationLight = newValue as Boolean } true } } } } } private inline fun updateAccount(changer: (AccountEntity) -> Unit) { accountManager.activeAccount?.let { account -> changer(account) accountManager.saveAccount(account) } } companion object { fun newInstance(): NotificationPreferencesFragment { return NotificationPreferencesFragment() } } }