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/build.gradle | 13 +- 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 + 15 files changed, 662 insertions(+), 30 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') diff --git a/app/build.gradle b/app/build.gradle index 21419c7..fe925d9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,11 +26,14 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" - implementation 'com.android.support:appcompat-v7:27.1.0' - implementation 'com.android.support:support-v4:27.1.0' - implementation 'com.android.support:design:27.1.0' - implementation 'com.android.support.constraint:constraint-layout:1.0.2' - implementation 'com.android.support:support-vector-drawable:27.1.0' + implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'com.android.support:support-v4:27.1.1' + implementation 'com.android.support:design:27.1.1' + implementation 'com.android.support.constraint:constraint-layout:1.1.0' + implementation 'com.android.support:support-vector-drawable:27.1.1' + implementation 'com.android.volley:volley:1.1.0' + implementation 'com.google.code.gson:gson:2.8.2' + implementation 'com.squareup.retrofit2:retrofit:2.4.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' 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