diff --git a/OsmAnd/src/net/osmand/plus/activities/TrackActivity.java b/OsmAnd/src/net/osmand/plus/activities/TrackActivity.java index 2ff19c4093..d227159866 100644 --- a/OsmAnd/src/net/osmand/plus/activities/TrackActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/TrackActivity.java @@ -178,16 +178,8 @@ public class TrackActivity extends TabActivity { } } - boolean firstTime = true; - @Override public void onAttachFragment(Fragment fragment) { - if(firstTime) { - if (getIntent().getBooleanExtra("open_details", false)) { - ((TrackSegmentFragment) fragment).openDetailsFromMenu = true; - firstTime = false; - } - } fragList.add(new WeakReference<>(fragment)); } diff --git a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java index 1b146d3090..76385c75cf 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java @@ -19,6 +19,7 @@ import android.support.v7.widget.PopupMenu; import android.support.v7.widget.SearchView; import android.text.Editable; import android.text.TextWatcher; +import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -40,6 +41,7 @@ import android.widget.Toast; import net.osmand.AndroidUtils; import net.osmand.IndexConstants; +import net.osmand.data.PointDescription; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.ItemClickListener; import net.osmand.plus.ContextMenuItem; @@ -49,6 +51,8 @@ import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.GPXTrackAnalysis; import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.GpxSelectionHelper; +import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup; +import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; import net.osmand.plus.IconsCache; import net.osmand.plus.OsmAndFormatter; @@ -88,6 +92,8 @@ import java.util.Map; import java.util.Set; import java.util.regex.Pattern; +import static net.osmand.plus.R.string.m; + public class AvailableGPXFragment extends OsmandExpandableListFragment { public static final Pattern ILLEGAL_PATH_NAME_CHARACTERS = Pattern.compile("[?:\"*|<>]"); @@ -1226,6 +1232,46 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { } } + private List getGpxFile(GpxInfo gpxInfo) { + if (gpxInfo.gpx == null) { + return new ArrayList<>(); + } + List displayGroups = selectedGpxHelper.collectDisplayGroups(gpxInfo.gpx); + if (gpxInfo.file != null) { + SelectedGpxFile sf = selectedGpxHelper.getSelectedFileByPath(gpxInfo.gpx.path); + if (sf != null && gpxInfo.file != null && sf.getDisplayGroups() != null) { + displayGroups = sf.getDisplayGroups(); + } + } + return displayGroups; + } + + private class LoadGpxFileTask extends AsyncTask { + + GpxInfo gpxInfo; + + public LoadGpxFileTask(GpxInfo gpxInfo) { + this.gpxInfo = gpxInfo; + } + + @Override + protected GPXFile doInBackground(Void... voids) { + GPXFile result; + if (gpxInfo.file == null) { + result = getMyApplication().getSavingTrackHelper().getCurrentGpx(); + } else { + SelectedGpxFile selectedGpxFile = selectedGpxHelper.getSelectedFileByPath(gpxInfo.file.getAbsolutePath()); + if (selectedGpxFile != null && selectedGpxFile.getGpxFile() != null) { + result = selectedGpxFile.getGpxFile(); + } else { + result = GPXUtilities.loadGPXFile(getActivity(), gpxInfo.file); + } + } + Log.d("Analyze", "execute finished"); + return result; + } + } + private void openPopUpMenu(View v, final GpxInfo gpxInfo) { IconsCache iconsCache = getMyApplication().getIconsCache(); final PopupMenu optionsMenu = new PopupMenu(getActivity(), v); @@ -1244,12 +1290,32 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { - Intent newIntent = new Intent(getActivity(), getMyApplication().getAppCustomization().getTrackActivity()); - newIntent.putExtra(TrackActivity.TRACK_FILE_NAME, gpxInfo.file.getAbsolutePath()); - newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - newIntent.putExtra("open_details", true); - startActivity(newIntent); + Log.d("Analyze", "onItemClick"); + if (gpxInfo.gpx == null) { + new LoadGpxFileTask(gpxInfo).execute(); + Log.d("Analyze", "execute"); + } + List gpxDisplayGroupList = getGpxFile(gpxInfo); + List items = null; + for (GpxDisplayGroup group : gpxDisplayGroupList) { + if (group.getType() == GpxSelectionHelper.GpxDisplayItemType.TRACK_SEGMENT) { + items = group.getModifiableList(); + Log.d("Analyze", "getModList"); + break; + } + } + if (items != null) { + Log.d("Analyze", "items != null"); + GpxDisplayItem gpxItem = items.get(0); + final OsmandSettings settings = app.getSettings(); + settings.setMapLocationToShow(gpxItem.locationStart.lat, gpxItem.locationStart.lon, + settings.getLastKnownMapZoom(), + new PointDescription(PointDescription.POINT_TYPE_WPT, gpxItem.name), + false, + gpxItem); + MapActivity.launchMapActivityMoveToTop(getActivity()); + } else Log.d("Analyze", "items == null"); return true; } }); diff --git a/OsmAnd/src/net/osmand/plus/myplaces/TrackSegmentFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/TrackSegmentFragment.java index 904826f4f8..833dc76ba6 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/TrackSegmentFragment.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/TrackSegmentFragment.java @@ -784,8 +784,6 @@ public class TrackSegmentFragment extends OsmAndListFragment { } } - public boolean openDetailsFromMenu = false; - private enum GPXTabItemType { GPX_TAB_ITEM_GENERAL, GPX_TAB_ITEM_ALTITUDE, @@ -1215,11 +1213,6 @@ public class TrackSegmentFragment extends OsmAndListFragment { container.addView(view, 0); views.put(position, view); - - if (openDetailsFromMenu) { - openDetails(GPXTabItemType.GPX_TAB_ITEM_GENERAL); - openDetailsFromMenu = false; - } return view; }