mirror of
https://codeberg.org/OpenTracksApp/OpenTracks.git
synced 2026-10-25 02:34:45 +01:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a7398d43e3 | |||
| 59b016a4a3 | |||
| 78aa5d51c6 | |||
| 95f584b554 | |||
| cf759d526d |
@@ -38,10 +38,6 @@ However, often only one value is provided.
|
|||||||
|
|
||||||
We only support _Instantaneous Power_.
|
We only support _Instantaneous Power_.
|
||||||
|
|
||||||
_WARNING_: we only support physically movements with valid GPS coordinates.
|
|
||||||
Using a device indoors (no GPS available) will only show the current power values, but won't store anything.
|
|
||||||
Also the distance is not computed.
|
|
||||||
|
|
||||||
For cycling:
|
For cycling:
|
||||||
* Assioma Duo Powermeter
|
* Assioma Duo Powermeter
|
||||||
* Elite drivo II
|
* Elite drivo II
|
||||||
|
|||||||
+3
-2
@@ -59,8 +59,8 @@ android {
|
|||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "de.dennisguse.opentracks"
|
applicationId "de.dennisguse.opentracks"
|
||||||
versionCode 4981
|
versionCode 4986
|
||||||
versionName "v4.0.4"
|
versionName "v4.0.5"
|
||||||
|
|
||||||
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
|
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
|
||||||
|
|
||||||
@@ -100,6 +100,7 @@ android {
|
|||||||
releasePlayStore {
|
releasePlayStore {
|
||||||
applicationIdSuffix ".playstore"
|
applicationIdSuffix ".playstore"
|
||||||
versionNameSuffix "-PlayStore"
|
versionNameSuffix "-PlayStore"
|
||||||
|
signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
v4.0.5: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- PlayStore relase get's another logo
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Interval list shows "-" if gain/loss is not present
|
||||||
|
|
||||||
@@ -13,6 +13,14 @@ public class Distance {
|
|||||||
return new Distance(distance_m);
|
return new Distance(distance_m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Distance of(Double distance_m) {
|
||||||
|
if (distance_m == null) {
|
||||||
|
return Distance.of(Double.NaN);
|
||||||
|
} else {
|
||||||
|
return Distance.of((double) distance_m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static Distance of(String distance_m) {
|
public static Distance of(String distance_m) {
|
||||||
return of(Float.parseFloat(distance_m));
|
return of(Float.parseFloat(distance_m));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,12 +42,13 @@ public class DistanceFormatter {
|
|||||||
*/
|
*/
|
||||||
public Pair<String, String> getDistanceParts(Distance distance) {
|
public Pair<String, String> getDistanceParts(Distance distance) {
|
||||||
if (distance.isInvalid()) {
|
if (distance.isInvalid()) {
|
||||||
|
String valueUnknown = resources.getString(R.string.value_unknown);
|
||||||
switch (unitSystem) {
|
switch (unitSystem) {
|
||||||
case METRIC:
|
case METRIC:
|
||||||
return new Pair<>(null, resources.getString(R.string.unit_meter));
|
return new Pair<>(valueUnknown, resources.getString(R.string.unit_meter));
|
||||||
case IMPERIAL:
|
case IMPERIAL:
|
||||||
case NAUTICAL_IMPERIAL:
|
case NAUTICAL_IMPERIAL:
|
||||||
return new Pair<>(null, resources.getString(R.string.unit_feet));
|
return new Pair<>(valueUnknown, resources.getString(R.string.unit_feet));
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException("Not implemented");
|
throw new RuntimeException("Not implemented");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -254,13 +254,14 @@ public class StringUtils {
|
|||||||
/**
|
/**
|
||||||
* @return the formatted altitude_m (or null) and it's unit as {@link Pair}
|
* @return the formatted altitude_m (or null) and it's unit as {@link Pair}
|
||||||
*/
|
*/
|
||||||
|
//TODO altitude_m should be double or a value object
|
||||||
public static Pair<String, String> getAltitudeParts(Context context, Float altitude_m, UnitSystem unitSystem) {
|
public static Pair<String, String> getAltitudeParts(Context context, Float altitude_m, UnitSystem unitSystem) {
|
||||||
DistanceFormatter formatter = DistanceFormatter.Builder()
|
DistanceFormatter formatter = DistanceFormatter.Builder()
|
||||||
.setDecimalCount(1)
|
.setDecimalCount(1)
|
||||||
.setUnit(unitSystem)
|
.setUnit(unitSystem)
|
||||||
.build(context);
|
.build(context);
|
||||||
|
|
||||||
Distance distance = altitude_m != null ? Distance.of(altitude_m) : Distance.of(Double.NaN); //TODO Refactor Double.NaN
|
Distance distance = altitude_m != null ? Distance.of(altitude_m) : Distance.of((Double) null);
|
||||||
return formatter.getDistanceParts(distance);
|
return formatter.getDistanceParts(distance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -559,4 +559,36 @@ limitations under the License.
|
|||||||
<string name="settings_public_api_dashboard_enabled_summary_on">Một ứng dụng bắt đầu ghi hình cũng có thể truy cập vào dữ liệu ghi lại.</string>
|
<string name="settings_public_api_dashboard_enabled_summary_on">Một ứng dụng bắt đầu ghi hình cũng có thể truy cập vào dữ liệu ghi lại.</string>
|
||||||
<string name="settings_public_api_dashboard_enabled_summary_off">Ghi lại dữ liệu sẽ không được miễn phí tự động với các ứng dụng khác.</string>
|
<string name="settings_public_api_dashboard_enabled_summary_off">Ghi lại dữ liệu sẽ không được miễn phí tự động với các ứng dụng khác.</string>
|
||||||
<string name="settings_public_api_dashboard_enabled_title">Chuyển dữ liệu tự động</string>
|
<string name="settings_public_api_dashboard_enabled_title">Chuyển dữ liệu tự động</string>
|
||||||
|
<string name="settings_export_filename_title">Định dạng tên tệp</string>
|
||||||
|
<string name="show_on_dashboard_not_installed">Không có ứng dụng hỗ trợ API OpenTracks Dashboard nào được cài đặt.</string>
|
||||||
|
<string name="description_pace_nautical">Nhịp độ (phút/dặm hải lý)</string>
|
||||||
|
<string name="image_discard">Bỏ</string>
|
||||||
|
<string name="settings_announcements_average_heart_rate">Nhịp tim trung bình</string>
|
||||||
|
<string name="settings_announcements_lap_heart_rate">Nhịp tim vòng</string>
|
||||||
|
<string name="settings_announcements_average_speed_pace">Tốc độ trung bình/nhịp độ</string>
|
||||||
|
<string name="settings_stats_units_nautical">Hải lý (dặm hải lý, ft)</string>
|
||||||
|
<string name="settings_public_api_package_title">Tên gói cho API công khai</string>
|
||||||
|
<plurals name="voiceDistanceNauticalMiles">
|
||||||
|
<item quantity="other">%1$.2f dặm hải lý</item>
|
||||||
|
</plurals>
|
||||||
|
<string name="select_show_on_map_behavior">Chọn hành vi \"hiện trên bản đồ\"</string>
|
||||||
|
<string name="settings_announcements_lap_speed_pace">Tốc độ vòng/nhịp độ</string>
|
||||||
|
<string name="track_discarding">Đang bỏ đoạn đường</string>
|
||||||
|
<plurals name="voiceSpeedMKnots">
|
||||||
|
<item quantity="other">%1$.1f nút</item>
|
||||||
|
</plurals>
|
||||||
|
<string name="voice_per_nautical_mile">trên dặm hải lý</string>
|
||||||
|
<string name="description_speed_nautical">Tốc độ (nút)</string>
|
||||||
|
<string name="unit_nautical_mile">Dặm hải lý</string>
|
||||||
|
<string name="unit_knots">nút</string>
|
||||||
|
<string name="unit_minute_per_nautical_mile">phút/dặm hải lý</string>
|
||||||
|
<string name="value_integer_knots">%1$d nút</string>
|
||||||
|
<string name="value_float_knots">%1$.1f nút</string>
|
||||||
|
<string name="value_float_knots_recommended">%1$.1f nút (khuyên dùng)</string>
|
||||||
|
<string name="error_crash_title">%1$s đã dừng đột ngột</string>
|
||||||
|
<string name="share_crash_report">Chia sẻ báo cáo dừng đột ngột</string>
|
||||||
|
<string name="report_bug">Báo cáo lỗi</string>
|
||||||
|
<string name="show_on_map_format_ask">Hỏi</string>
|
||||||
|
<string name="show_on_dashboard">API OpenTracks Dashboard</string>
|
||||||
|
<string name="always">Luôn luôn</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@color/ic_launcher_background" />
|
||||||
|
<foreground>
|
||||||
|
<inset
|
||||||
|
android:inset="20dp"
|
||||||
|
android:drawable="@drawable/ic_logo_24dp" />
|
||||||
|
</foreground>
|
||||||
|
<monochrome>
|
||||||
|
<inset
|
||||||
|
android:inset="20dp"
|
||||||
|
android:drawable="@drawable/ic_logo_24dp" />
|
||||||
|
</monochrome>
|
||||||
|
</adaptive-icon>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<inset xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:drawable="@drawable/ic_logo_24dp" />
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="ic_launcher_background">#FFFF6D00</color>
|
||||||
|
</resources>
|
||||||
Reference in New Issue
Block a user