diff --git a/src/main/java/de/dennisguse/opentracks/AbstractTrackDeleteActivity.java b/src/main/java/de/dennisguse/opentracks/AbstractTrackDeleteActivity.java index 44dc52ff4..cf76d7eee 100644 --- a/src/main/java/de/dennisguse/opentracks/AbstractTrackDeleteActivity.java +++ b/src/main/java/de/dennisguse/opentracks/AbstractTrackDeleteActivity.java @@ -84,8 +84,8 @@ public abstract class AbstractTrackDeleteActivity extends AbstractActivity imple /** * Called every time a track is deleted. */ - protected void onTrackDeleteStatus(TrackDeleteService.DeleteStatus deleteStatus) { - if (deleteStatus.isFinished() && trackDeleteServiceConnection != null) { + protected void onTrackDeleteStatus(TrackDeleteService.DeletionFinishedStatus deletionFinishedStatus) { + if (trackDeleteServiceConnection != null) { trackDeleteServiceConnection.unbind(this); trackDeleteServiceConnection = null; onDeleteFinished(); diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java index 8fbb75273..2ceda4ea5 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java @@ -232,9 +232,9 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement } @Override - protected void onTrackDeleteStatus(TrackDeleteService.DeleteStatus deleteStatus) { - super.onTrackDeleteStatus(deleteStatus); - if (deleteStatus.isDeleted(trackId)) { + protected void onTrackDeleteStatus(TrackDeleteService.DeletionFinishedStatus deletionFinishedStatus) { + super.onTrackDeleteStatus(deletionFinishedStatus); + if (deletionFinishedStatus.isDeleted(trackId)) { runOnUiThread(this::finish); } } diff --git a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java index cc852d66a..f8825f56d 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java @@ -187,7 +187,6 @@ public class ContentProviderUtils { FileUtils.deleteDirectoryRecurse(FileUtils.getPhotoDir(context, trackId)); } - // Delete track last since it triggers a database vacuum call String whereClause = String.format(TracksColumns._ID + " IN (%s)", TextUtils.join(",", Collections.nCopies(trackIds.size(), "?"))); contentResolver.delete(TracksColumns.CONTENT_URI, whereClause, trackIds.stream().map(id -> Long.toString(id.getId())).toArray(String[]::new)); } @@ -195,8 +194,6 @@ public class ContentProviderUtils { public void deleteTrack(Context context, @NonNull Track.Id trackId) { // Delete track folder resources. FileUtils.deleteDirectoryRecurse(FileUtils.getPhotoDir(context, trackId)); - - // Delete track last since it triggers a database vacuum call contentResolver.delete(TracksColumns.CONTENT_URI, TracksColumns._ID + "=?", new String[]{Long.toString(trackId.getId())}); } diff --git a/src/main/java/de/dennisguse/opentracks/data/CustomContentProvider.java b/src/main/java/de/dennisguse/opentracks/data/CustomContentProvider.java index 18b89e41e..b78960d0c 100644 --- a/src/main/java/de/dennisguse/opentracks/data/CustomContentProvider.java +++ b/src/main/java/de/dennisguse/opentracks/data/CustomContentProvider.java @@ -27,6 +27,7 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; +import android.os.Bundle; import android.text.TextUtils; import android.util.Log; @@ -39,6 +40,7 @@ import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.data.tables.MarkerColumns; import de.dennisguse.opentracks.data.tables.TrackPointsColumns; import de.dennisguse.opentracks.data.tables.TracksColumns; +import de.dennisguse.opentracks.settings.PreferencesUtils; /** * A {@link ContentProvider} that handles access to track points, tracks, and markers tables. @@ -53,6 +55,8 @@ public class CustomContentProvider extends ContentProvider { private static final String SQL_LIST_DELIMITER = ","; + private static final int TOTAL_DELETED_ROWS_VACUUM_THRESHOLD = 10000; + private final UriMatcher uriMatcher; private SQLiteDatabase db; @@ -131,14 +135,12 @@ public class CustomContentProvider extends ContentProvider { @Override public int delete(@NonNull Uri url, String where, String[] selectionArgs) { String table; - boolean shouldVacuum = false; switch (getUrlType(url)) { case TRACKPOINTS: table = TrackPointsColumns.TABLE_NAME; break; case TRACKS: table = TracksColumns.TABLE_NAME; - shouldVacuum = true; break; case MARKERS: table = MarkerColumns.TABLE_NAME; @@ -147,23 +149,40 @@ public class CustomContentProvider extends ContentProvider { throw new IllegalArgumentException("Unknown URL " + url); } - Log.w(TAG, "Deleting table " + table); - int count; + Log.w(TAG, "Deleting from table " + table); + int totalChangesBefore = getTotalChanges(); + int deletedRowsFromTable; try { db.beginTransaction(); - count = db.delete(table, where, selectionArgs); + deletedRowsFromTable = db.delete(table, where, selectionArgs); + Log.i(TAG, "Deleted " + deletedRowsFromTable + " rows of table " + table); db.setTransactionSuccessful(); } finally { db.endTransaction(); } getContext().getContentResolver().notifyChange(url, null, false); - if (shouldVacuum) { - // If a potentially large amount of data was deleted, reclaim its space. - Log.i(TAG, "Vacuuming the database."); + int totalChanges = getTotalChanges() - totalChangesBefore; + Log.i(TAG, "Deleted " + totalChanges + " total rows from database"); + + PreferencesUtils.addTotalRowsDeleted(totalChanges); + int totalRowsDeleted = PreferencesUtils.getTotalRowsDeleted(); + if (totalRowsDeleted > TOTAL_DELETED_ROWS_VACUUM_THRESHOLD) { + Log.i(TAG, "TotalRowsDeleted " + totalRowsDeleted + ", starting to vacuum the database."); db.execSQL("VACUUM"); + PreferencesUtils.resetTotalRowsDeleted(); } - return count; + + return deletedRowsFromTable; + } + + private int getTotalChanges() { + int totalCount; + try (Cursor cursor = db.rawQuery("SELECT total_changes()", null)) { + cursor.moveToNext(); + totalCount = cursor.getInt(0); + } + return totalCount; } @Override diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/TrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/TrackImporter.java index ac8896640..1f294a082 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/TrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/TrackImporter.java @@ -25,6 +25,7 @@ import de.dennisguse.opentracks.data.models.Marker; import de.dennisguse.opentracks.data.models.Speed; import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.data.models.TrackPoint; +import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.stats.TrackStatisticsUpdater; import de.dennisguse.opentracks.ui.markers.MarkerUtils; @@ -290,4 +291,5 @@ public class TrackImporter { public void cleanImport() { contentProviderUtils.deleteTracks(context, trackIds); } + } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackDeleteService.java b/src/main/java/de/dennisguse/opentracks/services/TrackDeleteService.java index 9f7b79f44..b29a4536c 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackDeleteService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackDeleteService.java @@ -15,12 +15,14 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import java.util.ArrayList; +import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.ContentProviderUtils; import de.dennisguse.opentracks.data.models.Track; +import de.dennisguse.opentracks.settings.PreferencesUtils; public class TrackDeleteService extends Service { @@ -31,7 +33,7 @@ public class TrackDeleteService extends Service { private final Binder binder = new Binder(); private ExecutorService serviceExecutor; - private MutableLiveData deleteResultObservable; + private MutableLiveData deleteResultObservable; private NotificationManager notificationManager; private NotificationCompat.Builder notificationBuilder; @@ -59,22 +61,18 @@ public class TrackDeleteService extends Service { return START_NOT_STICKY; } - private void deleteTracks(@NonNull ArrayList trackIds) { - sendResult(null,0, trackIds.size()); + private void deleteTracks(@NonNull List trackIds) { serviceExecutor.execute(() -> { ContentProviderUtils contentProviderUtils = new ContentProviderUtils(this); - for (int i = 0; i < trackIds.size(); i++) { - updateNotification(i + 1, trackIds.size()); - contentProviderUtils.deleteTrack(this, trackIds.get(i)); - sendResult(trackIds.get(i), i + 1, trackIds.size()); - } + contentProviderUtils.deleteTracks(this, trackIds); + sendResult(trackIds); stopSelf(); }); } - private void sendResult(Track.Id trackId, int deletes, int total) { + private void sendResult(List trackIds) { if (deleteResultObservable != null) { - deleteResultObservable.postValue(new DeleteStatus(trackId, deletes, total)); + deleteResultObservable.postValue(new DeletionFinishedStatus(trackIds)); } } @@ -83,7 +81,7 @@ public class TrackDeleteService extends Service { return binder; } - public LiveData getDeletingStatusObservable() { + public LiveData getDeletingStatusObservable() { return deleteResultObservable; } @@ -106,25 +104,13 @@ public class TrackDeleteService extends Service { notificationBuilder = new NotificationCompat.Builder(this, CHANNEL_ID); notificationBuilder .setContentTitle(this.getString(R.string.track_delete_progress_message)) - .setContentText(this.getString(R.string.track_delete_progress, 0, tracksToDelete)) + .setContentText(this.getString(R.string.track_delete_number_of_tracks, tracksToDelete)) .setSmallIcon(R.drawable.ic_logo_color_24dp) - .setProgress(tracksToDelete, 0, false); + .setProgress(0, 0, true); startForeground(NOTIFICATION_ID, notificationBuilder.build()); } - /** - * Updates notification progress. - * - * @param progress number of tracks already deleted. - * @param total total of tracks to be deleted. - */ - private void updateNotification(int progress, int total) { - notificationBuilder.setProgress(total, progress, false); - notificationBuilder.setContentText(this.getString(R.string.track_delete_progress, progress, total)); - notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); - } - public class Binder extends android.os.Binder { private Binder() { @@ -136,36 +122,25 @@ public class TrackDeleteService extends Service { } } - public static class DeleteStatus { - private final int progress; - private final int max; - private final Track.Id trackId; + public static class DeletionFinishedStatus { + private final List trackIds; /** - * @param trackId Track.Id just deleted if any. - * @param progress number of deletes. - * @param max total of deletes to be done. + * @param trackIds List of deleted Track.Ids. */ - private DeleteStatus(@Nullable Track.Id trackId, int progress, int max) { - this.trackId = trackId; - this.progress = progress; - this.max = max; - } - - public boolean isFinished() { - return progress == max; + private DeletionFinishedStatus(@Nullable List trackIds) { + this.trackIds = trackIds; } public boolean isDeleted(Track.Id trackId) { - return this.trackId != null && this.trackId.equals(trackId); + return this.trackIds != null && this.trackIds.contains(trackId); } @NonNull @Override public String toString() { return "DeleteStatus{" + - "number of deletes=" + progress + - ", total=" + max + + "trackIds=" + trackIds + '}'; } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index 6a102eea1..00088041e 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -826,4 +826,17 @@ public class PreferencesUtils { return getString(R.string.show_on_map_format_key, IntentDashboardUtils.PREFERENCE_ID_ASK); } + public static int getTotalRowsDeleted() { + return getInt(R.string.total_rows_deleted_key, 0); + } + + public static void addTotalRowsDeleted(final int totalRowsDeletedToAdd) { + int newTotalRowsDeleted = getTotalRowsDeleted() + totalRowsDeletedToAdd; + setInt(R.string.total_rows_deleted_key, newTotalRowsDeleted); + } + + public static void resetTotalRowsDeleted() { + setInt(R.string.total_rows_deleted_key, 0); + } + } diff --git a/src/main/res/values-b+es+419/strings.xml b/src/main/res/values-b+es+419/strings.xml index 5fb0b0f92..4d36e2c1e 100644 --- a/src/main/res/values-b+es+419/strings.xml +++ b/src/main/res/values-b+es+419/strings.xml @@ -411,7 +411,6 @@ Intervalo partido Precisión de ubicación: %1$s Ritmo: %1$s - %1$d/%2$d Intervalos Aún no hay ningún intervalo Personalice su pantalla de grabación diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml index 124d031fc..b15f94990 100644 --- a/src/main/res/values-bg/strings.xml +++ b/src/main/res/values-bg/strings.xml @@ -458,7 +458,6 @@ limitations under the License. Показване на статистически данни на заключения екран Изисква ли OpenTracks/използва ли услугата Google Play\? Код на версията: %1$d - %1$d/%2$d Експортът след тренировка е неуспешен, моля, проверете директорията за експорт. Данни от трети страни Неподдържан формат на файла diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index 50b434f30..024f8aebe 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -469,7 +469,6 @@ limitations under the License. Rychlost: %1$s Rychlost: %1$s Údaje třetích stran - %1$d/%2$d Služba mazání Rychlost hlasových oznámení Není možno vymazat aktuálně zaznamenávanou trasu. diff --git a/src/main/res/values-da/strings.xml b/src/main/res/values-da/strings.xml index 9dced18ed..fd1a91c4e 100644 --- a/src/main/res/values-da/strings.xml +++ b/src/main/res/values-da/strings.xml @@ -467,7 +467,6 @@ Hvis GPS-enheden rapporterer unøjagtige data (f.eks. Placering, hastighed, høj Hastighed: %1$s Data fra tredjeparter Tjeneste til sletning - %1$d/%2$d Stemmehastighed Dette spor kan ikke slettes, da det er optaget i øjeblikket. Afstand og hastighed diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 5787b7ad9..65fbd93aa 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -470,7 +470,6 @@ Meldet das GPS-Gerät ungenaue Daten (z.B. Standort, Geschwindigkeit, Höhe), ka Durchschnittlicher Herzfrequenz Verhindere den erneuten Import von Strecken(aufzeichnungen) Keine doc.kml Datei im KMZ gefunden - %1$d/%2$d Thread unterbrochen Importieren der Datei gescheitert: %1$s Löschdienst diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index 13a55fa6e..32ee2a48e 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -464,7 +464,6 @@ limitations under the License. Ritmo: %1$s Datos de terceros Borrar servicio - %1$d/%2$d Velocidad de la voz Este recorrido no puede ser eliminado porque se está grabando actualmente. Distancia, velocidad y cadencia diff --git a/src/main/res/values-et/strings.xml b/src/main/res/values-et/strings.xml index eb64531bf..10e430783 100644 --- a/src/main/res/values-et/strings.xml +++ b/src/main/res/values-et/strings.xml @@ -464,7 +464,6 @@ limitations under the License. Tempo: %1$s Kolmanda osapoole andmed Kustutamise teenus - %1$d/%2$d Hääle kiirus Seda pala ei saa kustutada, kuna see on praegu salvestatud. Rütm diff --git a/src/main/res/values-eu/strings.xml b/src/main/res/values-eu/strings.xml index 3941966b6..0fedaee79 100644 --- a/src/main/res/values-eu/strings.xml +++ b/src/main/res/values-eu/strings.xml @@ -467,7 +467,6 @@ GPS gailuak datu okerrak salatzen baditu (adibidez, kokapena, abiadura, kota), O Erritmoa: %1$s Hirugarrenen datuak Ezabatzeko zerbitzua - %1$d/%2$d Ahots abiadura Pista hau ezin da ezabatu da gaur egun grabatzen. Kadentzia diff --git a/src/main/res/values-fi/strings.xml b/src/main/res/values-fi/strings.xml index 401a995ec..084e8a250 100644 --- a/src/main/res/values-fi/strings.xml +++ b/src/main/res/values-fi/strings.xml @@ -469,7 +469,6 @@ limitations under the License. Nopeus: %1$s Kolmannen osapuolen tiedot Poistopalvelu - %1$d/%2$d Äänen nopeus Tätä reittiä ei voi poistaa koska sitä tallennetaan parhaillaan. Pyöräily: tahtiaika diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 99da07606..86b141164 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -465,7 +465,6 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio La trace %1$s existe déjà dans le répertoire de destination. Traces écrasées Données de tiers - %1$d/%2$d Service de suppression Vitesse vocale Cette piste ne peut pas être supprimée car elle est en cours d\'enregistrement. diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index 3f841230d..8f59d8c53 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -472,7 +472,6 @@ Se te detés ou estás en interiores, non se gardarán datos do sensor (mais ser Velocidade: %1$s Datos de terceiros alleos Eliminación de servizo - %1$d/%2$d Velocidade da voz Esta pista non se pode eliminar porque está a funcionar a gravación. Distancia e Velocidade diff --git a/src/main/res/values-hu/strings.xml b/src/main/res/values-hu/strings.xml index 5d5cd8e1a..932c7f8b6 100644 --- a/src/main/res/values-hu/strings.xml +++ b/src/main/res/values-hu/strings.xml @@ -460,7 +460,6 @@ limitations under the License. \n * pályák megjelenítése térképen (lásd alább) Harmadik féltől származó adatok Törlési szolgáltatás - %1$d/%2$d Hang sebesség Ez a sáv nem törölhető, mivel jelenleg is rögzítve van. Kerékpározás: lépésszám diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml index 94c939924..5433038cb 100644 --- a/src/main/res/values-it/strings.xml +++ b/src/main/res/values-it/strings.xml @@ -471,7 +471,6 @@ Infatti, un\'applicazione deve supportare ACTION_VIEW con MIME applica Ritmo: %1$s Dati di terzi Servizio di eliminazione - %1$d/%2$d Velocità della voce Questa traccia non può essere cancellata perché è attualmente in registrazione. Cadenza diff --git a/src/main/res/values-lt/strings.xml b/src/main/res/values-lt/strings.xml index 0d72fc9a4..2b8a7f12c 100644 --- a/src/main/res/values-lt/strings.xml +++ b/src/main/res/values-lt/strings.xml @@ -416,7 +416,6 @@ limitations under the License. OpenTracks naudoja prietaiso GPS jutiklį, kad nuolat įrašytų vietą. Jei GPS įrenginys praneša apie netikslius duomenis (pvz., Vietą, greitį, aukštį), OpenTracks negali nieko padaryti. Atidaryti takelį Įrašydami palaikykite ekraną įjungtą. - %1$d/%2$d Atidaryti kaip GPX OpenTracks nefiksuoja vietų\? Perrašyti diff --git a/src/main/res/values-lv/strings.xml b/src/main/res/values-lv/strings.xml index 498f41a11..4969cf176 100644 --- a/src/main/res/values-lv/strings.xml +++ b/src/main/res/values-lv/strings.xml @@ -416,7 +416,6 @@ limitations under the License. Kā es varu eksportēt/ kopīgot ierakstītos ierakstus\? Dziesmas eksportēšana uz krātuvi pēc ierakstīšanas pabeigšanas eScooter - %1$d/%2$d Vidējā jauda Bibliotēkas Pēc aktivitātes veida diff --git a/src/main/res/values-nb/strings.xml b/src/main/res/values-nb/strings.xml index 63e0dd248..479f0e48b 100644 --- a/src/main/res/values-nb/strings.xml +++ b/src/main/res/values-nb/strings.xml @@ -460,7 +460,6 @@ limitations under the License. Tempo: %1$s Tredjepartsdata Slettingstjeneste - %1$d/%2$d Talehastighet Dette sporet kan ikke slettes da det tas opp nå. Kadens diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index 80ea16c98..9defe723b 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -465,7 +465,6 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid Afstand: %1$s Tempo: %1$s Gegevens van derden - %1$d/%2$d Dienst verwijdering Spraak snelheid Dit fragment kan niet worden gewist omdat het momenteel is opgenomen. diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index 2e0e2f451..c2d00a119 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -476,7 +476,6 @@ limitations under the License. Odległość: %1$s Dane osób trzecich Usługa usuwania - %1$d/%2$d Szybkość głosu Tej ścieżki nie można usunąć, ponieważ jest ona aktualnie nagrywana. Dystans i Prędkość diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index 25af71150..0cd9b641b 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -404,7 +404,6 @@ Parcela: %1$s Dados de terceiros Serviço de exclusão - %1$d/%2$d Velocidade da voz Esta trilha não pode ser excluída porque está gravada no momento. diff --git a/src/main/res/values-ro/strings.xml b/src/main/res/values-ro/strings.xml index 81e83da94..590bd9bff 100644 --- a/src/main/res/values-ro/strings.xml +++ b/src/main/res/values-ro/strings.xml @@ -426,7 +426,6 @@ limitations under the License. Există deja Intervaluri Precizia locației: %1$s - %1$d/%2$d Max Cadență Nu a fost posibilă scanarea pentru dispozitive Bluetooth (eroare %1$i). Aș dori să vă împărtășesc o imagine diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index a9c29db97..f9641328a 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -465,7 +465,6 @@ limitations under the License. Перезаписать Вы настроили предотвращение повторного импорта трека Услуга удаления - %1$d/%2$d Сторонние данные Скорость голоса Эта дорожка не может быть удалена, поскольку она записана в данный момент. diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml index 4977d186b..24fbd9ce5 100644 --- a/src/main/res/values-sk/strings.xml +++ b/src/main/res/values-sk/strings.xml @@ -517,7 +517,6 @@ limitations under the License. Senzory Bluetooth Cyklistické snímače, obvod kolies, snímače behu Viac o projekte OpenTracks - %1$d/%2$d Interval času, interval vzdialenosti, Max. vzdialenosť, Presnosť Myslím, že by vás mohol zaujímať tento obrázok. diff --git a/src/main/res/values-sl/strings.xml b/src/main/res/values-sl/strings.xml index 28cb76a30..632b65612 100644 --- a/src/main/res/values-sl/strings.xml +++ b/src/main/res/values-sl/strings.xml @@ -488,7 +488,6 @@ limitations under the License. Čas kroga Intervali Te sledi ni mogoče izbrisati, saj je trenutno posneta. - %1$d/%2$d Ura Uvoz Rad bi z vami delil sliko diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index b9df1affd..0e16c18f8 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -431,7 +431,6 @@ limitations under the License. Skriva / Spår som inte exporteras - %1$d/%2$d Sensordata lagras per inspelad plats. När det gäller en pulssensor betyder det att endast en pulsmätning lagras per plats. Om du står stilla eller är inomhus, kommer inga sensordata att registreras (men det kommer att visas). Hur registrerar OpenTracks data\? OpenTracks är ett program för sportspårning som helt respekterar din integritet. diff --git a/src/main/res/values-tr/strings.xml b/src/main/res/values-tr/strings.xml index 4a84da609..80d1533e0 100644 --- a/src/main/res/values-tr/strings.xml +++ b/src/main/res/values-tr/strings.xml @@ -492,7 +492,6 @@ limitations under the License. Parçaların yeniden içe aktarılmasını önleme Enlem/Boylam Güç - %1$d/%2$d Belirtilen filtre için etkinlik yok %1$.1f km/s Dizilimler diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index c7a326a22..fb2faa6a4 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -472,7 +472,6 @@ limitations under the License. Темп: %1$s Дані третіх сторін Служба видалення - %1$d/%2$d Цей трек не може бути видалений в тому вигляді, в якому він записаний в даний момент. Швидкість передачі голосу Велоспорт: частота обертання педалей diff --git a/src/main/res/values-vi/strings.xml b/src/main/res/values-vi/strings.xml index 1f4d0c950..1e5665ac8 100644 --- a/src/main/res/values-vi/strings.xml +++ b/src/main/res/values-vi/strings.xml @@ -471,7 +471,6 @@ limitations under the License. Không có bất kỳ khoảng thời gian sơ Hồ sơ của đua đầu tiên, để xem tổng thống kê Khoảng thời gian - %1$d/%2$d Giữ trên màn hình Xin vui lòng cho phép Bluetooth. Nhịp trung bình diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index 65ffd9e0b..4e31d474d 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -46,6 +46,8 @@ showOnMapFormatKey + totalRowsDeletedKey + settingsDefaultExportDirectory instantExportEnabled false diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 1b54ec131..57f9a0a27 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -494,7 +494,7 @@ limitations under the License. Delete track? The selected tracks and their markers will be permanently deleted from the device. Deleting… - %1$d/%2$d + %1$d tracks This track cannot be deleted as it is currently recorded. Discarding Track