diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java index b52fd47..fa0cddb 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java @@ -98,6 +98,7 @@ import de.apps4ics.mountainnavigation.handlers.HikeHandler; import de.apps4ics.mountainnavigation.handlers.PoiHandler; import de.apps4ics.mountainnavigation.handlers.WeatherHandler; +import de.apps4ics.mountainnavigation.pois.AddBiotaDialog; import de.apps4ics.mountainnavigation.pois.AddPoiDialog; import de.apps4ics.mountainnavigation.pois.DbGeoPoint; import de.apps4ics.mountainnavigation.pois.Fountain; @@ -938,6 +939,11 @@ poiHandler.addImagePoi(data.getData()); } break; + case PoiHandler.SELECT_ENDANGERED_PHOTO: + if(resultCode == RESULT_OK) { + AddBiotaDialog.addImage(data.getData()); + } + break; } } diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/adapters/EndangeredListAdapter.java b/app/src/main/java/de/apps4ics/mountainnavigation/adapters/EndangeredListAdapter.java new file mode 100644 index 0000000..f5bf1bb --- /dev/null +++ b/app/src/main/java/de/apps4ics/mountainnavigation/adapters/EndangeredListAdapter.java @@ -0,0 +1,120 @@ +/** + * This file is part of MountainNavigation. + * + * MountainNavigation is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * MountainNavigation is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MountainNavigation. If not, see . + * + * @copyright Copyright (c) 2016 Vinzenz Rosenkanz + * + * @author Vinzenz Rosenkranz + */ + +package de.apps4ics.mountainnavigation.adapters; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.provider.MediaStore; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.List; + +import de.apps4ics.mountainnavigation.MainActivity; +import de.apps4ics.mountainnavigation.R; +import de.apps4ics.mountainnavigation.handlers.PoiHandler; + +public class EndangeredListAdapter extends ArrayAdapter { + private Activity context; + private List items; + private ViewHolder currentHolder; + + public EndangeredListAdapter(Activity context, List items) { + super(context, R.layout.endangered_dialog_item, items); + this.context = context; + this.items = items; + this.currentHolder = new ViewHolder(); + } + + private class ViewHolder { + private TextView title; + private Button addImage; + private ImageView image; + } + + public void setImageAtPosition(Uri data, int position) { + Log.d(MainActivity.TAG, "setImageAtPosition(Uri data, int position)" + position); + byte[] rawImage = PoiHandler.createImage(data, context.getApplicationContext()); + + View view = getView(position, null, null); + Drawable imageDraw = new BitmapDrawable(context.getResources(), BitmapFactory.decodeByteArray(rawImage, 0, rawImage.length)); + + currentHolder.image.setImageDrawable(imageDraw); + currentHolder.image.setVisibility(View.VISIBLE); + currentHolder.addImage.setVisibility(View.GONE); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + final ViewHolder holder; + LayoutInflater inflater = context.getLayoutInflater(); + + if(convertView == null){ + 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.image = (ImageView) convertView.findViewById(R.id.endangered_image); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + holder.title.setText(getItem(position)); + holder.addImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + currentHolder = holder; + Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + context.startActivityForResult(galleryIntent, PoiHandler.SELECT_ENDANGERED_PHOTO); + } + }); + + holder.title.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(holder.addImage.isShown()) { + holder.addImage.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); + } else { + holder.image.setVisibility(View.VISIBLE); + } + } + } + }); + + 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 14bfce7..4e0678c 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java @@ -113,6 +113,7 @@ 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; @@ -546,7 +547,6 @@ } public void addBiota() { - Log.d(MainActivity.TAG, "test"); AddBiotaDialog addBiotaDialog = new AddBiotaDialog(); addBiotaDialog.show(fragmentManager, "Add Biota POI Dialog"); } @@ -720,6 +720,10 @@ } private byte[] createImage(Uri uri) { + return createImage(uri, context); + } + + public static byte[] createImage(Uri uri, Context context) { try { InputStream inputStream = context.getContentResolver().openInputStream(uri); ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); 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 ec7f468..4216ad5 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/pois/AddBiotaDialog.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/pois/AddBiotaDialog.java @@ -25,35 +25,38 @@ import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; +import android.net.Uri; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; -import android.widget.ArrayAdapter; +import android.widget.AdapterView; import android.widget.Button; -import android.widget.CheckBox; import android.widget.EditText; import android.widget.ListView; -import android.widget.Spinner; -import android.widget.TextView; import java.util.ArrayList; import java.util.List; -import de.apps4ics.mountainnavigation.Features; import de.apps4ics.mountainnavigation.MainActivity; import de.apps4ics.mountainnavigation.R; +import de.apps4ics.mountainnavigation.adapters.EndangeredListAdapter; import de.apps4ics.mountainnavigation.handlers.PoiHandler; public class AddBiotaDialog extends DialogFragment { private PoiHandler poiHandler; - private ArrayAdapter listAdapter; + private static EndangeredListAdapter listAdapter; private List listItems; + private EditText addElementInput; + private Button addElementButton; + private Button addBiota; + private static int lastPosition; public AddBiotaDialog() { this.poiHandler = MainActivity.getPoiHandler(); this.listItems = new ArrayList<>(); + lastPosition = 0; } @Override @@ -61,16 +64,16 @@ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); final View view = inflater.inflate(R.layout.biota_dialog, null, true); - listAdapter = new ArrayAdapter<>(view.getContext(), android.R.layout.simple_list_item_1, listItems); - final EditText addElementInput = (EditText) view.findViewById(R.id.endangered_name); - final Button addElementButton = (Button) view.findViewById(R.id.endangered_add); + listAdapter = new EndangeredListAdapter(getActivity(), listItems); + addElementInput = (EditText) view.findViewById(R.id.endangered_name); + addElementButton = (Button) view.findViewById(R.id.endangered_add); final ListView elementList = (ListView) view.findViewById(R.id.endangered_list); builder.setTitle(R.string.biota_dialog_title) .setView(view) .setPositiveButton(R.string.ok_button, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - + //TODO add biota to DB } }) .setNegativeButton(R.string.cancel_button, new DialogInterface.OnClickListener() { @@ -81,10 +84,24 @@ AlertDialog dialog = builder.create(); dialog.create(); - final Button positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE); - positiveButton.setEnabled(false); + addBiota = dialog.getButton(AlertDialog.BUTTON_POSITIVE); + addBiota.setEnabled(false); elementList.setAdapter(listAdapter); + elementList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { + @Override + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + removeElement(position); + return true; + } + }); + elementList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + lastPosition = position; + } + }); + addElementInput.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -104,11 +121,31 @@ addElementButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - listItems.add(addElementInput.getText().toString()); - listAdapter.notifyDataSetChanged(); + addElement(addElementInput.getText().toString()); } }); return dialog; } + + public static void addImage(Uri data) { + listAdapter.setImageAtPosition(data, lastPosition); + } + + private void addElement(String text) { + listItems.add(text); + addElementButton.setEnabled(false); + addElementInput.setText(""); + updateUi(); + } + + private void removeElement(int position) { + listItems.remove(position); + updateUi(); + } + + private void updateUi() { + listAdapter.notifyDataSetChanged(); + addBiota.setEnabled(listItems.size() > 0); + } } diff --git a/app/src/main/res/layout/biota_dialog.xml b/app/src/main/res/layout/biota_dialog.xml index 4f4cb96..f48eb27 100644 --- a/app/src/main/res/layout/biota_dialog.xml +++ b/app/src/main/res/layout/biota_dialog.xml @@ -41,6 +41,7 @@ android:layout_marginStart="16dp" android:layout_marginRight="16dp" android:layout_marginEnd="16dp" + android:hint="@string/biota_dialog_endangered_hint" android:inputType="text"/>