Skip to content

Commit

Permalink
Customize native route visualization
Browse files Browse the repository at this point in the history
  • Loading branch information
andreynovikov committed Feb 14, 2024
1 parent 3aa5cdc commit ba86bed
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 28 deletions.
79 changes: 51 additions & 28 deletions app/src/main/java/mobi/maptrek/fragments/DataSourceList.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,14 @@
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.text.format.DateUtils;
import android.text.format.Formatter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.MimeTypeMap;
import android.widget.PopupMenu;

import androidx.annotation.ColorInt;
Expand All @@ -51,13 +53,15 @@

import mobi.maptrek.DataHolder;
import mobi.maptrek.R;
import mobi.maptrek.data.Route;
import mobi.maptrek.data.Track;
import mobi.maptrek.data.source.DataSource;
import mobi.maptrek.data.source.FileDataSource;
import mobi.maptrek.data.source.MemoryDataSource;
import mobi.maptrek.data.source.WaypointDataSource;
import mobi.maptrek.data.source.WaypointDbDataSource;
import mobi.maptrek.databinding.ListWithEmptyViewBinding;
import mobi.maptrek.io.RouteManager;
import mobi.maptrek.location.BaseLocationService.TRACKING_STATE;
import mobi.maptrek.util.StringFormatter;
import mobi.maptrek.viewmodels.DataSourceViewModel;
Expand Down Expand Up @@ -319,41 +323,60 @@ void bindView(DataSource dataSource, int position) {
icon.setImageResource(R.drawable.ic_track);
color = track.style.color;
} else {
int waypointsCount = ((FileDataSource) dataSource).waypoints.size();
int tracksCount = ((FileDataSource) dataSource).tracks.size();
int routesCount = ((FileDataSource) dataSource).routes.size();
StringBuilder sb = new StringBuilder();
if (waypointsCount > 0) {
sb.append(resources.getQuantityString(R.plurals.placesCount, waypointsCount, waypointsCount));
if (tracksCount > 0 || routesCount > 0)
sb.append(", ");
if (dataSource.isNativeRoute()) {
Route route = ((FileDataSource) dataSource).routes.get(0);
String distance = StringFormatter.distanceH(route.distance);
description.setText(distance);
icon.setImageResource(R.drawable.ic_route);
color = route.style.color;
} else {
int waypointsCount = ((FileDataSource) dataSource).waypoints.size();
int tracksCount = ((FileDataSource) dataSource).tracks.size();
int routesCount = ((FileDataSource) dataSource).routes.size();
StringBuilder sb = new StringBuilder();
if (waypointsCount > 0) {
sb.append(resources.getQuantityString(R.plurals.placesCount, waypointsCount, waypointsCount));
if (tracksCount > 0 || routesCount > 0)
sb.append(", ");
}
if (tracksCount > 0) {
sb.append(resources.getQuantityString(R.plurals.tracksCount, tracksCount, tracksCount));
if (routesCount > 0)
sb.append(", ");
}
if (routesCount > 0) {
sb.append(resources.getQuantityString(R.plurals.routesCount, routesCount, routesCount));
}
if (sb.length() == 0) {
sb.append(getString(R.string.empty));
}
description.setText(sb);
if (waypointsCount == 0 && tracksCount == 0 && routesCount == 0)
icon.setImageResource(R.drawable.ic_empty);
else if (waypointsCount > 0 && tracksCount == 0 && routesCount == 0)
icon.setImageResource(R.drawable.ic_points);
else if (tracksCount > 0 && waypointsCount == 0 && routesCount == 0)
icon.setImageResource(R.drawable.ic_tracks);
else if (routesCount > 0 && waypointsCount == 0 && tracksCount == 0)
icon.setImageResource(R.drawable.ic_routes);
else
icon.setImageResource(R.drawable.ic_dataset);
}
if (tracksCount > 0) {
sb.append(resources.getQuantityString(R.plurals.tracksCount, tracksCount, tracksCount));
if (routesCount > 0)
sb.append(", ");
}
if (routesCount > 0) {
sb.append(resources.getQuantityString(R.plurals.routesCount, routesCount, routesCount));
}
description.setText(sb);
if (waypointsCount > 0 && tracksCount == 0 && routesCount == 0)
icon.setImageResource(R.drawable.ic_points);
else if (tracksCount > 0 && waypointsCount == 0 && routesCount == 0)
icon.setImageResource(R.drawable.ic_tracks);
else if (routesCount > 0 && waypointsCount == 0 && tracksCount == 0)
icon.setImageResource(R.drawable.ic_routes);
else
icon.setImageResource(R.drawable.ic_dataset);
}
itemView.setOnClickListener(v -> dataSourceViewModel.selectDataSource(dataSource, DataSourceViewModel.MODE_SELECTOR));
} else {
String size = Formatter.formatShortFileSize(getContext(), file.length());
description.setText(String.format(Locale.ENGLISH, "%s – %s", size, file.getName()));
if (nativeTracksMode)
if (nativeTracksMode) {
description.setText(String.format(Locale.ENGLISH, "%s", size));
icon.setImageResource(R.drawable.ic_track);
else
} else if (file.getName().endsWith(RouteManager.EXTENSION)) {
description.setText(String.format(Locale.ENGLISH, "%s", size));
icon.setImageResource(R.drawable.ic_route);
} else {
String ext = MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString().toUpperCase(Locale.ROOT));
description.setText(String.format(Locale.ENGLISH, "%s – %s", size, ext));
icon.setImageResource(R.drawable.ic_dataset);
}
color = disabledColor;
itemView.setOnClickListener(v -> Snackbar.make(viewBinding.getRoot(), R.string.msgDataSourceNotLoaded, Snackbar.LENGTH_SHORT)
.setAction(R.string.actionEnable, view -> {
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_empty.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M336,680L480,536L624,680L680,624L536,480L680,336L624,280L480,424L336,280L280,336L424,480L280,624L336,680ZM200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM200,760L760,760Q760,760 760,760Q760,760 760,760L760,200Q760,200 760,200Q760,200 760,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760ZM200,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760L200,760Q200,760 200,760Q200,760 200,760L200,200Q200,200 200,200Q200,200 200,200Z"/>
</vector>

0 comments on commit ba86bed

Please sign in to comment.