diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/ImageDialogItemizedIconOverlay.java b/app/src/main/java/de/apps4ics/mountainnavigation/ImageDialogItemizedIconOverlay.java new file mode 100644 index 0000000..5f5ca01 --- /dev/null +++ b/app/src/main/java/de/apps4ics/mountainnavigation/ImageDialogItemizedIconOverlay.java @@ -0,0 +1,81 @@ +package de.apps4ics.mountainnavigation; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; + +import org.osmdroid.views.MapView; +import org.osmdroid.views.overlay.ItemizedIconOverlay; +import org.osmdroid.views.overlay.OverlayItem; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Vinz on 03.11.2015. + */ +public class ImageDialogItemizedIconOverlay extends ItemizedIconOverlay { + private Context context; + private AlertDialog alertDialog; + private List items; + private Drawable posIcon; + private Drawable negIcon; + private MapView mapView; + private int selected; + + public ImageDialogItemizedIconOverlay(final Context context, final List aList, AlertDialog alertDialog, MapView mapView) { + super(context, aList, new OnItemGestureListener() { + @Override + public boolean onItemSingleTapUp(int index, OverlayItem item) { + return false; + } + + @Override + public boolean onItemLongPress(int index, OverlayItem item) { + return false; + } + }); + this.context = context; + this.items = new ArrayList<>(); + this.alertDialog = alertDialog; + this.mapView = mapView; + selected = 0; + Resources res = context.getResources(); + posIcon = res.getDrawable(R.mipmap.ic_poi); + negIcon = res.getDrawable(R.mipmap.ic_poi_red); + for(int i=0; i[] poiMarkers; protected static ArrayList pathMarkers; + protected static OverlayItem imageMarker; private String provider; private Location mLocation; @@ -936,8 +944,7 @@ addPoi(new TrashBin()); break; case Types.PIC: - //TODO add picture only to existing POI - addPoi(new Image()); + addImageMap(); break; case Types.CELL_RECEPTION: addCellReceptionPoi(); @@ -1053,6 +1060,57 @@ popupMapView.getOverlays().add(overlay); } + public void addImageMap() { + final MapView popupMapView = new MapView(getApplicationContext(), 256); + popupMapView.setTileSource(TileSourceFactory.MAPNIK); + popupMapView.setBuiltInZoomControls(false); + popupMapView.setMultiTouchControls(true); + IMapController popupMapController = popupMapView.getController(); + popupMapController.setZoom(ZOOM_LEVEL); + popupMapController.setCenter(new GeoPoint(mLocation.getLatitude(), mLocation.getLongitude())); + + List overlayItemList = new ArrayList<>(); + List poiMarker = dbHandler.getAllPois(); + for(Poi p : poiMarker){ + DbGeoPoint dbgp = p.getGp(); + GeoPoint gp = new GeoPoint(dbgp.getLat(), dbgp.getLon(), dbgp.getAlt()); + OverlayItem oI = new OverlayItem(String.valueOf(dbgp.getTime()) + "_" + String.valueOf(dbgp.getId()), String.valueOf(p.getId()), String.valueOf(p.getType()), gp); + Drawable[] iconLayer = new Drawable[2]; + iconLayer[0] = res.getDrawable(R.mipmap.ic_poi); + BitmapDrawable bd = (BitmapDrawable) res.getDrawable(entryImgs[getPos(p.getType())]); + if(bd == null) continue; + Bitmap b = bd.getBitmap(); + Bitmap bResized = Bitmap.createScaledBitmap(b, b.getWidth()/2, b.getHeight()/2, false); + bd = new BitmapDrawable(res, bResized); + bd.setGravity(Gravity.CENTER_HORIZONTAL); + iconLayer[1] = bd; + LayerDrawable icon = new LayerDrawable(iconLayer); + oI.setMarker(icon); + overlayItemList.add(oI); + } + + AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); + builder.setView(popupMapView) + .setTitle(R.string.path_map_dialog_title) //TODO title + .setPositiveButton(R.string.continue_button, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + AddImageDialog addImageDialog = new AddImageDialog(MainActivity.this); + addImageDialog.show(getFragmentManager(), "Add Image POI Dialog"); + } + }) + .setNegativeButton(R.string.cancel_button, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + } + }); + AlertDialog pathMapDialog = builder.create(); + pathMapDialog.show(); + pathMapDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); + final ImageDialogItemizedIconOverlay overlay = new ImageDialogItemizedIconOverlay(this, overlayItemList, pathMapDialog, popupMapView); + popupMapView.getOverlays().add(overlay); + } + private void addCellReceptionPoi(){ setActiveNetwork(); if(activeNetwork != null && activeNetwork.isConnected()){ @@ -1109,6 +1167,15 @@ } } + private void addImagePoi(Uri data){ + byte[] imgData = createImage(data); + if(imgData == null || imageMarker == null) Log.d(TAG, "image data or marker is null..."); + String[] uidParts = imageMarker.getUid().split("_"); + long gpId = Long.parseLong(uidParts[1]); + DbGeoPoint dbgp = (DbGeoPoint) dbHandler.getPoi(gpId, Types.GP); + addPoi(new Image(0, dbgp.getTypeId(), imgData, dbgp)); + } + public long addGp(DbGeoPoint dbgp){ return dbHandler.addPoi(dbgp); } @@ -1129,8 +1196,10 @@ } long rowId = dbHandler.addPoi(poi); if(rowId >= 0) Toaster(getString(R.string.add_poi_success), true); - dbgp.setTypeId(getTypeName(poi.getType()) + "_" + rowId); - dbHandler.updatePoi(dbgp); + if(poi.getType() != Types.PIC) { //Images should not update typeId + dbgp.setTypeId(getTypeName(poi.getType()) + "_" + rowId); + dbHandler.updatePoi(dbgp); + } if(poi.getType() == Types.PATH){ Path path = (Path) poi; @@ -1145,6 +1214,27 @@ return rowId; } + private byte[] createImage(Uri uri) { + try { + InputStream inputStream = getContentResolver().openInputStream(uri); + ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); + + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + + int len = 0; + while ((len = inputStream.read(buffer)) != -1) { + byteBuffer.write(buffer, 0, len); + } + return byteBuffer.toByteArray(); + } catch (FileNotFoundException e) { + Log.e(TAG, "The file at Uri " + uri.toString() + " does not exist!"); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + private class WarningListAdapter extends ArrayAdapter { private final Activity context; @@ -1172,6 +1262,18 @@ } @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + switch(requestCode){ + case SELECT_POI_PHOTO: + if(resultCode == RESULT_OK){ + addImagePoi(data.getData()); + } + break; + } + } + + @Override public void setTitle(CharSequence title){ mTitle = title; ActionBar actionBar = getSupportActionBar(); diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/pois/AddImageDialog.java b/app/src/main/java/de/apps4ics/mountainnavigation/pois/AddImageDialog.java new file mode 100644 index 0000000..9f5963d --- /dev/null +++ b/app/src/main/java/de/apps4ics/mountainnavigation/pois/AddImageDialog.java @@ -0,0 +1,44 @@ +package de.apps4ics.mountainnavigation.pois; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.provider.MediaStore; + +import de.apps4ics.mountainnavigation.MainActivity; +import de.apps4ics.mountainnavigation.R; + +/** + * Created by Vinz on 03.11.2015. + */ +public class AddImageDialog extends DialogFragment { + MainActivity ma; + + public AddImageDialog(MainActivity ma){ + this.ma = ma; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + final String[] items = { "Choose from gallery" }; + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle(R.string.hut_dialog_title) //TODO + .setMessage(R.string.hut_dialog_msg) //TODO + .setItems(items, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Intent intent = new Intent( + Intent.ACTION_PICK, + MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + intent.setType("image/*"); + startActivityForResult(Intent.createChooser(intent, "Select file"), + MainActivity.SELECT_POI_PHOTO ); + } + }); + + return builder.create(); + } +}