Cleanup: inline TrackIconUtils methods.

Part of #1608.
This commit is contained in:
Dennis Guse
2023-06-23 07:36:58 +02:00
parent d316a63fca
commit f824b31891
14 changed files with 82 additions and 95 deletions
@@ -16,11 +16,11 @@ import java.time.Instant;
import java.util.List;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.data.models.ActivityType;
import de.dennisguse.opentracks.data.models.Distance;
import de.dennisguse.opentracks.data.models.Speed;
import de.dennisguse.opentracks.data.models.Track;
import de.dennisguse.opentracks.stats.TrackStatistics;
import de.dennisguse.opentracks.util.TrackIconUtils;
@RunWith(JUnit4.class)
public class AggregatedStatisticsTest {
@@ -40,7 +40,8 @@ public class AggregatedStatisticsTest {
statistics.setMinAltitude(1200.0); // Resulting min altitude
Track track = new Track();
track.setIcon(TrackIconUtils.getActivityTypeId(context, category));
track.setIcon(ActivityType.findByLocalizedString(context, category)
.getId());
track.setActivityType(category);
track.setTrackStatistics(statistics);
return track;
@@ -29,7 +29,6 @@ import de.dennisguse.opentracks.data.models.Track;
import de.dennisguse.opentracks.databinding.TrackEditBinding;
import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment;
import de.dennisguse.opentracks.services.TrackRecordingServiceConnection;
import de.dennisguse.opentracks.util.TrackIconUtils;
import de.dennisguse.opentracks.util.TrackUtils;
/**
@@ -78,11 +77,16 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, ActivityType.getLocalizedStrings(this));
viewBinding.fields.trackEditActivityType.setAdapter(adapter);
viewBinding.fields.trackEditActivityType.setOnItemClickListener((parent, view, position, id) -> setActivityTypeIcon(TrackIconUtils.getActivityTypeId(this, (String) viewBinding.fields.trackEditActivityType.getAdapter().getItem(position))));
viewBinding.fields.trackEditActivityType.setOnItemClickListener((parent, view, position, id) -> {
String localizedActivityType = (String) viewBinding.fields.trackEditActivityType.getAdapter().getItem(position);
setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType)
.getId());
});
viewBinding.fields.trackEditActivityType.setOnFocusChangeListener((v, hasFocus) -> {
if (!hasFocus) {
setActivityTypeIcon(TrackIconUtils.getActivityTypeId(
TrackEditActivity.this, viewBinding.fields.trackEditActivityType.getText().toString()));
String localizedActivityType = viewBinding.fields.trackEditActivityType.getText().toString();
setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType)
.getId());
}
});
@@ -138,12 +142,14 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit
private void setActivityTypeIcon(String iconValue) {
this.iconValue = iconValue;
viewBinding.fields.trackEditActivityTypeIcon.setImageResource(TrackIconUtils.getIconDrawableId(iconValue));
viewBinding.fields.trackEditActivityTypeIcon.setImageResource(ActivityType.findByActivityTypeId(iconValue)
.getIconDrawableId());
}
@Override
public void onChooseActivityTypeDone(String value) {
setActivityTypeIcon(value);
viewBinding.fields.trackEditActivityType.setText(getString(TrackIconUtils.getIconActivityType(value)));
viewBinding.fields.trackEditActivityType.setText(getString(ActivityType.findByActivityTypeId(value)
.getFirstLocalizedStringId()));
}
}
@@ -50,6 +50,7 @@ import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import de.dennisguse.opentracks.data.models.ActivityType;
import de.dennisguse.opentracks.data.models.Distance;
import de.dennisguse.opentracks.data.models.DistanceFormatter;
import de.dennisguse.opentracks.data.models.Track;
@@ -72,7 +73,6 @@ import de.dennisguse.opentracks.util.IntentDashboardUtils;
import de.dennisguse.opentracks.util.IntentUtils;
import de.dennisguse.opentracks.util.PermissionRequester;
import de.dennisguse.opentracks.util.StringUtils;
import de.dennisguse.opentracks.util.TrackIconUtils;
/**
* An activity displaying a list of tracks.
@@ -219,7 +219,8 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co
Track.Id trackId = new Track.Id(cursor.getLong(idIndex));
boolean isRecording = trackId.equals(recordingStatus.getTrackId());
String icon = cursor.getString(iconIndex);
int iconId = TrackIconUtils.getIconDrawableId(icon);
int iconId = ActivityType.findByActivityTypeId(icon)
.getIconDrawableId();
String name = cursor.getString(nameIndex);
String totalTime = StringUtils.formatElapsedTime(Duration.ofMillis(cursor.getLong(totalTimeIndex)));
String totalDistance = DistanceFormatter.Builder()
@@ -30,6 +30,7 @@ import de.dennisguse.opentracks.chart.ChartFragment;
import de.dennisguse.opentracks.chart.TrackDataHubInterface;
import de.dennisguse.opentracks.data.ContentProviderUtils;
import de.dennisguse.opentracks.data.TrackDataHub;
import de.dennisguse.opentracks.data.models.ActivityType;
import de.dennisguse.opentracks.data.models.Track;
import de.dennisguse.opentracks.databinding.TrackRecordingBinding;
import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment;
@@ -46,7 +47,6 @@ import de.dennisguse.opentracks.ui.markers.MarkerListActivity;
import de.dennisguse.opentracks.ui.util.ActivityUtils;
import de.dennisguse.opentracks.util.IntentDashboardUtils;
import de.dennisguse.opentracks.util.IntentUtils;
import de.dennisguse.opentracks.util.TrackIconUtils;
import de.dennisguse.opentracks.util.TrackUtils;
/**
@@ -319,7 +319,8 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc
@Override
public void onChooseActivityTypeDone(String iconValue) {
Track track = contentProviderUtils.getTrack(trackId);
String activityType = getString(TrackIconUtils.getIconActivityType(iconValue));
String activityType = getString(ActivityType.findByActivityTypeId(iconValue)
.getFirstLocalizedStringId());
TrackUtils.updateTrack(this, track, null, activityType, null, contentProviderUtils);
}
@@ -20,7 +20,6 @@ import de.dennisguse.opentracks.ui.aggregatedStatistics.ConfirmDeleteDialogFragm
import de.dennisguse.opentracks.util.ExportUtils;
import de.dennisguse.opentracks.util.IntentUtils;
import de.dennisguse.opentracks.util.StringUtils;
import de.dennisguse.opentracks.util.TrackIconUtils;
import de.dennisguse.opentracks.util.TrackUtils;
public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller {
@@ -54,11 +53,16 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements
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) -> setActivityTypeIcon(TrackIconUtils.getActivityTypeId(this, (String) viewBinding.trackEditActivityType.getAdapter().getItem(position))));
viewBinding.trackEditActivityType.setOnItemClickListener((parent, view, position, id) -> {
String localizedActivityType = (String) viewBinding.trackEditActivityType.getAdapter().getItem(position);
setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType)
.getId());
});
viewBinding.trackEditActivityType.setOnFocusChangeListener((v, hasFocus) -> {
if (!hasFocus) {
setActivityTypeIcon(TrackIconUtils.getActivityTypeId(
TrackStoppedActivity.this, viewBinding.trackEditActivityType.getText().toString()));
String localizedActivityType = viewBinding.trackEditActivityType.getText().toString();
setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType)
.getId());
}
});
@@ -126,13 +130,15 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements
}
private void setActivityTypeIcon(String iconValue) {
viewBinding.trackEditActivityTypeIcon.setImageResource(TrackIconUtils.getIconDrawableId(iconValue));
viewBinding.trackEditActivityTypeIcon.setImageResource(ActivityType.findByActivityTypeId(iconValue)
.getIconDrawableId());
}
@Override
public void onChooseActivityTypeDone(String iconValue) {
setActivityTypeIcon(iconValue);
viewBinding.trackEditActivityType.setText(getString(TrackIconUtils.getIconActivityType(iconValue)));
viewBinding.trackEditActivityType.setText(getString(ActivityType.findByActivityTypeId(iconValue)
.getFirstLocalizedStringId()));
}
private void resumeTrackAndFinish() {
@@ -20,7 +20,6 @@ import java.util.stream.Collectors;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.data.models.ActivityType;
import de.dennisguse.opentracks.databinding.ChooseActivityTypeBinding;
import de.dennisguse.opentracks.util.TrackIconUtils;
/**
* A DialogFragment to choose an activity type.
@@ -37,7 +36,8 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements
if (category == null) {
return -1;
}
String iconValue = TrackIconUtils.getActivityTypeId(context, category);
String iconValue = ActivityType.findByLocalizedString(context, category)
.getId();
return getAllActivityTypeIds().indexOf(iconValue);
}
@@ -66,7 +66,8 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements
List<Integer> iconDrawableIds = new ArrayList<>();
for (String iconValue : getAllActivityTypeIds()) {
iconDrawableIds.add(TrackIconUtils.getIconDrawableId(iconValue));
iconDrawableIds.add(ActivityType.findByActivityTypeId(iconValue)
.getIconDrawableId());
}
final ChooseActivityTypeImageAdapter imageAdapter = new ChooseActivityTypeImageAdapter(iconDrawableIds);
@@ -16,6 +16,7 @@
package de.dennisguse.opentracks.fragments;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
@@ -34,6 +35,7 @@ import androidx.recyclerview.widget.RecyclerView;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.TrackRecordedActivity;
import de.dennisguse.opentracks.data.ContentProviderUtils;
import de.dennisguse.opentracks.data.models.ActivityType;
import de.dennisguse.opentracks.data.models.DistanceFormatter;
import de.dennisguse.opentracks.data.models.SpeedFormatter;
import de.dennisguse.opentracks.data.models.Track;
@@ -43,7 +45,6 @@ import de.dennisguse.opentracks.settings.UnitSystem;
import de.dennisguse.opentracks.stats.SensorStatistics;
import de.dennisguse.opentracks.stats.TrackStatistics;
import de.dennisguse.opentracks.util.StringUtils;
import de.dennisguse.opentracks.util.TrackIconUtils;
/**
* A fragment to display track statistics to the user for a recorded {@link Track}.
@@ -191,8 +192,12 @@ public class StatisticsRecordedFragment extends Fragment {
// Set activity type
{
String trackIconValue = TrackIconUtils.getActivityTypeId(getContext(), track.getActivityType());
viewBinding.statsActivityTypeIcon.setImageDrawable(ContextCompat.getDrawable(getContext(), TrackIconUtils.getIconDrawableId(trackIconValue)));
Context context = getContext();
String localizedActivityType = track.getActivityType();
String trackIconValue = ActivityType.findByLocalizedString(context, localizedActivityType)
.getId();
viewBinding.statsActivityTypeIcon.setImageDrawable(ContextCompat.getDrawable(getContext(), ActivityType.findByActivityTypeId(trackIconValue)
.getIconDrawableId()));
}
// Set time and start datetime
@@ -20,6 +20,7 @@ import java.util.stream.Collectors;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.data.ContentProviderUtils;
import de.dennisguse.opentracks.data.models.ActivityType;
import de.dennisguse.opentracks.data.models.Distance;
import de.dennisguse.opentracks.data.models.Marker;
import de.dennisguse.opentracks.data.models.Speed;
@@ -30,7 +31,6 @@ import de.dennisguse.opentracks.stats.TrackStatisticsUpdater;
import de.dennisguse.opentracks.ui.markers.MarkerUtils;
import de.dennisguse.opentracks.util.FileUtils;
import de.dennisguse.opentracks.util.LocationUtils;
import de.dennisguse.opentracks.util.TrackIconUtils;
/**
* Handles logic to import:
@@ -107,7 +107,8 @@ public class TrackImporter {
track.setActivityType(activityType);
if (icon == null) {
icon = TrackIconUtils.getActivityTypeId(context, activityType);
icon = ActivityType.findByLocalizedString(context, activityType)
.getId();
}
}
@@ -15,6 +15,7 @@ import java.time.ZoneOffset;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.data.ContentProviderUtils;
import de.dennisguse.opentracks.data.models.ActivityType;
import de.dennisguse.opentracks.data.models.Distance;
import de.dennisguse.opentracks.data.models.Marker;
import de.dennisguse.opentracks.data.models.Track;
@@ -24,7 +25,6 @@ import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
import de.dennisguse.opentracks.settings.PreferencesUtils;
import de.dennisguse.opentracks.stats.TrackStatistics;
import de.dennisguse.opentracks.stats.TrackStatisticsUpdater;
import de.dennisguse.opentracks.util.TrackIconUtils;
import de.dennisguse.opentracks.util.TrackNameUtils;
class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChangeListener {
@@ -74,7 +74,8 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
String category = PreferencesUtils.getDefaultActivity();
track.setActivityType(category);
track.setIcon(TrackIconUtils.getActivityTypeId(context, category));
track.setIcon(ActivityType.findByLocalizedString(context, category)
.getId());
track.setTrackStatistics(trackStatisticsUpdater.getTrackStatistics());
//TODO Pass TrackPoint
track.setName(TrackNameUtils.getTrackName(context, trackId, track.getStartTime()));
@@ -30,7 +30,6 @@ import androidx.preference.PreferenceDialogFragmentCompat;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.data.models.ActivityType;
import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment;
import de.dennisguse.opentracks.util.TrackIconUtils;
/**
* For entering the default activity type.
@@ -83,12 +82,16 @@ public class ActivityTypePreference extends DialogPreference {
ArrayAdapter<String> adapter = new ArrayAdapter<>(context, android.R.layout.simple_dropdown_item_1line, ActivityType.getLocalizedStrings(context));
textView.setAdapter(adapter);
textView.setOnItemClickListener((parent, v, position, id) -> {
String iconValue = TrackIconUtils.getActivityTypeId(context, (String) textView.getAdapter().getItem(position));
String localizedActivityType = (String) textView.getAdapter().getItem(position);
String iconValue = ActivityType.findByLocalizedString(context, localizedActivityType)
.getId();
updateIcon(iconValue);
});
textView.setOnFocusChangeListener((v, hasFocus) -> {
if (!hasFocus) {
String iconValue = TrackIconUtils.getActivityTypeId(context, textView.getText().toString());
String localizedActivityType = textView.getText().toString();
String iconValue = ActivityType.findByLocalizedString(context, localizedActivityType)
.getId();
updateIcon(iconValue);
}
});
@@ -96,7 +99,8 @@ public class ActivityTypePreference extends DialogPreference {
iconView = view.findViewById(R.id.activity_type_preference_spinner);
iconView.setOnClickListener((it) -> showIconSelectDialog());
updateIcon(TrackIconUtils.getActivityTypeId(context, category));
updateIcon(ActivityType.findByLocalizedString(context, category)
.getId());
}
private void showIconSelectDialog() {
@@ -117,12 +121,14 @@ public class ActivityTypePreference extends DialogPreference {
public void updateUI(String iconValue) {
updateIcon(iconValue);
textView.setText(getActivity().getString(TrackIconUtils.getIconActivityType(iconValue)));
textView.setText(getActivity().getString(ActivityType.findByActivityTypeId(iconValue)
.getFirstLocalizedStringId()));
textView.clearFocus();
}
private void updateIcon(String iconValue) {
iconView.setImageResource(TrackIconUtils.getIconDrawableId(iconValue));
iconView.setImageResource(ActivityType.findByActivityTypeId(iconValue)
.getIconDrawableId());
}
}
}
@@ -40,6 +40,7 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.data.models.ActivityType;
import de.dennisguse.opentracks.data.models.Distance;
import de.dennisguse.opentracks.data.models.DistanceFormatter;
import de.dennisguse.opentracks.data.models.HeartRate;
@@ -51,7 +52,6 @@ import de.dennisguse.opentracks.ui.customRecordingLayout.CsvLayoutUtils;
import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout;
import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayoutIO;
import de.dennisguse.opentracks.util.IntentDashboardUtils;
import de.dennisguse.opentracks.util.TrackIconUtils;
/**
* Utilities to access preferences stored in {@link SharedPreferences}.
@@ -237,7 +237,8 @@ public class PreferencesUtils {
final String STATS_RATE_DEFAULT = resources.getString(R.string.stats_rate_default);
String currentStatsRate = getString(R.string.stats_rate_key, STATS_RATE_DEFAULT);
if (currentStatsRate.equals(getString(R.string.stats_rate_speed_or_pace_default, STATS_RATE_DEFAULT))) {
return TrackIconUtils.isSpeedIcon(resources, category);
return ActivityType.findByLocalizedString(resources, category)
.isShowSpeedPreferred();
}
return currentStatsRate.equals(resources.getString(R.string.stats_rate_speed));
@@ -1,6 +1,7 @@
package de.dennisguse.opentracks.ui.aggregatedStatistics;
import android.content.Context;
import android.content.res.Resources;
import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
@@ -13,12 +14,12 @@ import java.util.ArrayList;
import java.util.List;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.data.models.ActivityType;
import de.dennisguse.opentracks.data.models.DistanceFormatter;
import de.dennisguse.opentracks.data.models.SpeedFormatter;
import de.dennisguse.opentracks.settings.PreferencesUtils;
import de.dennisguse.opentracks.settings.UnitSystem;
import de.dennisguse.opentracks.util.StringUtils;
import de.dennisguse.opentracks.util.TrackIconUtils;
public class AggregatedStatisticsAdapter extends BaseAdapter {
@@ -62,7 +63,10 @@ public class AggregatedStatisticsAdapter extends BaseAdapter {
viewHolder = (ViewHolder) convertView.getTag();
}
if (TrackIconUtils.isSpeedIcon(context.getResources(), aggregatedStatistic.getActivityType())) {
Resources resources = context.getResources();
String localizedActivityType = aggregatedStatistic.getActivityType();
if (ActivityType.findByLocalizedString(resources, localizedActivityType)
.isShowSpeedPreferred()) {
viewHolder.setSpeed(aggregatedStatistic);
} else {
viewHolder.setPace(aggregatedStatistic);
@@ -178,8 +182,11 @@ public class AggregatedStatisticsAdapter extends BaseAdapter {
}
private int getIcon(AggregatedStatistics.AggregatedStatistic aggregatedStatistic) {
String iconValue = TrackIconUtils.getActivityTypeId(context, aggregatedStatistic.getActivityType());
return TrackIconUtils.getIconDrawableId(iconValue);
String localizedActivityType = aggregatedStatistic.getActivityType();
String iconValue = ActivityType.findByLocalizedString(context, localizedActivityType)
.getId();
return ActivityType.findByActivityTypeId(iconValue)
.getIconDrawableId();
}
}
}
@@ -1,53 +0,0 @@
/*
* Copyright 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package de.dennisguse.opentracks.util;
import android.content.Context;
import android.content.res.Resources;
import androidx.annotation.NonNull;
import de.dennisguse.opentracks.data.models.ActivityType;
/**
* Utilities for track icon.
*
* @author Jimmy Shih
*/
public class TrackIconUtils {
public static int getIconDrawableId(String activityTypeId) {
return ActivityType.findByActivityTypeId(activityTypeId)
.getIconDrawableId();
}
public static int getIconActivityType(String activityTypeId) {
return ActivityType.findByActivityTypeId(activityTypeId)
.getFirstLocalizedStringId();
}
@NonNull
public static String getActivityTypeId(Context context, String localizedActivityType) {
return ActivityType.findByLocalizedString(context, localizedActivityType)
.getId();
}
public static boolean isSpeedIcon(Resources resources, String localizedActivityType) {
return ActivityType.findByLocalizedString(resources, localizedActivityType)
.isShowSpeedPreferred();
}
}
@@ -19,6 +19,7 @@ package de.dennisguse.opentracks.util;
import android.content.Context;
import de.dennisguse.opentracks.data.ContentProviderUtils;
import de.dennisguse.opentracks.data.models.ActivityType;
import de.dennisguse.opentracks.data.models.Track;
/**
@@ -33,7 +34,8 @@ public class TrackUtils {
}
public static void updateTrack(Context context, Track track, String name, String activityType, String description, ContentProviderUtils contentProviderUtils) {
updateTrack(context, track, name, activityType, TrackIconUtils.getActivityTypeId(context, activityType), description, contentProviderUtils);
updateTrack(context, track, name, activityType, ActivityType.findByLocalizedString(context, activityType)
.getId(), description, contentProviderUtils);
}
public static void updateTrack(Context context, Track track, String name, String activityType, String iconValue, String description, ContentProviderUtils contentProviderUtils) {
@@ -49,7 +51,8 @@ public class TrackUtils {
if (iconValue != null) {
track.setIcon(iconValue);
} else if (activityType != null) {
track.setIcon(TrackIconUtils.getActivityTypeId(context, activityType));
track.setIcon(ActivityType.findByLocalizedString(context, activityType)
.getId());
}
if (description != null) {
track.setDescription(description);