package net.osmand.plus.mapcontextmenu.builders.cards.dialogs; import android.os.Bundle; import android.support.annotation.NonNull; import android.view.Menu; import android.view.MenuItem; import android.view.View; import net.osmand.plus.OsmandSettings; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.mapillary.MapillaryImageDialog; import net.osmand.plus.views.OsmandMapTileView; import java.util.List; public abstract class ContextMenuCardDialog { private MapActivity mapActivity; private static final String KEY_CARD_DIALOG_TYPE = "key_card_dialog_type"; private static final String KEY_CARD_DIALOG_TITLE = "key_card_dialog_title"; private static final String KEY_CARD_DIALOG_DESCRIPTION = "key_card_dialog_description"; private CardDialogType type; protected String title; protected String description; private int prevMapPosition = OsmandSettings.CENTER_CONSTANT; private boolean portrait; public enum CardDialogType { REGULAR, MAPILLARY } protected ContextMenuCardDialog(MapActivity mapActivity, @NonNull CardDialogType type) { this.mapActivity = mapActivity; this.type = type; this.portrait = AndroidUiHelper.isOrientationPortrait(mapActivity); } public MapActivity getMapActivity() { return mapActivity; } public boolean isPortrait() { return portrait; } public CardDialogType getType() { return type; } public String getTitle() { return title; } public String getDescription() { return description; } protected boolean haveMenuItems() { return false; } protected void createMenuItems(Menu menu) { } public void saveMenu(Bundle bundle) { bundle.putString(KEY_CARD_DIALOG_TYPE, type.name()); if (title != null) { bundle.putString(KEY_CARD_DIALOG_TITLE, title); } if (description != null) { bundle.putString(KEY_CARD_DIALOG_DESCRIPTION, description); } } protected void restoreFields(Bundle bundle) { this.title = bundle.getString(KEY_CARD_DIALOG_TITLE); this.description = bundle.getString(KEY_CARD_DIALOG_TITLE); } public static ContextMenuCardDialog restoreMenu(@NonNull Bundle bundle, @NonNull MapActivity mapActivity) { try { CardDialogType type = CardDialogType.valueOf(bundle.getString(KEY_CARD_DIALOG_TYPE)); ContextMenuCardDialog dialog = null; switch (type) { case MAPILLARY: dialog = new MapillaryImageDialog(mapActivity, bundle); break; } return dialog; } catch (Exception e) { return null; } } public void onResume() { shiftMapPosition(); } public void onPause() { restoreMapPosition(); } private void shiftMapPosition() { OsmandMapTileView mapView = mapActivity.getMapView(); if (AndroidUiHelper.isOrientationPortrait(mapActivity)) { if (mapView.getMapPosition() != OsmandSettings.MIDDLE_CONSTANT) { prevMapPosition = mapView.getMapPosition(); mapView.setMapPosition(OsmandSettings.MIDDLE_CONSTANT); } } else { mapView.setMapPositionX(1); } } private void restoreMapPosition() { if (AndroidUiHelper.isOrientationPortrait(mapActivity)) { mapActivity.getMapView().setMapPosition(prevMapPosition); } else { mapActivity.getMapView().setMapPositionX(0); } } public abstract View getContentView(); }