diff --git a/app/src/androidTest/java/org/tasks/preferences/PermissivePermissionChecker.kt b/app/src/androidTest/java/org/tasks/preferences/PermissivePermissionChecker.kt
index 31de1bea7..a24cc0398 100644
--- a/app/src/androidTest/java/org/tasks/preferences/PermissivePermissionChecker.kt
+++ b/app/src/androidTest/java/org/tasks/preferences/PermissivePermissionChecker.kt
@@ -8,7 +8,9 @@ class PermissivePermissionChecker(@ApplicationContext context: Context) : Permis
override fun canAccessAccounts() = true
- override fun canAccessLocation() = true
+ override fun canAccessForegroundLocation() = true
+
+ override fun canAccessBackgroundLocation() = true
override fun canAccessMic() = true
}
\ No newline at end of file
diff --git a/app/src/googleplay/java/org/tasks/location/GeofenceApi.kt b/app/src/googleplay/java/org/tasks/location/GeofenceApi.kt
index b262e4511..bbc46c5cf 100644
--- a/app/src/googleplay/java/org/tasks/location/GeofenceApi.kt
+++ b/app/src/googleplay/java/org/tasks/location/GeofenceApi.kt
@@ -28,7 +28,7 @@ class GeofenceApi @Inject constructor(
@SuppressLint("MissingPermission")
suspend fun update(place: Place?) {
- if (place == null || !permissionChecker.canAccessLocation()) {
+ if (place == null || !permissionChecker.canAccessBackgroundLocation()) {
return
}
val client = LocationServices.getGeofencingClient(context)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f5cd60844..0d8cdcb23 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -85,6 +85,12 @@
+
+
+
+
+
+
= Build.VERSION_CODES.Q;
}
+ public static boolean atLeastR() {
+ return VERSION.SDK_INT >= VERSION_CODES.R;
+ }
+
public static void assertMainThread() {
if (BuildConfig.DEBUG && !isMainThread()) {
throw new IllegalStateException("Should be called from main thread");
diff --git a/app/src/main/java/org/tasks/dialogs/GeofenceDialog.java b/app/src/main/java/org/tasks/dialogs/GeofenceDialog.java
index e82feb849..9af6785ce 100644
--- a/app/src/main/java/org/tasks/dialogs/GeofenceDialog.java
+++ b/app/src/main/java/org/tasks/dialogs/GeofenceDialog.java
@@ -69,9 +69,8 @@ public class GeofenceDialog extends DialogFragment {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.location_details, null);
ButterKnife.bind(this, view);
- boolean hasLocationPermission = permissionChecker.canAccessLocation();
- arrivalView.setChecked(hasLocationPermission && geofence.isArrival());
- departureView.setChecked(hasLocationPermission && geofence.isDeparture());
+ arrivalView.setChecked(geofence.isArrival());
+ departureView.setChecked(geofence.isDeparture());
slider.setLabelFormatter(
value -> getString(R.string.location_radius_meters, locale.formatNumber(value)));
slider.setValueTo(MAX_RADIUS);
@@ -119,7 +118,7 @@ public class GeofenceDialog extends DialogFragment {
public void onResume() {
super.onResume();
- if (!permissionChecker.canAccessLocation()) {
+ if (!permissionChecker.canAccessBackgroundLocation()) {
dismiss();
}
}
diff --git a/app/src/main/java/org/tasks/extensions/ContextExtensions.kt b/app/src/main/java/org/tasks/extensions/ContextExtensions.kt
index acaf696f5..34a1195b3 100644
--- a/app/src/main/java/org/tasks/extensions/ContextExtensions.kt
+++ b/app/src/main/java/org/tasks/extensions/ContextExtensions.kt
@@ -25,6 +25,6 @@ fun Fragment.safeStartActivityForResult(intent: Intent, rc: Int) {
private fun toast(context: Context?) {
context?.let {
- Toast.makeText(it, R.string.no_application_found, Toast.LENGTH_LONG).show()
+ Toast.makeText(it, R.string.no_app_found, Toast.LENGTH_LONG).show()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/location/LocationPermissionDialog.kt b/app/src/main/java/org/tasks/location/LocationPermissionDialog.kt
new file mode 100644
index 000000000..82f42c475
--- /dev/null
+++ b/app/src/main/java/org/tasks/location/LocationPermissionDialog.kt
@@ -0,0 +1,101 @@
+package org.tasks.location
+
+import android.app.Activity.RESULT_OK
+import android.app.Dialog
+import android.content.Intent
+import android.net.Uri
+import android.os.Bundle
+import android.provider.Settings
+import android.view.View
+import androidx.fragment.app.DialogFragment
+import androidx.fragment.app.Fragment
+import com.todoroo.andlib.utility.AndroidUtilities.atLeastR
+import dagger.hilt.android.AndroidEntryPoint
+import org.tasks.BuildConfig
+import org.tasks.PermissionUtil.verifyPermissions
+import org.tasks.R
+import org.tasks.databinding.DialogLocationPermissionsBinding
+import org.tasks.dialogs.DialogBuilder
+import org.tasks.preferences.FragmentPermissionRequestor
+import org.tasks.preferences.PermissionChecker
+import org.tasks.preferences.PermissionRequestor.REQUEST_BACKGROUND_LOCATION
+import timber.log.Timber
+import javax.inject.Inject
+
+@AndroidEntryPoint
+class LocationPermissionDialog : DialogFragment() {
+
+ @Inject lateinit var dialogBuilder: DialogBuilder
+ @Inject lateinit var permissionChecker: PermissionChecker
+ @Inject lateinit var permissionRequestor: FragmentPermissionRequestor
+
+ lateinit var binding: DialogLocationPermissionsBinding
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ binding = DialogLocationPermissionsBinding.inflate(layoutInflater)
+
+ if (atLeastR()) {
+ binding.foregroundLocation.visibility = View.VISIBLE
+ }
+
+ binding.foregroundLocation.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ permissionRequestor.requestForegroundLocation()
+ }
+ }
+
+ binding.backgroundLocation.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ permissionRequestor.requestBackgroundLocation()
+ }
+ }
+
+ return dialogBuilder.newDialog(R.string.missing_permissions)
+ .setView(binding.root)
+ .setNegativeButton(android.R.string.cancel) { _, _ ->
+ dismiss()
+ }
+ .setNeutralButton(R.string.TLA_menu_settings) { _, _ ->
+ startActivity(Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
+ addCategory(Intent.CATEGORY_DEFAULT)
+ data = Uri.parse("package:${BuildConfig.APPLICATION_ID}")
+ })
+ }
+ .show()
+ }
+
+ override fun onResume() {
+ super.onResume()
+
+ if (atLeastR()) {
+ binding.foregroundLocation.isChecked = permissionChecker.canAccessForegroundLocation()
+ binding.foregroundLocation.isClickable = !binding.foregroundLocation.isChecked
+ binding.backgroundLocation.isEnabled = binding.foregroundLocation.isChecked
+ }
+ binding.backgroundLocation.isChecked = permissionChecker.canAccessBackgroundLocation()
+ }
+
+ override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
+ Timber.d("onRequestPermissionResult(requestCode = $requestCode, permissions = [${permissions.joinToString()}], grantResults = [${grantResults.joinToString()}])")
+ when(requestCode) {
+ REQUEST_BACKGROUND_LOCATION -> {
+ if (verifyPermissions(grantResults)) {
+ targetFragment?.onActivityResult(targetRequestCode, RESULT_OK, null)
+ dismiss()
+ }
+ }
+ else -> super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ }
+ }
+
+ companion object {
+ fun newLocationPermissionDialog(
+ targetFragment: Fragment,
+ rc: Int
+ ): LocationPermissionDialog {
+ val dialog = LocationPermissionDialog()
+ dialog.setTargetFragment(targetFragment, rc)
+ return dialog
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/location/LocationPickerActivity.kt b/app/src/main/java/org/tasks/location/LocationPickerActivity.kt
index e9c110fc9..576db8ba2 100644
--- a/app/src/main/java/org/tasks/location/LocationPickerActivity.kt
+++ b/app/src/main/java/org/tasks/location/LocationPickerActivity.kt
@@ -184,12 +184,12 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC
override fun onMapReady(mapFragment: MapFragment) {
map = mapFragment
updateMarkers()
- if (permissionChecker.canAccessLocation()) {
+ if (permissionChecker.canAccessForegroundLocation()) {
mapFragment.showMyLocation()
}
if (mapPosition != null) {
map.movePosition(mapPosition, false)
- } else if (permissionRequestor.requestFineLocation()) {
+ } else if (permissionChecker.canAccessForegroundLocation()) {
moveToCurrentLocation(false)
}
}
@@ -215,14 +215,14 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC
@OnClick(R.id.current_location)
fun onClick() {
- if (permissionRequestor.requestFineLocation()) {
+ if (permissionRequestor.requestForegroundLocation()) {
moveToCurrentLocation(true)
}
}
override fun onRequestPermissionsResult(
requestCode: Int, permissions: Array, grantResults: IntArray) {
- if (requestCode == PermissionRequestor.REQUEST_LOCATION) {
+ if (requestCode == PermissionRequestor.REQUEST_FOREGROUND_LOCATION) {
if (verifyPermissions(grantResults)) {
map.showMyLocation()
moveToCurrentLocation(true)
diff --git a/app/src/main/java/org/tasks/preferences/PermissionChecker.java b/app/src/main/java/org/tasks/preferences/PermissionChecker.java
index 7f630e16b..d5e90cdb6 100644
--- a/app/src/main/java/org/tasks/preferences/PermissionChecker.java
+++ b/app/src/main/java/org/tasks/preferences/PermissionChecker.java
@@ -27,10 +27,14 @@ public class PermissionChecker {
return atLeastOreo() || checkPermissions(permission.GET_ACCOUNTS);
}
- public boolean canAccessLocation() {
+ public boolean canAccessForegroundLocation() {
+ return checkPermissions(permission.ACCESS_FINE_LOCATION);
+ }
+
+ public boolean canAccessBackgroundLocation() {
return atLeastQ()
- ? checkPermissions(permission.ACCESS_FINE_LOCATION, permission.ACCESS_BACKGROUND_LOCATION)
- : checkPermissions(permission.ACCESS_FINE_LOCATION);
+ ? canAccessForegroundLocation() && checkPermissions(permission.ACCESS_BACKGROUND_LOCATION)
+ : canAccessForegroundLocation();
}
public boolean canAccessMic() {
diff --git a/app/src/main/java/org/tasks/preferences/PermissionRequestor.java b/app/src/main/java/org/tasks/preferences/PermissionRequestor.java
index 8a64d2dd3..645344cb1 100644
--- a/app/src/main/java/org/tasks/preferences/PermissionRequestor.java
+++ b/app/src/main/java/org/tasks/preferences/PermissionRequestor.java
@@ -1,6 +1,7 @@
package org.tasks.preferences;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastQ;
+import static com.todoroo.andlib.utility.AndroidUtilities.atLeastR;
import android.Manifest.permission;
@@ -9,7 +10,8 @@ public abstract class PermissionRequestor {
public static final int REQUEST_CALENDAR = 51;
public static final int REQUEST_MIC = 52;
public static final int REQUEST_GOOGLE_ACCOUNTS = 53;
- public static final int REQUEST_LOCATION = 54;
+ public static final int REQUEST_BACKGROUND_LOCATION = 54;
+ public static final int REQUEST_FOREGROUND_LOCATION = 55;
private final PermissionChecker permissionChecker;
@@ -43,15 +45,28 @@ public abstract class PermissionRequestor {
return false;
}
- public boolean requestFineLocation() {
- if (permissionChecker.canAccessLocation()) {
+ public boolean requestForegroundLocation() {
+ if (permissionChecker.canAccessForegroundLocation()) {
return true;
}
- if (atLeastQ()) {
+ requestPermissions(REQUEST_FOREGROUND_LOCATION, permission.ACCESS_FINE_LOCATION);
+ return false;
+ }
+
+ public boolean requestBackgroundLocation() {
+ if (permissionChecker.canAccessBackgroundLocation()) {
+ return true;
+ }
+ if (atLeastR()) {
+ if (requestForegroundLocation()) {
+ requestPermissions(REQUEST_BACKGROUND_LOCATION, permission.ACCESS_BACKGROUND_LOCATION);
+ }
+ } else if (atLeastQ()) {
requestPermissions(
- REQUEST_LOCATION, permission.ACCESS_FINE_LOCATION, permission.ACCESS_BACKGROUND_LOCATION);
+ REQUEST_BACKGROUND_LOCATION,
+ permission.ACCESS_FINE_LOCATION, permission.ACCESS_BACKGROUND_LOCATION);
} else {
- requestPermissions(REQUEST_LOCATION, permission.ACCESS_FINE_LOCATION);
+ requestPermissions(REQUEST_BACKGROUND_LOCATION, permission.ACCESS_FINE_LOCATION);
}
return false;
}
diff --git a/app/src/main/java/org/tasks/ui/LocationControlSet.kt b/app/src/main/java/org/tasks/ui/LocationControlSet.kt
index b010043f3..f86228b2f 100644
--- a/app/src/main/java/org/tasks/ui/LocationControlSet.kt
+++ b/app/src/main/java/org/tasks/ui/LocationControlSet.kt
@@ -3,7 +3,6 @@ package org.tasks.ui
import android.app.Activity
import android.content.Intent
import android.net.Uri
-import android.os.Bundle
import android.os.Parcelable
import android.text.SpannableString
import android.text.Spanned
@@ -15,7 +14,6 @@ import androidx.core.util.Pair
import butterknife.BindView
import butterknife.OnClick
import dagger.hilt.android.AndroidEntryPoint
-import org.tasks.PermissionUtil.verifyPermissions
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.Geofence
@@ -23,8 +21,12 @@ import org.tasks.data.Location
import org.tasks.data.Place
import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.GeofenceDialog
+import org.tasks.location.LocationPermissionDialog.Companion.newLocationPermissionDialog
import org.tasks.location.LocationPickerActivity
-import org.tasks.preferences.*
+import org.tasks.preferences.Device
+import org.tasks.preferences.FragmentPermissionRequestor
+import org.tasks.preferences.PermissionChecker
+import org.tasks.preferences.Preferences
import java.util.*
import javax.inject.Inject
@@ -65,7 +67,7 @@ class LocationControlSet : TaskEditControlFragment() {
} else {
geofenceOptions.visibility = if (device.supportsGeofences()) View.VISIBLE else View.GONE
geofenceOptions.setImageResource(
- if (permissionChecker.canAccessLocation()
+ if (permissionChecker.canAccessBackgroundLocation()
&& (location.isArrival || location.isDeparture)) R.drawable.ic_outline_notifications_24px else R.drawable.ic_outline_notifications_off_24px)
val name = location.displayName
val address = location.displayAddress
@@ -122,25 +124,11 @@ class LocationControlSet : TaskEditControlFragment() {
@OnClick(R.id.geofence_options)
fun geofenceOptions() {
- if (permissionRequestor.requestFineLocation()) {
+ if (permissionChecker.canAccessBackgroundLocation()) {
showGeofenceOptions()
- }
- }
-
- override fun onRequestPermissionsResult(
- requestCode: Int, permissions: Array, grantResults: IntArray) {
- if (requestCode == PermissionRequestor.REQUEST_LOCATION) {
- if (verifyPermissions(grantResults)) {
- showGeofenceOptions()
- } else {
- dialogBuilder
- .newDialog(R.string.missing_permissions)
- .setMessage(R.string.location_permission_required_geofence)
- .setPositiveButton(android.R.string.ok, null)
- .show()
- }
} else {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ newLocationPermissionDialog(this, REQUEST_LOCATION_PERMISSIONS)
+ .show(parentFragmentManager, FRAG_TAG_REQUEST_LOCATION)
}
}
@@ -171,7 +159,11 @@ class LocationControlSet : TaskEditControlFragment() {
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- if (requestCode == REQUEST_LOCATION_REMINDER) {
+ if (requestCode == REQUEST_LOCATION_PERMISSIONS) {
+ if (permissionChecker.canAccessBackgroundLocation()) {
+ showGeofenceOptions()
+ }
+ } else if (requestCode == REQUEST_LOCATION_REMINDER) {
if (resultCode == Activity.RESULT_OK) {
val place: Place = data!!.getParcelableExtra(LocationPickerActivity.EXTRA_PLACE)!!
val location = viewModel.selectedLocation
@@ -201,6 +193,8 @@ class LocationControlSet : TaskEditControlFragment() {
const val TAG = R.string.TEA_ctrl_locations_pref
private const val REQUEST_LOCATION_REMINDER = 12153
private const val REQUEST_GEOFENCE_DETAILS = 12154
+ private const val REQUEST_LOCATION_PERMISSIONS = 12155
private const val FRAG_TAG_LOCATION_DIALOG = "location_dialog"
+ private const val FRAG_TAG_REQUEST_LOCATION = "request_location"
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_location_permissions.xml b/app/src/main/res/layout/dialog_location_permissions.xml
new file mode 100644
index 000000000..20f5ada9f
--- /dev/null
+++ b/app/src/main/res/layout/dialog_location_permissions.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml
index 942eb5f5e..a6b54851f 100644
--- a/app/src/main/res/values-bg-rBG/strings.xml
+++ b/app/src/main/res/values-bg-rBG/strings.xml
@@ -338,7 +338,6 @@
Покажи скрити
Покажи завършени
Обратно
- Не е намерено приложение за отваряне на прикачения файл
Добавяне на прикачен файл
Заснемане
Изберете от галерия
@@ -458,7 +457,6 @@
Или избери местоположение
Намери доставчик
Липсващи разрешения
- За напомняния за местоположение са необходими разрешения за местоположението
Необходими са разрешения за местоположение, за да откриете текущото ви местоположение
Отворете картата
Изберете ново местоположение
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 3d05fcda0..c7b59f171 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -214,7 +214,6 @@
Zobrazit skryté
Zobrazit dokončené
Obrácené pořadí
- Žádná aplikace k otevření přílohy
Přidat přílohu
Zásady ochrany osobních údajů
Vylepšit Tasks
@@ -458,7 +457,6 @@
Snížit předplatné
Zvýšit předplatné
Zrušit předplatné
- Žádná aplikace k otevření odkazu
Zadejte heslo pro šifrování
Heslo pro šifrování
Hesla se neshodují
@@ -489,7 +487,6 @@
Nebo vyberte místo
Poskytovatel vyhledávání
Chybí oprávnění
- Oprávnění k přístupu k poloze je nutné pro upomínky podle polohy
Oprávnění k přístupu k poloze je nutné pro zjištění Vaší aktuální polohy
Otevřít mapu
Vybrat novou polohu
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index b5412701d..4dd5852d5 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -350,8 +350,6 @@
Vælg fra galleri
Tag et billede
Vedhæft fil
- Der er ikke nogen app, som kan åbne linket
- Der er ikke nogen app, som kan åbne den vedhæftede fil
Vis udførte
Vis skjulte
Filterindstillinger
@@ -412,7 +410,6 @@
Oprettet %s
Deaktiver strømsparetilstand
Vis notifikationer på din wearable-enhed
- Placeringstilladelse kræves for placeringspåmindelser
Tasks er gratis, open-source software udgivet under GNU General Public License v3.0
Opgrader abonnement
Nedgrader abonnement
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 041bdac03..f3e66762b 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -336,7 +336,6 @@
Ausgeblendete anzeigen
Erledigte anzeigen
Rückwärts
- Keine Anwendung konnte den Anhang öffnen
Anhang hinzufügen
Bild aufnehmen
Aus Galerie wählen
@@ -455,7 +454,6 @@
Oder Ort auswählen
Suchanbieter
Fehlende Berechtigungen
- Standortberechtigung wird für ortsbasierte Erinnerungen benötigt
Standortberechtigung wird zur Ermittlung des aktuellen Standortes benötigt
Karte öffnen
Neuen Ort auswählen
@@ -498,7 +496,6 @@
Teilaufgaben
Mehrstufige Teilaufgaben werden von Google Tasks nicht unterstützt
Titel eingeben
- Keine Anwendung konnte den Link verarbeiten
Verschlüsselungs-Passwort erforderlich
Verschlüsselungspasswort
Anzeigename
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 91d01c400..ce82132fd 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -338,7 +338,6 @@
Mostrar oculto
Mostrar completado
Invertir
- Ninguna aplicación podría abrir el archivo adjunto
Adjuntar archivo
Tomar fotografía
Elegir desde la galería
@@ -458,7 +457,6 @@
O elija una ubicación
Proveedor de búsquedas
Permisos ausentes
- Son necesarios permisos de ubicación para los recordatorios de ubicación
Son necesarios permisos de ubicación para encontrar tu ubicación actual
Abrir mapa
Escoger nueva ubicación
@@ -498,7 +496,6 @@
Subtareas
Subtareas multinivel no compatibles con Google Tasks
Introducir título
- Ninguna aplicación podría manejar el enlace
Introduzca el nombre de la etiqueta
Crear \"%s\"
Contraseña de encriptado requerida
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 466dbcb22..9548938e3 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -341,7 +341,6 @@
Erakutsi ezkutatutakoak
Erakutsi burututakoak
Alderantziz
- Ez dago aplikaziorik eranskina irekitzeko
Gehitu eranskina
Atera argazkia
Hautatu galeriatik
@@ -464,7 +463,6 @@
Edo hautatu kokaleku bat
Bilatu hornitzailea
Baimenak falta dira
- Kokapen baimena behar da kokalekuen araberako oroigarrientzat
Kokapen baimena behar da zure uneko kokalekua aurkitzeko
Ireki mapa
Hautatu kokaleku berria
@@ -498,7 +496,6 @@
Azpi-zereginak
Google Tasks-ek ez ditu hainbat mailako azpi-zereginak onartzen
Sartu izenburua
- Ez dago aplikaziorik esteka kudeatzeko
Idatzi etiketaren izena
Sortu \"%s\"
Zifratze pasahitza behar da
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 851a2de95..a516b7583 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -321,7 +321,6 @@
Näytä piilotetut
Näytä valmiit
Käänteinen
- Liitteen avaamiseen ei löydy sovellusta
Lisää liite
Ota kuva
Valitse galleriasta
@@ -452,7 +451,6 @@
Valitse uusi sijainti
Avaa kartta
Sijaintioikeudet tarvitaan nykysijainnin paikannukseen
- Sijaintioikeudet tarvitaan sijaintipohjaisiin muistutuksiin
Oikeuksia puuttuu
Hauntarjoaja
Tai valitse muu sijainti
@@ -499,7 +497,6 @@
Salauksen salasana vaaditaan
Salasana vaaditaan
Käyttäjänimi vaaditaan
- Linkin käsittelemiseen ei löydy sovellusta
Siirrä
Hylkää muutokset
%s m
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index d680a6770..4c3457bea 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -320,7 +320,6 @@
Afficher les tâches cachées
Afficher les tâches terminées
Inverser
- Aucune application ne peut ouvrir la pièce jointe
Ajouter une pièce jointe
Prendre une photo
Choisir depuis la galerie
@@ -440,7 +439,6 @@
Ou choisir une localisation
Moteurs de recherche
Permissions manquantes
- La permission de la localisation est nécessaire pour les rappels de localisation
La permission de la localisation est nécessaire pour trouver votre localisation actuelle
Ouvrir la carte
Choisir une nouvelle localisation
@@ -493,7 +491,6 @@
Sous-tâches
Les sous-tâches multi-niveaux ne sont pas prises en charge par Google Tasks
Entrer le titre
- Aucune application ne pouvait gérer le lien
Entrez le nom du tag
Créer %s
Mot de passe de chiffrement requis
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index c978a2ca5..616d800ec 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -243,7 +243,6 @@
Mostrar oculto
Mostrar completado
Invertir
- No se ha encontrado una aplicación para abrir el archivo adjunto
Adjuntar archivo
Tomar fotografía
Elegir desde la galería
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index eb8dd2a08..37a6d1b58 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -337,7 +337,6 @@
Rejtettek megjelenítése
Elvégzettek megjelenítése
Visszafelé
- A csatolmány megnyitására alkalmas app nem található
Csatolmány hozzáadása
Kép készítése
Kiválasztás a galériából
@@ -459,7 +458,6 @@
Vagy másik hely keresése
Keresési szolgáltató
Hiányzó jogosultságok
- A hely emlékeztetőkhöz helymeghatározási jogosultság szükséges
A jelenlegi pozíció meghatározásához helymeghatározási jogosultság szükséges
Térkép megnyitása
Új hely kiválasztása
@@ -496,7 +494,6 @@
Részfeladatok
A Google Tasks nem támogatja a többszintű részfeladatokat
Cím megadása
- A link feldolgozására képes app nem található
Címke neve
\"%s\" létrehozása
A titkosításhoz jelszó szükséges
diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml
index 1c90b9dc5..9af63db0e 100644
--- a/app/src/main/res/values-id/strings.xml
+++ b/app/src/main/res/values-id/strings.xml
@@ -250,8 +250,6 @@
Pengaturan Filter
Tampilkan tersembunyi
Tampilkan selesai
- Tidak ada aplikasi yang bisa membuka lampiran
- Tidak ada aplikasi yang bisa membuka tautan
Tambah lampiran
Ambil gambar
Pilih dari galeri
@@ -388,7 +386,6 @@
Pilih lokasi ini
Atau cari lokasi
Penyedia pencarian
- Membutuhkan izin akses lokasi untuk pengingat lokasi
Membutuhkan izin akses lokasi untuk menentukan lokasi anda saat ini
Buka peta
Pilih lokasi baru
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index e3b3bb325..653f47906 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -334,7 +334,6 @@
Mostra nascoste
Mostra completate
Inverso
- Nessuna app configurata per aprire l\'allegato
Aggiungi allegato
Scatta un foto
Scegli dalla libreria
@@ -454,7 +453,6 @@
O scegli un\'altra posizione
Cerca fornitore
Permessi mancanti
- I promemoria con la posizione richiedono i permessi di localizzazione
Per trovare la tua posizione sono richiesti i permessi di localizzazione
Apri mappa
Scegli nuova posizione
@@ -533,7 +531,6 @@
Predefinito del sistema
Icona
Le password non corrispondono
- Non è stata trovata una app per gestire il collegamento
Ignora le modifiche
- %d attività secondaria
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index 19850e200..c490a20d9 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -371,7 +371,6 @@
הצגת משימות נסתרות
הצגת משימות שבוצעו
אחורה
- אף יישום לא יכול לפתוח קובץ מצורף זה
הוספ/י קובץ
צלם תמונה
בחירה מהגלריה
@@ -493,7 +492,6 @@
או בחרו מיקום
ספק חיפוש
חסרות הרשאות
- הרשאות מיקום נדרשות עבור תזכורות מבוססות מיקום
הרשאות מיקום נדרשות על מנת למצוא את מיקומך הנוכחי
פתיחת מפה
בחירת מיקום חדש
@@ -570,7 +568,6 @@
טקסט וסמל
סיסמת הצפנה שגויה
דרושה סיסמת הצפנה
- אין יישום שיכול לטפל בקישור
בטל שינויים
תתי משימות
הצג חוצצים
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 0bdeedc76..70203ac74 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -335,7 +335,6 @@
非表示を表示
完了を表示
逆順
- 添付ファイルを開くアプリケーションが見つかりません
添付ファイルを追加
写真を撮影
ギャラリーから選択
@@ -456,7 +455,6 @@
または場所を選ぶ
プロバイダーを検索
アクセス許可がありません
- 場所リマインダーには位置のアクセス許可が必要です
現在の場所を見つけるには位置のアクセス許可が必要です
地図を開く
新しい場所を選択
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 44dea32b6..0afe84290 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -337,7 +337,6 @@
숨겨진 할일 표시
완료한 할일 표시
역순
- 첨부파일을 열 수 있는 앱이 없습니다
첨부파일 추가
사진 촬영
갤러리에서 선택
@@ -462,7 +461,6 @@
위치 고르기
검색 제공업체
권한 누락
- 위치 알림을 사용하려면 위치 권한이 필요합니다
기기의 현재 위치를 확인하려면 위치 권한이 필요합니다
지도 열기
새 위치 선택
@@ -494,7 +492,6 @@
하위할일
Google Tasks는 다단계 하위할일을 지원하지 않습니다
제목 입력
- 링크를 처리할 앱이 없습니다
태그 이름 입력
\"%s\" 생성
암호화 비밀번호 필수
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index fb6ecf9b6..5b8824129 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -334,7 +334,6 @@
Rodyti paslėptus
Rodyti užbaigtus
Atvirkščiai
- Nerasta programa, kuri galėtų atidaryti prisegtą failą
Pridėti failą
Nufotografuoti
Pasirinkti iš galerijos
@@ -455,7 +454,6 @@
Arba pasirinkti vietą
Paieškos tiekėjas
Dingę leidimai
- Vietos leidimai reikalingi priminimams pagal vietą
Vietos leidimai reikalingi surasti jūsų esamą vietą
Atidaryti žemėlapį
Pasirinkti naują vietą
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index a7bc23366..4c1719643 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -367,7 +367,6 @@
Kopier
Flytt
Omvend
- Fant ikke noe program til åpning av vedlegg
Legg til vedlegg
Ta et bilde
Velg fra galleri
@@ -464,7 +463,6 @@
Eller velg et sted
Søketilbyder
Manglende tilganger
- Plasseringstilganger trengs for stedspåminnelser
Plasseringstilganger trengs for å finne ditt nåværende sted
Åpne kart
Velg nytt sted
@@ -498,7 +496,6 @@
Legg til gjøremålssteg
Gjøremålssteg
Gjøremålssteg med flere nivåer støttes ikke av Google Tasks
- Mangler program for håndtering av lenke
Skriv inn etikettnavn
Opprett «%s»
Krypteringspassord kreves
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index bb398416f..f4d2a326e 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -331,7 +331,6 @@
Toon verborgen
Toon voltooide
Omgekeerde
- Geen applicatie kan de bijlage te openen
Bijlage toevoegen
Maak een foto
Kies uit de gallerij
@@ -448,7 +447,6 @@
Of kies een locatie
Zoek aanbieder
Missende rechten
- Locatie rechten zijn nodig voor locatie herinneringen
Locatie rechten zijn nodig om je huidige locatie te vinden
Open kaart
Kies nieuwe locatie
@@ -493,7 +491,6 @@
Deeltaken
Deeltaken met meerdere niveau\'s worden niet ondersteund door Google Taken
Voer titel in
- Geen applicatie kan de link te openen
Voer label naam in
Maak \"%s\" aan
Coderingswachtwoord vereist
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 0acbc9419..8e25237df 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -349,7 +349,6 @@
Pokaż ukryte
Pokaż ukończone
Odwrotnie
- Nie znaleziono aplikacji do otwarcia załącznika
Dodaj załącznik
Wybierz obrazek
Wybierz z galerii
@@ -468,7 +467,6 @@
Lub wybierz lokalizację
Silnik wyszukiwania
Brakujące uprawnienia
- Uprawnienia lokalizacji są wymagane do powiadomień o lokalizacji
Uprawnienia lokalizacji są wymagane do ustalenia twojej aktualnej lokalizacji
Otwórz mapę
Wybierz nową lokalizację
@@ -509,7 +507,6 @@
Podzadania
Wielopoziomowe podzadania nie są obsługiwane przez Google Tasks
Wprowadź tytuł
- Nie znaleziono aplikacji do otwarcia linku
Wprowadź nazwę tagu
Stwórz \"%s\"
Wymagane hasło szyfrowania
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 276053e54..c10834c56 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -335,7 +335,6 @@
Mostrar ocultas
Mostrar concluídas
Reverso
- Nenhum aplicativo encontrado para abrir o anexo
Adicionar anexo
Tirar uma foto
Selecionar da galeria
@@ -456,7 +455,6 @@
Ou escolha uma localização
Provedor de pesquisa
Permissões faltando
- Permissão de Localização é necessária para lembretes de localização
Permissão de Localização é necessária para encontrar sua localização atual
Abrir mapa
Escolher nova localização
@@ -568,7 +566,6 @@
Senhas não conferem
Senha de encriptação errada
Senha de encriptação necessária
- Nenhum aplicativo consegue abrir o link
Amanhã à noite
Amanhã à tardinha
%s m
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index cdc58b798..16c19afb1 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -318,7 +318,6 @@
Mostrar ocultas
Mostrar terminadas
Reverter
- Nenhuma aplicação encontrada para abrir o anexo
Adicionar anexo
Tirar uma foto
Escolher da galeria
@@ -416,7 +415,6 @@
Escolher nova localização
Abrir mapa
Permissão de localização é necessária para encontrar a sua localização atual
- Permissão de localização é necessária para lembretes de localização
Permissões faltando
Provedor de pesquisa
Ou escolha uma localização
@@ -590,7 +588,6 @@
Uma palavra-passe de encriptação necessária
Criar \"%s\"
Digite o nome da etiqueta
- Nenhuma aplicação consegue abrir a ligação
Digite um título
Sub-tarefas em multiplos níveis não suportados pelo Google Tasks
Sub-tarefas
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 5e44f6f24..3d0227810 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -355,7 +355,6 @@
Показать скрытые
Показать выполненные
Наоборот
- Не найдено приложение для открытия прикреплённого файла
Прикрепить файл
Сделать снимок
Выбрать изображение из галереи
@@ -503,7 +502,6 @@
Добавить подзадачу
Подзадачи
- Доступ к данным о геолокации нужен для напоминаний, основанных на местоположении
Доступ к данным о геолокации нужен, чтобы определить Ваше текущее местоположение
Сторонние лицензии
Новые задачи наверху
@@ -514,7 +512,6 @@
Свернуть подзадачи
Многоуровневые подзадачи не поддерживаются Google Tasks
Введите название
- Не найдено приложение для открытия ссылки
Введите имя тега
Создать \"%s\"
Требуется пароль шифрования
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 56ca5854c..49c9cd18f 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -335,7 +335,6 @@
Zobraziť skryté
Zobraziť dokončené
Opačné
- Na otvorenie tohto súboru nebola nájdená vhodná aplikácia
Pridať prílohu
Spraviť obrázok
Vybrať z galérie
@@ -455,7 +454,6 @@
Alebo vybrať polohu ručne
Vyhľadávanie poskytuje
Chýbajúce oprávnenia
- Pre upozornenia podľa polohy sú potrebné povolenia
Pre učenie súčasnej polohy sú potrebné povolenia
Otvoriť mapu
Zvoliť novú polohu
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 270e5ed88..adb433e74 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -241,7 +241,6 @@
Visa dolda
Visa slutförda
Omvänt
- Ingen applikation hittades för att öppna bilagan
Bifoga filer
Ta en bild
Välj från album
@@ -459,7 +458,6 @@
Eller Välj en plats
Sökleverantör
Saknar behörigheter
- Läge behörigheter behövs för plats påminnelser
Plats behörigheter behövs för att hitta din aktuella plats
Öppna karta
Välj ny plats
diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml
index 920f2e08d..54cdbf232 100644
--- a/app/src/main/res/values-ta/strings.xml
+++ b/app/src/main/res/values-ta/strings.xml
@@ -288,7 +288,6 @@
புதிய இருப்பிடத்தைத் தேர்வுசெய்க
வரைபடத்தைத் திறக்கவும்
உங்கள் தற்போதைய இருப்பிடத்தைக் கண்டுபிடிக்க இருப்பிட அனுமதிகள் தேவை
- இருப்பிட நினைவூட்டல்களுக்கு இருப்பிட அனுமதிகள் தேவை
அனுமதிகள் இல்லை
தேடல் வழங்குநர்
அல்லது இருப்பிடத்தைத் தேர்வுசெய்க
@@ -428,8 +427,6 @@
கேலரியில் இருந்து எடுக்கவும்
படம் எடுக்கவும்
இணைப்பை சேர்க்கவும்
- எந்த பயன்பாட்டையும் இணைப்பைக் கையாள முடியவில்லை
- எந்த பயன்பாட்டைய இணைப்பையும் திறக்க முடியவில்லை
தலைகீழ்
நிகழ்ச்சி முடிந்தது
மறைக்கப்பட்டதைக் காட்டு
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 0f1e9582d..ec8d3f684 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -340,7 +340,6 @@
Gizlenenleri göster
Tamamlananları göster
Ters
- Eki açacak uygulama yok
Ek ekle
Bir fotoğraf çek
Galeriden seç
@@ -461,7 +460,6 @@
Ya da konum seç
Arama sağlayıcı
Eksik izinler
- Konum anımsatıcılar için konum izinleri gereklidir
Geçerli konumunuzu bulmak için konum izinleri gereklidir
Haritayı aç
Yeni konum seç
@@ -498,7 +496,6 @@
Alt görevler
Google Tasks, çoklu düzey alt görevleri desteklemez
Başlık girin
- Bağlantıyı işleyecek uygulama yok
Etiket adı girin
\"%s\" oluştur
Şifreleme parolası gerekli
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 40da13aca..012be356d 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -353,7 +353,6 @@
Показати приховані
Показати завершені
Реверс
- Не знайдено програми для відкриття прикріпленого файлу
Додати вкладення
Зробити фото
Обрати з галереї
@@ -474,7 +473,6 @@
Або вказати інше місце
Знайти провайдера
Відсутні дозволи
- Для нагадувань за місцем необхідний дозвіл на перегляд місцезнаходження
Щоб визначити ваше місцезнаходження необхідний дозвіл на перегляд місцезнаходження
Відкрити карту
Обрати нове місце
@@ -503,7 +501,6 @@
Кольори не будуть ненасиченими в темних темах
Кольори будуть ненасиченими в темних темах
За системними налаштуваннями
- Не знайдено програми, щоб відкрити посилання
- %d підзадача
- %d підзадачі
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index fe7992fa2..a4fade78e 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -320,7 +320,6 @@
显示隐藏的任务
显示已完成任务
反向
- 没有能打开附件的应用
添加附件
拍张照片
从相册选一张
@@ -454,7 +453,6 @@
或选择一个位置
搜索引擎供应商
缺少权限
- 位置提醒功能需要位置权限
需要位置权限来发现您当前位置
打开地图
选择新位置
@@ -489,7 +487,6 @@
子任务
Google Tasks不支持多层子任务
输入标题
- 没有找到能处理链接的应用
输入标签名称
创建\"%s\"
需要加密密码
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ddd3dd310..bf6aac7f1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -367,8 +367,7 @@ File %1$s contained %2$s.\n\n
Show hidden
Show completed
Reverse
- No app could open attachment
- No app could handle link
+ No app could handle this request
Add attachment
Take a picture
Pick from gallery
@@ -520,7 +519,7 @@ File %1$s contained %2$s.\n\n
Or choose a location
Search provider
Missing permissions
- Location permissions are needed for location reminders
+ Location permissions are needed for location-based reminders. If you have previously denied a location permission request then you must manually grant permission through your device settings.
Location permissions are needed to find your current location
Open map
Choose new location
@@ -644,4 +643,6 @@ File %1$s contained %2$s.\n\n
never
Device settings
Account
+ Foreground location
+ Background location
diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt
index 149a667a5..1cd112cef 100644
--- a/buildSrc/src/main/kotlin/Versions.kt
+++ b/buildSrc/src/main/kotlin/Versions.kt
@@ -1,6 +1,6 @@
object Versions {
const val kotlin = "1.4.10"
- const val targetSdk = 29
+ const val targetSdk = 30
const val minSdk = 23
const val butterknife = "10.2.3"
const val work = "2.4.0"