Compare commits

..

21 Commits

Author SHA1 Message Date
Dennis Guse 6538f0d587 Release: v4.3.5 2023-05-15 17:37:40 +02:00
rjo12 5b0e7e5065 Bugfix: Off-by-one bug in subtracting UINT. Fixes #1557 2023-05-15 08:19:49 +02:00
Dennis Guse d6cf8ba90e Bump com.android.tools.build:gradle from 8.1.0-beta01 to 0.1.0-beta02 2023-05-13 13:43:33 +02:00
Dennis Guse 29568d0e3f Bugfix: prevent crash when creating a marker (no camera or gallery application present).
Fixes #1561.
2023-05-13 13:41:07 +02:00
Dennis Guse a571c4c93b Merge remote-tracking branch 'weblate/main' 2023-05-13 13:39:17 +02:00
mm4c 073fed6c84 Translated using Weblate (Dutch)
Currently translated at 9.5% (10 of 105 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/nl/
2023-05-11 15:50:15 +02:00
mm4c 6847e1f899 Translated using Weblate (Dutch)
Currently translated at 99.4% (502 of 505 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://hosted.weblate.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/nl/
2023-05-11 15:50:14 +02:00
Dennis Guse 427048ac11 Bugfix: crash when changing layout from one with 3 column layout to one with 2 columns.
Fixes #1554.
2023-05-08 23:34:43 +02:00
Shimon 240ea47c43 Translated using Weblate (Czech)
Currently translated at 99.8% (504 of 505 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://hosted.weblate.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/cs/
2023-05-06 15:48:40 +02:00
dependabot[bot] 068d56a850 Bump com.google.android.material:material from 1.8.0 to 1.9.0
Bumps [com.google.android.material:material](https://github.com/material-components/material-components-android) from 1.8.0 to 1.9.0.
- [Release notes](https://github.com/material-components/material-components-android/releases)
- [Commits](https://github.com/material-components/material-components-android/compare/1.8.0...1.9.0)

---
updated-dependencies:
- dependency-name: com.google.android.material:material
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-05 07:59:57 +02:00
plum7x 76d02da973 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (505 of 505 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://hosted.weblate.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/zh_Hant/
2023-05-04 10:49:21 +02:00
dependabot[bot] 4664895ae3 Bump androidx.mediarouter:mediarouter from 1.3.1 to 1.4.0
Bumps androidx.mediarouter:mediarouter from 1.3.1 to 1.4.0.

---
updated-dependencies:
- dependency-name: androidx.mediarouter:mediarouter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-04 07:18:21 +02:00
Rens Hijdra 5235c8cf83 Translated using Weblate (Dutch)
Currently translated at 97.6% (493 of 505 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://hosted.weblate.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/nl/
2023-05-02 16:01:51 +02:00
Dennis Guse 4f040ac79f Release: v4.3.4 2023-05-01 12:53:35 +02:00
Dennis Guse dcad42bf4d Build: remove resConfigs limiting included languages.
Fixes #1527.
2023-05-01 12:44:19 +02:00
mm4c 2eea93a4a3 Translated using Weblate (Dutch)
Currently translated at 9.5% (10 of 105 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/nl/
2023-04-29 15:50:49 +02:00
mm4c 55e419475a Translated using Weblate (Dutch)
Currently translated at 96.6% (488 of 505 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://hosted.weblate.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/nl/
2023-04-29 15:50:48 +02:00
Dennis Guse 9225d90e45 Release: v4.3.3 2023-04-27 18:49:23 +02:00
Dennis Guse 32dc6fef82 Bugfix: CustomLayout - title for pace was speed/GPS.
Introduced in d70e7b8788
2023-04-26 07:19:11 +02:00
Dennis Guse 96fb65b6b0 Bugfix: hidden DataFields should be hidden.
Introduced in d70e7b8788
2023-04-26 07:19:11 +02:00
dependabot[bot] 936bbf9264 Bump org.mockito:mockito-android from 5.3.0 to 5.3.1
Bumps [org.mockito:mockito-android](https://github.com/mockito/mockito) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.3.0...v5.3.1)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-android
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-24 07:01:14 +02:00
20 changed files with 210 additions and 66 deletions
+6 -8
View File
@@ -6,7 +6,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:8.1.0-beta01' classpath 'com.android.tools.build:gradle:8.1.0-beta02'
} }
} }
@@ -64,8 +64,8 @@ android {
defaultConfig { defaultConfig {
applicationId "de.dennisguse.opentracks" applicationId "de.dennisguse.opentracks"
versionCode 5189 versionCode 5211
versionName "v4.3.2" versionName "v4.3.5"
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\"" buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
@@ -74,8 +74,6 @@ android {
testInstrumentationRunner "de.dennisguse.opentracks.TestRunner" testInstrumentationRunner "de.dennisguse.opentracks.TestRunner"
testInstrumentationRunnerArguments clearPackageData: 'true' testInstrumentationRunnerArguments clearPackageData: 'true'
resConfigs "ar", "bg", "ca", "cs", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", "fr", "ga", "gl", "hi", "hr", "hu", "in", "it", "iw", "ja", "ko", "lt", "lv", "mo", "ms", "nb", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sr", "sv", "th", "tl", "tr", "uk", "vi", "zh"
} }
signingConfigs { signingConfigs {
nightly { nightly {
@@ -133,17 +131,17 @@ dependencies {
implementation 'androidx.preference:preference:1.2.0' implementation 'androidx.preference:preference:1.2.0'
implementation 'androidx.documentfile:documentfile:1.0.1' implementation 'androidx.documentfile:documentfile:1.0.1'
implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'com.google.android.material:material:1.8.0' implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.core:core-splashscreen:1.0.1' implementation 'androidx.core:core-splashscreen:1.0.1'
implementation 'androidx.mediarouter:mediarouter:1.3.1' implementation 'androidx.mediarouter:mediarouter:1.4.0'
androidTestImplementation 'androidx.test:core:1.5.0' androidTestImplementation 'androidx.test:core:1.5.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test:rules:1.5.0' androidTestImplementation 'androidx.test:rules:1.5.0'
androidTestImplementation 'androidx.test:runner:1.5.2' androidTestImplementation 'androidx.test:runner:1.5.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
androidTestImplementation 'org.mockito:mockito-android:5.3.0' androidTestImplementation 'org.mockito:mockito-android:5.3.1'
androidTestUtil 'androidx.test:orchestrator:1.4.2' androidTestUtil 'androidx.test:orchestrator:1.4.2'
} }
@@ -0,0 +1,5 @@
v4.3.3: OpenTracks
Bugfixes:
- Hidden fields were shown (introduced in v4.2.0)
- Speed was shown instead of pace (introduced in v4.2.0)
@@ -0,0 +1,4 @@
v4.3.4: OpenTracks
Bugfix:
- Android 13: regional locales could not be selected (introduced in v4.3.0)
@@ -0,0 +1,6 @@
v4.3.5: OpenTracks
Bugfix:
- Sensor parsing had a overflow one off bug (#1559)
- Insert marker: don't crash if no camera app is installed (#1561)
@@ -2,13 +2,13 @@ v3.19.0: OpenTracks
Wijzigingen: Wijzigingen:
- Ondersteuning voor Running Speed en Cadence (RCS) sensoren - Ondersteuning voor Running Speed en Cadence (RCS) sensoren
- Bij het delen van een track wordt een afbeelding gemaakt - Bij delen van een track: maakt een deel-afbeelding
- Niet trillen bij starten van opnemen - Niet trillen bij starten van opnemen
- Bij opnemen: UI toont recentst ontvangen hoogte, snelheid en richting (ook al is deze niet opgeslagen) - Bij opnemen: UI toont meest recente hoogte, snelheid en richting (zelfs als niet opgeslagen)
Bugfix: Bugfix:
- Berekening van totale tijd mag geen pauze-tijd bevatten (vereist opnieuw importeren) - Berekening totale tijd mag geen pauze-tijd bevatten (vereist opnieuw importeren)
- (opnieuw) Gebruik aangepaste overzichten indien aanwezig - (opnieuw) Gebruik aanwezige aangepaste overzichten
Ontwikkelaar: Ontwikkelaar:
- Upgrade naar SDK31 en AGP7.0.0 (vereist JDK11) - Upgrade naar SDK31 en AGP7.0.0 (vereist JDK11)
@@ -5,4 +5,4 @@ Wijzigingen:
- Gesproken meldingen van hartslag - Gesproken meldingen van hartslag
Bugfix: Bugfix:
- Crash due to race condition - Vastloper door race condities
@@ -11,13 +11,44 @@ public class UintUtilsTest {
assertEquals(0, UintUtils.diff(1, 1, UintUtils.UINT16_MAX)); assertEquals(0, UintUtils.diff(1, 1, UintUtils.UINT16_MAX));
assertEquals(1, UintUtils.diff(2, 1, UintUtils.UINT16_MAX)); assertEquals(1, UintUtils.diff(2, 1, UintUtils.UINT16_MAX));
assertEquals(3, UintUtils.diff(5, 2, UintUtils.UINT16_MAX)); assertEquals(3, UintUtils.diff(5, 2, UintUtils.UINT16_MAX));
assertEquals(65534, UintUtils.diff(1, 2, UintUtils.UINT16_MAX)); assertEquals(65535, UintUtils.diff(1, 2, UintUtils.UINT16_MAX)); /* unsigned 16 arithmetic is modulo UINT16_MAX + 1, not modulo UINT16_MAX */
assertEquals(65530, UintUtils.diff(UintUtils.UINT16_MAX, 5, UintUtils.UINT16_MAX)); assertEquals(65530, UintUtils.diff(UintUtils.UINT16_MAX, 5, UintUtils.UINT16_MAX));
/* Test modulo arithmetic for arguments that are out of range */
if (false) { /* false means UintUtils.diff() throws if arguments out of range */
assertEquals(0, UintUtils.diff(65537, 1, UintUtils.UINT16_MAX));
assertEquals(0, UintUtils.diff(1, 65537, UintUtils.UINT16_MAX));
assertEquals(0, UintUtils.diff(65537, 65537, UintUtils.UINT16_MAX));
assertEquals(0, UintUtils.diff(-65535, 1, UintUtils.UINT16_MAX));
assertEquals(0, UintUtils.diff(1, -65535, UintUtils.UINT16_MAX));
assertEquals(0, UintUtils.diff(-65535, -65535, UintUtils.UINT16_MAX));
assertEquals(0, UintUtils.diff(-65535, 65537, UintUtils.UINT16_MAX));
assertEquals(0, UintUtils.diff(65537, -65535, UintUtils.UINT16_MAX));
}
/* The following tests are the above, but for 32-bit unsigned. */
assertEquals(0, UintUtils.diff(1, 1, UintUtils.UINT32_MAX));
assertEquals(1, UintUtils.diff(2, 1, UintUtils.UINT32_MAX));
assertEquals(3, UintUtils.diff(5, 2, UintUtils.UINT32_MAX));
assertEquals(4294967295L, UintUtils.diff(1, 2, UintUtils.UINT32_MAX));
assertEquals(4294967290L, UintUtils.diff(UintUtils.UINT32_MAX, 5, UintUtils.UINT32_MAX));
if (false) { /* false means UintUtils.diff() throws if arguments out of range */
assertEquals(0, UintUtils.diff(4294967297L, 1, UintUtils.UINT32_MAX));
assertEquals(0, UintUtils.diff(1, 4294967297L, UintUtils.UINT32_MAX));
assertEquals(0, UintUtils.diff(4294967297L, 4294967297L, UintUtils.UINT32_MAX));
assertEquals(0, UintUtils.diff(-4294967295L, 1, UintUtils.UINT32_MAX));
assertEquals(0, UintUtils.diff(1, -4294967295L, UintUtils.UINT32_MAX));
assertEquals(0, UintUtils.diff(-4294967295L, -4294967295L, UintUtils.UINT32_MAX));
assertEquals(0, UintUtils.diff(-4294967295L, 4294967297L, UintUtils.UINT32_MAX));
assertEquals(0, UintUtils.diff(65537, -4294967297L, UintUtils.UINT32_MAX));
}
} }
@Test @Test
public void realData() { public void realData() {
assertEquals(1, UintUtils.diff(381616, 381615, UintUtils.UINT32_MAX)); assertEquals(1, UintUtils.diff(381616, 381615, UintUtils.UINT32_MAX));
} }
} }
@@ -52,8 +52,8 @@ public class StatisticsUtilsTest extends TestCase {
recordingLayout.addField(new DataField("key5", true, true, false)); recordingLayout.addField(new DataField("key5", true, true, false));
// when // when
RecordingLayout resultTrue = StatisticsUtils.filterVisible(recordingLayout, true); RecordingLayout resultTrue = recordingLayout.toRecordingLayout(true);
RecordingLayout resultFalse = StatisticsUtils.filterVisible(recordingLayout, false); RecordingLayout resultFalse = recordingLayout.toRecordingLayout(false);
// then // then
assertEquals(resultTrue.getFields().size(), 3); assertEquals(resultTrue.getFields().size(), 3);
@@ -122,17 +122,15 @@ public class StatisticsRecordingFragment extends Fragment {
} }
recordingLayout = newRecordingLayout; recordingLayout = newRecordingLayout;
viewBinding.statsLayout.setColumnCount(recordingLayout.getColumnsPerRow());
viewBinding.statsLayout.removeAllViews(); //Let's start from scratch viewBinding.statsLayout.removeAllViews(); //Let's start from scratch
viewBinding.statsLayout.setColumnCount(recordingLayout.getColumnsPerRow());
viewHolders.clear(); viewHolders.clear();
Map<String, Callable<StatisticViewHolder<?>>> m = Mapping.create(getContext()); Map<String, Callable<StatisticViewHolder<?>>> m = Mapping.create(getContext());
int rowIndex = 0; int rowIndex = 0;
int columnIndex = 0; int columnIndex = 0;
for (int i = 0; i < recordingLayout.getFields().size(); i++) { for (DataField dataField : recordingLayout.toRecordingLayout(true).getFields()) {
DataField dataField = recordingLayout.getFields().get(i);
GridLayout.LayoutParams param = new GridLayout.LayoutParams(); GridLayout.LayoutParams param = new GridLayout.LayoutParams();
param.setGravity(Gravity.FILL_HORIZONTAL); param.setGravity(Gravity.FILL_HORIZONTAL);
param.width = 0; param.width = 0;
@@ -14,6 +14,7 @@ public class UintUtils {
* @return diff * @return diff
*/ */
public static long diff(long a, long b, final long UINT_MAX) { public static long diff(long a, long b, final long UINT_MAX) {
if (a < 0 || b < 0) { if (a < 0 || b < 0) {
throw new RuntimeException("a or b cannot be less than zero."); throw new RuntimeException("a or b cannot be less than zero.");
} }
@@ -25,6 +26,6 @@ public class UintUtils {
return a - b; return a - b;
} }
return (UINT_MAX - b) + a; return (UINT_MAX + 1 - b) + a;
} }
} }
@@ -20,7 +20,6 @@ import de.dennisguse.opentracks.ui.customRecordingLayout.DataField;
import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout;
import de.dennisguse.opentracks.ui.customRecordingLayout.SettingsCustomLayoutEditAdapter; import de.dennisguse.opentracks.ui.customRecordingLayout.SettingsCustomLayoutEditAdapter;
import de.dennisguse.opentracks.ui.util.ArrayAdapterFilterDisabled; import de.dennisguse.opentracks.ui.util.ArrayAdapterFilterDisabled;
import de.dennisguse.opentracks.util.StatisticsUtils;
public class SettingsCustomLayoutEditActivity extends AbstractActivity implements SettingsCustomLayoutEditAdapter.SettingsCustomLayoutItemClickListener { public class SettingsCustomLayoutEditActivity extends AbstractActivity implements SettingsCustomLayoutEditAdapter.SettingsCustomLayoutItemClickListener {
@@ -41,7 +40,7 @@ public class SettingsCustomLayoutEditActivity extends AbstractActivity implement
// Recycler view with visible stats. // Recycler view with visible stats.
RecordingLayout recordingLayout = getIntent().getParcelableExtra(EXTRA_LAYOUT); RecordingLayout recordingLayout = getIntent().getParcelableExtra(EXTRA_LAYOUT);
profile = recordingLayout.getName(); profile = recordingLayout.getName();
recordingLayoutFieldsVisible = StatisticsUtils.filterVisible(recordingLayout, true); recordingLayoutFieldsVisible = recordingLayout.toRecordingLayout(true);
adapterFieldsVisible = new SettingsCustomLayoutEditAdapter(this, this, recordingLayoutFieldsVisible); adapterFieldsVisible = new SettingsCustomLayoutEditAdapter(this, this, recordingLayoutFieldsVisible);
numColumns = recordingLayout.getColumnsPerRow(); numColumns = recordingLayout.getColumnsPerRow();
@@ -90,7 +89,7 @@ public class SettingsCustomLayoutEditActivity extends AbstractActivity implement
viewBinding.rowsOptions.setText(rowsOptionAdapter.getItem(numColumns - 1).toString(), false); viewBinding.rowsOptions.setText(rowsOptionAdapter.getItem(numColumns - 1).toString(), false);
// Recycler view with not visible stats. // Recycler view with not visible stats.
recordingLayoutFieldsHidden = StatisticsUtils.filterVisible(recordingLayout, false); recordingLayoutFieldsHidden = recordingLayout.toRecordingLayout(false);
adapterFieldsHidden = new SettingsCustomLayoutEditAdapter(this, this, recordingLayoutFieldsHidden); adapterFieldsHidden = new SettingsCustomLayoutEditAdapter(this, this, recordingLayoutFieldsHidden);
RecyclerView recyclerViewNotVisible = viewBinding.recyclerViewNotVisible; RecyclerView recyclerViewNotVisible = viewBinding.recyclerViewNotVisible;
recyclerViewNotVisible.setLayoutManager(new LinearLayoutManager(this)); recyclerViewNotVisible.setLayoutManager(new LinearLayoutManager(this));
@@ -66,6 +66,12 @@ public class RecordingLayout implements Parcelable {
return new ArrayList<>(dataFields); return new ArrayList<>(dataFields);
} }
public RecordingLayout toRecordingLayout(boolean visibility) {
RecordingLayout result = new RecordingLayout(this.getName());
result.addFields(dataFields.stream().filter(f -> f.isVisible() == visibility).collect(Collectors.toList()));
return result;
}
public void moveField(int from, int to) { public void moveField(int from, int to) {
DataField dataFieldToMove = dataFields.remove(from); DataField dataFieldToMove = dataFields.remove(from);
dataFields.add(to, dataFieldToMove); dataFields.add(to, dataFieldToMove);
@@ -16,6 +16,7 @@
package de.dennisguse.opentracks.ui.markers; package de.dennisguse.opentracks.ui.markers;
import android.content.ActivityNotFoundException;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.Bitmap; import android.graphics.Bitmap;
@@ -244,7 +245,12 @@ public class MarkerEditActivity extends AbstractActivity {
private void createMarkerWithPicture() { private void createMarkerWithPicture() {
Pair<Intent, Uri> intentAndPhotoUri = MarkerUtils.createTakePictureIntent(this, getTrackId()); Pair<Intent, Uri> intentAndPhotoUri = MarkerUtils.createTakePictureIntent(this, getTrackId());
cameraPhotoUri = intentAndPhotoUri.second; cameraPhotoUri = intentAndPhotoUri.second;
takePictureFromCamera.launch(intentAndPhotoUri.first);
try {
takePictureFromCamera.launch(intentAndPhotoUri.first);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, R.string.no_compatible_camera_installed, Toast.LENGTH_LONG).show();
}
} }
private void createMarkerWithGalleryImage() { private void createMarkerWithGalleryImage() {
@@ -256,6 +262,10 @@ public class MarkerEditActivity extends AbstractActivity {
intent = new Intent(Intent.ACTION_GET_CONTENT); intent = new Intent(Intent.ACTION_GET_CONTENT);
} }
intent.setType("image/*"); intent.setType("image/*");
takePictureFromGallery.launch(intent); try {
takePictureFromGallery.launch(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, R.string.no_compatible_gallery_installed, Toast.LENGTH_LONG).show();
}
} }
} }
@@ -4,11 +4,8 @@ import android.content.Context;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import java.util.stream.Collectors;
import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.PreferencesUtils;
import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout;
public class StatisticsUtils { public class StatisticsUtils {
@@ -24,11 +21,4 @@ public class StatisticsUtils {
return context.getString(R.string.stats_empty_value_integer); return context.getString(R.string.stats_empty_value_integer);
} }
} }
@Deprecated //Add to Layout?
public static RecordingLayout filterVisible(RecordingLayout recordingLayout, boolean visible) {
RecordingLayout result = new RecordingLayout(recordingLayout.getName());
result.addFields(recordingLayout.getFields().stream().filter(f -> f.isVisible() == visible).collect(Collectors.toList()));
return result;
}
} }
@@ -65,15 +65,20 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
} }
} }
public static class SpeedOrPace extends GenericStatisticsViewHolder { public abstract static class SpeedOrPace extends GenericStatisticsViewHolder {
private final boolean reportSpeed;
public SpeedOrPace(boolean reportSpeed) {
this.reportSpeed = reportSpeed;
}
@Override @Override
public void onChanged(UnitSystem unitSystem, RecordingData data) { public void onChanged(UnitSystem unitSystem, RecordingData data) {
// TODO Pace wont work for now
boolean reportSpeed = true;
SpeedFormatter localSpeedFormatter = SpeedFormatter.Builder() SpeedFormatter localSpeedFormatter = SpeedFormatter.Builder()
.setUnit(unitSystem) .setUnit(unitSystem)
.setReportSpeedOrPace(reportSpeed).build(getContext()); .setReportSpeedOrPace(reportSpeed)
.build(getContext());
Pair<String, String> valueAndUnit; Pair<String, String> valueAndUnit;
@@ -85,7 +90,9 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
} else { } else {
Speed speed = latestTrackPoint != null && latestTrackPoint.hasSpeed() ? latestTrackPoint.getSpeed() : null; Speed speed = latestTrackPoint != null && latestTrackPoint.hasSpeed() ? latestTrackPoint.getSpeed() : null;
valueAndUnit = localSpeedFormatter.getSpeedParts(speed); valueAndUnit = localSpeedFormatter.getSpeedParts(speed);
getBinding().statsDescriptionMain.setText(getContext().getString(R.string.description_speed_source_gps));
String title = reportSpeed ? getContext().getString(R.string.stats_speed) : getContext().getString(R.string.stats_pace);
getBinding().statsDescriptionMain.setText(title);
} }
getBinding().statsValue.setText(valueAndUnit.first); getBinding().statsValue.setText(valueAndUnit.first);
@@ -93,6 +100,20 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
} }
} }
public static class SpeedVH extends SpeedOrPace {
public SpeedVH() {
super(true);
}
}
public static class PaceVH extends SpeedOrPace {
public PaceVH() {
super(false);
}
}
public static class AverageMovingSpeed extends GenericStatisticsViewHolder { public static class AverageMovingSpeed extends GenericStatisticsViewHolder {
@Override @Override
@@ -17,8 +17,8 @@ public class Mapping {
m.put(context.getString(R.string.stats_custom_layout_distance_key), GenericStatisticsViewHolder.Distance::new); m.put(context.getString(R.string.stats_custom_layout_distance_key), GenericStatisticsViewHolder.Distance::new);
m.put(context.getString(R.string.stats_custom_layout_speed_key), GenericStatisticsViewHolder.SpeedOrPace::new); m.put(context.getString(R.string.stats_custom_layout_speed_key), GenericStatisticsViewHolder.SpeedVH::new);
m.put(context.getString(R.string.stats_custom_layout_pace_key), GenericStatisticsViewHolder.SpeedOrPace::new); m.put(context.getString(R.string.stats_custom_layout_pace_key), GenericStatisticsViewHolder.PaceVH::new);
m.put(context.getString(R.string.stats_custom_layout_average_moving_speed_key), GenericStatisticsViewHolder.AverageMovingSpeed::new); m.put(context.getString(R.string.stats_custom_layout_average_moving_speed_key), GenericStatisticsViewHolder.AverageMovingSpeed::new);
m.put(context.getString(R.string.stats_custom_layout_average_speed_key), GenericStatisticsViewHolder.AverageSpeed::new); m.put(context.getString(R.string.stats_custom_layout_average_speed_key), GenericStatisticsViewHolder.AverageSpeed::new);
m.put(context.getString(R.string.stats_custom_layout_max_speed_key), GenericStatisticsViewHolder.MaxSpeed::new); m.put(context.getString(R.string.stats_custom_layout_max_speed_key), GenericStatisticsViewHolder.MaxSpeed::new);
+50
View File
@@ -569,4 +569,54 @@ limitations under the License.
<string name="settings_public_api_dashboard_enabled_summary_off">Zaznamenaná data nebudou automaticky sdílena s jinými aplikacemi.</string> <string name="settings_public_api_dashboard_enabled_summary_off">Zaznamenaná data nebudou automaticky sdílena s jinými aplikacemi.</string>
<string name="pace">Tempo</string> <string name="pace">Tempo</string>
<string name="track_discarding">Mazání trasy</string> <string name="track_discarding">Mazání trasy</string>
<plurals name="voiceSpeedMKnots">
<item quantity="one">1 uzel</item>
<item quantity="few">%1$.1f uzly</item>
<item quantity="other">%1$.1f uzlů</item>
</plurals>
<string name="error_crash_title">%1$s selhal</string>
<string name="share_crash_report">Sdílet hlášení o selhání</string>
<string name="voice_on_device_speaker_title">Použít reproduktor zařízení</string>
<string name="description_pace_nautical">Tempo (min/NM)</string>
<string name="voice_per_nautical_mile">za námořní míli</string>
<string name="settings_announcements_average_speed_pace">Průměrná rychlost/tempo</string>
<string name="settings_announcements_average_heart_rate">Průměrný srdeční tep</string>
<string name="value_float_knots">%1$.1f uzlů</string>
<string name="track_delete_number_of_tracks">%1$d stop</string>
<string name="image_discard">Vyřadit</string>
<string name="show_on_map_format_ask">Zeptat se</string>
<string name="settings_stats_units_nautical">Námořní (NM, ft)</string>
<string name="report_bug">Nahlásit chybu</string>
<string name="settings_announcements_lap_heart_rate">Srdeční tep kola</string>
<string name="introduction_osm_dashboard">OpenTracks sám o sobě mapu neposkytuje. Pro zobrazení záznamů na mapě si nainstalujte OSMDashboard.</string>
<string name="select_show_on_map_behavior">Zvolte chování \"zobrazit na mapě\"</string>
<plurals name="voiceDistanceMiles">
<item quantity="one">1 míle</item>
<item quantity="few">%1$.1f míle</item>
<item quantity="other">%1$.1f mil</item>
</plurals>
<plurals name="voiceDistanceKilometers">
<item quantity="one">1 kilometr</item>
<item quantity="few">%1$.1f kilometry</item>
<item quantity="other">%1$.1f kilometrů</item>
</plurals>
<string name="always">Vždy</string>
<string name="help_data_google_play_services_content">Ne</string>
<string name="description_speed_nautical">Rychlost (uzly)</string>
<string name="settings_export_filename_title">Formát názvu souboru</string>
<plurals name="voiceDistanceNauticalMiles">
<item quantity="one">1 námořní míle</item>
<item quantity="few">%1$.1f námořní míle</item>
<item quantity="other">%1$.1f námořních mil</item>
</plurals>
<string name="show_on_dashboard_not_installed">Není nainstalována žádná aplikace podporující OpenTracks Dashboard API.</string>
<string name="settings_announcements_lap_speed_pace">Rychlost/tempo kola</string>
<string name="settings_sensor_heart_rate_max">Zóny: maximální srdeční tep (bpm)</string>
<string name="settings_api_summary">Vzdálené ovládání a rozhraní API pro statistiky pro jiné aplikace</string>
<string name="settings_public_api_package_title">Název balíčku pro veřejné rozhraní API</string>
<string name="unit_nautical_mile">NM</string>
<string name="unit_knots">kn</string>
<string name="unit_minute_per_nautical_mile">min/NM</string>
<string name="value_integer_knots">%1$d uzlů</string>
<string name="value_float_knots_recommended">%1$.1f uzlů (doporučeno)</string>
</resources> </resources>
+40 -17
View File
@@ -38,7 +38,7 @@ limitations under the License.
<string name="help_storage_pictures_content">Deze worden opgeslagen in de interne opslag van de app (d.w.z. alleen toegankelijk binnen OpenTracks).</string> <string name="help_storage_pictures_content">Deze worden opgeslagen in de interne opslag van de app (d.w.z. alleen toegankelijk binnen OpenTracks).</string>
<string name="help_track_export_title">Hoe kan ik opgenomen tracks exporteren/delen?</string> <string name="help_track_export_title">Hoe kan ik opgenomen tracks exporteren/delen?</string>
<string name="help_track_export_content"> Tracks kunnen worden geëxporteerd vanuit de instellingen als KMZ, KML of GPX. KMZ/KML alle gegevens; GPX alleen locaties. Tracks die worden gedeeld via het <i>share-icoontje</i> worden gedeeld als KMZ </string> <string name="help_track_export_content"> Tracks kunnen worden geëxporteerd vanuit de instellingen als KMZ, KML of GPX. KMZ/KML alle gegevens; GPX alleen locaties. Tracks die worden gedeeld via het <i>share-icoontje</i> worden gedeeld als KMZ </string>
<string name="help_data_google_play_services_title">Heeft OpenTracks Google Play Service nodig/gebruikt?</string> <string name="help_data_google_play_services_title">Gebruikt/vereist OpenTracks Google Play Service\?</string>
<string name="help_recording_title">Hoe legt OpenTracks gegevens vast?</string> <string name="help_recording_title">Hoe legt OpenTracks gegevens vast?</string>
<string name="help_recording_content"> <string name="help_recording_content">
OpenTracks gebruikt de GPS-sensor van het apparaat om de locatie continu te registreren. OpenTracks gebruikt de GPS-sensor van het apparaat om de locatie continu te registreren.
@@ -264,18 +264,18 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<string name="settings_stats_units_metric">Metrisch (km, m)</string> <string name="settings_stats_units_metric">Metrisch (km, m)</string>
<string name="settings_stats_units_title">Voorkeurseenheden</string> <string name="settings_stats_units_title">Voorkeurseenheden</string>
<!-- Share Track --> <!-- Share Track -->
<string name="share_track_share_file_body">Ik denk dat u misschien wel geïnteresseerd bent in deze route. <string name="share_track_share_file_body">Misschien ben je geïnteresseerd in deze route.
\n \n
\n%1$s</string> \n%1$s</string>
<string name="share_track_subject">Ik wil graag een route met u delen</string> <string name="share_track_subject">Ik wil graag een route met u delen</string>
<!-- Stats --> <!-- Stats -->
<string name="stats_average_moving_pace">Gem. verplaatsingstempo</string> <string name="stats_average_moving_pace">Gem. bewegingstempo</string>
<string name="stats_average_moving_speed">Gem. verplaatsingssnelheid</string> <string name="stats_average_moving_speed">Gem. bewegingssnelheid</string>
<string name="stats_average_pace">Gem. tempo</string> <string name="stats_average_pace">Gem. tempo</string>
<string name="stats_average_speed">Gem. snelheid</string> <string name="stats_average_speed">Gem. snelheid</string>
<string name="stats_altitude">Hoogte</string> <string name="stats_altitude">Hoogte</string>
<string name="stats_fastest_pace">Snelste tempo</string> <string name="stats_fastest_pace">Snelste tempo</string>
<string name="stats_gain">Stijging</string> <string name="stats_gain">Gestegen</string>
<string name="stats_latitude">Breedtegraad</string> <string name="stats_latitude">Breedtegraad</string>
<string name="stats_longitude">Lengtegraad</string> <string name="stats_longitude">Lengtegraad</string>
<string name="stats_max_speed">Maximum snelheid</string> <string name="stats_max_speed">Maximum snelheid</string>
@@ -287,7 +287,7 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<!-- Track --> <!-- Track -->
<string name="track_name_format">Route %1$d</string> <string name="track_name_format">Route %1$d</string>
<string name="track_recording_notification_accuracy">Locatie nauwkeurigheid: %1$s</string> <string name="track_recording_notification_accuracy">Locatie nauwkeurigheid: %1$s</string>
<string name="track_markers">Markeringen voor %1$s</string> <string name="track_markers">%1$s Markeringen</string>
<!-- Track Delete --> <!-- Track Delete -->
<string name="track_delete_one_confirm_message">De route en de bijbehorende markeringen worden definitief verwijderd van het apparaat.</string> <string name="track_delete_one_confirm_message">De route en de bijbehorende markeringen worden definitief verwijderd van het apparaat.</string>
<string name="track_delete_one_confirm_title">Route verwijderen?</string> <string name="track_delete_one_confirm_title">Route verwijderen?</string>
@@ -361,7 +361,7 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<string name="waypoint_type_drinking_water">drinkwater</string> <string name="waypoint_type_drinking_water">drinkwater</string>
<string name="waypoint_type_falling_rocks">vallende stenen</string> <string name="waypoint_type_falling_rocks">vallende stenen</string>
<string name="waypoint_type_ferry">veerboot</string> <string name="waypoint_type_ferry">veerboot</string>
<string name="waypoint_type_fire_place">open haard</string> <string name="waypoint_type_fire_place">vuurplaats</string>
<string name="waypoint_type_fire_station">brandweerkazerne</string> <string name="waypoint_type_fire_station">brandweerkazerne</string>
<string name="waypoint_type_fishing">vissen</string> <string name="waypoint_type_fishing">vissen</string>
<string name="waypoint_type_gas_station">tankstation</string> <string name="waypoint_type_gas_station">tankstation</string>
@@ -369,7 +369,7 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<string name="waypoint_type_grocery_store">kruidenier</string> <string name="waypoint_type_grocery_store">kruidenier</string>
<string name="waypoint_type_hair_dresser">kapper</string> <string name="waypoint_type_hair_dresser">kapper</string>
<string name="waypoint_type_harbor">haven</string> <string name="waypoint_type_harbor">haven</string>
<string name="waypoint_type_hiking_path">trektochtpad</string> <string name="waypoint_type_hiking_path">wandelroute</string>
<string name="waypoint_type_hotel">hotel</string> <string name="waypoint_type_hotel">hotel</string>
<string name="waypoint_type_house">huis</string> <string name="waypoint_type_house">huis</string>
<string name="waypoint_type_information">informatie</string> <string name="waypoint_type_information">informatie</string>
@@ -390,10 +390,10 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<string name="waypoint_type_swimming_pool">zwembad</string> <string name="waypoint_type_swimming_pool">zwembad</string>
<string name="waypoint_type_telephone">telefoon</string> <string name="waypoint_type_telephone">telefoon</string>
<string name="waypoint_type_theater">schouwburg</string> <string name="waypoint_type_theater">schouwburg</string>
<string name="waypoint_type_toilet">restroom</string> <string name="waypoint_type_toilet">toilet</string>
<string name="waypoint_type_tourist_information">toeristische informatie</string> <string name="waypoint_type_tourist_information">toeristische informatie</string>
<string name="waypoint_type_tree">boom</string> <string name="waypoint_type_tree">boom</string>
<string name="waypoint_type_tunnel">schacht</string> <string name="waypoint_type_tunnel">tunnel</string>
<string name="waypoint_type_waterfall">waterval</string> <string name="waypoint_type_waterfall">waterval</string>
<string name="waypoint_type_water_fountain">waterfontein</string> <string name="waypoint_type_water_fountain">waterfontein</string>
<string name="waypoint_type_waypoint">routepunt</string> <string name="waypoint_type_waypoint">routepunt</string>
@@ -416,7 +416,7 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<string name="import_no_kml_file_found">Geen doc.kml bestand gevonden in KMZ</string> <string name="import_no_kml_file_found">Geen doc.kml bestand gevonden in KMZ</string>
<string name="settings_recording_fullscreen_on_while_recording_title">Volledig scherm</string> <string name="settings_recording_fullscreen_on_while_recording_title">Volledig scherm</string>
<string name="gps_fixed_and_ready">GPS vast en klaar</string> <string name="gps_fixed_and_ready">GPS vast en klaar</string>
<string name="aggregated_stats_empty_message">Neem uw eerste track op om geaggregeerde statistieken te zien</string> <string name="aggregated_stats_empty_message">Neem uw eerste route op om geaggregeerde statistieken te zien</string>
<string name="track_detail_intervals_tab">Intervallen</string> <string name="track_detail_intervals_tab">Intervallen</string>
<string name="settings_sensor_wheel_circumference">Wielomtrek (mm)</string> <string name="settings_sensor_wheel_circumference">Wielomtrek (mm)</string>
<string name="settings_prevent_reimport_tracks_title">Voorkom herinvoer van tracks</string> <string name="settings_prevent_reimport_tracks_title">Voorkom herinvoer van tracks</string>
@@ -435,7 +435,7 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<string name="settings_night_mode_option_day">Dag</string> <string name="settings_night_mode_option_day">Dag</string>
<string name="settings_night_mode_option_system">Systeem</string> <string name="settings_night_mode_option_system">Systeem</string>
<string name="settings_night_mode_title">UI Thema</string> <string name="settings_night_mode_title">UI Thema</string>
<string name="stats_loss">Verlies</string> <string name="stats_loss">Gedaald</string>
<string name="interval_list_empty_message">Er zijn nog geen intervallen</string> <string name="interval_list_empty_message">Er zijn nog geen intervallen</string>
<string name="stats_split_interval">Gesplitst interval</string> <string name="stats_split_interval">Gesplitst interval</string>
<string name="instant_export_enabled_title">Directe uitvoer na de training</string> <string name="instant_export_enabled_title">Directe uitvoer na de training</string>
@@ -460,7 +460,7 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<string name="import_unable_to_import_file">Kan bestand niet importeren: %1$s</string> <string name="import_unable_to_import_file">Kan bestand niet importeren: %1$s</string>
<string name="import_error_info">%1$s: %2$s</string> <string name="import_error_info">%1$s: %2$s</string>
<string name="import_file_imported">Bestand %1$s geimporteerd</string> <string name="import_file_imported">Bestand %1$s geimporteerd</string>
<string name="hold_to_stop">Hou vast om te stoppen</string> <string name="hold_to_stop">Indrukken om te stoppen</string>
<string name="track_speed_notification">Snelheid: %1$s</string> <string name="track_speed_notification">Snelheid: %1$s</string>
<string name="track_distance_notification">Afstand: %1$s</string> <string name="track_distance_notification">Afstand: %1$s</string>
<string name="track_pace_notification">Tempo: %1$s</string> <string name="track_pace_notification">Tempo: %1$s</string>
@@ -478,7 +478,7 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<string name="settings_announcements_summary">Tijd, afstand, spraaksnelheid</string> <string name="settings_announcements_summary">Tijd, afstand, spraaksnelheid</string>
<string name="generic_yesterday">Gisteren</string> <string name="generic_yesterday">Gisteren</string>
<string name="settings_ui_title">User Interface</string> <string name="settings_ui_title">User Interface</string>
<string name="stats_coordinates">Breedte- /Lengtegraad</string> <string name="stats_coordinates">Coördinaten</string>
<string name="settings_announcements_distance_frequency">Afstandsinterval</string> <string name="settings_announcements_distance_frequency">Afstandsinterval</string>
<string name="settings_recording_idle_speed_title">Drempelwaarde stationair</string> <string name="settings_recording_idle_speed_title">Drempelwaarde stationair</string>
<string name="value_float_kilometer_hour">%1$.1f km/u</string> <string name="value_float_kilometer_hour">%1$.1f km/u</string>
@@ -494,9 +494,9 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<string name="settings_announcements_totaltime_frequency">Tijdsinterval</string> <string name="settings_announcements_totaltime_frequency">Tijdsinterval</string>
<string name="field_set_secondary">Secondair</string> <string name="field_set_secondary">Secondair</string>
<string name="field_remove_from_layout">Verwijderen</string> <string name="field_remove_from_layout">Verwijderen</string>
<string name="settings_public_api_dashboard_enabled_title">Automatische overdracht van gegevens</string> <string name="settings_public_api_dashboard_enabled_title">Automatische data overdracht</string>
<string name="settings_public_api_dashboard_enabled_summary_on">Een app die een opname start, heeft ook toegang tot de opgenomen gegevens.</string> <string name="settings_public_api_dashboard_enabled_summary_on">Een app die een opname start, heeft ook toegang tot de opgenomen gegevens.</string>
<string name="stats_sensors_cadence">Cadans</string> <string name="stats_sensors_cadence">Ritme</string>
<string name="stats_sensors_heart_rate">Hartslag</string> <string name="stats_sensors_heart_rate">Hartslag</string>
<string name="settings_layout_reset">Aangepaste lay-out terugzetten</string> <string name="settings_layout_reset">Aangepaste lay-out terugzetten</string>
<string name="settings_layout_reset_confirm_message">Alle lay-out instellingen worden teruggezet naar de standaardwaarden. Tracks worden niet gewist.</string> <string name="settings_layout_reset_confirm_message">Alle lay-out instellingen worden teruggezet naar de standaardwaarden. Tracks worden niet gewist.</string>
@@ -538,7 +538,7 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<string name="settings_public_api_disabled_toast">OpenTracks Publieke API is uitgeschakeld: inschakelen kan onder instellingen.</string> <string name="settings_public_api_disabled_toast">OpenTracks Publieke API is uitgeschakeld: inschakelen kan onder instellingen.</string>
<string name="stats_clock">Klok</string> <string name="stats_clock">Klok</string>
<string name="aggregated_stats_filter_no_results">Er zijn geen activiteiten voor het aangegeven filter</string> <string name="aggregated_stats_filter_no_results">Er zijn geen activiteiten voor het aangegeven filter</string>
<string name="no_compatible_file_manager_installed">Geen ondersteunde bestandsbeheerder geïnstalleerd</string> <string name="no_compatible_file_manager_installed">Geen geschikte bestandsbeheerder geïnstalleerd</string>
<string name="generic_undo">Terugzetten</string> <string name="generic_undo">Terugzetten</string>
<string name="settings_sensor_bluetooth_service_filter_enabled">Alleen Bluetooth-apparaten tonen die gevraagde diensten melden</string> <string name="settings_sensor_bluetooth_service_filter_enabled">Alleen Bluetooth-apparaten tonen die gevraagde diensten melden</string>
<string name="settings_activity_defaults_category">Standaardinstellingen van een activiteit</string> <string name="settings_activity_defaults_category">Standaardinstellingen van een activiteit</string>
@@ -586,4 +586,27 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<string name="always">Altijd</string> <string name="always">Altijd</string>
<string name="show_on_map_format_ask">Vragen</string> <string name="show_on_map_format_ask">Vragen</string>
<string name="select_show_on_map_behavior">Selecteer \"toon op kaart\"-gedrag</string> <string name="select_show_on_map_behavior">Selecteer \"toon op kaart\"-gedrag</string>
<string name="show_on_dashboard_not_installed">Er is geen app geïnstalleerd die OpenTracks Dashboard API ondersteunt.</string>
<string name="help_data_google_play_services_content">Nee</string>
<string name="introduction_osm_dashboard">OpenTracks zelf biedt geen kaart. Installeer OSMDashboard om uw opnames op een kaart te bekijken.</string>
<string name="unit_nautical_mile">NM</string>
<plurals name="voiceSpeedMKnots">
<item quantity="one">1 knoop</item>
<item quantity="other">%1$.1f knopen</item>
</plurals>
<plurals name="voiceDistanceNauticalMiles">
<item quantity="one">1 zeemijl</item>
<item quantity="other">%1$.1f zeemijlen</item>
</plurals>
<string name="value_integer_knots">%1$d knopen</string>
<string name="voice_per_nautical_mile">per zeemijl</string>
<string name="track_delete_number_of_tracks">%1$d routes</string>
<string name="voice_on_device_speaker_title">Gebruik toestelspeaker</string>
<string name="settings_public_api_package_title">Pakketnaam voor openbare API</string>
<string name="settings_stats_units_nautical">Nautisch (NM, ft)</string>
<string name="settings_api_summary">Afstandsbediening en statistieken API voor andere apps</string>
<string name="settings_sensor_heart_rate_max">Zones: maximum Hartslag (bpm)</string>
<string name="value_float_knots_recommended">%1$.1f knopen (aanbevolen)</string>
<string name="value_float_knots">%1$.1f knopen</string>
<string name="description_speed_nautical">Snelheid (knopen)</string>
</resources> </resources>
+4 -4
View File
@@ -323,7 +323,7 @@ limitations under the License.
<string name="sensor_state_power_avg">平均功率</string> <string name="sensor_state_power_avg">平均功率</string>
<string name="sensor_could_not_scan">無法掃描藍牙裝置 (錯誤 %1$i).</string> <string name="sensor_could_not_scan">無法掃描藍牙裝置 (錯誤 %1$i).</string>
<string name="bluetooth_disabled">請啟用藍芽。</string> <string name="bluetooth_disabled">請啟用藍芽。</string>
<string name="settings_open_tracks_title">開啟蹤跡</string> <string name="settings_open_tracks_title">Open Tracks</string>
<string name="settings_open_tracks_summary">所有關於 OpenTracks 專案</string> <string name="settings_open_tracks_summary">所有關於 OpenTracks 專案</string>
<string name="settings_defaults_title">預設單位與活動</string> <string name="settings_defaults_title">預設單位與活動</string>
<string name="settings_defaults_summary">首選單位、預設活動、蹤跡預設名稱</string> <string name="settings_defaults_summary">首選單位、預設活動、蹤跡預設名稱</string>
@@ -351,11 +351,11 @@ limitations under the License.
<string name="settings_recording_customize_layout_title">自訂您的紀錄布局</string> <string name="settings_recording_customize_layout_title">自訂您的紀錄布局</string>
<string name="settings_recording_customize_layout_select_columns">每列資料欄位</string> <string name="settings_recording_customize_layout_select_columns">每列資料欄位</string>
<string name="settings_recording_show_on_lockscreen_while_recording_title">在鎖定畫面顯示統計資料</string> <string name="settings_recording_show_on_lockscreen_while_recording_title">在鎖定畫面顯示統計資料</string>
<string name="settings_recording_show_on_lockscreen_while_recording_summary">當紀錄時,在不解鎖裝置的情況下顯示統計資料。</string> <string name="settings_recording_show_on_lockscreen_while_recording_summary">當記錄時,在不解鎖裝置的情況下顯示統計資料。</string>
<string name="settings_recording_keep_screen_on_while_recording_title">維持螢幕開啟</string> <string name="settings_recording_keep_screen_on_while_recording_title">維持螢幕開啟</string>
<string name="settings_recording_keep_screen_on_while_recording_summary">記錄中,維持螢幕開啟。</string> <string name="settings_recording_keep_screen_on_while_recording_summary">當記錄時,維持螢幕開啟。</string>
<string name="settings_recording_fullscreen_on_while_recording_title">全螢幕</string> <string name="settings_recording_fullscreen_on_while_recording_title">全螢幕</string>
<string name="settings_recording_fullscreen_on_while_recording_summary">記錄中,在全螢幕中呈現。</string> <string name="settings_recording_fullscreen_on_while_recording_summary">當記錄時,在全螢幕中呈現。</string>
<string name="settings_recording_default_activity_title">預設活動類型</string> <string name="settings_recording_default_activity_title">預設活動類型</string>
<string name="settings_recording_location_frequency_summary">每 %1$s記錄一次位置資訊</string> <string name="settings_recording_location_frequency_summary">每 %1$s記錄一次位置資訊</string>
<string name="settings_recording_max_recording_distance_summary">系統會在兩個地點之間的距離大於 %1$s時建立新的區段</string> <string name="settings_recording_max_recording_distance_summary">系統會在兩個地點之間的距離大於 %1$s時建立新的區段</string>
+2
View File
@@ -664,6 +664,8 @@ limitations under the License.
<string name="field_set_secondary">Secondary</string> <string name="field_set_secondary">Secondary</string>
<string name="field_remove_from_layout">Remove</string> <string name="field_remove_from_layout">Remove</string>
<string name="no_compatible_file_manager_installed">No compatible file manager installed</string> <string name="no_compatible_file_manager_installed">No compatible file manager installed</string>
<string name="no_compatible_camera_installed">No compatible camera application installed</string>
<string name="no_compatible_gallery_installed">No compatible image gallery application installed</string>
<string name="error_crash_title">%1$s crashed</string> <string name="error_crash_title">%1$s crashed</string>
<string name="share_crash_report">Share crash report</string> <string name="share_crash_report">Share crash report</string>
<string name="report_bug">Report bug</string> <string name="report_bug">Report bug</string>