From 4e6fc4fcdbcc3c75be13b3f8b80c24e4648fe354 Mon Sep 17 00:00:00 2001 From: marcinzelent Date: Thu, 19 Apr 2018 23:03:13 +0200 Subject: Added details view, improved observations list --- app/src/main/AndroidManifest.xml | 5 +- .../liberavem/AllObservationsFragment.java | 73 ++++++- .../main/java/org/marcinzelent/liberavem/Bird.java | 52 +++-- .../org/marcinzelent/liberavem/MainActivity.java | 9 + .../liberavem/MyObservationsFragment.java | 21 +- .../org/marcinzelent/liberavem/Observation.java | 93 +++++++++ .../liberavem/ObservationDetailsActivity.java | 36 ++++ .../liberavem/ObservationsFragment.java | 2 - .../liberavem/ObservationsListAdapter.java | 88 +++++++++ .../marcinzelent/liberavem/SquareImageView.java | 28 +++ .../res/layout/activity_observation_details.xml | 216 +++++++++++++++++++++ app/src/main/res/layout/observations_list_item.xml | 41 ++++ .../main/res/values/attrs_square_image_view.xml | 8 + app/src/main/res/values/strings.xml | 7 + 14 files changed, 654 insertions(+), 25 deletions(-) create mode 100644 app/src/main/java/org/marcinzelent/liberavem/Observation.java create mode 100644 app/src/main/java/org/marcinzelent/liberavem/ObservationDetailsActivity.java create mode 100644 app/src/main/java/org/marcinzelent/liberavem/ObservationsListAdapter.java create mode 100644 app/src/main/java/org/marcinzelent/liberavem/SquareImageView.java create mode 100644 app/src/main/res/layout/activity_observation_details.xml create mode 100644 app/src/main/res/layout/observations_list_item.xml create mode 100644 app/src/main/res/values/attrs_square_image_view.xml (limited to 'app/src') diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c5206f3..edc0b5d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,8 @@ xmlns:tools="http://schemas.android.com/tools" package="org.marcinzelent.liberavem"> + + + android:label="@string/title_activity_settings" /> + \ No newline at end of file diff --git a/app/src/main/java/org/marcinzelent/liberavem/AllObservationsFragment.java b/app/src/main/java/org/marcinzelent/liberavem/AllObservationsFragment.java index ee07682..3f3ad7b 100644 --- a/app/src/main/java/org/marcinzelent/liberavem/AllObservationsFragment.java +++ b/app/src/main/java/org/marcinzelent/liberavem/AllObservationsFragment.java @@ -1,18 +1,40 @@ package org.marcinzelent.liberavem; +import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import org.jetbrains.annotations.Nullable; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; /** * A simple {@link Fragment} subclass. */ public class AllObservationsFragment extends Fragment { - + Observation[] observations; + Bird[] birds; public AllObservationsFragment() { // Required empty public constructor @@ -26,4 +48,51 @@ public class AllObservationsFragment extends Fragment { return rootView; } + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + final ListView observationsListView = view.findViewById(R.id.observations_list_view); + + observationsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) { + Intent detailsIntent = new Intent(getActivity(), ObservationDetailsActivity.class); + detailsIntent.putExtra("Observation", observations[position]); + + //String photoUrl = ""; + //for (Bird bird : birds) + // if (bird.getId() == observations[position].getBirdId()) + // photoUrl = bird.getPhotoUrl(); + //detailsIntent.putExtra("Photo", photoUrl); + startActivity(detailsIntent); + } + }); + + //final ObservationsListAdapter adapter = new ObservationsListAdapter(getActivity(), observations, birds); + //observationsListView.setAdapter(adapter); + + String observationsUrl = "http://birdobservationservice.azurewebsites.net/Service1.svc/observations"; + final StringRequest observationRequest = new StringRequest(Request.Method.GET, observationsUrl, new Response.Listener() { + @Override + public void onResponse(String response) { + Gson gson = new GsonBuilder().create(); + observations = gson.fromJson(response, Observation[].class); + for (Observation o : observations) { + int p = o.getCreated().indexOf('+'); + long epoch = Long.parseLong(o.getCreated().substring(6, p)); + Date date = new Date(epoch); + String formatted = new SimpleDateFormat("dd.MM.yyyy HH:mm", Locale.ENGLISH).format(date); + o.setCreated(formatted); + } + final ObservationsListAdapter adapter = new ObservationsListAdapter(getActivity(), observations, birds); + observationsListView.setAdapter(adapter); + } + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Toast.makeText(getActivity(), "Database connection error :( ", Toast.LENGTH_LONG).show(); + } + }); + + Volley.newRequestQueue(getActivity()).add(observationRequest); + } } diff --git a/app/src/main/java/org/marcinzelent/liberavem/Bird.java b/app/src/main/java/org/marcinzelent/liberavem/Bird.java index 668059c..a94faf3 100644 --- a/app/src/main/java/org/marcinzelent/liberavem/Bird.java +++ b/app/src/main/java/org/marcinzelent/liberavem/Bird.java @@ -1,37 +1,51 @@ package org.marcinzelent.liberavem; -public class Bird { - private int Id; - private long Created; - private String NameEnglish; - private String NameDanish; - private String PhotoUrl; - - public Bird(int id, long created, String nameEnglish, String nameDanish, String photoUrl) { - Id = id; - Created = created; - NameEnglish = nameEnglish; - NameDanish = nameDanish; - PhotoUrl = photoUrl; +import com.google.gson.annotations.SerializedName; + +import java.io.Serializable; + +public class Bird implements Serializable { + @SerializedName("Id") + private int id; + @SerializedName("Created") + private String created; + @SerializedName("NameEnglish") + private String nam