Compare commits

...

13 Commits

Author SHA1 Message Date
Dennis Guse c7738b1cb2 Release: v4.27.2 2026-06-24 06:24:33 +02:00
Dennis Guse 713f5c7708 Cleanup. 2026-06-24 06:10:12 +02:00
Dennis Guse b9a36d1b3c Bugfix: storing idle and sensor-based trackpoints might happen in the wrong order (race condition).
Fixes #2356.
2026-06-21 18:50:26 +02:00
Dennis Guse 34e89ea3f9 TimeZoneOffsets now supports minutes.
Fixes #2357.
2026-06-21 13:54:59 +02:00
CI/CD Bot by pstorch 50a0e37086 Update actions/checkout action to v7 2026-06-19 05:44:07 +02:00
CI/CD Bot by pstorch 11ac6b7279 Update dependency gradle to v9.6.0 2026-06-19 00:34:17 +00:00
CI/CD Bot by pstorch aadb79bf7d Update dependency androidx.core:core-location-altitude to v1.0.0 2026-06-17 17:34:17 +00:00
ovl-005 da6b26644e Translated using Weblate (Norwegian Bokmål)
Currently translated at 98.7% (539 of 546 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/nb_NO/
2026-06-12 21:41:16 +00:00
qwjyh b264655d75 Translated using Weblate (Japanese)
Currently translated at 52.1% (285 of 546 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/ja/
2026-06-09 14:16:51 +00:00
Outbreak2096 1ea9c0b216 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (546 of 546 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/zh_Hans/
2026-06-09 14:16:51 +00:00
SomeTr 8040edac7a Translated using Weblate (Ukrainian)
Currently translated at 100.0% (546 of 546 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/uk/
2026-06-09 14:16:51 +00:00
ghose 037c79a1c5 Translated using Weblate (Galician)
Currently translated at 100.0% (546 of 546 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/gl/
2026-06-09 14:16:51 +00:00
Priit Jõerüüt bc46f7447e Translated using Weblate (Estonian)
Currently translated at 100.0% (546 of 546 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/et/
2026-06-09 14:16:51 +00:00
13 changed files with 88 additions and 33 deletions
+2 -2
View File
@@ -13,7 +13,7 @@ jobs:
image: 'ubuntu:android-24.04'
steps:
- name: Checkout sources
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 1
@@ -27,7 +27,7 @@ jobs:
image: 'ubuntu:android-24.04'
steps:
- name: Checkout sources
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 1
+3 -3
View File
@@ -47,8 +47,8 @@ android {
defaultConfig {
applicationId 'de.dennisguse.opentracks'
versionCode 6669
versionName "v4.27.1"
versionCode 6682
versionName "v4.27.2"
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
@@ -154,7 +154,7 @@ dependencies {
implementation 'androidx.core:core:1.19.0'
implementation 'androidx.core:core-splashscreen:1.2.0'
implementation 'androidx.mediarouter:mediarouter:1.8.1'
implementation 'androidx.core:core-location-altitude:1.0.0-rc01'
implementation 'androidx.core:core-location-altitude:1.0.0'
implementation 'androidx.work:work-runtime:2.11.2'
androidTestImplementation 'androidx.test:core:1.7.0'
@@ -0,0 +1,5 @@
v4.27.2: OpenTracks
Bugfix:
- Not all valid timezone offsets could be set
- Fixed race condition for IDLE trackpoints
+1 -1
View File
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
@@ -67,7 +67,7 @@ public class TrackRecordingManager implements SharedPreferences.OnSharedPreferen
contentProviderUtils = new ContentProviderUtils(context);
}
Track.Id startNewTrack() {
synchronized Track.Id startNewTrack() {
TrackPoint segmentStartTrackPoint = trackPointCreator.createSegmentStartManual();
ZoneOffset zoneOffset = ZoneOffset.systemDefault().getRules().getOffset(segmentStartTrackPoint.getTime());
@@ -103,7 +103,7 @@ public class TrackRecordingManager implements SharedPreferences.OnSharedPreferen
/**
* @return if the recording could be started.
*/
boolean resumeExistingTrack(@NonNull Track.Id resumeTrackId) {
synchronized boolean resumeExistingTrack(@NonNull Track.Id resumeTrackId) {
trackId = resumeTrackId;
Track track = contentProviderUtils.getTrack(trackId);
if (track == null) {
@@ -119,7 +119,7 @@ public class TrackRecordingManager implements SharedPreferences.OnSharedPreferen
return true;
}
void endCurrentTrack() {
synchronized void endCurrentTrack() {
TrackPoint segmentEnd = trackPointCreator.createSegmentEnd();
insertTrackPoint(segmentEnd, true);
@@ -149,7 +149,7 @@ public class TrackRecordingManager implements SharedPreferences.OnSharedPreferen
}
@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
public void onIdle() {
public synchronized void onIdle() {
Log.d(TAG, "Becoming idle");
onNewTrackPoint(trackPointCreator.createIdle());
@@ -7,13 +7,51 @@ import android.widget.ArrayAdapter;
import androidx.annotation.NonNull;
import java.time.ZoneOffset;
import java.util.stream.IntStream;
/**
* <a href="Data source for UTC Offsets">https://en.wikipedia.org/wiki/List_of_UTC_offsets</a>
*/
public class ZoneOffsetAdapter extends ArrayAdapter<ZoneOffset> {
public ZoneOffsetAdapter(@NonNull Context context, int resource) {
super(context, resource, IntStream.range(-12, +12)
.boxed()
.map(ZoneOffset::ofHours)
.toList());
super(context, resource);
addAll(
ZoneOffset.ofHoursMinutes(-12, 00),
ZoneOffset.ofHoursMinutes(-11, 00),
ZoneOffset.ofHoursMinutes(-10, 00),
ZoneOffset.ofHoursMinutes(-9, -30),
ZoneOffset.ofHoursMinutes(-8, 00),
ZoneOffset.ofHoursMinutes(-7, 00),
ZoneOffset.ofHoursMinutes(-6, 00),
ZoneOffset.ofHoursMinutes(-5, 00),
ZoneOffset.ofHoursMinutes(-4, 00),
ZoneOffset.ofHoursMinutes(-3, -30),
ZoneOffset.ofHoursMinutes(-3, 00),
ZoneOffset.ofHoursMinutes(-2, 00),
ZoneOffset.ofHoursMinutes(-1, 00),
ZoneOffset.ofHoursMinutes(0, 00),
ZoneOffset.ofHoursMinutes(1, 00),
ZoneOffset.ofHoursMinutes(2, 00),
ZoneOffset.ofHoursMinutes(3, 00),
ZoneOffset.ofHoursMinutes(3, 30),
ZoneOffset.ofHoursMinutes(4, 00),
ZoneOffset.ofHoursMinutes(4, 30),
ZoneOffset.ofHoursMinutes(5, 30),
ZoneOffset.ofHoursMinutes(5, 45),
ZoneOffset.ofHoursMinutes(6, 00),
ZoneOffset.ofHoursMinutes(6, 30),
ZoneOffset.ofHoursMinutes(7, 00),
ZoneOffset.ofHoursMinutes(8, 00),
ZoneOffset.ofHoursMinutes(8, 45),
ZoneOffset.ofHoursMinutes(9, 00),
ZoneOffset.ofHoursMinutes(9, 30),
ZoneOffset.ofHoursMinutes(10, 00),
ZoneOffset.ofHoursMinutes(10, 30),
ZoneOffset.ofHoursMinutes(11, 00),
ZoneOffset.ofHoursMinutes(12, 00),
ZoneOffset.ofHoursMinutes(12, 45),
ZoneOffset.ofHoursMinutes(13, 00),
ZoneOffset.ofHoursMinutes(14, 00)
);
}
}
@@ -1,16 +0,0 @@
package de.dennisguse.opentracks.ui.customRecordingLayout;
public enum CustomLayoutFieldType {
GENERIC(1),
CLOCK(2);
private final int value;
CustomLayoutFieldType(int value) {
this.value = value;
}
public int value() {
return this.value;
}
}
+1
View File
@@ -599,4 +599,5 @@ limitations under the License.
<string name="description_sensor_temperature">Temperatuur (Celsius)</string>
<string name="sensor_state_temperature">Termomeeter</string>
<string name="stats_sensors_temperature">Temperatuur</string>
<string name="activity_type_gravel_biking">rattasõit kruusateedel</string>
</resources>
+1
View File
@@ -607,4 +607,5 @@ limitations under the License.
<string name="stats_sensors_temperature">Temperatura</string>
<string name="description_sensor_temperature">Temperatura (Celsius)</string>
<string name="sensor_state_temperature">Termómetro</string>
<string name="activity_type_gravel_biking">ciclismo por grava</string>
</resources>
+21 -1
View File
@@ -150,7 +150,7 @@ limitations under the License.
<string name="menu_aggregated_statistics">集計統計</string>
<string name="menu_delete">削除</string>
<string name="menu_edit">編集</string>
<string name="menu_export_all">すべてエクスポート</string>
<string name="menu_export_all">すべてエクスポート(トラックごとに別ファイル)</string>
<string name="menu_help">ヘルプ</string>
<string name="menu_import_all">すべてインポート</string>
<string name="menu_insert_marker">マーカーを追加</string>
@@ -313,4 +313,24 @@ limitations under the License.
<string name="import_progress_summary_ok_msg">インポート完了</string>
<string name="import_progress_summary_exists_msg">既に存在しています</string>
<string name="help_track_map_content">小さな地図のアイコンを使います.\n a) (live updates) <a href="https://codeberg.org/OpenTracksApp/OSMDashboard">OSMDashboard</a>をインストールして下さい。 <a href="https://www.openstreetmap.org">OpenStreetMap</a> を利用したオンラインまたはオフラインの地図を使用できるようになります。\n実際、OSMDashbordは (一時的に保存された) 表示するトラッキングデータにだけアクセスする独立したアプリケーションです。\n b) 一般的な地図アプリケーションを使用 (e.g., <a href="http://osmand.net/">OsmAnd</a> and <a href="https://maps.me/">MAPS.ME</a>) 。 KMZフォーマットをサポートしている必要があります (位置及びタイムスタンプのみを含む)。 加えて、 MIME <i>application/vnd.google-earth.kmz</i> の <i>ACTION_VIEW</i> をサポートしている必要もあります。</string>
<string name="help_storage_pictures_title">マーカーとして撮影した写真の保存場所</string>
<string name="help_storage_pictures_content">アプリケーションの内部ストレージ(つまり、OpenTracks内部からのみアクセス可能な場所)に保存されます。</string>
<string name="help_track_export_title">記録したトラックのエクスポート/共有方法</string>
<string name="stats_sensors_temperature">温度</string>
<string name="settings_announcements_average_heart_rate">平均心拍数</string>
<string name="description_speed_source_gps">GPS</string>
<string name="export_dir_not_writable">" (書き込み失敗!)"</string>
<string name="export_progress_summary_overwrite_msg">上書きされたファイル</string>
<string name="export_progress_summary_skip_msg">スキップされたファイル</string>
<string name="export_progress_summary_errors_msg">エラー</string>
<string name="generic_separator_done_total">/</string>
<string name="generic_today">今日</string>
<string name="generic_yesterday">昨日</string>
<string name="gps_disabled_msg">GPSが無効化されています</string>
<string name="import_no_kml_file_found">KMZ中にkmlファイルが見つかりませんでした</string>
<string name="import_error_info">%1$s: %2$s</string>
<string name="create_marker_error">マーカーを作成することができませんでした。もう一度やり直して下さい。</string>
<string name="menu_export_all_one_file">すべてエクスポート(全てのトラックを1つのファイルに)</string>
<string name="menu_select_layout">レイアウトを選択</string>
<string name="permission_gps_failed">OpenTracksはGPSにアクセスする権限が必要です。</string>
</resources>
+4
View File
@@ -588,4 +588,8 @@ limitations under the License.
<string name="stats_sensors_temperature">Temperatur</string>
<string name="sensor_state_temperature">Termometer</string>
<string name="description_sensor_temperature">Temperatur (Celsius)</string>
<string name="activity_type_gravel_biking">gravelsykling</string>
<string name="settings_night_mode_option_day_dynamic">Dag (DynamicColor)</string>
<string name="settings_night_mode_option_night_dynamic">Natt (DynamicColor)</string>
<string name="settings_night_mode_option_night_oled_dynamic">OLED-vennlig (DynamicColor)</string>
</resources>
+1
View File
@@ -603,4 +603,5 @@ limitations under the License.
<string name="description_sensor_temperature">Температура (Цельсій)</string>
<string name="sensor_state_temperature">Термометр</string>
<string name="stats_sensors_temperature">Температура</string>
<string name="activity_type_gravel_biking">гравійний велосипед</string>
</resources>
+2 -1
View File
@@ -17,7 +17,7 @@ limitations under the License.
<!-- Activity Type -->
<string name="activity_type_airplane">坐飞机</string>
<string name="activity_type_atv">全地形越野</string>
<string name="activity_type_biking">自行车</string>
<string name="activity_type_biking">骑行</string>
<string name="activity_type_blimp">小型飞艇游览</string>
<string name="activity_type_boat">船</string>
<string name="activity_type_climbing">攀岩</string>
@@ -633,4 +633,5 @@ limitations under the License.
<string name="description_sensor_temperature">温度(摄氏度)</string>
<string name="sensor_state_temperature">温度计</string>
<string name="stats_sensors_temperature">温度</string>
<string name="activity_type_gravel_biking">砾石骑行</string>
</resources>