Merge remote-tracking branch 'origin/master'

This commit is contained in:
Weblate 2018-03-23 16:44:37 +01:00
commit 992c9cdc75
2 changed files with 46 additions and 18 deletions

View file

@ -282,11 +282,15 @@ public class MapMarkersHelper {
return getMapMarkerGroupById(id) != null; return getMapMarkerGroupById(id) != null;
} }
public void runSynchronization(@NonNull final MapMarkersGroup group) { public void runSynchronization(@NonNull MapMarkersGroup group) {
runSynchronization(group, false);
}
public void runSynchronization(@NonNull final MapMarkersGroup group, final boolean loadGpx) {
ctx.runInUIThread(new Runnable() { ctx.runInUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
new SyncGroupTask(group).executeOnExecutor(executorService); new SyncGroupTask(group, loadGpx).executeOnExecutor(executorService);
} }
}); });
} }
@ -1038,9 +1042,11 @@ public class MapMarkersHelper {
private class SyncGroupTask extends AsyncTask<Void, Void, Void> { private class SyncGroupTask extends AsyncTask<Void, Void, Void> {
private MapMarkersGroup group; private MapMarkersGroup group;
private boolean loadGpx;
SyncGroupTask(MapMarkersGroup group) { SyncGroupTask(MapMarkersGroup group, boolean loadGpx) {
this.group = group; this.group = group;
this.loadGpx = loadGpx;
} }
@Override @Override
@ -1094,10 +1100,15 @@ public class MapMarkersHelper {
return; return;
} }
SelectedGpxFile selectedGpxFile = gpxHelper.getSelectedFileByPath(group.getId()); String gpxPath = group.getId();
SelectedGpxFile selectedGpxFile = gpxHelper.getSelectedFileByPath(gpxPath);
GPXFile gpx = selectedGpxFile == null ? null : selectedGpxFile.getGpxFile(); GPXFile gpx = selectedGpxFile == null ? null : selectedGpxFile.getGpxFile();
group.visible = gpx != null; if (gpx == null && loadGpx) {
if (!group.isVisible() || group.isDisabled()) { gpx = GPXUtilities.loadGPXFile(ctx, new File(gpxPath));
gpxHelper.selectGpxFile(gpx, true, false, false);
}
group.visible = gpx != null || group.visibleUntilRestart;
if (gpx == null || group.isDisabled()) {
removeGroupActiveMarkers(group, true); removeGroupActiveMarkers(group, true);
return; return;
} }
@ -1144,6 +1155,7 @@ public class MapMarkersHelper {
private long creationDate; private long creationDate;
private boolean disabled; private boolean disabled;
private boolean visible = true; private boolean visible = true;
private boolean visibleUntilRestart;
private List<MapMarker> markers = new ArrayList<>(); private List<MapMarker> markers = new ArrayList<>();
// TODO should be removed from this class: // TODO should be removed from this class:
private GroupHeader header; private GroupHeader header;
@ -1187,6 +1199,10 @@ public class MapMarkersHelper {
return visible; return visible;
} }
public void setVisibleUntilRestart(boolean visibleUntilRestart) {
this.visibleUntilRestart = visibleUntilRestart;
}
public List<MapMarker> getMarkers() { public List<MapMarker> getMarkers() {
return markers; return markers;
} }

View file

@ -9,7 +9,6 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView;
import net.osmand.AndroidUtils; import net.osmand.AndroidUtils;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
@ -393,27 +392,40 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter<RecyclerView.V
CompoundButton.OnCheckedChangeListener checkedChangeListener = new CompoundButton.OnCheckedChangeListener() { CompoundButton.OnCheckedChangeListener checkedChangeListener = new CompoundButton.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(CompoundButton compoundButton, boolean enabled) { public void onCheckedChanged(CompoundButton compoundButton, boolean enabled) {
final MapMarkersHelper mapMarkersHelper = app.getMapMarkersHelper();
final GPXFile[] gpxFile = new GPXFile[1]; final GPXFile[] gpxFile = new GPXFile[1];
boolean disabled = !enabled; boolean disabled = !enabled;
if (disabled && group.getType() == MapMarkersGroup.GPX_TYPE) { boolean synced = false;
SelectedGpxFile selectedGpxFile = app.getSelectedGpxHelper().getSelectedFileByPath(group.getId());
if (selectedGpxFile != null) { mapMarkersHelper.updateGroupDisabled(group, disabled);
gpxFile[0] = selectedGpxFile.getGpxFile(); if (group.getType() == MapMarkersGroup.GPX_TYPE) {
switchGpxVisibility(gpxFile[0], false); group.setVisibleUntilRestart(disabled);
String gpxPath = group.getId();
if (disabled) {
SelectedGpxFile selectedGpxFile = app.getSelectedGpxHelper().getSelectedFileByPath(gpxPath);
if (selectedGpxFile != null) {
gpxFile[0] = selectedGpxFile.getGpxFile();
switchGpxVisibility(gpxFile[0], false);
}
} else if (mapMarkersHelper.isGroupSynced(group.getId())) {
mapMarkersHelper.runSynchronization(group, true);
synced = true;
} }
} }
app.getMapMarkersHelper().updateGroupDisabled(group, disabled); if (!synced) {
app.getMapMarkersHelper().syncWithMarkers(group); mapMarkersHelper.syncWithMarkers(group);
}
if (disabled) { if (disabled) {
snackbar = Snackbar.make(holder.itemView, app.getString(R.string.group_deleted), Snackbar.LENGTH_LONG) snackbar = Snackbar.make(holder.itemView, app.getString(R.string.group_will_be_removed_after_restart), Snackbar.LENGTH_LONG)
.setAction(R.string.shared_string_undo, new View.OnClickListener() { .setAction(R.string.shared_string_undo, new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
if (gpxFile[0] != null) { if (group.getType() == MapMarkersGroup.GPX_TYPE && gpxFile[0] != null) {
switchGpxVisibility(gpxFile[0], true); switchGpxVisibility(gpxFile[0], true);
} }
app.getMapMarkersHelper().updateGroupDisabled(group, false); mapMarkersHelper.updateGroupDisabled(group, false);
app.getMapMarkersHelper().syncWithMarkers(group); mapMarkersHelper.syncWithMarkers(group);
} }
}); });
AndroidUtils.setSnackbarTextColor(snackbar, R.color.color_dialog_buttons_dark); AndroidUtils.setSnackbarTextColor(snackbar, R.color.color_dialog_buttons_dark);