Enable to edit timezone offset for recorded tracks.

Fixes #2014.
This commit is contained in:
Dennis Guse
2025-06-24 11:36:44 +02:00
parent 1113cb1764
commit 8744724c0f
5 changed files with 53 additions and 4 deletions
@@ -23,11 +23,14 @@ import android.widget.ArrayAdapter;
import androidx.annotation.NonNull;
import java.time.ZoneOffset;
import de.dennisguse.opentracks.data.ContentProviderUtils;
import de.dennisguse.opentracks.data.models.ActivityType;
import de.dennisguse.opentracks.data.models.Track;
import de.dennisguse.opentracks.databinding.TrackEditBinding;
import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment;
import de.dennisguse.opentracks.ui.ZoneOffsetAdapter;
import de.dennisguse.opentracks.util.TrackUtils;
/**
@@ -71,7 +74,6 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit
viewBinding.trackEditName.setText(track.getName());
viewBinding.trackEditActivityType.setText(track.getActivityTypeLocalized());
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, ActivityType.getLocalizedStrings(this));
viewBinding.trackEditActivityType.setAdapter(adapter);
viewBinding.trackEditActivityType.setOnItemClickListener((parent, view, position, id) -> {
@@ -92,12 +94,16 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit
if (activityType == null) {
activityType = track.getActivityType();
}
setActivityTypeIcon(activityType);
viewBinding.trackEditActivityTypeIcon.setOnClickListener(v -> ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), this, viewBinding.trackEditActivityType.getText().toString()));
viewBinding.trackEditDescription.setText(track.getDescription());
final ArrayAdapter<ZoneOffset> zoneOffsetAdapter = new ZoneOffsetAdapter(this, android.R.layout.simple_dropdown_item_1line);
viewBinding.trackEditTimeOffset.setText(track.getZoneOffset().toString());
viewBinding.trackEditTimeOffset.setAdapter(zoneOffsetAdapter);
viewBinding.trackEditTimeOffset.setOnItemClickListener((parent, view, position, id) -> track.setZoneOffset(zoneOffsetAdapter.getItem(position)));
viewBinding.trackEditSave.setOnClickListener(v -> {
TrackUtils.updateTrack(TrackEditActivity.this, track, viewBinding.trackEditName.getText().toString(),
viewBinding.trackEditActivityType.getText().toString(), viewBinding.trackEditDescription.getText().toString(),
@@ -48,7 +48,7 @@ public class Track {
private ActivityType activityType;
private final ZoneOffset zoneOffset;
private ZoneOffset zoneOffset;
private TrackStatistics trackStatistics = new TrackStatistics();
@@ -58,7 +58,7 @@ public class Track {
}
public Track(@NonNull ZoneOffset zoneOffset) {
this.zoneOffset = zoneOffset;
setZoneOffset(zoneOffset);
}
/**
@@ -117,6 +117,10 @@ public class Track {
return zoneOffset;
}
public void setZoneOffset(@NonNull ZoneOffset zoneOffset) {
this.zoneOffset = zoneOffset;
}
public OffsetDateTime getStartTime() {
return trackStatistics
.getStartTime().atOffset(zoneOffset);
@@ -0,0 +1,19 @@
package de.dennisguse.opentracks.ui;
import android.content.Context;
import android.widget.ArrayAdapter;
import androidx.annotation.NonNull;
import java.time.ZoneOffset;
import java.util.stream.IntStream;
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());
}
}
+19
View File
@@ -79,6 +79,25 @@ limitations under the License.
android:layout_gravity="bottom" />
</LinearLayout>
<com.google.android.material.textfield.TextInputLayout
style="?attr/textInputOutlinedExposedDropdownMenuStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:imeOptions="actionNext"
android:importantForAutofill="no">
<com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/track_edit_time_offset"
android:layout_width="match_parent"
android:inputType="none"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:hint="@string/track_edit_time_offset"
android:imeOptions="actionNext"
android:selectAllOnFocus="true" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
style="?attr/textInputOutlinedStyle"
android:layout_width="match_parent"
+1
View File
@@ -491,6 +491,7 @@ limitations under the License.
<!-- Track Edit -->
<string name="track_edit_activity_type">Activity type (e.g. hiking)</string>
<string name="track_edit_activity_type_hint">Activity type</string>
<string name="track_edit_time_offset">Timezone Offset</string>
<!-- Track List -->
<string name="track_list_empty_message">Start recording your next adventure here</string>
<!-- Aggregated Statistics -->