diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b42201a..d6c8aff 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + . + * + * @copyright Copyright (c) 2016 Vinzenz Rosenkanz + * + * @author Vinzenz Rosenkranz + */ + +package de.apps4ics.mountainnavigation; + +public class RequestCodes { + public final static int SELECT_POI_PHOTO = 1; + public final static int SELECT_ENDANGERED_PHOTO = 2; + public final static int TAKE_ENDANGERED_IMAGE = 3; +} diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/adapters/EndangeredListAdapter.java b/app/src/main/java/de/apps4ics/mountainnavigation/adapters/EndangeredListAdapter.java index 362103b..a245a24 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/adapters/EndangeredListAdapter.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/adapters/EndangeredListAdapter.java @@ -32,14 +32,16 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; -import android.widget.Button; +import android.widget.ImageButton; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; import java.util.List; import de.apps4ics.mountainnavigation.MainActivity; import de.apps4ics.mountainnavigation.R; +import de.apps4ics.mountainnavigation.RequestCodes; import de.apps4ics.mountainnavigation.handlers.PoiHandler; import de.apps4ics.mountainnavigation.pois.Endangered; @@ -58,11 +60,7 @@ this.maxHeight = -1; } - public void setImageAtPosition(Uri data) { - byte[] rawImage = PoiHandler.createImage(data, context); - //Scale image to maximal res of max_db_image_* dimen to store it in DB - Drawable drawable = MainActivity.convertByteArrayToDrawable(rawImage); - Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); + private void scaleAndSetImage(Bitmap bitmap, byte[] rawImage) { int height = bitmap.getHeight(); int width = bitmap.getWidth(); boolean scaleToWidth = width > height; @@ -78,7 +76,20 @@ currentHolder.image.setImageDrawable(MainActivity.convertByteArrayToDrawable(rawImage, maxHeight)); currentHolder.image.setVisibility(View.VISIBLE); - currentHolder.addImage.setVisibility(View.GONE); + currentHolder.imageButtonLayout.setVisibility(View.GONE); + } + + public void setImageAtPosition(Bitmap bitmap) { + byte[] rawImage = MainActivity.convertDrawableToByteArray(new BitmapDrawable(MainActivity.getRes(), bitmap)); + scaleAndSetImage(bitmap, rawImage); + } + + public void setImageAtPosition(Uri data) { + byte[] rawImage = PoiHandler.createImage(data, context); + //Scale image to maximal res of max_db_image_* dimen to store it in DB + Drawable drawable = MainActivity.convertByteArrayToDrawable(rawImage); + Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); + scaleAndSetImage(bitmap, rawImage); } @Override @@ -90,7 +101,9 @@ convertView = inflater.inflate(R.layout.endangered_dialog_item, null); holder = new ViewHolder(); holder.title = (TextView) convertView.findViewById(R.id.endangered_title); - holder.addImage = (Button) convertView.findViewById(R.id.endangered_add_image); + holder.imageButtonLayout = (LinearLayout) convertView.findViewById(R.id.endangered_add_image_layout); + holder.addImage = (ImageButton) convertView.findViewById(R.id.endangered_add_image); + holder.takeImage = (ImageButton) convertView.findViewById(R.id.endangered_take_image); holder.image = (ImageView) convertView.findViewById(R.id.endangered_image); convertView.setTag(holder); } else { @@ -104,20 +117,29 @@ imagePosition = position; currentHolder = holder; Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); - context.startActivityForResult(galleryIntent, PoiHandler.SELECT_ENDANGERED_PHOTO); + context.startActivityForResult(galleryIntent, RequestCodes.SELECT_ENDANGERED_PHOTO); + } + }); + holder.takeImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + imagePosition = position; + currentHolder = holder; + Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + context.startActivityForResult(cameraIntent, RequestCodes.TAKE_ENDANGERED_IMAGE); } }); holder.title.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if(holder.addImage.isShown()) { - holder.addImage.setVisibility(View.GONE); + if(holder.imageButtonLayout.isShown()) { + holder.imageButtonLayout.setVisibility(View.GONE); } else if(holder.image.isShown()) { holder.image.setVisibility(View.GONE); } else { //if there is no image, show add button, image otherwise if(holder.image.getDrawable() == null) { - holder.addImage.setVisibility(View.VISIBLE); + holder.imageButtonLayout.setVisibility(View.VISIBLE); } else { holder.image.setVisibility(View.VISIBLE); } @@ -133,7 +155,9 @@ protected static class ViewHolder { protected TextView title; - protected Button addImage; + protected LinearLayout imageButtonLayout; + protected ImageButton addImage; + protected ImageButton takeImage; protected ImageView image; } } diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/adapters/ShowEndangeredListAdapter.java b/app/src/main/java/de/apps4ics/mountainnavigation/adapters/ShowEndangeredListAdapter.java index d934fc3..c69de27 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/adapters/ShowEndangeredListAdapter.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/adapters/ShowEndangeredListAdapter.java @@ -25,7 +25,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; @@ -50,7 +50,8 @@ convertView = inflater.inflate(R.layout.endangered_dialog_item, null); holder = new ViewHolder(); holder.title = (TextView) convertView.findViewById(R.id.endangered_title); - holder.addImage = (Button) convertView.findViewById(R.id.endangered_add_image); + holder.addImage = (ImageButton) convertView.findViewById(R.id.endangered_add_image); + holder.takeImage = (ImageButton) convertView.findViewById(R.id.endangered_take_image); holder.image = (ImageView) convertView.findViewById(R.id.endangered_image); convertView.setTag(holder); } else { @@ -59,6 +60,7 @@ if(maxHeight == -1) maxHeight = holder.image.getMaxHeight(); holder.title.setText(items.get(position).getName()); holder.addImage.setVisibility(View.GONE); + holder.takeImage.setVisibility(View.GONE); holder.image.setVisibility(View.VISIBLE); holder.image.setOnClickListener(new View.OnClickListener() { @Override @@ -79,7 +81,8 @@ }); byte[] b = getItem(position).getImage(); - holder.image.setImageDrawable(MainActivity.convertByteArrayToDrawable(b, maxHeight)); + if(b == null) holder.image.setImageDrawable(null); + else holder.image.setImageDrawable(MainActivity.convertByteArrayToDrawable(b, maxHeight)); return convertView; } diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java index 4f021e4..5d7092d 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java @@ -76,6 +76,7 @@ import de.apps4ics.mountainnavigation.MainActivity; import de.apps4ics.mountainnavigation.ModernInfoWindow; import de.apps4ics.mountainnavigation.R; +import de.apps4ics.mountainnavigation.RequestCodes; import de.apps4ics.mountainnavigation.overlays.ImageDialogItemizedIconOverlay; import de.apps4ics.mountainnavigation.overlays.MapDialogItemizedIconOverlay; import de.apps4ics.mountainnavigation.pois.AddBiotaDialog; @@ -111,8 +112,6 @@ private Vibrator v; private static final long VIB_LENGTH = 50; - public final static int SELECT_POI_PHOTO = 1; - public final static int SELECT_ENDANGERED_PHOTO = 2; private static String[] fountainSizes; private static String[] pathOptions; @@ -602,7 +601,7 @@ @Override public void onClick(DialogInterface dialog, int which) { Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); - activity.startActivityForResult(galleryIntent, SELECT_POI_PHOTO); + activity.startActivityForResult(galleryIntent, RequestCodes.SELECT_POI_PHOTO); } }) .setNegativeButton(R.string.cancel_button, new DialogInterface.OnClickListener() { diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/pois/AddBiotaDialog.java b/app/src/main/java/de/apps4ics/mountainnavigation/pois/AddBiotaDialog.java index 9cad93c..becaf61 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/pois/AddBiotaDialog.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/pois/AddBiotaDialog.java @@ -25,6 +25,7 @@ import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; +import android.graphics.Bitmap; import android.location.Location; import android.net.Uri; import android.os.Bundle; @@ -145,6 +146,10 @@ listAdapter.setImageAtPosition(data); } + public static void addImage(Bitmap bitmap) { + listAdapter.setImageAtPosition(bitmap); + } + private void addElement(Endangered e) { listItems.add(e); addElementButton.setEnabled(false); diff --git a/app/src/main/res/layout/endangered_dialog_item.xml b/app/src/main/res/layout/endangered_dialog_item.xml index c2fa9b7..59852d0 100644 --- a/app/src/main/res/layout/endangered_dialog_item.xml +++ b/app/src/main/res/layout/endangered_dialog_item.xml @@ -42,10 +42,20 @@ android:maxHeight="200dp" android:id="@+id/endangered_image" android:visibility="gone"/> -