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"