diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java index 4281262..6a5e11d 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java @@ -94,6 +94,7 @@ import java.util.Locale; import de.apps4ics.mountainnavigation.adapters.HikeListAdapter; +import de.apps4ics.mountainnavigation.adapters.ShowEndangeredListAdapter; import de.apps4ics.mountainnavigation.handlers.DatabaseHandler; import de.apps4ics.mountainnavigation.handlers.HikeHandler; import de.apps4ics.mountainnavigation.handlers.PoiHandler; @@ -101,9 +102,8 @@ import de.apps4ics.mountainnavigation.pois.AddBiotaDialog; import de.apps4ics.mountainnavigation.pois.AddPoiDialog; import de.apps4ics.mountainnavigation.pois.DbGeoPoint; -import de.apps4ics.mountainnavigation.pois.Fountain; import de.apps4ics.mountainnavigation.pois.Endangered; -import de.apps4ics.mountainnavigation.pois.Biota; +import de.apps4ics.mountainnavigation.pois.Fountain; import de.apps4ics.mountainnavigation.pois.Hike; import de.apps4ics.mountainnavigation.pois.Poi; import de.apps4ics.mountainnavigation.pois.Types; @@ -627,9 +627,38 @@ iv.setTag(""); tv.setTextColor(res.getColor(R.color.text_color_selected)); String title = PoiHandler.getEntries()[position]; - List markers = poiHandler.getPoiIcons(type, title); - mapView.getOverlays().addAll(markers); - mapView.invalidate(); + if(title.equals(getString(R.string.toggle_entry_biota))) { + List biotas = dbHandler.getPoiByType(Types.BIOTA); + List markers = poiHandler.getPoiIcons(Types.BIOTA, title); + for(int i=0; i items = dbHandler.getEndageredForBiota(poi.getId()); + for(int j=0; j markers = poiHandler.getPoiIcons(type, title); + mapView.getOverlays().addAll(markers); + mapView.invalidate(); + } } else { iv.setColorFilter(res.getColor(R.color.icon_unselected_gray), PorterDuff.Mode.DST_OUT); iv.setTag("disabled"); @@ -770,6 +799,12 @@ case Types.LIFT: name = "lift"; break; + case Types.HIKE: + name = "hike"; + break; + case Types.BIOTA: + name = "biota"; + break; } return name; } 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 f5bf1bb..9854b48 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/adapters/EndangeredListAdapter.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/adapters/EndangeredListAdapter.java @@ -28,7 +28,6 @@ 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; @@ -39,34 +38,29 @@ import java.util.List; -import de.apps4ics.mountainnavigation.MainActivity; import de.apps4ics.mountainnavigation.R; import de.apps4ics.mountainnavigation.handlers.PoiHandler; +import de.apps4ics.mountainnavigation.pois.Endangered; -public class EndangeredListAdapter extends ArrayAdapter { - private Activity context; - private List items; - private ViewHolder currentHolder; +public class EndangeredListAdapter extends ArrayAdapter { + protected Activity context; + protected List items; + protected ViewHolder currentHolder; + protected int imagePosition; - public EndangeredListAdapter(Activity context, List items) { + public EndangeredListAdapter(Activity context, List items) { super(context, R.layout.endangered_dialog_item, items); this.context = context; this.items = items; - this.currentHolder = new ViewHolder(); + this.imagePosition = 0; } - 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); + public void setImageAtPosition(Uri data) { 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)); + Endangered e = items.get(imagePosition); + e.setImage(rawImage); + items.set(imagePosition, e); currentHolder.image.setImageDrawable(imageDraw); currentHolder.image.setVisibility(View.VISIBLE); @@ -74,7 +68,7 @@ } @Override - public View getView(int position, View convertView, ViewGroup parent) { + public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; LayoutInflater inflater = context.getLayoutInflater(); @@ -88,10 +82,11 @@ } else { holder = (ViewHolder) convertView.getTag(); } - holder.title.setText(getItem(position)); + holder.title.setText(getItem(position).getName()); holder.addImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + imagePosition = position; currentHolder = holder; Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); context.startActivityForResult(galleryIntent, PoiHandler.SELECT_ENDANGERED_PHOTO); @@ -114,7 +109,17 @@ } } }); + byte[] b = items.get(position).getImage(); + if(b == null) holder.image.setImageDrawable(null); + else holder.image.setImageDrawable(new BitmapDrawable(context.getResources(), BitmapFactory.decodeByteArray(b, 0, b.length))); return convertView; } + + protected static class ViewHolder { + protected TextView title; + protected Button addImage; + 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 new file mode 100644 index 0000000..1a17675 --- /dev/null +++ b/app/src/main/java/de/apps4ics/mountainnavigation/adapters/ShowEndangeredListAdapter.java @@ -0,0 +1,80 @@ +/** + * 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.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.List; + +import de.apps4ics.mountainnavigation.R; +import de.apps4ics.mountainnavigation.pois.Endangered; + +public class ShowEndangeredListAdapter extends EndangeredListAdapter { + public ShowEndangeredListAdapter(Activity context, List items) { + super(context, items); + } + + @Override + public View getView(final 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(items.get(position).getName()); + holder.addImage.setVisibility(View.GONE); + + holder.title.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(holder.image.isShown()) { + holder.image.setVisibility(View.GONE); + } else { + holder.image.setVisibility(View.VISIBLE); + } + } + }); + + byte[] b = getItem(position).getImage(); + Drawable drawable = new BitmapDrawable(BitmapFactory.decodeByteArray(b, 0, b.length)); + holder.image.setImageDrawable(drawable); + + return convertView; + } +} diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java index 8247033..7f4c986 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java @@ -50,7 +50,7 @@ import de.apps4ics.mountainnavigation.pois.Wifi; public class DatabaseHandler extends SQLiteOpenHelper { - private static final int DATABASE_VERSION = 7; + private static final int DATABASE_VERSION = 8; private static final float MAX_POI_DISTANCE = 12.5f; private static final float MAX_POI_DISTANCE_COS = (float) Math.cos(MAX_POI_DISTANCE / 6371); @@ -409,7 +409,7 @@ return getBiotaFromCursor(cursor); } - private Biota getEndangeredFromCursor(Cursor cursor) { + private Endangered getEndangeredFromCursor(Cursor cursor) { long id = cursor.getLong(cursor.getColumnIndex(KEY_POI_ID)); long biotaId = cursor.getLong(cursor.getColumnIndex(KEY_BIOTA_EXT_ID)); String name = cursor.getString(cursor.getColumnIndex(KEY_ENDANGERED_NAME)); @@ -417,7 +417,7 @@ return new Endangered(id, image, biotaId, name); } - private Biota getEndangered(SQLiteDatabase db, long id) { + private Endangered getEndangered(SQLiteDatabase db, long id) { Cursor cursor = db.query(TABLE_ENDANGERED, new String[]{KEY_POI_ID, KEY_BIOTA_EXT_ID, KEY_ENDANGERED_NAME, KEY_ENDANGERED_IMAGE}, KEY_POI_ID + "=?", 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 4216ad5..2428328 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.location.Location; import android.net.Uri; import android.os.Bundle; import android.text.Editable; @@ -36,27 +37,28 @@ import android.widget.EditText; import android.widget.ListView; +import org.osmdroid.util.GeoPoint; + import java.util.ArrayList; import java.util.List; import de.apps4ics.mountainnavigation.MainActivity; import de.apps4ics.mountainnavigation.R; import de.apps4ics.mountainnavigation.adapters.EndangeredListAdapter; +import de.apps4ics.mountainnavigation.handlers.DatabaseHandler; import de.apps4ics.mountainnavigation.handlers.PoiHandler; public class AddBiotaDialog extends DialogFragment { private PoiHandler poiHandler; private static EndangeredListAdapter listAdapter; - private List listItems; + 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 @@ -67,13 +69,30 @@ 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); + 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 + DatabaseHandler dbHandler = MainActivity.getDbHandler(); + Biota biota = new Biota(250.0f); //radius in m + long biotaId = dbHandler.addPoi(biota); + biota.setId(biotaId); + Location l = MainActivity.getLocation(); + GeoPoint gp = new GeoPoint(l.getLatitude(), l.getLongitude(), l.getAltitude()); + poiHandler.addGp(new DbGeoPoint(gp, System.currentTimeMillis()/1000, biota.getId(), biota.getType())); + List items = new ArrayList<>(); + for(int i=0; i parent, View view, int position, long id) { + //TODO currently listener is catched by ListAdapter removeElement(position); - return true; - } - }); - elementList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - lastPosition = position; + return false; } }); @@ -121,7 +135,7 @@ addElementButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - addElement(addElementInput.getText().toString()); + addElement(new Endangered(0, null, 0, addElementInput.getText().toString())); } }); @@ -129,11 +143,11 @@ } public static void addImage(Uri data) { - listAdapter.setImageAtPosition(data, lastPosition); + listAdapter.setImageAtPosition(data); } - private void addElement(String text) { - listItems.add(text); + private void addElement(Endangered e) { + listItems.add(e); addElementButton.setEnabled(false); addElementInput.setText(""); updateUi(); diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/pois/Endangered.java b/app/src/main/java/de/apps4ics/mountainnavigation/pois/Endangered.java index 97c5814..6e15ed1 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/pois/Endangered.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/pois/Endangered.java @@ -50,4 +50,12 @@ public String getName() { return name; } + + public void setImage(byte[] b) { + this.image = b; + } + + public void setName(String name) { + this.name = name; + } }