diff --git a/app/src/androidTest/java/org/tasks/preferences/PermissivePermissionChecker.kt b/app/src/androidTest/java/org/tasks/preferences/PermissivePermissionChecker.kt index 45bce8157..eb84c38bc 100644 --- a/app/src/androidTest/java/org/tasks/preferences/PermissivePermissionChecker.kt +++ b/app/src/androidTest/java/org/tasks/preferences/PermissivePermissionChecker.kt @@ -6,6 +6,8 @@ import dagger.hilt.android.qualifiers.ApplicationContext class PermissivePermissionChecker(@ApplicationContext context: Context) : PermissionChecker(context) { override fun canAccessCalendars() = true + override fun canAccessAccounts() = true + override fun canAccessForegroundLocation() = true override fun canAccessBackgroundLocation() = true diff --git a/app/src/debug/java/org/tasks/BuildSetup.kt b/app/src/debug/java/org/tasks/BuildSetup.kt index 53bd6503c..a7ceac3c8 100644 --- a/app/src/debug/java/org/tasks/BuildSetup.kt +++ b/app/src/debug/java/org/tasks/BuildSetup.kt @@ -3,6 +3,7 @@ package org.tasks import android.app.Application import android.os.StrictMode import android.os.StrictMode.VmPolicy +import com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo import com.todoroo.andlib.utility.AndroidUtilities.atLeastQ import leakcanary.AppWatcher import org.tasks.logging.FileLogger @@ -36,7 +37,9 @@ class BuildSetup @Inject constructor( .detectLeakedClosableObjects() .detectFileUriExposure() .penaltyLog() - .detectContentUriWithoutPermission() + if (atLeastOreo()) { + builder.detectContentUriWithoutPermission() + } if (atLeastQ()) { builder .detectCredentialProtectedWhileLocked() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e71ea4e76..6e5e260de 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,6 +66,7 @@ + diff --git a/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.kt b/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.kt index e47f1990b..55cf3da5c 100644 --- a/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.kt +++ b/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.kt @@ -39,14 +39,32 @@ object AndroidUtilities { return (dp * displayMetrics.density + 0.5f).toInt() } + fun preOreo(): Boolean { + return !atLeastOreo() + } + fun preS(): Boolean { return !atLeastS() } + @JvmStatic + fun preTiramisu(): Boolean { + return !atLeastTiramisu() + } + fun preUpsideDownCake(): Boolean { return Build.VERSION.SDK_INT <= VERSION_CODES.TIRAMISU } + fun atLeastNougatMR1(): Boolean { + return Build.VERSION.SDK_INT >= VERSION_CODES.N_MR1 + } + + @JvmStatic + fun atLeastOreo(): Boolean { + return Build.VERSION.SDK_INT >= VERSION_CODES.O + } + fun atLeastOreoMR1(): Boolean { return Build.VERSION.SDK_INT >= VERSION_CODES.O_MR1 } diff --git a/app/src/main/java/com/todoroo/astrid/gtasks/auth/GtasksLoginActivity.kt b/app/src/main/java/com/todoroo/astrid/gtasks/auth/GtasksLoginActivity.kt index 01a518cf6..52fa2cd22 100644 --- a/app/src/main/java/com/todoroo/astrid/gtasks/auth/GtasksLoginActivity.kt +++ b/app/src/main/java/com/todoroo/astrid/gtasks/auth/GtasksLoginActivity.kt @@ -26,6 +26,7 @@ import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS import org.tasks.dialogs.DialogBuilder import org.tasks.gtasks.GoogleAccountManager +import org.tasks.preferences.ActivityPermissionRequestor import org.tasks.preferences.PermissionRequestor import javax.inject.Inject @@ -40,11 +41,14 @@ class GtasksLoginActivity : AppCompatActivity() { @Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var googleAccountManager: GoogleAccountManager @Inject lateinit var caldavDao: CaldavDao + @Inject lateinit var permissionRequestor: ActivityPermissionRequestor @Inject lateinit var firebase: Firebase override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - chooseAccount() + if (permissionRequestor.requestAccountPermissions()) { + chooseAccount() + } } private fun chooseAccount() { diff --git a/app/src/main/java/org/tasks/ShortcutManager.kt b/app/src/main/java/org/tasks/ShortcutManager.kt index abbbe0230..e6c525a8c 100644 --- a/app/src/main/java/org/tasks/ShortcutManager.kt +++ b/app/src/main/java/org/tasks/ShortcutManager.kt @@ -2,16 +2,23 @@ package org.tasks import android.content.Context import android.content.pm.ShortcutManager +import com.todoroo.andlib.utility.AndroidUtilities import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject import javax.inject.Singleton @Singleton class ShortcutManager @Inject constructor(@ApplicationContext context: Context) { - private val shortcutManager = context.getSystemService(ShortcutManager::class.java) + private val shortcutManager: ShortcutManager? = if (AndroidUtilities.atLeastNougatMR1()) { + context.getSystemService(ShortcutManager::class.java) + } else { + null + } fun reportShortcutUsed(shortcutId: String) { - shortcutManager?.reportShortcutUsed(shortcutId) + if (AndroidUtilities.atLeastNougatMR1()) { + shortcutManager?.reportShortcutUsed(shortcutId) + } } companion object { diff --git a/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.kt b/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.kt index 758af0423..b5e3903bb 100644 --- a/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/BaseListSettingsActivity.kt @@ -8,6 +8,7 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.Paint +import android.os.Build import android.os.Bundle import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity @@ -25,7 +26,7 @@ import androidx.lifecycle.lifecycleScope import com.mikepenz.iconics.IconicsDrawable import com.mikepenz.iconics.utils.colorInt import com.mikepenz.iconics.utils.sizeDp -import com.todoroo.andlib.utility.AndroidUtilities.atLeastS +import com.todoroo.andlib.utility.AndroidUtilities import kotlinx.coroutines.launch import org.tasks.R import org.tasks.analytics.Firebase @@ -200,7 +201,7 @@ abstract class BaseListSettingsActivity : AppCompatActivity(), ColorPalettePicke protected fun createWidget() { val filter = filter ?: return val appWidgetManager = getSystemService(AppWidgetManager::class.java) - if (appWidgetManager.isRequestPinAppWidgetSupported) { + if (AndroidUtilities.atLeastOreo() && appWidgetManager.isRequestPinAppWidgetSupported) { val provider = ComponentName(this, TasksWidget::class.java) val configIntent = Intent(this, RequestPinWidgetReceiver::class.java).apply { action = RequestPinWidgetReceiver.ACTION_CONFIGURE_WIDGET @@ -211,7 +212,7 @@ abstract class BaseListSettingsActivity : AppCompatActivity(), ColorPalettePicke this, filter.hashCode(), configIntent, - if (atLeastS()) PendingIntent.FLAG_MUTABLE else PendingIntent.FLAG_UPDATE_CURRENT + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_MUTABLE else PendingIntent.FLAG_UPDATE_CURRENT ) appWidgetManager.requestPinAppWidget(provider, null, successCallback) firebase.logEvent(R.string.event_create_widget, R.string.param_type to "settings_activity") diff --git a/app/src/main/java/org/tasks/compose/edit/EditTextView.kt b/app/src/main/java/org/tasks/compose/edit/EditTextView.kt index b8a095016..1addfc91f 100644 --- a/app/src/main/java/org/tasks/compose/edit/EditTextView.kt +++ b/app/src/main/java/org/tasks/compose/edit/EditTextView.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.core.widget.addTextChangedListener +import com.todoroo.andlib.utility.AndroidUtilities import org.tasks.R import org.tasks.dialogs.Linkify import org.tasks.markdown.MarkdownProvider @@ -93,7 +94,9 @@ fun EditTextView( setBackgroundColor(context.getColor(android.R.color.transparent)) textAlignment = View.TEXT_ALIGNMENT_VIEW_START - importantForAutofill = View.IMPORTANT_FOR_AUTOFILL_NO + if (AndroidUtilities.atLeastOreo()) { + importantForAutofill = View.IMPORTANT_FOR_AUTOFILL_NO + } freezesText = true setHorizontallyScrolling(false) setHint(hint) diff --git a/app/src/main/java/org/tasks/compose/settings/AddWidgetToHomeRow.kt b/app/src/main/java/org/tasks/compose/settings/AddWidgetToHomeRow.kt index 35657b786..66ce507cb 100644 --- a/app/src/main/java/org/tasks/compose/settings/AddWidgetToHomeRow.kt +++ b/app/src/main/java/org/tasks/compose/settings/AddWidgetToHomeRow.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Home import androidx.compose.material.icons.outlined.Widgets import androidx.compose.material3.Icon import androidx.compose.material3.Text @@ -19,6 +20,9 @@ import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.core.content.pm.ShortcutManagerCompat +import com.todoroo.andlib.utility.AndroidUtilities +import com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo import org.tasks.R import org.tasks.compose.Constants import org.tasks.kmp.org.tasks.compose.settings.SettingRow @@ -28,7 +32,8 @@ import org.tasks.themes.TasksTheme fun AddWidgetToHomeRow(onClick: () -> Unit) { val context = LocalContext.current val isRequestPinAppWidgetSupported = LocalInspectionMode.current || remember { - context.getSystemService(AppWidgetManager::class.java).isRequestPinAppWidgetSupported + atLeastOreo() && + context.getSystemService(AppWidgetManager::class.java).isRequestPinAppWidgetSupported } if (isRequestPinAppWidgetSupported) { SettingRow( diff --git a/app/src/main/java/org/tasks/extensions/Context.kt b/app/src/main/java/org/tasks/extensions/Context.kt index c65da4bf2..0a22e1bc1 100644 --- a/app/src/main/java/org/tasks/extensions/Context.kt +++ b/app/src/main/java/org/tasks/extensions/Context.kt @@ -13,6 +13,7 @@ import android.content.res.Configuration import android.net.ConnectivityManager import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET import android.net.Uri +import android.os.Build import android.provider.Settings import android.text.format.DateFormat import android.view.View @@ -132,18 +133,22 @@ object Context { } fun Context.openAppNotificationSettings() { - startActivity( - Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS) - .putExtra(Settings.EXTRA_APP_PACKAGE, packageName) - ) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startActivity( + Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS) + .putExtra(Settings.EXTRA_APP_PACKAGE, packageName) + ) + } } fun Context.openChannelNotificationSettings() { - startActivity( - Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS) - .putExtra(Settings.EXTRA_APP_PACKAGE, packageName) - .putExtra(Settings.EXTRA_CHANNEL_ID, NOTIFICATION_CHANNEL_DEFAULT) - ) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startActivity( + Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS) + .putExtra(Settings.EXTRA_APP_PACKAGE, packageName) + .putExtra(Settings.EXTRA_CHANNEL_ID, NOTIFICATION_CHANNEL_DEFAULT) + ) + } } fun Context.takePersistableUriPermission( diff --git a/app/src/main/java/org/tasks/files/FileHelper.kt b/app/src/main/java/org/tasks/files/FileHelper.kt index a3330d794..537965ead 100644 --- a/app/src/main/java/org/tasks/files/FileHelper.kt +++ b/app/src/main/java/org/tasks/files/FileHelper.kt @@ -1,10 +1,12 @@ package org.tasks.files +import android.annotation.TargetApi import android.app.Activity import android.content.ContentResolver import android.content.Context import android.content.Intent import android.net.Uri +import android.os.Build import android.provider.DocumentsContract import android.provider.OpenableColumns import android.webkit.MimeTypeMap @@ -75,6 +77,7 @@ object FileHelper { fragment.startActivityForResult(intent, rc) } + @TargetApi(Build.VERSION_CODES.O) private fun setInitialUri(context: Context?, intent: Intent, uri: Uri?) { if (uri == null || uri.scheme != ContentResolver.SCHEME_CONTENT) { return diff --git a/app/src/main/java/org/tasks/gtasks/GoogleAccountManager.kt b/app/src/main/java/org/tasks/gtasks/GoogleAccountManager.kt index c0f3880e7..1a0063011 100644 --- a/app/src/main/java/org/tasks/gtasks/GoogleAccountManager.kt +++ b/app/src/main/java/org/tasks/gtasks/GoogleAccountManager.kt @@ -15,6 +15,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.tasks.R import org.tasks.Strings.isNullOrEmpty +import org.tasks.preferences.PermissionChecker import org.tasks.preferences.Preferences import timber.log.Timber import java.io.IOException @@ -22,6 +23,7 @@ import javax.inject.Inject class GoogleAccountManager @Inject constructor( @ApplicationContext context: Context?, + private val permissionChecker: PermissionChecker, private val preferences: Preferences ) { private val accountManager: AccountManager = AccountManager.get(context) @@ -30,7 +32,11 @@ class GoogleAccountManager @Inject constructor( get() = accountList.map { it.name } private val accountList: List - get() = accountManager.getAccountsByType("com.google").toList() + get() = if (permissionChecker.canAccessAccounts()) { + accountManager.getAccountsByType("com.google").toList() + } else { + emptyList() + } fun getAccount(name: String?): Account? = if (isNullOrEmpty(name)) { null diff --git a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt index c345f3133..0acc8ecbb 100644 --- a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt +++ b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt @@ -100,7 +100,8 @@ class GoogleTaskSynchronizer @Inject constructor( @Throws(IOException::class) private suspend fun synchronize(account: CaldavAccount) { - if (googleAccountManager.getAccount(account.username) == null) { + if (!permissionChecker.canAccessAccounts() + || googleAccountManager.getAccount(account.username) == null) { account.error = context.getString(R.string.cannot_access_account) return } diff --git a/app/src/main/java/org/tasks/notifications/NotificationManager.kt b/app/src/main/java/org/tasks/notifications/NotificationManager.kt index 828826530..84d5ebbf1 100644 --- a/app/src/main/java/org/tasks/notifications/NotificationManager.kt +++ b/app/src/main/java/org/tasks/notifications/NotificationManager.kt @@ -6,6 +6,7 @@ import android.content.Context import android.content.Intent import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat.InterruptionFilter +import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities.preUpsideDownCake import com.todoroo.astrid.utility.Constants import dagger.hilt.android.qualifiers.ApplicationContext @@ -214,6 +215,16 @@ class NotificationManager @Inject constructor( if (preUpsideDownCake()) { builder.setLocalOnly(!preferences.getBoolean(R.string.p_wearable_notifications, true)) } + if (AndroidUtilities.preOreo()) { + if (alert) { + builder + .setSound(preferences.ringtone) + .setPriority(NotificationCompat.PRIORITY_HIGH) + .setDefaults(preferences.notificationDefaults) + } else { + builder.setDefaults(0).setTicker(null) + } + } val notification = builder.build() var ringTimes = if (fiveTimes) 5 else 1 if (alert && nonstop) { diff --git a/app/src/main/java/org/tasks/preferences/PermissionChecker.java b/app/src/main/java/org/tasks/preferences/PermissionChecker.java index daa79af25..4afdbb8dc 100644 --- a/app/src/main/java/org/tasks/preferences/PermissionChecker.java +++ b/app/src/main/java/org/tasks/preferences/PermissionChecker.java @@ -1,5 +1,6 @@ package org.tasks.preferences; +import static com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastQ; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastTiramisu; import static java.util.Arrays.asList; @@ -29,6 +30,10 @@ public class PermissionChecker { return checkPermissions(permission.READ_CALENDAR, permission.WRITE_CALENDAR); } + public boolean canAccessAccounts() { + return atLeastOreo() || checkPermissions(permission.GET_ACCOUNTS); + } + public boolean canAccessForegroundLocation() { return checkPermissions(permission.ACCESS_FINE_LOCATION); } diff --git a/app/src/main/java/org/tasks/preferences/PermissionRequestor.java b/app/src/main/java/org/tasks/preferences/PermissionRequestor.java index 645be9ab4..2f8ba9a27 100644 --- a/app/src/main/java/org/tasks/preferences/PermissionRequestor.java +++ b/app/src/main/java/org/tasks/preferences/PermissionRequestor.java @@ -17,6 +17,14 @@ public abstract class PermissionRequestor { this.permissionChecker = permissionChecker; } + public boolean requestAccountPermissions() { + if (permissionChecker.canAccessAccounts()) { + return true; + } + requestPermissions(REQUEST_GOOGLE_ACCOUNTS, permission.GET_ACCOUNTS); + return false; + } + public boolean requestForegroundLocation() { if (permissionChecker.canAccessForegroundLocation()) { return true; diff --git a/app/src/main/java/org/tasks/preferences/Preferences.kt b/app/src/main/java/org/tasks/preferences/Preferences.kt index 019cead4c..061433813 100644 --- a/app/src/main/java/org/tasks/preferences/Preferences.kt +++ b/app/src/main/java/org/tasks/preferences/Preferences.kt @@ -145,6 +145,12 @@ class Preferences @JvmOverloads constructor( return defaultCalendar != null && defaultCalendar != "-1" && defaultCalendar != "0" } + val ringtone: Uri? + get() = getRingtone( + R.string.p_rmd_ringtone, + RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) + ) + val completionSound: Uri? get() = getRingtone( R.string.p_completion_ringtone, @@ -433,6 +439,18 @@ class Preferences @JvmOverloads constructor( Binder.getCallingUid(), Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)) + val notificationDefaults: Int + get() { + var result = 0 + if (getBoolean(R.string.p_rmd_vibrate, true)) { + result = result or NotificationCompat.DEFAULT_VIBRATE + } + if (getBoolean(R.string.p_led_notification, true)) { + result = result or NotificationCompat.DEFAULT_LIGHTS + } + return result + } + fun remove(resId: Int) { val editor = prefs.edit() editor.remove(context.getString(resId)) diff --git a/app/src/main/java/org/tasks/preferences/fragments/Backups.kt b/app/src/main/java/org/tasks/preferences/fragments/Backups.kt index 4d056c13c..4c463abb8 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Backups.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Backups.kt @@ -34,6 +34,7 @@ private const val FRAG_TAG_IMPORT_TASKS = "frag_tag_import_tasks" class Backups : InjectingPreferenceFragment() { @Inject lateinit var preferences: Preferences + @Inject lateinit var permissionRequestor: FragmentPermissionRequestor private val viewModel: PreferencesViewModel by activityViewModels() @@ -246,10 +247,12 @@ class Backups : InjectingPreferenceFragment() { } private fun requestGoogleDriveLogin() { - startActivityForResult( - Intent(context, DriveLoginActivity::class.java), - REQUEST_DRIVE_BACKUP - ) + if (permissionRequestor.requestAccountPermissions()) { + startActivityForResult( + Intent(context, DriveLoginActivity::class.java), + REQUEST_DRIVE_BACKUP + ) + } } private fun updateBackupDirectory() { diff --git a/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt b/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt index 9285dc0e3..4e04d22f7 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt @@ -61,6 +61,7 @@ class Notifications : InjectingPreferenceFragment() { ) rescheduleNotificationsOnChange(true, R.string.p_bundle_notifications) + initializeRingtonePreference() initializeCompletionSoundPreference() initializeTimePreference(getDefaultRemindTimePreference()!!, REQUEST_DEFAULT_REMIND) initializeTimePreference(getQuietStartPreference()!!, REQUEST_QUIET_START) @@ -139,6 +140,13 @@ class Notifications : InjectingPreferenceFragment() { openUrl(R.string.troubleshooting, R.string.url_notifications) + requires(AndroidUtilities.atLeastOreo(), R.string.more_settings) + requires( + AndroidUtilities.preOreo(), + R.string.p_rmd_ringtone, + R.string.p_rmd_vibrate, + R.string.p_led_notification + ) requires( AndroidUtilities.preUpsideDownCake(), R.string.p_rmd_persistent, @@ -191,6 +199,7 @@ class Notifications : InjectingPreferenceFragment() { override fun onPreferenceTreeClick(preference: Preference): Boolean = when (preference.key) { + getString(R.string.p_rmd_ringtone), getString(R.string.p_completion_ringtone) -> { val intent = Intent(RingtoneManager.ACTION_RINGTONE_PICKER) intent.putExtra( @@ -224,7 +233,11 @@ class Notifications : InjectingPreferenceFragment() { } startActivityForResult( intent, - REQUEST_CODE_COMPLETION_SOUND + if (preference.key == getString(R.string.p_rmd_ringtone)) { + REQUEST_CODE_ALERT_RINGTONE + } else { + REQUEST_CODE_COMPLETION_SOUND + } ) true } @@ -254,6 +267,12 @@ class Notifications : InjectingPreferenceFragment() { } } + private fun initializeRingtonePreference() = + initializeRingtonePreference( + R.string.p_rmd_ringtone, + R.string.silent, + ) + private fun initializeCompletionSoundPreference() = initializeRingtonePreference( R.string.p_completion_ringtone, @@ -291,6 +310,16 @@ class Notifications : InjectingPreferenceFragment() { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { when (requestCode) { + REQUEST_CODE_ALERT_RINGTONE -> if (resultCode == RESULT_OK && data != null) { + val ringtone: Uri? = + data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) + if (ringtone != null) { + preferences.setString(R.string.p_rmd_ringtone, ringtone.toString()) + } else { + preferences.setString(R.string.p_rmd_ringtone, "") + } + initializeRingtonePreference() + } REQUEST_CODE_COMPLETION_SOUND -> if (resultCode == RESULT_OK && data != null) { val ringtone: Uri? = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) @@ -325,6 +354,7 @@ class Notifications : InjectingPreferenceFragment() { private const val REQUEST_QUIET_START = 10001 private const val REQUEST_QUIET_END = 10002 private const val REQUEST_DEFAULT_REMIND = 10003 + private const val REQUEST_CODE_ALERT_RINGTONE = 10005 private const val REQUEST_CODE_TTS_CHECK = 10006 private const val REQUEST_CODE_COMPLETION_SOUND = 10007 } diff --git a/app/src/main/java/org/tasks/scheduling/NotificationSchedulerIntentService.kt b/app/src/main/java/org/tasks/scheduling/NotificationSchedulerIntentService.kt index 38c0cf10d..2ed083961 100644 --- a/app/src/main/java/org/tasks/scheduling/NotificationSchedulerIntentService.kt +++ b/app/src/main/java/org/tasks/scheduling/NotificationSchedulerIntentService.kt @@ -1,8 +1,11 @@ package org.tasks.scheduling +import android.annotation.TargetApi import android.app.NotificationChannel import android.content.Context import android.content.Intent +import android.os.Build +import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities.preS import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.qualifiers.ApplicationContext @@ -28,25 +31,28 @@ class NotificationSchedulerIntentService : InjectingJobIntentService() { } private fun createNotificationChannels() { - val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager - notificationManager.createNotificationChannel( - createNotificationChannel(NotificationManager.NOTIFICATION_CHANNEL_DEFAULT, R.string.notifications, true)) - notificationManager.createNotificationChannel( - createNotificationChannel(NotificationManager.NOTIFICATION_CHANNEL_TASKER, R.string.tasker_locale, true)) - notificationManager.createNotificationChannel( - createNotificationChannel( - NotificationManager.NOTIFICATION_CHANNEL_TIMERS, R.string.TEA_timer_controls, true)) - if (preS()) { + if (AndroidUtilities.atLeastOreo()) { + val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager notificationManager.createNotificationChannel( - createNotificationChannel( - NotificationManager.NOTIFICATION_CHANNEL_MISCELLANEOUS, - R.string.miscellaneous, - false + createNotificationChannel(NotificationManager.NOTIFICATION_CHANNEL_DEFAULT, R.string.notifications, true)) + notificationManager.createNotificationChannel( + createNotificationChannel(NotificationManager.NOTIFICATION_CHANNEL_TASKER, R.string.tasker_locale, true)) + notificationManager.createNotificationChannel( + createNotificationChannel( + NotificationManager.NOTIFICATION_CHANNEL_TIMERS, R.string.TEA_timer_controls, true)) + if (preS()) { + notificationManager.createNotificationChannel( + createNotificationChannel( + NotificationManager.NOTIFICATION_CHANNEL_MISCELLANEOUS, + R.string.miscellaneous, + false + ) ) - ) + } } } + @TargetApi(Build.VERSION_CODES.O) private fun createNotificationChannel( channelId: String, nameResId: Int, alert: Boolean): NotificationChannel { val channelName = context.getString(nameResId) diff --git a/app/src/main/java/org/tasks/themes/ThemeColor.java b/app/src/main/java/org/tasks/themes/ThemeColor.java index 04c5802bc..dee81edec 100644 --- a/app/src/main/java/org/tasks/themes/ThemeColor.java +++ b/app/src/main/java/org/tasks/themes/ThemeColor.java @@ -1,15 +1,18 @@ package org.tasks.themes; +import static com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo; import static org.tasks.kmp.org.tasks.themes.ColorProvider.WHITE; import static org.tasks.themes.ColorUtilsKt.calculateContrast; import android.app.Activity; import android.content.Context; +import android.os.Build.VERSION_CODES; import android.os.Parcel; import android.os.Parcelable; import android.view.View; import androidx.annotation.ColorInt; +import androidx.annotation.RequiresApi; import androidx.core.os.ParcelCompat; import org.tasks.R; @@ -188,11 +191,14 @@ public class ThemeColor implements Pickable { public void applyToNavigationBar(Activity activity) { activity.getWindow().setNavigationBarColor(getPrimaryColor()); - View decorView = activity.getWindow().getDecorView(); - int systemUiVisibility = applyLightNavigationBar(decorView.getSystemUiVisibility()); - decorView.setSystemUiVisibility(systemUiVisibility); + if (atLeastOreo()) { + View decorView = activity.getWindow().getDecorView(); + int systemUiVisibility = applyLightNavigationBar(decorView.getSystemUiVisibility()); + decorView.setSystemUiVisibility(systemUiVisibility); + } } + @RequiresApi(api = VERSION_CODES.O) private int applyLightNavigationBar(int flag) { return isDark ? flag | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 87a25eb25..6b0bbff31 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -94,6 +94,9 @@ إظهار الرأس إظهار الإعدادات إشعارات + الصمت + صوت + إهتزازات الساعات الهادئة مفعّل حجم الخط @@ -144,6 +147,7 @@ القائمة الافتراضية اضف المهام الجديدة لاعلى القائمة أضف حساب + إشعار LED عرض الإشعارات على الساعة الذكية توليد الإخطارات ادمج عدة إشعارات في شعار واحد @@ -531,6 +535,7 @@ أعده %s حزمة الاشعارات أزل المهام المتممة؟ + مطلوب دعم الأجهزة أعد تشغيل التطبيق ليأخذ هذا التغيير تأثيره عتمة التذييل عتمة العنوان diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 6eb9a9674..eb7959e1e 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -220,6 +220,9 @@ Заглавка Настройки Известия + Безшумен + Звук + Вибрации Тихи часове Папка за прикачени файлове Папка за резервни копия @@ -295,6 +298,8 @@ Рестартиране По-късно Локализация + Известия с LED + Необходима е апаратна поддръжка Настройки на приспособления Настройки на заглавката Настройки на реда diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index ec986156f..a55b1e173 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -88,6 +88,7 @@ Mostra completades Idioma Localització + Led de notificació Recolzades %1$s de %2$s. El fitxer %1$s contenia %2$s. \n @@ -347,6 +348,8 @@ Es necessiten els permisos de ubicació per trobar la teva ubicació actual Noves tasques a sobre Ajuda + Silenci + Vibracions Llista Mostra la descripció Llicències de tercers @@ -385,6 +388,7 @@ després de 24 hores immediatament Proper dm + So Valora Tasks Etiquetes Demà pel matí @@ -485,6 +489,7 @@ Tema Icona del llançador Negre + Es requereix suport per al maquinari Preferències del giny Color Icona diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 4918e5991..5c50ac073 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -129,6 +129,9 @@ Zobrazit záhlaví Zobrazit nastavení Oznámení + Tichý + Zvuk + Vibrace Období nerušení Složka pro zálohy Různé @@ -311,6 +314,8 @@ Zadejte adresu serveru Musí začínat na http(s):// Ikona na domovské obrazovce + LED upozornění + Je vyžadována hardwarová podpora Nastavení záhlaví Nastavení řádku Smazat splněné úkoly\? diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 461d23315..76a85fb53 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -243,6 +243,8 @@ Rækkeindstillinger Header-indstillinger Widget-indstillinger + Skal understøttes af hardware + LED-påmindelse Oversættelse Senere Genstart nu @@ -316,6 +318,9 @@ Google Drev-backup Mappe til sikkerhedskopi Mappe til vedhæftninger + Vibrér + Lyd + Lydløs Meddelelser Vis afgrænsninger Vis menu diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 8e5a894bc..983979511 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -213,6 +213,9 @@ Kopfleiste anzeigen Einstellungen anzeigen Benachrichtigungen + Ohne Ton + Ton + Vibration Ruhezeit Ordner für Anhänge Sicherungsordner @@ -285,6 +288,8 @@ Jetzt neustarten Später Übersetzung + Benachrichtigungs-LED + Hardware-Unterstützung benötigt Widget-Einstellungen Kopfleisteneinstellungen Zeileneinstellungen diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 29a727948..00820928f 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -4,6 +4,7 @@ Pritaksi Tasks Helpi traduki Tipara grando + Sono Sciigoj Vidigi menuon Vidigi agordojn @@ -255,6 +256,8 @@ Diversaj Dosierujo de savkopioj Silentaj horoj + Vibradoj + Silenta Vidigi titolon Sekva sab Sekva ven @@ -444,6 +447,7 @@ Tagoj Foti + Bezonas aparataran subtenon Neniam Unuigi multajn sciigojn kiel unu Helpo @@ -601,6 +605,7 @@ Butono reen konservas taskon Restartigu Tasks por efikigi ĉi tiun ŝanĝon Restartigi tuj + LED sciigo Fin-al-fina ĉifrada sinkronigo AVERTO: Dosieroj situas en %s estos forigitaj se Tasks malinstaliĝos! Bonvolu elekti propran lokon por malpermesi ke Android forigos viajn dosierojn. Tasko finita diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 2b4143f07..004b06565 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -234,6 +234,9 @@ Mostrar cabecera Mostrar configuración Notificaciones + Silencioso + Sonido + Vibraciones Horario silencioso Carpeta de datos adjuntos Carpeta de copias de seguridad @@ -307,6 +310,8 @@ Reiniciar ahora Más tarde Configuración regional + Notificación de LED + Se necesita compatibilidad de hárdwer Configuración de widget Configuración de cabecera Configuración de fila diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index e9f4b969b..32f312427 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -125,6 +125,9 @@ Näita päist Näita seadistusi Teavitused + Vaikne + Heli + Vibra Vaiksed tunnid Manuste kaust Varukoopia kaust @@ -191,6 +194,8 @@ Keel Taaskäivita kohe Hiljem + LED-teavitused + Riistvara tugi on nõutud Vidina seadistused Päise seadistused Rea seadistused diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 1785ac596..41aa426c1 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -221,6 +221,9 @@ Erakutsi goiburua Erakutsi ezarpenak Jakinarazpenak + Isila + Soinua + Bibrazioak Isilune orduak Eranskinen karpeta Babes-kopien karpeta @@ -296,6 +299,8 @@ Berrabiarazi orain Geroago Lokalizazioa + LED jakinarazpena + Hardwareak onartzea ezinbestekoa Trepetaren ezarpenak Goiburuaren ezarpenak Errenkadaren ezarpenak diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 4c7f5c9d0..c4d4d49fb 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -139,6 +139,9 @@ نمایش سربرگ نمایش تنظیمات اعلان ها + سکوت + صدا + لرزش ها ساعات سکوت پوشه پیوست پشتیبان گیری از پوشه diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 8da091712..f7056a13a 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -208,6 +208,9 @@ Näytä otsikot Näytä asetukset Ilmoitukset + Äänetön + Ääni + Värinä Hiljainen aika Liitehakemisto Varmuuskopioiden hakemisto @@ -272,6 +275,8 @@ Käynnistä uudelleen nyt Myöhemmin Paikallistaminen + LED muistutus + Laitetuki vaaditaan Widgetin asetukset Otsikon asetukset Rivin asetukset diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 82386b59c..5e3e3a97b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -221,6 +221,8 @@ Afficher les cases à cocher Afficher l\'en-tête Afficher les paramètres + Silencieux + Son Heures de repos Dossier des pièces jointes Dossier de sauvegarde @@ -294,6 +296,8 @@ Redémarrer maintenant Plus tard Localisation + Notification de la LED + Support matériel requis Paramètres du widget Paramètres de l\'en-tête Paramètres de la ligne @@ -392,6 +396,7 @@ %d minutes Notifications + Vibrations %s m Étiquettes Badges diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 70f746b7a..ef0b86a4f 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -151,6 +151,9 @@ Amosar encabezado Amosar configuracións Notificacións + Silencioso + Son + Vibracións Horario silencioso Cartafol de anexos Cartafol de copias de seguranza @@ -215,6 +218,8 @@ Reiniciar ahora Máis tarde Localización + Notificación LED + Precísase de soporte con hardware Configuración de widgets Configuración de cabeceiras Configuración de filas diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index ebc0ce8ef..472877ef7 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -324,6 +324,8 @@ Otvori popis Postavke redaka Postavke zaglavlja + Podrška za hardver je obavezna + LED obavijest Lokalizacija Kasnije Pokreni ponovo @@ -396,6 +398,9 @@ Mapa sigurnosnih kopija Mapa priloga Vrijeme neobavještavanja + Vibracije + Zvuk + Stišano Pokaži rastavljače Pokaži izbornik Pokaži naslov diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index a0defeedb..31f517096 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -215,6 +215,9 @@ Fejléc megjelenítése Beállítások megjelenítése Értesítések + Csendes + Hang + Rezgés Csendes órák Csatolmányok mappája Mentési mappa @@ -289,6 +292,8 @@ Újraindítás most Később Lokalizáció + LED értesítés + Hardveres támogatás szükséges Widget beállításai Fejléc beállításai Sorok beállíátsai diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index c93e21876..ee276cbb9 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -159,6 +159,7 @@ Tampilkan tajuk Tampilkan pengaturan Notifikasi + Getar Direktori isi lampiran Direktori cadangan Cadangan Google Drive @@ -228,6 +229,8 @@ Mulai ulang sekarang Nanti Pelokalan bahasa + Notifikasi LED + Dukungan perangkat keras diperlukan Pengaturan wisaya Pengaturan tajuk Pengaturan baris @@ -384,6 +387,8 @@ Nilai Tasks Jarak spasi Jam Tenang + Suara + Diamkan Tampilkan menu Menambahkan tugas Jatuh tempo pada… diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index b1f63b93a..6cfa7dabf 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -230,6 +230,9 @@ Mostra intestazione Mostra impostazioni Notifiche + Silenzioso + Suono + Vibrazioni Ore di quiete Cartella degli allegati Cartella di backup @@ -304,6 +307,8 @@ Riavvia ora Dopo Localizzazione + LED di notifica + È richiesto il supporto hardware Impostazioni widget Impostazioni intestazione Impostazioni riga diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 1b3ffe199..edbf70da2 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -251,6 +251,9 @@ הצג כותרת הצג הגדרות התראות + שקט + שמע + רטט שעות שקטות תיקיית קבצים מצורפים תיקיית גיבוי @@ -326,6 +329,8 @@ אתחל כעת מאוחר יותר לוקאליזציה + תאורת התראות + נדרשת חומרה תואמת הגדרות ווידג\'ט הגדרות כותרת הגדרות שורה diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index fe41abd94..5bd7cc2f8 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -217,6 +217,9 @@ ヘッダーを表示 設定を表示 通知 + サイレント + サウンド + 振動 おやすみモード 添付フォルダー フォルダーをバックアップ @@ -291,6 +294,8 @@ 今すぐ再起動 あとで ローカライズ + LED 通知 + ハードウェア サポートが必要です ウィジェット設定 ヘッダー設定 行設定 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 69c894fe2..022af3efc 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -215,6 +215,9 @@ 헤더 표시 설정버튼 표시 알림 + 무음 + 소리 + 진동 무음 시간 첨부파일 위치 백업 위치 @@ -288,6 +291,8 @@ 지금 재시작하기 나중에 현지화 + LED 알림 + 하드웨어 지원을 필요로 합니다 위젯 설정 헤더 설정 줄 설정 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index d3edb7f54..5026ecd29 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -240,6 +240,9 @@ Rodyti antraštę Rodyti nustatymus Pranešimai + Tyla + Garsas + Vibracijos Tylusis metas Pridedamo failo aplankas Atsarginių kopijų aplankas @@ -314,6 +317,8 @@ Perkrauti dabar Vėliau Lokalizacija + LED pranešimai + Reikalingas techninės įrangos palaikymas Valdiklio nustatymai Antraščių nustatymai Eilutės nustatymai diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 074a7f445..6500540ee 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -107,6 +107,7 @@ Vis avkryssingsbokser Vis innstillinger Varsler + Vibrering Radmellomrom Kildekode Kontakt utvikler @@ -122,6 +123,7 @@ Restart nå Senere Lokalisering + LED-varsel Batterioptimalisering kan føre til forsinkede varsler Samle varsler Gjentas %s @@ -254,6 +256,8 @@ stoppet arbeid med dette gjøremålet: La til gjøremål Vis hode + Stille + Lyd Stilletimer Vedleggsmappe Sikkerhetskopimappe @@ -314,6 +318,7 @@ Mørk Bakgrunnsbilde Dag/natt + Maskinvarestøtte kreves Miniprogramsinnstillinger Hodeinnstillinger Radinnstillinger diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index ede7807a7..f60963cb1 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -68,6 +68,7 @@ सेटिङहरू देखाउनुहोस् शीर्षक देखाउनुहोस् मेनु देखाउनुहोस् + आवाज श्रोत कोड विकासकर्तालाई सम्पर्क गर्नुहोस् मेरा कार्यहरू diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index f259e1ac6..91b2bdcbb 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -214,6 +214,9 @@ Koptekst tonen Instellingen tonen Meldingen + Stil + Geluid + Trillingen Rusttijd Map voor bijlagen Backup naar Google Drive @@ -284,6 +287,8 @@ Start Tasks opnieuw om wijzigingen door te voeren Herstart nu Localisatie + LED melding + Hardware ondersteuning vereist Widget instellingen Koptekst instellingen Regel instellingen diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index e5bfda515..1fa2e2c75 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -150,6 +150,7 @@ ଭାଷା ସିଷ୍ଟମ୍ ଡିଫଲ୍ଟ ପରେ + LED ଵିଜ୍ଞପ୍ତି ଆଖ୍ୟା ପରେ ଆଖ୍ୟା ତଳେ ପ୍ରତି ମିନିଟ୍ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 608442b43..3a1f76afa 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -230,6 +230,9 @@ Pokaż nagłówek Pokaż ustawienia Powiadomienia + Cichy + Dźwięk + Wibracje Ciche godziny Katalog załączników Katalog kopii zapasowych @@ -304,6 +307,8 @@ Zrestartuj teraz Póżniej Ustawienia regionalne + Powiadomienie LED + Wymagane wsparcie sprzętowe Ustawienie widgetu Ustawienia nagłówka Ustawienia rzędu diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 83944da7e..503ebf1ce 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -228,6 +228,9 @@ Mostrar cabeçalho Mostrar configurações Notificações + Silencioso + Som + Vibrações Horas de silêncio Pasta de anexo Pasta de backup @@ -302,6 +305,8 @@ Reiniciar agora Depois Localização + LED de notificações + Suporte de hardware necessário Configurações de Widget Configurações do cabeçalho Configurações de linhas diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 550be71a5..3115027ad 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -210,6 +210,9 @@ Mostrar cabeçalho Mostrar configurações Notificações + Silêncio + Som + Vibrações Horas de silêncio Pasta de anexo Pasta de cópias de segurança @@ -274,6 +277,7 @@ Reiniciar agora Mais tarde Tradução + Notificação no LED Definições do widget Definições de cabeçalho Definições de linhas @@ -366,6 +370,7 @@ Palavra-passe Utilizador Adicionar conta + É necessário que o dispositivo tenha esta funcionalidade Ícone do lançador Deve iniciar com http(s):// É necessário o nome do host diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 6630833f5..9066100a7 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -147,6 +147,8 @@ Setări de rânduri Setări de antet Setări Widget + Suport hardware necesar + Notificare cu LED-uri Localizare Mai târziu Repornește acum @@ -236,6 +238,9 @@ Dosar de rezervă Fișier atașat Ore de liniște + Vibrații + Sunet + Tăcut Notificări Afișează separatoarele Afișează meniul diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 29bda1bdc..8c28775fc 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -231,6 +231,9 @@ Показать заголовок Показать настройки Уведомления + Без звука + Звук + Вибрация Тихие часы Папка вложений Папка резервных копий @@ -306,6 +309,8 @@ Перезапустить сейчас Позже Локализация + LED уведомления + Необходима аппаратная поддержка Настройки виджета Настройки заголовка Настройки строк diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index 297933ad8..45410413f 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -172,6 +172,8 @@ ලැයිස්තුව විවෘත කරන්න පේළි සැකසුම් ශීර්ෂ සැකසුම් + දෘඩාංග සහාය අවශ්‍යයි + LED දැනුම්දීම ප්‍රාදේශීයකරණය පසුව නැවත ආරම්භ කරන්න @@ -592,6 +594,9 @@ උපස්ථ ෆෝල්ඩරය ඇමුණුම් ෆෝල්ඩරය නිහඬ පැය + කම්පන + ශබ්දය + නිහඬ දැනුම්දීම් බෙදුම්තීරු පෙන්වන්න මෙනුව පෙන්වන්න diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 9e23ff6ab..dbf7bcffd 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -236,6 +236,9 @@ Zobrazovať záhlavia Zobraziť nastavenia Oznámenia + Tichý + Zvuk + Vibrácie Čas ticha Priečinok pre prílohy Priečinok so zálohami @@ -309,6 +312,8 @@ Reštartovať teraz Neskôr Preklad + LED oznámenia + Vyžaduje sa podpora zariadenia Widget - nastavenia Nastavenie záhlavia Nastavenie riadka diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index a8c10d1ea..2e7ac2618 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -15,6 +15,7 @@ %s (završeno) Nasumice posetnik Obriši zadatak + Vibracije Kontaktiraj razvojni tim Oceni Task Bez podsetnika u mirnim satima diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index a1eabf909..e11cbf363 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -145,6 +145,9 @@ Visa rubrik Visa ikon för inställningar Aviseringar + Tyst + Ljud + Vibrationer Tyst period Lagringsplats för bilagor Säkerhetskopieringsmapp @@ -206,6 +209,8 @@ Starta om nu Senare Språk + LED Notifiering + Hårdvarustöd krävs Inställningar för widget Rensa bort slutförda uppgifter? Ring diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index dfcaccc28..d45496181 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -288,6 +288,8 @@ வரிசை அமைப்புகள் தலைப்பு அமைப்புகள் விட்ஜெட் அமைப்புகள் + வன்பொருள் ஆதரவு தேவை + LED அறிவிப்பு உள்ளூர்மயமாக்கல் பின்னர் இப்போது மறுதொடக்கம் செய்யுங்கள் @@ -370,6 +372,9 @@ காப்பு கோப்புறை இணைப்பு கோப்புறை அமைதியான நேரம் + அதிர்வுகள் + ஒலி + அமைதியாக அறிவிப்புகள் வகுப்புகளைக் காட்டு மெனுவைக் காட்டு diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index f3fb740d0..a740f6cf8 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -266,6 +266,8 @@ การตั้งค่าแถว การตั้งค่าส่วนหัว การตั้งค่าวิดเจ็ต + ต้องการการสนับสนุนฮาร์ดแวร์ + การแจ้งเตือน LED แปล หลัง เริ่มการทํางานใหม่เดี๋ยวนี้ @@ -346,6 +348,9 @@ โฟลเดอร์สำรอง โฟลเดอร์สิ่งที่แนบมา ชั่วโมงเงียบ + การสั่นสะเทือน + เสียง + เงียบ แจ้ง เตือน แสดงวงเวียน แสดงเมนู diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml index 45aecb009..9afa4cd96 100644 --- a/app/src/main/res/values-tl/strings.xml +++ b/app/src/main/res/values-tl/strings.xml @@ -40,6 +40,7 @@ mga taon Tanggalin gawain + Mga taginting Pinagmulang code Umambag ng pagsasalin Kontakin ang developer diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 1fb44bedd..d7a4e66c7 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -216,6 +216,9 @@ Üstü göster Ayarları göster Bildirimler + Sessiz + Ses + Titreşimler Sessiz saatler Ek klasörü Yedekleme klasörü @@ -290,6 +293,8 @@ Şimdi yeniden başlat Sonra Yerelleştirme + LED bildirimi + Donanım desteği gerekiyor Widget ayarları Başlık ayarları Satır ayarları diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index a7b8d0731..ea7f3e27f 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -231,6 +231,9 @@ Показати заголовок Показати налаштування Сповіщення + Безшумно + Звук + Вібрації Тихі години Тека з прикріпленими файлами Тека з резервними копіями @@ -306,6 +309,8 @@ Перезапустити зараз Пізніше Локалізація + LED-сповіщення + Потрібна підтримка апартних засобів Налаштування віджету Налаштування заголовку Налаштування рядку diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index de474c477..e3455c7c1 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -286,6 +286,9 @@ بیک اپ فولڈر اٹیچ منٹ فولڈر خاموش گھنٹے + تھرتھراہٹ + آواز + خاموش نوٹیفیکیشنز ڈیوائیڈر دکھائیں مینیو دکھائیں @@ -315,6 +318,8 @@ قطار کی سیٹنگ ہیڈر کی سیٹنگ ویجٹ سیٹنگ + ہارڈ وئیر سپورٹ درکار ہے + ایل ای ڈی نوٹیفیکیشن لوکلائزیشن بعد میں ابھی ری سٹارٹ کریں diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 1af347a6c..67194a376 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -317,6 +317,8 @@ Cài đặt hàng Cài đặt tiêu đề Cài đặt tiện ích + Yêu cầu sự hỗ trợ của phần cứng + Thông báo LED Ngôn ngữ Để sau Khởi động lại ngay @@ -407,6 +409,9 @@ Thư mục sao lưu Thư mục tệp đính kèm Giờ im lặng + Rung + Âm thanh + Im lặng Thông báo Hiện đường chia tách Hiện menu diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1eada7492..2f4eb2ac9 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -205,6 +205,9 @@ 显示标题 显示设置 通知 + 静音 + 铃声 + 振动 静音时间 附件文件夹 备份文件夹 @@ -276,6 +279,8 @@ 马上重启 稍后 本地化 + LED 提醒 + 需要硬件支持 插件设置 标题设置 行设置 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 324baa846..1bb99038a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -123,6 +123,8 @@ 顯示標頭 顯示設定 通知 + 鈴聲 + 震動 備份資料夾 雜項設定 啟用 @@ -232,6 +234,7 @@ Google 雲端硬碟備份 附件資料夾 靜音時間 + 靜音 顯示分隔線 顯示清單 已新增的任務 @@ -422,6 +425,8 @@ 行設定 標頭設定 小工具設定 + 需要硬體支援 + LED 通知 在地化 系統預設 日/夜 diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index d890de343..7dd9c763c 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -85,7 +85,11 @@ 1440 + + notif_vibrate + + notification_ringtone completion_ringtone @@ -315,6 +319,7 @@ theme_color theme_launcher language + led_notificatiWCAon widget-id- widget-theme-v2- diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dd1b3fa9b..1f34a65b2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -297,6 +297,9 @@ File %1$s contained %2$s.\n\n Show menu Show dividers Notifications + Silent + Sound + Vibrations Quiet hours Quiet hours are in effect Attachment folder @@ -396,6 +399,8 @@ File %1$s contained %2$s.\n\n Restart now Later Localization + LED notification + Hardware support required Widget settings Header settings Row settings diff --git a/app/src/main/res/xml/preferences_notifications.xml b/app/src/main/res/xml/preferences_notifications.xml index 57292585b..9c73c2824 100644 --- a/app/src/main/res/xml/preferences_notifications.xml +++ b/app/src/main/res/xml/preferences_notifications.xml @@ -43,6 +43,22 @@ android:summary="@string/bundle_notifications_summary" android:title="@string/bundle_notifications" /> + + + + + + - + + android:shortcutShortLabel="@string/action_new_task" + tools:targetApi="n_mr1">