use of net.osmand.plus.GPXUtilities.GPXFile in project Osmand by osmandapp.
the class GpxSelectionHelper method getGpxDescription.
public String getGpxDescription() {
if (selectedGPXFiles.size() == 1) {
GPXFile currentGPX = app.getSavingTrackHelper().getCurrentGpx();
if (selectedGPXFiles.get(0).getGpxFile() == currentGPX) {
return app.getResources().getString(R.string.current_track);
}
File file = new File(selectedGPXFiles.get(0).getGpxFile().path);
return Algorithms.getFileNameWithoutExtension(file).replace('_', ' ');
} else if (selectedGPXFiles.size() == 0) {
return null;
} else {
return app.getResources().getString(R.string.number_of_gpx_files_selected_pattern, selectedGPXFiles.size());
}
}
use of net.osmand.plus.GPXUtilities.GPXFile in project Osmand by osmandapp.
the class GpxSelectionHelper method loadGPXTracks.
public void loadGPXTracks(IProgress p) {
String load = app.getSettings().SELECTED_GPX.get();
if (!Algorithms.isEmpty(load)) {
try {
JSONArray ar = new JSONArray(load);
boolean save = false;
for (int i = 0; i < ar.length(); i++) {
JSONObject obj = ar.getJSONObject(i);
if (obj.has(FILE)) {
File fl = new File(obj.getString(FILE));
if (p != null) {
p.startTask(getString(R.string.loading_smth, fl.getName()), -1);
}
GPXFile gpx = GPXUtilities.loadGPXFile(app, fl);
if (obj.has(COLOR)) {
int clr = Algorithms.parseColor(obj.getString(COLOR));
gpx.setColor(clr);
}
if (gpx.warning != null) {
save = true;
} else {
selectGpxFile(gpx, true, false);
}
} else if (obj.has(CURRENT_TRACK)) {
selectedGPXFiles.add(savingTrackHelper.getCurrentTrack());
}
}
processSplit();
if (save) {
saveCurrentSelections();
}
} catch (Exception e) {
app.getSettings().SELECTED_GPX.set("");
e.printStackTrace();
}
}
}
use of net.osmand.plus.GPXUtilities.GPXFile in project Osmand by osmandapp.
the class DashTrackFragment method setupGpxFiles.
private void setupGpxFiles() {
View mainView = getView();
final File dir = getMyApplication().getAppPath(IndexConstants.GPX_INDEX_DIR);
final OsmandApplication app = getMyApplication();
if (app == null) {
return;
}
final List<String> list = new ArrayList<String>();
for (SelectedGpxFile sg : app.getSelectedGpxHelper().getSelectedGPXFiles()) {
if (!sg.isShowCurrentTrack()) {
GPXFile gpxFile = sg.getGpxFile();
if (gpxFile != null) {
list.add(gpxFile.path);
}
}
}
int totalCount = 3 + list.size() / 2;
if (app.getSettings().SAVE_GLOBAL_TRACK_TO_GPX.get()) {
totalCount--;
}
if (list.size() < totalCount) {
final List<GPXInfo> res = GpxUiHelper.getSortedGPXFilesInfoByDate(dir, true);
for (GPXInfo r : res) {
String name = r.getFileName();
if (!list.contains(name)) {
list.add(name);
if (list.size() >= totalCount) {
break;
}
}
}
}
if (list.size() == 0 && OsmandPlugin.getEnabledPlugin(OsmandMonitoringPlugin.class) == null) {
(mainView.findViewById(R.id.main_fav)).setVisibility(View.GONE);
return;
} else {
(mainView.findViewById(R.id.main_fav)).setVisibility(View.VISIBLE);
DashboardOnMap.handleNumberOfRows(list, getMyApplication().getSettings(), ROW_NUMBER_TAG);
}
LinearLayout tracks = (LinearLayout) mainView.findViewById(R.id.items);
tracks.removeAllViews();
LayoutInflater inflater = getActivity().getLayoutInflater();
if (OsmandPlugin.getEnabledPlugin(OsmandMonitoringPlugin.class) != null) {
View view = inflater.inflate(R.layout.dash_gpx_track_item, null, false);
createCurrentTrackView(view, app);
((TextView) view.findViewById(R.id.name)).setText(R.string.shared_string_currently_recording_track);
updateCurrentTrack(view, getActivity(), app);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AvailableGPXFragment.openTrack(getActivity(), null);
}
});
view.findViewById(R.id.divider_dash).setVisibility(View.VISIBLE);
tracks.addView(view);
startHandler(view);
}
for (String filename : list) {
final File f = new File(filename);
AvailableGPXFragment.GpxInfo info = new AvailableGPXFragment.GpxInfo();
info.subfolder = "";
info.file = f;
View v = inflater.inflate(R.layout.dash_gpx_track_item, null, false);
AvailableGPXFragment.updateGpxInfoView(v, info, app, true);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AvailableGPXFragment.openTrack(getActivity(), f);
}
});
ImageButton showOnMap = ((ImageButton) v.findViewById(R.id.show_on_map));
showOnMap.setVisibility(View.VISIBLE);
showOnMap.setContentDescription(getString(R.string.shared_string_show_on_map));
updateShowOnMap(app, f, v, showOnMap);
tracks.addView(v);
}
}
use of net.osmand.plus.GPXUtilities.GPXFile in project Osmand by osmandapp.
the class TrackSegmentFragment method updateHeader.
private void updateHeader() {
imageView = (ImageView) headerView.findViewById(R.id.imageView);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
GpxDataItem gpxDataItem = getGpxDataItem();
GPXFile gpx = getGpx();
WptPt pointToShow = gpx != null ? gpx.findPointToShow() : null;
if (pointToShow != null) {
LatLon location = new LatLon(pointToShow.getLatitude(), pointToShow.getLongitude());
final OsmandSettings settings = app.getSettings();
String trackName = "";
if (gpx.showCurrentTrack) {
trackName = getString(R.string.shared_string_currently_recording_track);
} else if (gpxDataItem != null) {
trackName = gpxDataItem.getFile().getName();
} else {
trackName = gpx.path;
}
settings.setMapLocationToShow(location.getLatitude(), location.getLongitude(), settings.getLastKnownMapZoom(), new PointDescription(PointDescription.POINT_TYPE_WPT, trackName), false, getRect());
MapActivity.launchMapActivityMoveToTop(getActivity());
}
}
});
final View splitColorView = headerView.findViewById(R.id.split_color_view);
final View divider = headerView.findViewById(R.id.divider);
final View splitIntervalView = headerView.findViewById(R.id.split_interval_view);
final View colorView = headerView.findViewById(R.id.color_view);
vis = (SwitchCompat) headerView.findViewById(R.id.showOnMapToggle);
final ProgressBar progressBar = (ProgressBar) headerView.findViewById(R.id.mapLoadProgress);
final boolean selected = getGpx() != null && ((getGpx().showCurrentTrack && app.getSelectedGpxHelper().getSelectedCurrentRecordingTrack() != null) || (getGpx().path != null && app.getSelectedGpxHelper().getSelectedFileByPath(getGpx().path) != null));
vis.setChecked(selected);
vis.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isChecked) {
selectedSplitInterval = 0;
}
SelectedGpxFile sf = app.getSelectedGpxHelper().selectGpxFile(getGpx(), vis.isChecked(), false);
final List<GpxDisplayGroup> groups = getDisplayGroups();
if (groups.size() > 0) {
updateSplit(groups, vis.isChecked() ? sf : null);
if (getGpxDataItem() != null) {
updateSplitInDatabase();
}
}
updateSplitIntervalView(splitIntervalView);
updateColorView(colorView);
}
});
updateColorView(colorView);
colorView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
colorListPopupWindow = new ListPopupWindow(getActivity());
colorListPopupWindow.setAnchorView(colorView);
colorListPopupWindow.setContentWidth(AndroidUtils.dpToPx(app, 200f));
colorListPopupWindow.setModal(true);
colorListPopupWindow.setDropDownGravity(Gravity.RIGHT | Gravity.TOP);
colorListPopupWindow.setVerticalOffset(AndroidUtils.dpToPx(app, -48f));
colorListPopupWindow.setHorizontalOffset(AndroidUtils.dpToPx(app, -6f));
final GpxAppearanceAdapter gpxApprAdapter = new GpxAppearanceAdapter(getActivity(), getGpx().getColor(0), GpxAppearanceAdapterType.TRACK_COLOR);
colorListPopupWindow.setAdapter(gpxApprAdapter);
colorListPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
AppearanceListItem item = gpxApprAdapter.getItem(position);
if (item != null) {
if (item.getAttrName() == CURRENT_TRACK_COLOR_ATTR) {
int clr = item.getColor();
if (vis.isChecked()) {
SelectedGpxFile sf = app.getSelectedGpxHelper().selectGpxFile(getGpx(), vis.isChecked(), false);
if (clr != 0 && sf.getModifiableGpxFile() != null) {
sf.getModifiableGpxFile().setColor(clr);
if (getGpxDataItem() != null) {
app.getGpxDatabase().updateColor(getGpxDataItem(), clr);
}
}
} else if (getGpxDataItem() != null) {
app.getGpxDatabase().updateColor(getGpxDataItem(), clr);
}
if (getGpx().showCurrentTrack) {
app.getSettings().CURRENT_TRACK_COLOR.set(clr);
}
refreshTrackBitmap();
}
}
colorListPopupWindow.dismiss();
updateColorView(colorView);
}
});
colorListPopupWindow.show();
}
});
boolean hasPath = getGpx() != null && (getGpx().tracks.size() > 0 || getGpx().routes.size() > 0);
if (rotatedTileBox == null || mapBitmap == null || mapTrackBitmap == null) {
QuadRect rect = getRect();
if (rect.left != 0 && rect.top != 0) {
progressBar.setVisibility(View.VISIBLE);
double clat = rect.bottom / 2 + rect.top / 2;
double clon = rect.left / 2 + rect.right / 2;
WindowManager mgr = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
mgr.getDefaultDisplay().getMetrics(dm);
RotatedTileBoxBuilder boxBuilder = new RotatedTileBoxBuilder().setLocation(clat, clon).setZoom(15).density(dm.density).setPixelDimensions(dm.widthPixels, AndroidUtils.dpToPx(app, 152f), 0.5f, 0.5f);
rotatedTileBox = boxBuilder.build();
while (rotatedTileBox.getZoom() < 17 && rotatedTileBox.containsLatLon(rect.top, rect.left) && rotatedTileBox.containsLatLon(rect.bottom, rect.right)) {
rotatedTileBox.setZoom(rotatedTileBox.getZoom() + 1);
}
while (rotatedTileBox.getZoom() >= 7 && (!rotatedTileBox.containsLatLon(rect.top, rect.left) || !rotatedTileBox.containsLatLon(rect.bottom, rect.right))) {
rotatedTileBox.setZoom(rotatedTileBox.getZoom() - 1);
}
final DrawSettings drawSettings = new DrawSettings(!app.getSettings().isLightContent(), true);
final ResourceManager resourceManager = app.getResourceManager();
final MapRenderRepositories renderer = resourceManager.getRenderer();
if (resourceManager.updateRenderedMapNeeded(rotatedTileBox, drawSettings)) {
resourceManager.updateRendererMap(rotatedTileBox, new AsyncLoadingThread.OnMapLoadedListener() {
@Override
public void onMapLoaded(boolean interrupted) {
app.runInUIThread(new Runnable() {
@Override
public void run() {
if (updateEnable) {
mapBitmap = renderer.getBitmap();
if (mapBitmap != null) {
progressBar.setVisibility(View.GONE);
refreshTrackBitmap();
}
}
}
});
}
});
}
imageView.setVisibility(View.VISIBLE);
} else {
imageView.setVisibility(View.GONE);
}
} else {
refreshTrackBitmap();
}
if (hasPath) {
if (getGpx() != null && !getGpx().showCurrentTrack && adapter.getCount() > 0) {
prepareSplitIntervalAdapterData();
setupSplitIntervalView(splitIntervalView);
updateSplitIntervalView(splitIntervalView);
splitIntervalView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
splitListPopupWindow = new ListPopupWindow(getActivity());
splitListPopupWindow.setAnchorView(splitIntervalView);
splitListPopupWindow.setContentWidth(AndroidUtils.dpToPx(app, 200f));
splitListPopupWindow.setModal(true);
splitListPopupWindow.setDropDownGravity(Gravity.RIGHT | Gravity.TOP);
splitListPopupWindow.setVerticalOffset(AndroidUtils.dpToPx(app, -48f));
splitListPopupWindow.setHorizontalOffset(AndroidUtils.dpToPx(app, -6f));
splitListPopupWindow.setAdapter(new ArrayAdapter<>(getTrackActivity(), R.layout.popup_list_text_item, options));
splitListPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectedSplitInterval = position;
SelectedGpxFile sf = app.getSelectedGpxHelper().selectGpxFile(getGpx(), vis.isChecked(), false);
final List<GpxDisplayGroup> groups = getDisplayGroups();
if (groups.size() > 0) {
updateSplit(groups, vis.isChecked() ? sf : null);
if (getGpxDataItem() != null) {
updateSplitInDatabase();
}
}
splitListPopupWindow.dismiss();
updateSplitIntervalView(splitIntervalView);
}
});
splitListPopupWindow.show();
}
});
splitIntervalView.setVisibility(View.VISIBLE);
} else {
splitIntervalView.setVisibility(View.GONE);
}
splitColorView.setVisibility(View.VISIBLE);
divider.setVisibility(View.VISIBLE);
} else {
splitColorView.setVisibility(View.GONE);
divider.setVisibility(View.GONE);
}
}
use of net.osmand.plus.GPXUtilities.GPXFile in project Osmand by osmandapp.
the class TrackPointFragment method syncGpx.
private void syncGpx(GPXFile gpxFile) {
File gpx = new File(gpxFile.path);
if (gpx.exists()) {
MapMarkersHelper helper = app.getMapMarkersHelper();
helper.runSynchronization(helper.getOrCreateGroup(gpx));
}
}
Aggregations