Add confirmation dialog; fix small things

This commit is contained in:
Alex 2017-08-04 16:53:51 +03:00
parent edb25fbd95
commit 4ef1d86dfc
3 changed files with 51 additions and 9 deletions

View file

@ -97,6 +97,7 @@ import net.osmand.plus.mapcontextmenu.other.DestinationReachedMenu;
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenu; import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenu;
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenuFragment; import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenuFragment;
import net.osmand.plus.mapcontextmenu.other.TrackDetailsMenu; import net.osmand.plus.mapcontextmenu.other.TrackDetailsMenu;
import net.osmand.plus.measurementtool.MeasurementToolFragment;
import net.osmand.plus.render.RendererRegistry; import net.osmand.plus.render.RendererRegistry;
import net.osmand.plus.resources.ResourceManager; import net.osmand.plus.resources.ResourceManager;
import net.osmand.plus.routing.RoutingHelper; import net.osmand.plus.routing.RoutingHelper;
@ -500,6 +501,10 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
return; return;
} }
} }
if (getMeasurementToolFragment() != null) {
getMeasurementToolFragment().showQuitDialog();
return;
}
if (prevActivityIntent != null && getSupportFragmentManager().getBackStackEntryCount() == 0) { if (prevActivityIntent != null && getSupportFragmentManager().getBackStackEntryCount() == 0) {
prevActivityIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); prevActivityIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
LatLon loc = getMapLocation(); LatLon loc = getMapLocation();
@ -1675,6 +1680,11 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
return fragment!= null && !fragment.isDetached() && !fragment.isRemoving() ? (QuickSearchDialogFragment) fragment : null; return fragment!= null && !fragment.isDetached() && !fragment.isRemoving() ? (QuickSearchDialogFragment) fragment : null;
} }
public MeasurementToolFragment getMeasurementToolFragment() {
Fragment fragment = getSupportFragmentManager().findFragmentByTag(MeasurementToolFragment.TAG);
return fragment != null && !fragment.isDetached() && !fragment.isRemoving() ? (MeasurementToolFragment) fragment : null;
}
public boolean isTopToolbarActive() { public boolean isTopToolbarActive() {
MapInfoLayer mapInfoLayer = getMapLayers().getMapInfoLayer(); MapInfoLayer mapInfoLayer = getMapLayers().getMapInfoLayer();
return mapInfoLayer.hasTopToolbar(); return mapInfoLayer.hasTopToolbar();

View file

@ -7,6 +7,7 @@ import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.support.v7.widget.SwitchCompat; import android.support.v7.widget.SwitchCompat;
@ -71,7 +72,7 @@ public class MeasurementToolFragment extends Fragment {
nightMode ? R.color.ctx_menu_info_view_bg_dark : R.color.ctx_menu_info_view_bg_light); nightMode ? R.color.ctx_menu_info_view_bg_dark : R.color.ctx_menu_info_view_bg_light);
boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity); boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity);
pointsSt = mapActivity.getString(R.string.points).toLowerCase(); pointsSt = getString(R.string.points).toLowerCase();
View view = View.inflate(new ContextThemeWrapper(getContext(), themeRes), R.layout.fragment_measurement_tool, null); View view = View.inflate(new ContextThemeWrapper(getContext(), themeRes), R.layout.fragment_measurement_tool, null);
@ -145,11 +146,11 @@ public class MeasurementToolFragment extends Fragment {
if (portrait) { if (portrait) {
toolBarController = new MeasurementToolBarController(); toolBarController = new MeasurementToolBarController();
toolBarController.setTitle(mapActivity.getString(R.string.measurement_tool_action_bar)); toolBarController.setTitle(getString(R.string.measurement_tool_action_bar));
toolBarController.setOnBackButtonClickListener(new View.OnClickListener() { toolBarController.setOnBackButtonClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
mapActivity.onBackPressed(); showQuitDialog();
} }
}); });
toolBarController.setOnCloseButtonClickListener(new View.OnClickListener() { toolBarController.setOnCloseButtonClickListener(new View.OnClickListener() {
@ -169,7 +170,7 @@ public class MeasurementToolFragment extends Fragment {
if (measurementLayer.getPointsCount() > 0) { if (measurementLayer.getPointsCount() > 0) {
saveAsGpxOnClick(mapActivity); saveAsGpxOnClick(mapActivity);
} else { } else {
Toast.makeText(mapActivity, mapActivity.getString(R.string.none_point_error), Toast.LENGTH_SHORT).show(); Toast.makeText(mapActivity, getString(R.string.none_point_error), Toast.LENGTH_SHORT).show();
} }
return true; return true;
case R.id.action_clear_all: case R.id.action_clear_all:
@ -279,7 +280,7 @@ public class MeasurementToolFragment extends Fragment {
MapActivity activity = getMapActivity(); MapActivity activity = getMapActivity();
if (activity != null) { if (activity != null) {
progressDialog = new ProgressDialog(activity); progressDialog = new ProgressDialog(activity);
progressDialog.setMessage(activity.getString(R.string.saving_gpx_tracks)); progressDialog.setMessage(getString(R.string.saving_gpx_tracks));
progressDialog.show(); progressDialog.show();
} }
} }
@ -301,7 +302,6 @@ public class MeasurementToolFragment extends Fragment {
} }
MapActivity activity = getMapActivity(); MapActivity activity = getMapActivity();
if (activity != null) { if (activity != null) {
// todo
String res = GPXUtilities.writeGpxFile(toSave, gpx, activity.getMyApplication()); String res = GPXUtilities.writeGpxFile(toSave, gpx, activity.getMyApplication());
gpx.path = toSave.getAbsolutePath(); gpx.path = toSave.getAbsolutePath();
if (showOnMap) { if (showOnMap) {
@ -318,7 +318,7 @@ public class MeasurementToolFragment extends Fragment {
if (activity != null) { if (activity != null) {
if (warning == null) { if (warning == null) {
Toast.makeText(activity, Toast.makeText(activity,
MessageFormat.format(activity.getString(R.string.gpx_saved_sucessfully), toSave.getAbsolutePath()), MessageFormat.format(getString(R.string.gpx_saved_sucessfully), toSave.getAbsolutePath()),
Toast.LENGTH_LONG).show(); Toast.LENGTH_LONG).show();
} else { } else {
Toast.makeText(activity, warning, Toast.LENGTH_LONG).show(); Toast.makeText(activity, warning, Toast.LENGTH_LONG).show();
@ -430,6 +430,36 @@ public class MeasurementToolFragment extends Fragment {
} }
} }
public void showQuitDialog() {
final MapActivity mapActivity = getMapActivity();
MeasurementToolLayer measurementLayer = getMeasurementLayer();
if (mapActivity != null && measurementLayer != null) {
if (measurementLayer.getPointsCount() < 1) {
dismiss(mapActivity);
return;
}
new AlertDialog.Builder(mapActivity)
.setTitle(getString(R.string.are_you_sure))
.setMessage(getString(R.string.unsaved_changes_will_be_lost))
.setPositiveButton(R.string.shared_string_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss(mapActivity);
}
})
.setNegativeButton(R.string.shared_string_cancel, null)
.show();
}
}
private void dismiss(MapActivity mapActivity) {
try {
mapActivity.getSupportFragmentManager().popBackStackImmediate(TAG, FragmentManager.POP_BACK_STACK_INCLUSIVE);
} catch (Exception e) {
// ignore
}
}
private static class MeasurementToolBarController extends TopToolbarController { private static class MeasurementToolBarController extends TopToolbarController {
MeasurementToolBarController() { MeasurementToolBarController() {

View file

@ -160,8 +160,10 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
boolean undoPointOnClick() { boolean undoPointOnClick() {
measurementPoints.remove(measurementPoints.size() - 1); measurementPoints.remove(measurementPoints.size() - 1);
if (measurementPoints.size() > 0) {
WptPt pt = measurementPoints.get(measurementPoints.size() - 1); WptPt pt = measurementPoints.get(measurementPoints.size() - 1);
view.getAnimatedDraggingThread().startMoving(pt.getLatitude(), pt.getLongitude(), view.getZoom(), true); view.getAnimatedDraggingThread().startMoving(pt.getLatitude(), pt.getLongitude(), view.getZoom(), true);
}
return measurementPoints.size() > 0; return measurementPoints.size() > 0;
} }