forked from github/wulkanowy-mirror
Fix upcoming lesson notifications on Android 12 (#1650)
This commit is contained in:
parent
2874a7495e
commit
88b893e6c0
@ -9,6 +9,7 @@
|
|||||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||||
<uses-permission android:name="android.permission.VIBRATE" />
|
<uses-permission android:name="android.permission.VIBRATE" />
|
||||||
|
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
|
||||||
|
|
||||||
<queries>
|
<queries>
|
||||||
<intent>
|
<intent>
|
||||||
|
@ -105,7 +105,10 @@ class PreferencesRepository @Inject constructor(
|
|||||||
|
|
||||||
val isUpcomingLessonsNotificationsEnableKey =
|
val isUpcomingLessonsNotificationsEnableKey =
|
||||||
context.getString(R.string.pref_key_notifications_upcoming_lessons_enable)
|
context.getString(R.string.pref_key_notifications_upcoming_lessons_enable)
|
||||||
val isUpcomingLessonsNotificationsEnable: Boolean
|
var isUpcomingLessonsNotificationsEnable: Boolean
|
||||||
|
set(value) {
|
||||||
|
sharedPref.edit { putBoolean(isUpcomingLessonsNotificationsEnableKey, value) }
|
||||||
|
}
|
||||||
get() = getBoolean(
|
get() = getBoolean(
|
||||||
isUpcomingLessonsNotificationsEnableKey,
|
isUpcomingLessonsNotificationsEnableKey,
|
||||||
R.bool.pref_default_notification_upcoming_lessons_enable
|
R.bool.pref_default_notification_upcoming_lessons_enable
|
||||||
|
@ -5,6 +5,7 @@ import android.app.AlarmManager.RTC_WAKEUP
|
|||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.os.Build
|
||||||
import androidx.core.app.AlarmManagerCompat
|
import androidx.core.app.AlarmManagerCompat
|
||||||
import androidx.core.app.NotificationManagerCompat
|
import androidx.core.app.NotificationManagerCompat
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
@ -91,6 +92,12 @@ class TimetableNotificationSchedulerHelper @Inject constructor(
|
|||||||
return cancelScheduled(lessons, student)
|
return cancelScheduled(lessons, student)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!canScheduleExactAlarms()) {
|
||||||
|
Timber.w("Exact alarms are disabled by user")
|
||||||
|
preferencesRepository.isUpcomingLessonsNotificationsEnable = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (lessons.firstOrNull()?.date?.isAfter(LocalDate.now().plusDays(2)) == true) {
|
if (lessons.firstOrNull()?.date?.isAfter(LocalDate.now().plusDays(2)) == true) {
|
||||||
Timber.d("Timetable notification scheduling skipped - lessons are too far")
|
Timber.d("Timetable notification scheduling skipped - lessons are too far")
|
||||||
return
|
return
|
||||||
@ -169,8 +176,18 @@ class TimetableNotificationSchedulerHelper @Inject constructor(
|
|||||||
intent.getStringExtra(LESSON_TITLE)
|
intent.getStringExtra(LESSON_TITLE)
|
||||||
}, start: $time, student: $studentId"
|
}, start: $time, student: $studentId"
|
||||||
)
|
)
|
||||||
} catch (e: IllegalStateException) {
|
} catch (e: Throwable) {
|
||||||
Timber.e(e)
|
Timber.e(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun canScheduleExactAlarms(): Boolean {
|
||||||
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
|
try {
|
||||||
|
alarmManager.canScheduleExactAlarms()
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
} else true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package io.github.wulkanowy.ui.modules.settings.notifications
|
package io.github.wulkanowy.ui.modules.settings.notifications
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
@ -50,10 +51,14 @@ class NotificationsFragment : PreferenceFragmentCompat(),
|
|||||||
return appPackageName in packageNameList
|
return appPackageName in packageNameList
|
||||||
}
|
}
|
||||||
|
|
||||||
private val notificationSettingsContract =
|
private val notificationSettingsPiggybackContract =
|
||||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||||
|
presenter.onNotificationPiggybackPermissionResult()
|
||||||
|
}
|
||||||
|
|
||||||
presenter.onNotificationPermissionResult()
|
private val notificationSettingsExactAlarmsContract =
|
||||||
|
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||||
|
presenter.onNotificationExactAlarmPermissionResult()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun initView(showDebugNotificationSwitch: Boolean) {
|
override fun initView(showDebugNotificationSwitch: Boolean) {
|
||||||
@ -136,7 +141,7 @@ class NotificationsFragment : PreferenceFragmentCompat(),
|
|||||||
.setTitle(R.string.pref_notify_fix_sync_issues)
|
.setTitle(R.string.pref_notify_fix_sync_issues)
|
||||||
.setMessage(R.string.pref_notify_fix_sync_issues_message)
|
.setMessage(R.string.pref_notify_fix_sync_issues_message)
|
||||||
.setNegativeButton(android.R.string.cancel) { _, _ -> }
|
.setNegativeButton(android.R.string.cancel) { _, _ -> }
|
||||||
.setPositiveButton(R.string.pref_notify_fix_sync_issues_settings_button) { _, _ ->
|
.setPositiveButton(R.string.pref_notify_open_system_settings) { _, _ ->
|
||||||
try {
|
try {
|
||||||
AppKillerManager.doActionPowerSaving(requireContext())
|
AppKillerManager.doActionPowerSaving(requireContext())
|
||||||
AppKillerManager.doActionAutoStart(requireContext())
|
AppKillerManager.doActionAutoStart(requireContext())
|
||||||
@ -151,6 +156,7 @@ class NotificationsFragment : PreferenceFragmentCompat(),
|
|||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("InlinedApi")
|
||||||
override fun openSystemSettings() {
|
override fun openSystemSettings() {
|
||||||
val intent = if (appInfo.systemVersion >= Build.VERSION_CODES.O) {
|
val intent = if (appInfo.systemVersion >= Build.VERSION_CODES.O) {
|
||||||
Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS).apply {
|
Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS).apply {
|
||||||
@ -172,8 +178,8 @@ class NotificationsFragment : PreferenceFragmentCompat(),
|
|||||||
AlertDialog.Builder(requireContext())
|
AlertDialog.Builder(requireContext())
|
||||||
.setTitle(getString(R.string.pref_notification_piggyback_popup_title))
|
.setTitle(getString(R.string.pref_notification_piggyback_popup_title))
|
||||||
.setMessage(getString(R.string.pref_notification_piggyback_popup_description))
|
.setMessage(getString(R.string.pref_notification_piggyback_popup_description))
|
||||||
.setPositiveButton(getString(R.string.pref_notification_piggyback_popup_positive)) { _, _ ->
|
.setPositiveButton(getString(R.string.pref_notification_go_to_settings)) { _, _ ->
|
||||||
notificationSettingsContract.launch(Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"))
|
notificationSettingsPiggybackContract.launch(Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"))
|
||||||
}
|
}
|
||||||
.setNegativeButton(android.R.string.cancel) { _, _ ->
|
.setNegativeButton(android.R.string.cancel) { _, _ ->
|
||||||
setNotificationPiggybackPreferenceChecked(false)
|
setNotificationPiggybackPreferenceChecked(false)
|
||||||
@ -182,11 +188,30 @@ class NotificationsFragment : PreferenceFragmentCompat(),
|
|||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun openNotificationExactAlarmSettings() {
|
||||||
|
AlertDialog.Builder(requireContext())
|
||||||
|
.setTitle(getString(R.string.pref_notification_exact_alarm_popup_title))
|
||||||
|
.setMessage(getString(R.string.pref_notification_exact_alarm_popup_descriptions))
|
||||||
|
.setPositiveButton(getString(R.string.pref_notification_go_to_settings)) { _, _ ->
|
||||||
|
notificationSettingsExactAlarmsContract.launch(Intent("android.settings.REQUEST_SCHEDULE_EXACT_ALARM"))
|
||||||
|
}
|
||||||
|
.setNegativeButton(android.R.string.cancel) { _, _ ->
|
||||||
|
setUpcomingLessonsNotificationPreferenceChecked(false)
|
||||||
|
}
|
||||||
|
.setOnDismissListener { setUpcomingLessonsNotificationPreferenceChecked(false) }
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
override fun setNotificationPiggybackPreferenceChecked(isChecked: Boolean) {
|
override fun setNotificationPiggybackPreferenceChecked(isChecked: Boolean) {
|
||||||
findPreference<SwitchPreferenceCompat>(getString(R.string.pref_key_notifications_piggyback))?.isChecked =
|
findPreference<SwitchPreferenceCompat>(getString(R.string.pref_key_notifications_piggyback))?.isChecked =
|
||||||
isChecked
|
isChecked
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun setUpcomingLessonsNotificationPreferenceChecked(isChecked: Boolean) {
|
||||||
|
findPreference<SwitchPreferenceCompat>(getString(R.string.pref_key_notifications_upcoming_lessons_enable))?.isChecked =
|
||||||
|
isChecked
|
||||||
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
preferenceScreen.sharedPreferences.registerOnSharedPreferenceChangeListener(this)
|
preferenceScreen.sharedPreferences.registerOnSharedPreferenceChangeListener(this)
|
||||||
|
@ -45,6 +45,8 @@ class NotificationsPresenter @Inject constructor(
|
|||||||
isUpcomingLessonsNotificationsEnableKey, isUpcomingLessonsNotificationsPersistentKey -> {
|
isUpcomingLessonsNotificationsEnableKey, isUpcomingLessonsNotificationsPersistentKey -> {
|
||||||
if (!isUpcomingLessonsNotificationsEnable) {
|
if (!isUpcomingLessonsNotificationsEnable) {
|
||||||
timetableNotificationHelper.cancelNotification()
|
timetableNotificationHelper.cancelNotification()
|
||||||
|
} else if (!timetableNotificationHelper.canScheduleExactAlarms()) {
|
||||||
|
view?.openNotificationExactAlarmSettings()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
isDebugNotificationEnableKey -> {
|
isDebugNotificationEnableKey -> {
|
||||||
@ -68,12 +70,16 @@ class NotificationsPresenter @Inject constructor(
|
|||||||
view?.openSystemSettings()
|
view?.openSystemSettings()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onNotificationPermissionResult() {
|
fun onNotificationPiggybackPermissionResult() {
|
||||||
view?.run {
|
view?.run {
|
||||||
setNotificationPiggybackPreferenceChecked(isNotificationPermissionGranted)
|
setNotificationPiggybackPreferenceChecked(isNotificationPermissionGranted)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun onNotificationExactAlarmPermissionResult() {
|
||||||
|
view?.setUpcomingLessonsNotificationPreferenceChecked(timetableNotificationHelper.canScheduleExactAlarms())
|
||||||
|
}
|
||||||
|
|
||||||
private fun checkNotificationPiggybackState() {
|
private fun checkNotificationPiggybackState() {
|
||||||
if (preferencesRepository.isNotificationPiggybackEnabled) {
|
if (preferencesRepository.isNotificationPiggybackEnabled) {
|
||||||
view?.run {
|
view?.run {
|
||||||
|
@ -16,5 +16,9 @@ interface NotificationsView : BaseView {
|
|||||||
|
|
||||||
fun openNotificationPermissionDialog()
|
fun openNotificationPermissionDialog()
|
||||||
|
|
||||||
|
fun openNotificationExactAlarmSettings()
|
||||||
|
|
||||||
fun setNotificationPiggybackPreferenceChecked(isChecked: Boolean)
|
fun setNotificationPiggybackPreferenceChecked(isChecked: Boolean)
|
||||||
|
|
||||||
|
fun setUpcomingLessonsNotificationPreferenceChecked(isChecked: Boolean)
|
||||||
}
|
}
|
||||||
|
@ -678,13 +678,12 @@
|
|||||||
<string name="pref_notify_open_system_settings">Otevřít systémová nastavení upozornění</string>
|
<string name="pref_notify_open_system_settings">Otevřít systémová nastavení upozornění</string>
|
||||||
<string name="pref_notify_fix_sync_issues">Opravte problémy se synchronizací a upozorněním</string>
|
<string name="pref_notify_fix_sync_issues">Opravte problémy se synchronizací a upozorněním</string>
|
||||||
<string name="pref_notify_fix_sync_issues_message">Vaše zařízení může mít problémy se synchronizací dat as upozorněními.\n\nChcete-li je opravit, přidejte Wulkanového do funkce Autostart a vypněte optimalizaci/úsporu baterie v nastavení systému telefonu.</string>
|
<string name="pref_notify_fix_sync_issues_message">Vaše zařízení může mít problémy se synchronizací dat as upozorněními.\n\nChcete-li je opravit, přidejte Wulkanového do funkce Autostart a vypněte optimalizaci/úsporu baterie v nastavení systému telefonu.</string>
|
||||||
<string name="pref_notify_fix_sync_issues_settings_button">Přejít do nastavení</string>
|
|
||||||
<string name="pref_notify_debug_switch">Zobrazit upozornění o ladění</string>
|
<string name="pref_notify_debug_switch">Zobrazit upozornění o ladění</string>
|
||||||
<string name="pref_notify_disabled_summary">Synchronizace je vypnutá</string>
|
<string name="pref_notify_disabled_summary">Synchronizace je vypnutá</string>
|
||||||
<string name="pref_notify_notifications_piggyback">Zachytit upozornění oficiální aplikací</string>
|
<string name="pref_notify_notifications_piggyback">Zachytit upozornění oficiální aplikací</string>
|
||||||
<string name="pref_notification_piggyback_popup_title">Zachytit upozornění</string>
|
<string name="pref_notification_piggyback_popup_title">Zachytit upozornění</string>
|
||||||
<string name="pref_notification_piggyback_popup_description">S touto funkcí můžete získat náhradu push upozornění jako v oficiální aplikaci. Vše, co musíte udělat, je povolit Wulkanowému číst všechna vaše upozornění v nastaveních systému.\n\nJak to funguje?\nKdyž obdržíte oznámení v Deníčku VULCAN, Wulkanowy bude o tom informován (k tomu je to dodatečné povolení) a spustí synchronizaci, aby mohl zaslat vlastní upozornění.\n\nPOUZE PRO POKROČILÉ UŽIVATELE</string>
|
<string name="pref_notification_piggyback_popup_description">S touto funkcí můžete získat náhradu push upozornění jako v oficiální aplikaci. Vše, co musíte udělat, je povolit Wulkanowému číst všechna vaše upozornění v nastaveních systému.\n\nJak to funguje?\nKdyž obdržíte oznámení v Deníčku VULCAN, Wulkanowy bude o tom informován (k tomu je to dodatečné povolení) a spustí synchronizaci, aby mohl zaslat vlastní upozornění.\n\nPOUZE PRO POKROČILÉ UŽIVATELE</string>
|
||||||
<string name="pref_notification_piggyback_popup_positive">Přejít do nastavení</string>
|
<string name="pref_notification_go_to_settings">Přejít do nastavení</string>
|
||||||
<string name="pref_services_header">Synchronizace</string>
|
<string name="pref_services_header">Synchronizace</string>
|
||||||
<string name="pref_services_switch">Automatická aktualizace</string>
|
<string name="pref_services_switch">Automatická aktualizace</string>
|
||||||
<string name="pref_services_suspended">Pozastaveno na dovolené</string>
|
<string name="pref_services_suspended">Pozastaveno na dovolené</string>
|
||||||
|
@ -588,13 +588,12 @@
|
|||||||
<string name="pref_notify_open_system_settings">Systembenachrichtigungseinstellungen öffnen</string>
|
<string name="pref_notify_open_system_settings">Systembenachrichtigungseinstellungen öffnen</string>
|
||||||
<string name="pref_notify_fix_sync_issues">Synchronisierungs- und Benachrichtigungsprobleme reparieren</string>
|
<string name="pref_notify_fix_sync_issues">Synchronisierungs- und Benachrichtigungsprobleme reparieren</string>
|
||||||
<string name="pref_notify_fix_sync_issues_message">Ihr Gerät hat möglicherweise Probleme mit der Datensynchronisierung und Benachrichtigungen.\n\nUm diese zu reparieren, fügen Sie Wulkanowy zum Autostart hinzu und deaktivieren Sie die Batterieoptimierung in den Systemeinstellungen des Geräts.</string>
|
<string name="pref_notify_fix_sync_issues_message">Ihr Gerät hat möglicherweise Probleme mit der Datensynchronisierung und Benachrichtigungen.\n\nUm diese zu reparieren, fügen Sie Wulkanowy zum Autostart hinzu und deaktivieren Sie die Batterieoptimierung in den Systemeinstellungen des Geräts.</string>
|
||||||
<string name="pref_notify_fix_sync_issues_settings_button">Gehe zu den Einstellungen</string>
|
|
||||||
<string name="pref_notify_debug_switch">Debug-Benachrichtigungen anzeigen</string>
|
<string name="pref_notify_debug_switch">Debug-Benachrichtigungen anzeigen</string>
|
||||||
<string name="pref_notify_disabled_summary">Synchronisierung ist deaktiviert</string>
|
<string name="pref_notify_disabled_summary">Synchronisierung ist deaktiviert</string>
|
||||||
<string name="pref_notify_notifications_piggyback">Offizielle App-Benachrichtigungen erfassen</string>
|
<string name="pref_notify_notifications_piggyback">Offizielle App-Benachrichtigungen erfassen</string>
|
||||||
<string name="pref_notification_piggyback_popup_title">Benachrichtigungen erfassen</string>
|
<string name="pref_notification_piggyback_popup_title">Benachrichtigungen erfassen</string>
|
||||||
<string name="pref_notification_piggyback_popup_description">With this feature you can gain a substitute of push notifications like in the official app. All you need to do is allow Wulkanowy to receive all notifications in your system settings.\n\nHow it works?\nWhen you get a notification in Dziennik VULCAN, Wulkanowy will be notified (that\'s what these extra permissions are for) and will trigger a sync so that can send its own notification.\n\nFOR ADVANCED USERS ONLY</string>
|
<string name="pref_notification_piggyback_popup_description">With this feature you can gain a substitute of push notifications like in the official app. All you need to do is allow Wulkanowy to receive all notifications in your system settings.\n\nHow it works?\nWhen you get a notification in Dziennik VULCAN, Wulkanowy will be notified (that\'s what these extra permissions are for) and will trigger a sync so that can send its own notification.\n\nFOR ADVANCED USERS ONLY</string>
|
||||||
<string name="pref_notification_piggyback_popup_positive">Gehe zu Einstellungen</string>
|
<string name="pref_notification_go_to_settings">Gehe zu Einstellungen</string>
|
||||||
<string name="pref_services_header">Synchronisierung</string>
|
<string name="pref_services_header">Synchronisierung</string>
|
||||||
<string name="pref_services_switch">Automatische Aktualisierung</string>
|
<string name="pref_services_switch">Automatische Aktualisierung</string>
|
||||||
<string name="pref_services_suspended">An Feiertagen suspendiert</string>
|
<string name="pref_services_suspended">An Feiertagen suspendiert</string>
|
||||||
|
@ -678,13 +678,12 @@
|
|||||||
<string name="pref_notify_open_system_settings">Otwórz systemowe ustawienia powiadomień</string>
|
<string name="pref_notify_open_system_settings">Otwórz systemowe ustawienia powiadomień</string>
|
||||||
<string name="pref_notify_fix_sync_issues">Napraw problemy z synchronizacją i powiadomieniami</string>
|
<string name="pref_notify_fix_sync_issues">Napraw problemy z synchronizacją i powiadomieniami</string>
|
||||||
<string name="pref_notify_fix_sync_issues_message">Na twoim urządzeniu mogą występować problemy z synchronizacją danych i powiadomieniami.\n\nBy je naprawić, dodaj Wulkanowego do autostartu i wyłącz optymalizację/oszczędzanie baterii w ustawieniach systemowych telefonu.</string>
|
<string name="pref_notify_fix_sync_issues_message">Na twoim urządzeniu mogą występować problemy z synchronizacją danych i powiadomieniami.\n\nBy je naprawić, dodaj Wulkanowego do autostartu i wyłącz optymalizację/oszczędzanie baterii w ustawieniach systemowych telefonu.</string>
|
||||||
<string name="pref_notify_fix_sync_issues_settings_button">Przejdź do ustawień</string>
|
|
||||||
<string name="pref_notify_debug_switch">Pokazuj powiadomienia debugowania</string>
|
<string name="pref_notify_debug_switch">Pokazuj powiadomienia debugowania</string>
|
||||||
<string name="pref_notify_disabled_summary">Synchronizacja jest wyłączona</string>
|
<string name="pref_notify_disabled_summary">Synchronizacja jest wyłączona</string>
|
||||||
<string name="pref_notify_notifications_piggyback">Przechwytywanie powiadomień oficjalnej aplikacji</string>
|
<string name="pref_notify_notifications_piggyback">Przechwytywanie powiadomień oficjalnej aplikacji</string>
|
||||||
<string name="pref_notification_piggyback_popup_title">Przechwytywanie powiadomień</string>
|
<string name="pref_notification_piggyback_popup_title">Przechwytywanie powiadomień</string>
|
||||||
<string name="pref_notification_piggyback_popup_description">Dzięki tej funkcji możesz uzyskać namiastkę powiadomień push, takich jak w oficjalnej aplikacji. Wszystko, co musisz zrobić, to zezwolić Wulkanowemu na odczytywanie wszystkich powiadomień w ustawieniach systemowych.\n\nJak to działa?\nKiedy otrzymasz powiadomienie w Dzienniczku VULCAN, Wulkanowy zostanie o tym powiadomiony (do tego jest to dodatkowe uprawnienie) i uruchomi synchronizację, aby mógł wysłać własne powiadomienie.\n\nWYŁĄCZNIE DLA ZAAWANSOWANYCH UŻYTKOWNIKÓW</string>
|
<string name="pref_notification_piggyback_popup_description">Dzięki tej funkcji możesz uzyskać namiastkę powiadomień push, takich jak w oficjalnej aplikacji. Wszystko, co musisz zrobić, to zezwolić Wulkanowemu na odczytywanie wszystkich powiadomień w ustawieniach systemowych.\n\nJak to działa?\nKiedy otrzymasz powiadomienie w Dzienniczku VULCAN, Wulkanowy zostanie o tym powiadomiony (do tego jest to dodatkowe uprawnienie) i uruchomi synchronizację, aby mógł wysłać własne powiadomienie.\n\nWYŁĄCZNIE DLA ZAAWANSOWANYCH UŻYTKOWNIKÓW</string>
|
||||||
<string name="pref_notification_piggyback_popup_positive">Przejdź do ustawień</string>
|
<string name="pref_notification_go_to_settings">Przejdź do ustawień</string>
|
||||||
<string name="pref_services_header">Synchronizacja</string>
|
<string name="pref_services_header">Synchronizacja</string>
|
||||||
<string name="pref_services_switch">Automatyczna aktualizacja</string>
|
<string name="pref_services_switch">Automatyczna aktualizacja</string>
|
||||||
<string name="pref_services_suspended">Zawieszona na wakacjach</string>
|
<string name="pref_services_suspended">Zawieszona na wakacjach</string>
|
||||||
|
@ -678,13 +678,12 @@
|
|||||||
<string name="pref_notify_open_system_settings">Открыть настройки уведомлений системы</string>
|
<string name="pref_notify_open_system_settings">Открыть настройки уведомлений системы</string>
|
||||||
<string name="pref_notify_fix_sync_issues">Исправить проблемы с синхронизацией и уведомлениями</string>
|
<string name="pref_notify_fix_sync_issues">Исправить проблемы с синхронизацией и уведомлениями</string>
|
||||||
<string name="pref_notify_fix_sync_issues_message">На вашем устройстве могут быть проблемы с синхронизацией данных и уведомлениями.\n\nЧтобы их исправить, вам необходимо добавить Wulkanowy в авто-старт и выключить оптимизацию/экономию батареи в настройках устройства.</string>
|
<string name="pref_notify_fix_sync_issues_message">На вашем устройстве могут быть проблемы с синхронизацией данных и уведомлениями.\n\nЧтобы их исправить, вам необходимо добавить Wulkanowy в авто-старт и выключить оптимизацию/экономию батареи в настройках устройства.</string>
|
||||||
<string name="pref_notify_fix_sync_issues_settings_button">Перейти в настройски</string>
|
|
||||||
<string name="pref_notify_debug_switch">Показывать дебаг-уведомления</string>
|
<string name="pref_notify_debug_switch">Показывать дебаг-уведомления</string>
|
||||||
<string name="pref_notify_disabled_summary">Синхронизация отключена</string>
|
<string name="pref_notify_disabled_summary">Синхронизация отключена</string>
|
||||||
<string name="pref_notify_notifications_piggyback">Записывать официальные уведомления</string>
|
<string name="pref_notify_notifications_piggyback">Записывать официальные уведомления</string>
|
||||||
<string name="pref_notification_piggyback_popup_title">Показывать push-уведомления</string>
|
<string name="pref_notification_piggyback_popup_title">Показывать push-уведомления</string>
|
||||||
<string name="pref_notification_piggyback_popup_description">С помощью этой функции вы можете получить замену push-уведомлений, как в официальном приложении. Все, что вам нужно сделать, это разрешить Wulkanowy получать все уведомления в настройках системы.\n\nКак это работает?\nКогда вы получаете уведомление в Dziennik VULCAN, Wulkanowy будет уведомлен (это требует дополнительных прав) и запустит синхронизацию, чтобы отправить свое уведомление.\n\nТОЛЬКО ДЛЯ ПОЛЬЗОВАТЕЛЯ</string>
|
<string name="pref_notification_piggyback_popup_description">С помощью этой функции вы можете получить замену push-уведомлений, как в официальном приложении. Все, что вам нужно сделать, это разрешить Wulkanowy получать все уведомления в настройках системы.\n\nКак это работает?\nКогда вы получаете уведомление в Dziennik VULCAN, Wulkanowy будет уведомлен (это требует дополнительных прав) и запустит синхронизацию, чтобы отправить свое уведомление.\n\nТОЛЬКО ДЛЯ ПОЛЬЗОВАТЕЛЯ</string>
|
||||||
<string name="pref_notification_piggyback_popup_positive">Перейти к настройкам</string>
|
<string name="pref_notification_go_to_settings">Перейти к настройкам</string>
|
||||||
<string name="pref_services_header">Синхронизация</string>
|
<string name="pref_services_header">Синхронизация</string>
|
||||||
<string name="pref_services_switch">Автоматическая синхронизация</string>
|
<string name="pref_services_switch">Автоматическая синхронизация</string>
|
||||||
<string name="pref_services_suspended">Приостановить синхронизации во время каникул</string>
|
<string name="pref_services_suspended">Приостановить синхронизации во время каникул</string>
|
||||||
|
@ -678,13 +678,12 @@
|
|||||||
<string name="pref_notify_open_system_settings">Otvoriť systémové nastavenia upozornení</string>
|
<string name="pref_notify_open_system_settings">Otvoriť systémové nastavenia upozornení</string>
|
||||||
<string name="pref_notify_fix_sync_issues">Opravte problémy so synchronizáciou a upozornením</string>
|
<string name="pref_notify_fix_sync_issues">Opravte problémy so synchronizáciou a upozornením</string>
|
||||||
<string name="pref_notify_fix_sync_issues_message">Vaše zariadenie môže mať problémy so synchronizáciou dát as upozorneniami.\n\nAk ich chcete opraviť, pridajte Wulkanového do funkcie Autostart a vypnite optimalizáciu/úsporu batérie v nastavení systému telefóne.</string>
|
<string name="pref_notify_fix_sync_issues_message">Vaše zariadenie môže mať problémy so synchronizáciou dát as upozorneniami.\n\nAk ich chcete opraviť, pridajte Wulkanového do funkcie Autostart a vypnite optimalizáciu/úsporu batérie v nastavení systému telefóne.</string>
|
||||||
<string name="pref_notify_fix_sync_issues_settings_button">Prejsť do nastavení</string>
|
|
||||||
<string name="pref_notify_debug_switch">Zobraziť upozornenia o ladení</string>
|
<string name="pref_notify_debug_switch">Zobraziť upozornenia o ladení</string>
|
||||||
<string name="pref_notify_disabled_summary">Synchronizácia je vypnutá</string>
|
<string name="pref_notify_disabled_summary">Synchronizácia je vypnutá</string>
|
||||||
<string name="pref_notify_notifications_piggyback">Zachytiť upozornenia oficiálnej aplikácie</string>
|
<string name="pref_notify_notifications_piggyback">Zachytiť upozornenia oficiálnej aplikácie</string>
|
||||||
<string name="pref_notification_piggyback_popup_title">Zachytiť upozornenia</string>
|
<string name="pref_notification_piggyback_popup_title">Zachytiť upozornenia</string>
|
||||||
<string name="pref_notification_piggyback_popup_description">S touto funkciou môžete získať náhradu push upozornení ako v oficiálnej aplikácii. Všetko, čo musíte urobiť, je povoliť Wulkanowému čítať všetky vaše upozornenia v nastaveniach systému.\n\nAko to funguje?\nKeď dostanete oznámenie v Deníčku VULCAN, Wulkanowy bude o tom informovaný (k tomu je to dodatočné povolenie) a spustí synchronizáciu, aby mohol zaslať vlastné upozornenie.\n\nLEN PRE POKROČILÝCH POUŽĺVATEĹOV</string>
|
<string name="pref_notification_piggyback_popup_description">S touto funkciou môžete získať náhradu push upozornení ako v oficiálnej aplikácii. Všetko, čo musíte urobiť, je povoliť Wulkanowému čítať všetky vaše upozornenia v nastaveniach systému.\n\nAko to funguje?\nKeď dostanete oznámenie v Deníčku VULCAN, Wulkanowy bude o tom informovaný (k tomu je to dodatočné povolenie) a spustí synchronizáciu, aby mohol zaslať vlastné upozornenie.\n\nLEN PRE POKROČILÝCH POUŽĺVATEĹOV</string>
|
||||||
<string name="pref_notification_piggyback_popup_positive">Prejsť do nastavení</string>
|
<string name="pref_notification_go_to_settings">Prejsť do nastavení</string>
|
||||||
<string name="pref_services_header">Synchronizácia</string>
|
<string name="pref_services_header">Synchronizácia</string>
|
||||||
<string name="pref_services_switch">Automatická aktualizácia</string>
|
<string name="pref_services_switch">Automatická aktualizácia</string>
|
||||||
<string name="pref_services_suspended">Pozastavený počas dovolenky</string>
|
<string name="pref_services_suspended">Pozastavený počas dovolenky</string>
|
||||||
|
@ -678,13 +678,12 @@
|
|||||||
<string name="pref_notify_open_system_settings">Відкрити налаштування сповіщень системи</string>
|
<string name="pref_notify_open_system_settings">Відкрити налаштування сповіщень системи</string>
|
||||||
<string name="pref_notify_fix_sync_issues">Виправити помилки з синхронізацією і повідомленнями</string>
|
<string name="pref_notify_fix_sync_issues">Виправити помилки з синхронізацією і повідомленнями</string>
|
||||||
<string name="pref_notify_fix_sync_issues_message">На вашому пристрої можуть бути помилки з синхронізацією і повідомленнями\n\nЩоб виправити іх, вам необхідно додати Wulkanowy в авто-старт и вимкнути оптимізацію/экономію батареї в налаштуваннях пристрою.</string>
|
<string name="pref_notify_fix_sync_issues_message">На вашому пристрої можуть бути помилки з синхронізацією і повідомленнями\n\nЩоб виправити іх, вам необхідно додати Wulkanowy в авто-старт и вимкнути оптимізацію/экономію батареї в налаштуваннях пристрою.</string>
|
||||||
<string name="pref_notify_fix_sync_issues_settings_button">Перейти до налаштувань</string>
|
|
||||||
<string name="pref_notify_debug_switch">Показувати дебаг-повідомлення</string>
|
<string name="pref_notify_debug_switch">Показувати дебаг-повідомлення</string>
|
||||||
<string name="pref_notify_disabled_summary">Синхронізація вимкнена</string>
|
<string name="pref_notify_disabled_summary">Синхронізація вимкнена</string>
|
||||||
<string name="pref_notify_notifications_piggyback">Захоплювати офіційні сповіщення програм</string>
|
<string name="pref_notify_notifications_piggyback">Захоплювати офіційні сповіщення програм</string>
|
||||||
<string name="pref_notification_piggyback_popup_title">Показувати push-повідомлення</string>
|
<string name="pref_notification_piggyback_popup_title">Показувати push-повідомлення</string>
|
||||||
<string name="pref_notification_piggyback_popup_description">За допомогою цієї функції ви можете отримати заміну push -повідомлень, як у офіційному додатку. Все, що вам потрібно зробити, це дозволити Wulkanowy отримувати всі сповіщення у налаштуваннях вашої системи. \ N \ nЯк це працює? \ NКоли ви отримаєте сповіщення у Dziennik VULCAN, Wulkanowy отримає сповіщення (для цього призначені ці додаткові дозволи) і запустить синхронізація, яка може надсилати власне сповіщення. \ n \ n ТІЛЬКИ ДЛЯ РОЗШИРЕНИХ КОРИСТУВАЧІВ</string>
|
<string name="pref_notification_piggyback_popup_description">За допомогою цієї функції ви можете отримати заміну push -повідомлень, як у офіційному додатку. Все, що вам потрібно зробити, це дозволити Wulkanowy отримувати всі сповіщення у налаштуваннях вашої системи. \ N \ nЯк це працює? \ NКоли ви отримаєте сповіщення у Dziennik VULCAN, Wulkanowy отримає сповіщення (для цього призначені ці додаткові дозволи) і запустить синхронізація, яка може надсилати власне сповіщення. \ n \ n ТІЛЬКИ ДЛЯ РОЗШИРЕНИХ КОРИСТУВАЧІВ</string>
|
||||||
<string name="pref_notification_piggyback_popup_positive">Перейти до налаштувань</string>
|
<string name="pref_notification_go_to_settings">Перейти до налаштувань</string>
|
||||||
<string name="pref_services_header">Синхронізація</string>
|
<string name="pref_services_header">Синхронізація</string>
|
||||||
<string name="pref_services_switch">Автоматична синхронізація</string>
|
<string name="pref_services_switch">Автоматична синхронізація</string>
|
||||||
<string name="pref_services_suspended">Призупинено на час канікул</string>
|
<string name="pref_services_suspended">Призупинено на час канікул</string>
|
||||||
|
@ -667,13 +667,14 @@
|
|||||||
<string name="pref_notify_open_system_settings">Open system notification settings</string>
|
<string name="pref_notify_open_system_settings">Open system notification settings</string>
|
||||||
<string name="pref_notify_fix_sync_issues">Fix synchronization & notifications issues</string>
|
<string name="pref_notify_fix_sync_issues">Fix synchronization & notifications issues</string>
|
||||||
<string name="pref_notify_fix_sync_issues_message">Your device may have data synchronization issues and with notifications.\n\nTo fix them, you need to add Wulkanowy to the autostart and turn off battery optimization/saving in the phone settings.</string>
|
<string name="pref_notify_fix_sync_issues_message">Your device may have data synchronization issues and with notifications.\n\nTo fix them, you need to add Wulkanowy to the autostart and turn off battery optimization/saving in the phone settings.</string>
|
||||||
<string name="pref_notify_fix_sync_issues_settings_button">Go to settings</string>
|
|
||||||
<string name="pref_notify_debug_switch">Show debug notifications</string>
|
<string name="pref_notify_debug_switch">Show debug notifications</string>
|
||||||
<string name="pref_notify_disabled_summary">Synchronization is disabled</string>
|
<string name="pref_notify_disabled_summary">Synchronization is disabled</string>
|
||||||
<string name="pref_notify_notifications_piggyback">Capture official app notifications</string>
|
<string name="pref_notify_notifications_piggyback">Capture official app notifications</string>
|
||||||
<string name="pref_notification_piggyback_popup_title">Capture notifications</string>
|
<string name="pref_notification_piggyback_popup_title">Capture notifications</string>
|
||||||
<string name="pref_notification_piggyback_popup_description">With this feature you can gain a substitute of push notifications like in the official app. All you need to do is allow Wulkanowy to receive all notifications in your system settings.\n\nHow it works?\nWhen you get a notification in Dziennik VULCAN, Wulkanowy will be notified (that\'s what these extra permissions are for) and will trigger a sync so that can send its own notification.\n\nFOR ADVANCED USERS ONLY</string>
|
<string name="pref_notification_piggyback_popup_description">With this feature you can gain a substitute of push notifications like in the official app. All you need to do is allow Wulkanowy to receive all notifications in your system settings.\n\nHow it works?\nWhen you get a notification in Dziennik VULCAN, Wulkanowy will be notified (that\'s what these extra permissions are for) and will trigger a sync so that can send its own notification.\n\nFOR ADVANCED USERS ONLY</string>
|
||||||
<string name="pref_notification_piggyback_popup_positive">Go to settings</string>
|
<string name="pref_notification_exact_alarm_popup_title">Upcoming lesson notifications</string>
|
||||||
|
<string name="pref_notification_exact_alarm_popup_descriptions">You must allow the Wulkanowy app to set alarms and reminders in your system settings to use this feature.</string>
|
||||||
|
<string name="pref_notification_go_to_settings">Go to settings</string>
|
||||||
|
|
||||||
<string name="pref_services_header">Synchronization</string>
|
<string name="pref_services_header">Synchronization</string>
|
||||||
<string name="pref_services_switch">Automatic update</string>
|
<string name="pref_services_switch">Automatic update</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user