From 9f93b87a633d302b3c417aa578325bbe7477860f Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 17:26:02 +1200 Subject: [PATCH 01/80] Add nearby icon to menu --- app/src/main/res/menu/fragment_contributions_list.xml | 5 +++++ app/src/main/res/values/strings.xml | 1 + 2 files changed, 6 insertions(+) diff --git a/app/src/main/res/menu/fragment_contributions_list.xml b/app/src/main/res/menu/fragment_contributions_list.xml index c4ff771b7..3805a7730 100644 --- a/app/src/main/res/menu/fragment_contributions_list.xml +++ b/app/src/main/res/menu/fragment_contributions_list.xml @@ -27,6 +27,11 @@ app:showAsAction="never" android:icon="@android:drawable/ic_menu_send" /> + Uploading From Gallery Take photo + Nearby My uploads Share From 9e13d644c55f65bfaa713c85d9e5da528dea006a Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 17:29:45 +1200 Subject: [PATCH 02/80] Add NearbyActivity --- .../contributions/ContributionsListFragment.java | 6 ++++-- .../free/nrw/commons/nearby/NearbyActivity.java | 15 +++++++++++++++ app/src/main/res/layout/activity_nearby.xml | 12 ++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java create mode 100644 app/src/main/res/layout/activity_nearby.xml diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 7f93599f3..32c7fb858 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -30,6 +30,7 @@ import fr.free.nrw.commons.AboutActivity; import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.R; import fr.free.nrw.commons.SettingsActivity; +import fr.free.nrw.commons.nearby.NearbyActivity; import fr.free.nrw.commons.upload.UploadService; public class ContributionsListFragment extends Fragment { @@ -142,15 +143,16 @@ public class ContributionsListFragment extends Fragment { feedbackIntent.setType("message/rfc822"); feedbackIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { CommonsApplication.FEEDBACK_EMAIL }); feedbackIntent.putExtra(Intent.EXTRA_SUBJECT, String.format(CommonsApplication.FEEDBACK_EMAIL_SUBJECT, CommonsApplication.APPLICATION_VERSION)); - try { startActivity(feedbackIntent); } catch (ActivityNotFoundException e) { Toast.makeText(getActivity(), R.string.no_email_client, Toast.LENGTH_SHORT).show(); } - return true; + case R.id.menu_nearby: + Intent nearbyIntent = new Intent(getActivity(), NearbyActivity.class); + startActivity(nearbyIntent); case R.id.menu_refresh: ((SourceRefresher)getActivity()).refreshSource(); return true; diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java new file mode 100644 index 000000000..de9b60600 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -0,0 +1,15 @@ +package fr.free.nrw.commons.nearby; + +import android.app.Activity; +import android.os.Bundle; + +import fr.free.nrw.commons.R; + +public class NearbyActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_nearby); + } +} diff --git a/app/src/main/res/layout/activity_nearby.xml b/app/src/main/res/layout/activity_nearby.xml new file mode 100644 index 000000000..25303782b --- /dev/null +++ b/app/src/main/res/layout/activity_nearby.xml @@ -0,0 +1,12 @@ + + + + From 83307b407fb52f3db7357410467ec5ec17582777 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 17:39:35 +1200 Subject: [PATCH 03/80] Add basic activity --- .../nrw/commons/contributions/ContributionsListFragment.java | 1 + .../main/java/fr/free/nrw/commons/nearby/NearbyActivity.java | 4 +++- app/src/main/res/values/strings.xml | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 32c7fb858..81410983b 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -151,6 +151,7 @@ public class ContributionsListFragment extends Fragment { } return true; case R.id.menu_nearby: + //TODO: Check for permissions if API 23+ Intent nearbyIntent = new Intent(getActivity(), NearbyActivity.class); startActivity(nearbyIntent); case R.id.menu_refresh: diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index de9b60600..4f0d4af8a 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -1,7 +1,7 @@ package fr.free.nrw.commons.nearby; -import android.app.Activity; import android.os.Bundle; +import android.app.Activity; import fr.free.nrw.commons.R; @@ -11,5 +11,7 @@ public class NearbyActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_nearby); + getActionBar().setDisplayHomeAsUpEnabled(true); } + } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1996b5266..762e33d6e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -157,4 +157,5 @@ OK Back SignupActivity + NearbyActivity From 05af8a0827c7afc698f9f0bc6693762357c5ed4f Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 17:46:28 +1200 Subject: [PATCH 04/80] Add NearbyActivity to manifest --- app/src/main/AndroidManifest.xml | 3 +++ .../java/fr/free/nrw/commons/nearby/NearbyActivity.java | 6 ++++-- app/src/main/res/values/strings.xml | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a72b3cc65..bb2286f9b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -82,6 +82,9 @@ + diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 4f0d4af8a..842d6bcbd 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -1,17 +1,19 @@ package fr.free.nrw.commons.nearby; +import android.app.ListActivity; import android.os.Bundle; import android.app.Activity; +import android.support.v7.app.AppCompatActivity; import fr.free.nrw.commons.R; -public class NearbyActivity extends Activity { +public class NearbyActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_nearby); - getActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 762e33d6e..fd6d6b998 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -157,5 +157,5 @@ OK Back SignupActivity - NearbyActivity + Nearby Places Lacking Photos From cb3a8bfa0297892cf5ae2fb8f081f0fe0bac40c1 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 17:47:18 +1200 Subject: [PATCH 05/80] Change string --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fd6d6b998..305a43d4d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -157,5 +157,5 @@ OK Back SignupActivity - Nearby Places Lacking Photos + Nearby Places From f13cdc0485b3734c682a87d4d1a73a52d8b5cb51 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 17:58:38 +1200 Subject: [PATCH 06/80] Add comments to GPSExtractor --- .../java/fr/free/nrw/commons/nearby/NearbyActivity.java | 2 ++ .../java/fr/free/nrw/commons/upload/GPSExtractor.java | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 842d6bcbd..a81534c05 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -16,4 +16,6 @@ public class NearbyActivity extends AppCompatActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } + //TODO: Get user's location + } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 8445092ff..8171370a4 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -80,8 +80,8 @@ public class GPSExtractor { } /** - * Extracts geolocation of image from EXIF data. - * @return coordinates of image as string (needs to be passed as a String in API query) + * Extracts geolocation (either of image from EXIF data, or of user) + * @return coordinates as string (needs to be passed as a String in API query) */ @Nullable public String getCoords(boolean useGPS) { @@ -103,6 +103,7 @@ public class GPSExtractor { return null; } + //If image has no EXIF data and user has enabled GPS setting, get user's location if (exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE) == null && useGPS) { registerLocationManager(); @@ -122,6 +123,7 @@ public class GPSExtractor { } else if (exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE) == null) { return null; } else { + //If image has EXIF data, extract image coords imageCoordsExists = true; Log.d(TAG, "EXIF data has location info"); @@ -142,6 +144,9 @@ public class GPSExtractor { } } + /** + * LocationListener to obtain user's location + */ private class MyLocationListener implements LocationListener { @Override From 7dd48e092c9e1bc768db9dbbe2268f71057d0882 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 18:01:43 +1200 Subject: [PATCH 07/80] Copy relevant code from GPSExtractor --- .../nrw/commons/nearby/NearbyActivity.java | 68 +++++++++++++++++++ .../free/nrw/commons/upload/GPSExtractor.java | 2 +- 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index a81534c05..8124ba6db 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -1,14 +1,27 @@ package fr.free.nrw.commons.nearby; import android.app.ListActivity; +import android.content.Context; +import android.location.Criteria; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; import android.os.Bundle; import android.app.Activity; import android.support.v7.app.AppCompatActivity; +import android.util.Log; import fr.free.nrw.commons.R; public class NearbyActivity extends AppCompatActivity { + private MyLocationListener myLocationListener; + private LocationManager locationManager; + private String provider; + private Criteria criteria; + + private static final String TAG = "NearbyActivty"; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -17,5 +30,60 @@ public class NearbyActivity extends AppCompatActivity { } //TODO: Get user's location + /** + * Registers a LocationManager to listen for current location + */ + protected void registerLocationManager() { + locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + criteria = new Criteria(); + provider = locationManager.getBestProvider(criteria, true); + myLocationListener = new MyLocationListener(); + try { + locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); + Location location = locationManager.getLastKnownLocation(provider); + if (location != null) { + myLocationListener.onLocationChanged(location); + } + } catch (IllegalArgumentException e) { + Log.e(TAG, "Illegal argument exception", e); + } catch (SecurityException e) { + Log.e(TAG, "Security exception", e); + } + } + + protected void unregisterLocationManager() { + try { + locationManager.removeUpdates(myLocationListener); + } catch (SecurityException e) { + Log.e(TAG, "Security exception", e); + } + } + + /** + * Listen for user's location when it changes + */ + private class MyLocationListener implements LocationListener { + + @Override + public void onLocationChanged(Location location) { + currentLatitude = location.getLatitude(); + currentLongitude = location.getLongitude(); + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + Log.d(TAG, provider + "'s status changed to " + status); + } + + @Override + public void onProviderEnabled(String provider) { + Log.d(TAG, "Provider " + provider + " enabled"); + } + + @Override + public void onProviderDisabled(String provider) { + Log.d(TAG, "Provider " + provider + " disabled"); + } + } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 8171370a4..4313e106c 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -145,7 +145,7 @@ public class GPSExtractor { } /** - * LocationListener to obtain user's location + * Listen for user's location when it changes */ private class MyLocationListener implements LocationListener { From 043c97099988f969987e7084a7a565b8eb1331df Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 18:07:30 +1200 Subject: [PATCH 08/80] Register and unregister locationmanager --- .../nrw/commons/nearby/NearbyActivity.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 8124ba6db..23c59e8c4 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -20,6 +20,9 @@ public class NearbyActivity extends AppCompatActivity { private String provider; private Criteria criteria; + private double currentLatitude, currentLongitude; + private String gpsCoords; + private static final String TAG = "NearbyActivty"; @Override @@ -27,9 +30,20 @@ public class NearbyActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_nearby); getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + registerLocationManager(); } - //TODO: Get user's location + @Override + protected void onResume(){ + super.onResume(); + + registerLocationManager(); + //TODO: Check if we need String or double coords, and in what format + gpsCoords = String.valueOf(currentLatitude) + "|" + String.valueOf(currentLongitude); + } + + /** * Registers a LocationManager to listen for current location */ @@ -86,4 +100,11 @@ public class NearbyActivity extends AppCompatActivity { Log.d(TAG, "Provider " + provider + " disabled"); } } + + @Override + protected void onDestroy(){ + super.onDestroy(); + + unregisterLocationManager(); + } } From 1530ddc969453451217f0240c5822acc35818d6a Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 18:25:16 +1200 Subject: [PATCH 09/80] Add permission check for location --- .../ContributionsListFragment.java | 25 ++++++++++++++++--- .../nrw/commons/nearby/NearbyActivity.java | 5 ++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 81410983b..1c62a48bb 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -151,9 +151,20 @@ public class ContributionsListFragment extends Fragment { } return true; case R.id.menu_nearby: - //TODO: Check for permissions if API 23+ - Intent nearbyIntent = new Intent(getActivity(), NearbyActivity.class); - startActivity(nearbyIntent); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (ContextCompat.checkSelfPermission(this.getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + //See http://stackoverflow.com/questions/33169455/onrequestpermissionsresult-not-being-called-in-dialog-fragment + requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 2); + return false; + } else { + Intent nearbyIntent = new Intent(getActivity(), NearbyActivity.class); + startActivity(nearbyIntent); + } + } + else { + Intent nearbyIntent = new Intent(getActivity(), NearbyActivity.class); + startActivity(nearbyIntent); + } case R.id.menu_refresh: ((SourceRefresher)getActivity()).refreshSource(); return true; @@ -172,6 +183,14 @@ public class ContributionsListFragment extends Fragment { controller.startGalleryPick(); } } + // 2 = Location allowed when 'nearby places' selected + case 2: { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Log.d("ContributionsList", "Location permission granted"); + Intent nearbyIntent = new Intent(getActivity(), NearbyActivity.class); + startActivity(nearbyIntent); + } + } } } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 23c59e8c4..71060cee0 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -23,7 +23,7 @@ public class NearbyActivity extends AppCompatActivity { private double currentLatitude, currentLongitude; private String gpsCoords; - private static final String TAG = "NearbyActivty"; + private static final String TAG = "NearbyActivity"; @Override protected void onCreate(Bundle savedInstanceState) { @@ -48,7 +48,7 @@ public class NearbyActivity extends AppCompatActivity { * Registers a LocationManager to listen for current location */ protected void registerLocationManager() { - locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); criteria = new Criteria(); provider = locationManager.getBestProvider(criteria, true); myLocationListener = new MyLocationListener(); @@ -83,6 +83,7 @@ public class NearbyActivity extends AppCompatActivity { public void onLocationChanged(Location location) { currentLatitude = location.getLatitude(); currentLongitude = location.getLongitude(); + Log.d(TAG, "Latitude: " + String.valueOf(currentLatitude) + " Longitude: " + String.valueOf(currentLongitude)); } @Override From 2eef7037f9a854c5ead54c39d3d14fff74e45d8b Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 18:26:09 +1200 Subject: [PATCH 10/80] Comment out gpsCoords string --- .../main/java/fr/free/nrw/commons/nearby/NearbyActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 71060cee0..3200a5ed6 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -21,7 +21,7 @@ public class NearbyActivity extends AppCompatActivity { private Criteria criteria; private double currentLatitude, currentLongitude; - private String gpsCoords; + //private String gpsCoords; private static final String TAG = "NearbyActivity"; @@ -40,7 +40,7 @@ public class NearbyActivity extends AppCompatActivity { registerLocationManager(); //TODO: Check if we need String or double coords, and in what format - gpsCoords = String.valueOf(currentLatitude) + "|" + String.valueOf(currentLongitude); + //gpsCoords = String.valueOf(currentLatitude) + "|" + String.valueOf(currentLongitude); } From 715aec0af0355ec8c6fe172ad050f7be0f1d3872 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 18:41:56 +1200 Subject: [PATCH 11/80] Convert TouristAttraction.java to NearbyPlaces.java --- .../free/nrw/commons/nearby/NearbyPlaces.java | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java new file mode 100644 index 000000000..8b3c0e9fd --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -0,0 +1,94 @@ +package fr.free.nrw.commons.nearby; + +import android.net.Uri; +import android.os.StrictMode; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +public class NearbyPlaces { + + public static synchronized List get() { + if(attractions != null) { + return attractions; + } + else { + try { + attractions = new ArrayList(); + // TODO Load in a different thread and show wait dialog + StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); + StrictMode.setThreadPolicy(policy); + + URL file = new URL("https://tools.wmflabs.org/wiki-needs-pictures/data/data.csv"); + + BufferedReader in = new BufferedReader( + new InputStreamReader(file.openStream())); + + boolean firstLine = true; + String line; + while ((line = in.readLine()) != null) { + + // Skip CSV header. + if (firstLine) { + firstLine = false; + continue; + } + + System.out.println(line); + String[] fields = line.split(","); + String name = fields[0]; + + double latitude; + double longitude; + try { + latitude = Double.parseDouble(fields[1]); + } catch (NumberFormatException e) { + latitude = 0; + } + try { + longitude = Double.parseDouble(fields[2]); + } catch (NumberFormatException e) { + longitude = 0; + } + + String type = fields[3]; + String image; + + switch(type) { + case "event": + image = "https://upload.wikimedia.org/wikipedia/commons/c/ca/Anarchist_attack_on_the_King_of_Spain_Alfonso_XIII_%281906%29.jpg"; + break; + case "edu": + image = "https://upload.wikimedia.org/wikipedia/commons/d/d4/Vrt%2C_pogled_na_glavni_ulaz.JPG"; + break; + case "landmark": + image = "https://upload.wikimedia.org/wikipedia/commons/thumb/3/38/20150902GrenspaalElst_03.JPG/767px-20150902GrenspaalElst_03.JPG"; + break; + default: + image = "https://upload.wikimedia.org/wikipedia/commons/thumb/2/20/Point_d_interrogation.jpg/120px-Point_d_interrogation.jpg"; + } + + attractions.add(new Attraction( + name, + type, // list + type, // details + Uri.parse(image), + null, + new LatLng(latitude, longitude), + CITY_SYDNEY + )); + } + in.close(); + + } catch (IOException e) { + e.printStackTrace(); + } + } + return attractions; + } + +} From 8c11c1b311e1d969d9721a01af82e07078b73a4d Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 18:44:08 +1200 Subject: [PATCH 12/80] Add Attraction as Place --- .../fr/free/nrw/commons/nearby/Place.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 app/src/main/java/fr/free/nrw/commons/nearby/Place.java diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/Place.java b/app/src/main/java/fr/free/nrw/commons/nearby/Place.java new file mode 100644 index 000000000..0db2a3cd7 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/nearby/Place.java @@ -0,0 +1,36 @@ +package fr.free.nrw.commons.nearby; + +import android.graphics.Bitmap; +import android.net.Uri; + +/** + * Created by misao on 22-Aug-16. + */ +public class Place { + + public String name; + public String description; + public String longDescription; + public Uri imageUrl; + public Uri secondaryImageUrl; + public LatLng location; + public String city; + + public Bitmap image; + public Bitmap secondaryImage; + public String distance; + + public Place() {} + + public Place(String name, String description, String longDescription, Uri imageUrl, + Uri secondaryImageUrl, LatLng location, String city) { + this.name = name; + this.description = description; + this.longDescription = longDescription; + this.imageUrl = imageUrl; + this.secondaryImageUrl = secondaryImageUrl; + this.location = location; + this.city = city; + } + +} From c9a38819f091c510075abdc37ebc322b6a0f71d3 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 18:44:37 +1200 Subject: [PATCH 13/80] Change to --- .../main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java index 8b3c0e9fd..f0cf13758 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -12,13 +12,15 @@ import java.util.List; public class NearbyPlaces { - public static synchronized List get() { + static List attractions = null; + + public static synchronized List get() { if(attractions != null) { return attractions; } else { try { - attractions = new ArrayList(); + attractions = new ArrayList(); // TODO Load in a different thread and show wait dialog StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); From b13b5c690a9d8860e3fb87af7729fe70b22ce2c8 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 18:45:41 +1200 Subject: [PATCH 14/80] Change 'attractions' to 'places' --- .../fr/free/nrw/commons/nearby/NearbyPlaces.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java index f0cf13758..299aad4f5 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -12,15 +12,15 @@ import java.util.List; public class NearbyPlaces { - static List attractions = null; + static List places = null; public static synchronized List get() { - if(attractions != null) { - return attractions; + if(places != null) { + return places; } else { try { - attractions = new ArrayList(); + places = new ArrayList(); // TODO Load in a different thread and show wait dialog StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); @@ -74,7 +74,7 @@ public class NearbyPlaces { image = "https://upload.wikimedia.org/wikipedia/commons/thumb/2/20/Point_d_interrogation.jpg/120px-Point_d_interrogation.jpg"; } - attractions.add(new Attraction( + places.add(new Attraction( name, type, // list type, // details @@ -90,7 +90,7 @@ public class NearbyPlaces { e.printStackTrace(); } } - return attractions; + return places; } } From b89ca7628ec102357521b2b603c62f3b21ba2c5d Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 18:58:02 +1200 Subject: [PATCH 15/80] Remove 'city' from place --- .../main/java/fr/free/nrw/commons/nearby/NearbyActivity.java | 2 ++ .../main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java | 3 +-- app/src/main/java/fr/free/nrw/commons/nearby/Place.java | 5 +---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 3200a5ed6..a35972490 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -41,6 +41,8 @@ public class NearbyActivity extends AppCompatActivity { registerLocationManager(); //TODO: Check if we need String or double coords, and in what format //gpsCoords = String.valueOf(currentLatitude) + "|" + String.valueOf(currentLongitude); + + //TODO: Use fragment for list like in AttractionListFragment? } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java index 299aad4f5..679d63436 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -27,8 +27,7 @@ public class NearbyPlaces { URL file = new URL("https://tools.wmflabs.org/wiki-needs-pictures/data/data.csv"); - BufferedReader in = new BufferedReader( - new InputStreamReader(file.openStream())); + BufferedReader in = new BufferedReader(new InputStreamReader(file.openStream())); boolean firstLine = true; String line; diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/Place.java b/app/src/main/java/fr/free/nrw/commons/nearby/Place.java index 0db2a3cd7..389dd52ce 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/Place.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/Place.java @@ -14,7 +14,6 @@ public class Place { public Uri imageUrl; public Uri secondaryImageUrl; public LatLng location; - public String city; public Bitmap image; public Bitmap secondaryImage; @@ -23,14 +22,12 @@ public class Place { public Place() {} public Place(String name, String description, String longDescription, Uri imageUrl, - Uri secondaryImageUrl, LatLng location, String city) { + Uri secondaryImageUrl, LatLng location) { this.name = name; this.description = description; this.longDescription = longDescription; this.imageUrl = imageUrl; this.secondaryImageUrl = secondaryImageUrl; this.location = location; - this.city = city; } - } From 3b3a338ccdeee07c5c25eb046e433fcbf96be12c Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 18:58:35 +1200 Subject: [PATCH 16/80] Remove cities from Place.java --- .../main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java index 679d63436..ff2ad093c 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -73,14 +73,13 @@ public class NearbyPlaces { image = "https://upload.wikimedia.org/wikipedia/commons/thumb/2/20/Point_d_interrogation.jpg/120px-Point_d_interrogation.jpg"; } - places.add(new Attraction( + places.add(new Place( name, type, // list type, // details Uri.parse(image), null, - new LatLng(latitude, longitude), - CITY_SYDNEY + new LatLng(latitude, longitude) )); } in.close(); From 63f52ebd5efeb42d785bb8d68f7513a650e676a1 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 19:04:20 +1200 Subject: [PATCH 17/80] Create LatLng object --- .../fr/free/nrw/commons/nearby/LatLng.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 app/src/main/java/fr/free/nrw/commons/nearby/LatLng.java diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/LatLng.java b/app/src/main/java/fr/free/nrw/commons/nearby/LatLng.java new file mode 100644 index 000000000..96b36cfba --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/nearby/LatLng.java @@ -0,0 +1,43 @@ +package fr.free.nrw.commons.nearby; + +import android.os.Parcel; + +public class LatLng { + + public final double latitude; + public final double longitude; + + LatLng(double latitude, double longitude) { + if(-180.0D <= longitude && longitude < 180.0D) { + this.longitude = longitude; + } else { + this.longitude = ((longitude - 180.0D) % 360.0D + 360.0D) % 360.0D - 180.0D; + } + this.latitude = Math.max(-90.0D, Math.min(90.0D, latitude)); + } + + public int hashCode() { + boolean var1 = true; + byte var2 = 1; + long var3 = Double.doubleToLongBits(this.latitude); + int var5 = 31 * var2 + (int)(var3 ^ var3 >>> 32); + var3 = Double.doubleToLongBits(this.longitude); + var5 = 31 * var5 + (int)(var3 ^ var3 >>> 32); + return var5; + } + + public boolean equals(Object o) { + if(this == o) { + return true; + } else if(!(o instanceof LatLng)) { + return false; + } else { + LatLng var2 = (LatLng)o; + return Double.doubleToLongBits(this.latitude) == Double.doubleToLongBits(var2.latitude) && Double.doubleToLongBits(this.longitude) == Double.doubleToLongBits(var2.longitude); + } + } + + public String toString() { + return "lat/lng: (" + this.latitude + "," + this.longitude + ")"; + } +} From 3973f62b0abd029a8061eef1170c62fe4226139a Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 22 Aug 2016 19:10:30 +1200 Subject: [PATCH 18/80] Add NearbyListFragment --- .../java/fr/free/nrw/commons/nearby/NearbyListFragment.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java new file mode 100644 index 000000000..3a65470c6 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -0,0 +1,4 @@ +package fr.free.nrw.commons.nearby; + +public class NearbyListFragment { +} From a6da5a93660094525caf011978a7b4eedbdd52c8 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 24 Aug 2016 16:31:34 +1200 Subject: [PATCH 19/80] Copy over NearbyListFragment and link it to NearbyActivity --- .../nrw/commons/nearby/NearbyActivity.java | 8 +- .../commons/nearby/NearbyListFragment.java | 208 +++++++++++++++++- app/src/main/res/layout/activity_nearby.xml | 19 +- 3 files changed, 222 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index a35972490..6c2361ffd 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -32,6 +32,12 @@ public class NearbyActivity extends AppCompatActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); registerLocationManager(); + + if (savedInstanceState == null) { + getSupportFragmentManager().beginTransaction() + .add(R.id.container, new NearbyListFragment()) + .commit(); + } } @Override @@ -41,8 +47,6 @@ public class NearbyActivity extends AppCompatActivity { registerLocationManager(); //TODO: Check if we need String or double coords, and in what format //gpsCoords = String.valueOf(currentLatitude) + "|" + String.valueOf(currentLongitude); - - //TODO: Use fragment for list like in AttractionListFragment? } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 3a65470c6..ea376a314 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -1,4 +1,210 @@ package fr.free.nrw.commons.nearby; -public class NearbyListFragment { +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.content.LocalBroadcastManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.example.android.xyztouristattractions.R; +import com.example.android.xyztouristattractions.common.Attraction; +import com.example.android.xyztouristattractions.common.Constants; +import com.example.android.xyztouristattractions.common.Utils; +import com.example.android.xyztouristattractions.provider.TouristAttractions; +import com.example.android.xyztouristattractions.service.UtilityService; +import com.google.android.gms.location.FusedLocationProviderApi; +import com.google.android.gms.maps.model.LatLng; +import com.google.maps.android.SphericalUtil; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +/** + * The main tourist attraction fragment which contains a list of attractions + * sorted by distance (contained inside + * {@link com.example.android.xyztouristattractions.ui.AttractionListActivity}). + */ +public class AttractionListFragment extends Fragment { + + private AttractionAdapter mAdapter; + private LatLng mLatestLocation; + private int mImageSize; + private boolean mItemClicked; + + public AttractionListFragment() {} + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Load a larger size image to make the activity transition to the detail screen smooth + mImageSize = getResources().getDimensionPixelSize(R.dimen.image_size) + * Constants.IMAGE_ANIM_MULTIPLIER; + + mLatestLocation = Utils.getLocation(getActivity()); + List attractions = loadAttractionsFromLocation(mLatestLocation); + mAdapter = new AttractionAdapter(getActivity(), attractions); + + View view = inflater.inflate(R.layout.fragment_main, container, false); + AttractionsRecyclerView recyclerView = + (AttractionsRecyclerView) view.findViewById(android.R.id.list); + recyclerView.setEmptyView(view.findViewById(android.R.id.empty)); + recyclerView.setHasFixedSize(true); + recyclerView.setAdapter(mAdapter); + + return view; + } + + @Override + public void onResume() { + super.onResume(); + mItemClicked = false; + LocalBroadcastManager.getInstance(getActivity()).registerReceiver( + mBroadcastReceiver, UtilityService.getLocationUpdatedIntentFilter()); + } + + @Override + public void onPause() { + super.onPause(); + LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mBroadcastReceiver); + } + + private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + Location location = + intent.getParcelableExtra(FusedLocationProviderApi.KEY_LOCATION_CHANGED); + if (location != null) { + mLatestLocation = new LatLng(location.getLatitude(), location.getLongitude()); + mAdapter.mAttractionList = loadAttractionsFromLocation(mLatestLocation); + mAdapter.notifyDataSetChanged(); + } + } + }; + + private static List loadAttractionsFromLocation(final LatLng curLatLng) { + //String closestCity = TouristAttractions.getClosestCity(curLatLng); + //if (closestCity != null) { + List attractions = TouristAttractions.get(); + if (curLatLng != null) { + Collections.sort(attractions, + new Comparator() { + @Override + public int compare(Attraction lhs, Attraction rhs) { + double lhsDistance = SphericalUtil.computeDistanceBetween( + lhs.location, curLatLng); + double rhsDistance = SphericalUtil.computeDistanceBetween( + rhs.location, curLatLng); + return (int) (lhsDistance - rhsDistance); + } + } + ); + } + return attractions; + //} + //return null; + } + + private class AttractionAdapter extends RecyclerView.Adapter + implements ItemClickListener { + + public List mAttractionList; + private Context mContext; + + public AttractionAdapter(Context context, List attractions) { + super(); + mContext = context; + mAttractionList = attractions; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + LayoutInflater inflater = LayoutInflater.from(mContext); + View view = inflater.inflate(R.layout.list_row, parent, false); + return new ViewHolder(view, this); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + Attraction attraction = mAttractionList.get(position); + + holder.mTitleTextView.setText(attraction.name); + holder.mDescriptionTextView.setText(attraction.description); + Glide.with(mContext) + .load(attraction.imageUrl) + .diskCacheStrategy(DiskCacheStrategy.SOURCE) + .placeholder(R.drawable.empty_photo) + .override(mImageSize, mImageSize) + .into(holder.mImageView); + + String distance = + Utils.formatDistanceBetween(mLatestLocation, attraction.location); + if (TextUtils.isEmpty(distance)) { + holder.mOverlayTextView.setVisibility(View.GONE); + } else { + holder.mOverlayTextView.setVisibility(View.VISIBLE); + holder.mOverlayTextView.setText(distance); + } + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public int getItemCount() { + return mAttractionList == null ? 0 : mAttractionList.size(); + } + + @Override + public void onItemClick(View view, int position) { + if (!mItemClicked) { + mItemClicked = true; + View heroView = view.findViewById(android.R.id.icon); + DetailActivity.launch( + getActivity(), mAdapter.mAttractionList.get(position).name, heroView); + } + } + } + + private static class ViewHolder extends RecyclerView.ViewHolder + implements View.OnClickListener { + + TextView mTitleTextView; + TextView mDescriptionTextView; + TextView mOverlayTextView; + ImageView mImageView; + ItemClickListener mItemClickListener; + + public ViewHolder(View view, ItemClickListener itemClickListener) { + super(view); + mTitleTextView = (TextView) view.findViewById(android.R.id.text1); + mDescriptionTextView = (TextView) view.findViewById(android.R.id.text2); + mOverlayTextView = (TextView) view.findViewById(R.id.overlaytext); + mImageView = (ImageView) view.findViewById(android.R.id.icon); + mItemClickListener = itemClickListener; + view.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + mItemClickListener.onItemClick(v, getAdapterPosition()); + } + } + + interface ItemClickListener { + void onItemClick(View view, int position); + } } diff --git a/app/src/main/res/layout/activity_nearby.xml b/app/src/main/res/layout/activity_nearby.xml index 25303782b..c36b47ab4 100644 --- a/app/src/main/res/layout/activity_nearby.xml +++ b/app/src/main/res/layout/activity_nearby.xml @@ -1,12 +1,11 @@ - - - + android:layout_height="match_parent"> + + \ No newline at end of file From 5ca298dd4f1e52c65baf55ca18d6f272b00b929a Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 24 Aug 2016 16:36:36 +1200 Subject: [PATCH 20/80] Rename AttractionListFragment --- .../fr/free/nrw/commons/nearby/NearbyActivity.java | 2 -- .../free/nrw/commons/nearby/NearbyListFragment.java | 12 ++---------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 6c2361ffd..5ea78b9df 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -1,13 +1,11 @@ package fr.free.nrw.commons.nearby; -import android.app.ListActivity; import android.content.Context; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; -import android.app.Activity; import android.support.v7.app.AppCompatActivity; import android.util.Log; diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index ea376a314..09dd6e40e 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -31,26 +31,18 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; -/** - * The main tourist attraction fragment which contains a list of attractions - * sorted by distance (contained inside - * {@link com.example.android.xyztouristattractions.ui.AttractionListActivity}). - */ -public class AttractionListFragment extends Fragment { +public class NearbyListFragment extends Fragment { private AttractionAdapter mAdapter; private LatLng mLatestLocation; private int mImageSize; private boolean mItemClicked; - public AttractionListFragment() {} + public NearbyListFragment() {} @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - // Load a larger size image to make the activity transition to the detail screen smooth - mImageSize = getResources().getDimensionPixelSize(R.dimen.image_size) - * Constants.IMAGE_ANIM_MULTIPLIER; mLatestLocation = Utils.getLocation(getActivity()); List attractions = loadAttractionsFromLocation(mLatestLocation); From e2d3f65aefa9e202e1db18e7725abee08c926553 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 24 Aug 2016 16:41:58 +1200 Subject: [PATCH 21/80] Add fragment_nearby.xml layout file --- .../commons/nearby/NearbyListFragment.java | 184 +----------------- app/src/main/res/layout/fragment_nearby.xml | 6 + 2 files changed, 13 insertions(+), 177 deletions(-) create mode 100644 app/src/main/res/layout/fragment_nearby.xml diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 09dd6e40e..67f99e4c6 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -1,202 +1,32 @@ package fr.free.nrw.commons.nearby; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.location.Location; + import android.os.Bundle; import android.support.v4.app.Fragment; -import android.support.v4.content.LocalBroadcastManager; -import android.support.v7.widget.RecyclerView; -import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.example.android.xyztouristattractions.R; -import com.example.android.xyztouristattractions.common.Attraction; -import com.example.android.xyztouristattractions.common.Constants; -import com.example.android.xyztouristattractions.common.Utils; -import com.example.android.xyztouristattractions.provider.TouristAttractions; -import com.example.android.xyztouristattractions.service.UtilityService; -import com.google.android.gms.location.FusedLocationProviderApi; -import com.google.android.gms.maps.model.LatLng; -import com.google.maps.android.SphericalUtil; - -import java.util.Collections; -import java.util.Comparator; -import java.util.List; +import fr.free.nrw.commons.R; public class NearbyListFragment extends Fragment { - private AttractionAdapter mAdapter; private LatLng mLatestLocation; private int mImageSize; private boolean mItemClicked; - public NearbyListFragment() {} + public NearbyListFragment() { + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - mLatestLocation = Utils.getLocation(getActivity()); - List attractions = loadAttractionsFromLocation(mLatestLocation); - mAdapter = new AttractionAdapter(getActivity(), attractions); - View view = inflater.inflate(R.layout.fragment_main, container, false); - AttractionsRecyclerView recyclerView = - (AttractionsRecyclerView) view.findViewById(android.R.id.list); - recyclerView.setEmptyView(view.findViewById(android.R.id.empty)); - recyclerView.setHasFixedSize(true); - recyclerView.setAdapter(mAdapter); + + View view = inflater.inflate(R.layout.fragment_nearby, container, false); + return view; } - - @Override - public void onResume() { - super.onResume(); - mItemClicked = false; - LocalBroadcastManager.getInstance(getActivity()).registerReceiver( - mBroadcastReceiver, UtilityService.getLocationUpdatedIntentFilter()); - } - - @Override - public void onPause() { - super.onPause(); - LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mBroadcastReceiver); - } - - private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - Location location = - intent.getParcelableExtra(FusedLocationProviderApi.KEY_LOCATION_CHANGED); - if (location != null) { - mLatestLocation = new LatLng(location.getLatitude(), location.getLongitude()); - mAdapter.mAttractionList = loadAttractionsFromLocation(mLatestLocation); - mAdapter.notifyDataSetChanged(); - } - } - }; - - private static List loadAttractionsFromLocation(final LatLng curLatLng) { - //String closestCity = TouristAttractions.getClosestCity(curLatLng); - //if (closestCity != null) { - List attractions = TouristAttractions.get(); - if (curLatLng != null) { - Collections.sort(attractions, - new Comparator() { - @Override - public int compare(Attraction lhs, Attraction rhs) { - double lhsDistance = SphericalUtil.computeDistanceBetween( - lhs.location, curLatLng); - double rhsDistance = SphericalUtil.computeDistanceBetween( - rhs.location, curLatLng); - return (int) (lhsDistance - rhsDistance); - } - } - ); - } - return attractions; - //} - //return null; - } - - private class AttractionAdapter extends RecyclerView.Adapter - implements ItemClickListener { - - public List mAttractionList; - private Context mContext; - - public AttractionAdapter(Context context, List attractions) { - super(); - mContext = context; - mAttractionList = attractions; - } - - @Override - public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - LayoutInflater inflater = LayoutInflater.from(mContext); - View view = inflater.inflate(R.layout.list_row, parent, false); - return new ViewHolder(view, this); - } - - @Override - public void onBindViewHolder(ViewHolder holder, int position) { - Attraction attraction = mAttractionList.get(position); - - holder.mTitleTextView.setText(attraction.name); - holder.mDescriptionTextView.setText(attraction.description); - Glide.with(mContext) - .load(attraction.imageUrl) - .diskCacheStrategy(DiskCacheStrategy.SOURCE) - .placeholder(R.drawable.empty_photo) - .override(mImageSize, mImageSize) - .into(holder.mImageView); - - String distance = - Utils.formatDistanceBetween(mLatestLocation, attraction.location); - if (TextUtils.isEmpty(distance)) { - holder.mOverlayTextView.setVisibility(View.GONE); - } else { - holder.mOverlayTextView.setVisibility(View.VISIBLE); - holder.mOverlayTextView.setText(distance); - } - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public int getItemCount() { - return mAttractionList == null ? 0 : mAttractionList.size(); - } - - @Override - public void onItemClick(View view, int position) { - if (!mItemClicked) { - mItemClicked = true; - View heroView = view.findViewById(android.R.id.icon); - DetailActivity.launch( - getActivity(), mAdapter.mAttractionList.get(position).name, heroView); - } - } - } - - private static class ViewHolder extends RecyclerView.ViewHolder - implements View.OnClickListener { - - TextView mTitleTextView; - TextView mDescriptionTextView; - TextView mOverlayTextView; - ImageView mImageView; - ItemClickListener mItemClickListener; - - public ViewHolder(View view, ItemClickListener itemClickListener) { - super(view); - mTitleTextView = (TextView) view.findViewById(android.R.id.text1); - mDescriptionTextView = (TextView) view.findViewById(android.R.id.text2); - mOverlayTextView = (TextView) view.findViewById(R.id.overlaytext); - mImageView = (ImageView) view.findViewById(android.R.id.icon); - mItemClickListener = itemClickListener; - view.setOnClickListener(this); - } - - @Override - public void onClick(View v) { - mItemClickListener.onItemClick(v, getAdapterPosition()); - } - } - - interface ItemClickListener { - void onItemClick(View view, int position); - } } diff --git a/app/src/main/res/layout/fragment_nearby.xml b/app/src/main/res/layout/fragment_nearby.xml new file mode 100644 index 000000000..3509b8411 --- /dev/null +++ b/app/src/main/res/layout/fragment_nearby.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file From 7d99c93a0058c5773d00d8fe26a016a131e82ac3 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 24 Aug 2016 18:01:16 +1200 Subject: [PATCH 22/80] Make NearbyListFragment extend ListFragment --- .../fr/free/nrw/commons/nearby/NearbyListFragment.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 67f99e4c6..7c886d2ba 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -3,18 +3,22 @@ package fr.free.nrw.commons.nearby; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.support.v4.app.ListFragment; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import fr.free.nrw.commons.R; -public class NearbyListFragment extends Fragment { +public class NearbyListFragment extends ListFragment { private LatLng mLatestLocation; private int mImageSize; private boolean mItemClicked; + private static final String TAG = "NearbyListFragment"; + public NearbyListFragment() { } @@ -22,7 +26,7 @@ public class NearbyListFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - + Log.d(TAG, "NearbyListFragment created"); View view = inflater.inflate(R.layout.fragment_nearby, container, false); From f35d565e97bd4861a91a20604260c2691a54acd1 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 24 Aug 2016 18:08:45 +1200 Subject: [PATCH 23/80] Add progress bar in ListView --- .../commons/nearby/NearbyListFragment.java | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 7c886d2ba..b970e9917 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -2,12 +2,17 @@ package fr.free.nrw.commons.nearby; import android.os.Bundle; +import android.provider.ContactsContract; import android.support.v4.app.Fragment; import android.support.v4.app.ListFragment; +import android.support.v4.view.ViewPager; +import android.support.v4.widget.SimpleCursorAdapter; import android.util.Log; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ProgressBar; import fr.free.nrw.commons.R; @@ -31,6 +36,72 @@ public class NearbyListFragment extends ListFragment { View view = inflater.inflate(R.layout.fragment_nearby, container, false); + // Create a progress bar to display while the list loads + ProgressBar progressBar = new ProgressBar(getActivity()); + progressBar.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT)); + progressBar.setIndeterminate(true); + getListView().setEmptyView(progressBar); + // Must add the progress bar to the root of the layout + ViewGroup root = (ViewGroup) view.getRootView(); + root.addView(progressBar); + + // For the cursor adapter, specify which columns go into which views + String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME}; + int[] toViews = {android.R.id.text1}; // The TextView in simple_list_item_1 + + // Create an empty adapter we will use to display the loaded data. + // We pass null for the cursor, then update it in onLoadFinished() + mAdapter = new SimpleCursorAdapter(this, + android.R.layout.simple_list_item_1, null, + fromColumns, toViews, 0); + setListAdapter(mAdapter); + + // Prepare the loader. Either re-connect with an existing one, + // or start a new one. + getLoaderManager().initLoader(0, null, this); return view; } + + + // This is the Adapter being used to display the list's data + SimpleCursorAdapter mAdapter; + + // These are the Contacts rows that we will retrieve + static final String[] PROJECTION = new String[] {ContactsContract.Data._ID, + ContactsContract.Data.DISPLAY_NAME}; + + // This is the select criteria + static final String SELECTION = "((" + + ContactsContract.Data.DISPLAY_NAME + " NOTNULL) AND (" + + ContactsContract.Data.DISPLAY_NAME + " != '' ))"; + + + // Called when a new Loader needs to be created + public Loader onCreateLoader(int id, Bundle args) { + // Now create and return a CursorLoader that will take care of + // creating a Cursor for the data being displayed. + return new CursorLoader(this, ContactsContract.Data.CONTENT_URI, + PROJECTION, SELECTION, null, null); + } + + // Called when a previously created loader has finished loading + public void onLoadFinished(Loader loader, Cursor data) { + // Swap the new cursor in. (The framework will take care of closing the + // old cursor once we return.) + mAdapter.swapCursor(data); + } + + // Called when a previously created loader is reset, making the data unavailable + public void onLoaderReset(Loader loader) { + // This is called when the last Cursor provided to onLoadFinished() + // above is about to be closed. We need to make sure we are no + // longer using it. + mAdapter.swapCursor(null); + } + + @Override + public void onListItemClick(ListView l, View v, int position, long id) { + // Do something when a list item is clicked + } } From 45a1f546e301cecf22085265447385044fc036f1 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 24 Aug 2016 18:17:19 +1200 Subject: [PATCH 24/80] Remove irrelevant CursorAdapter bits --- .../commons/nearby/NearbyListFragment.java | 43 ++----------------- 1 file changed, 4 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index b970e9917..9e01692db 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -12,6 +12,7 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Adapter; import android.widget.ProgressBar; import fr.free.nrw.commons.R; @@ -21,6 +22,7 @@ public class NearbyListFragment extends ListFragment { private LatLng mLatestLocation; private int mImageSize; private boolean mItemClicked; + Adapter mAdapter; private static final String TAG = "NearbyListFragment"; @@ -46,15 +48,10 @@ public class NearbyListFragment extends ListFragment { ViewGroup root = (ViewGroup) view.getRootView(); root.addView(progressBar); - // For the cursor adapter, specify which columns go into which views - String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME}; - int[] toViews = {android.R.id.text1}; // The TextView in simple_list_item_1 - + //TODO: Original is an AttractionAdapter. Not a CursorAdapter. // Create an empty adapter we will use to display the loaded data. // We pass null for the cursor, then update it in onLoadFinished() - mAdapter = new SimpleCursorAdapter(this, - android.R.layout.simple_list_item_1, null, - fromColumns, toViews, 0); + mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, fromColumns, toViews, 0); setListAdapter(mAdapter); // Prepare the loader. Either re-connect with an existing one, @@ -64,41 +61,9 @@ public class NearbyListFragment extends ListFragment { } - // This is the Adapter being used to display the list's data - SimpleCursorAdapter mAdapter; - - // These are the Contacts rows that we will retrieve - static final String[] PROJECTION = new String[] {ContactsContract.Data._ID, - ContactsContract.Data.DISPLAY_NAME}; - - // This is the select criteria - static final String SELECTION = "((" + - ContactsContract.Data.DISPLAY_NAME + " NOTNULL) AND (" + - ContactsContract.Data.DISPLAY_NAME + " != '' ))"; - // Called when a new Loader needs to be created - public Loader onCreateLoader(int id, Bundle args) { - // Now create and return a CursorLoader that will take care of - // creating a Cursor for the data being displayed. - return new CursorLoader(this, ContactsContract.Data.CONTENT_URI, - PROJECTION, SELECTION, null, null); - } - // Called when a previously created loader has finished loading - public void onLoadFinished(Loader loader, Cursor data) { - // Swap the new cursor in. (The framework will take care of closing the - // old cursor once we return.) - mAdapter.swapCursor(data); - } - - // Called when a previously created loader is reset, making the data unavailable - public void onLoaderReset(Loader loader) { - // This is called when the last Cursor provided to onLoadFinished() - // above is about to be closed. We need to make sure we are no - // longer using it. - mAdapter.swapCursor(null); - } @Override public void onListItemClick(ListView l, View v, int position, long id) { From e7032658a2e11c07ada18592f6864402882ffd1d Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 24 Aug 2016 18:55:56 +1200 Subject: [PATCH 25/80] Add custom adapter class and item_place layout file --- .../commons/nearby/NearbyListFragment.java | 90 ++++++++++++++++++- app/src/main/res/layout/item_place.xml | 14 +++ 2 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/layout/item_place.xml diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 9e01692db..52e82380a 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -1,19 +1,27 @@ package fr.free.nrw.commons.nearby; +import android.content.Context; import android.os.Bundle; import android.provider.ContactsContract; import android.support.v4.app.Fragment; import android.support.v4.app.ListFragment; import android.support.v4.view.ViewPager; import android.support.v4.widget.SimpleCursorAdapter; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Adapter; +import android.widget.ArrayAdapter; +import android.widget.ListAdapter; import android.widget.ProgressBar; +import android.widget.TextView; + +import java.util.List; import fr.free.nrw.commons.R; @@ -51,7 +59,7 @@ public class NearbyListFragment extends ListFragment { //TODO: Original is an AttractionAdapter. Not a CursorAdapter. // Create an empty adapter we will use to display the loaded data. // We pass null for the cursor, then update it in onLoadFinished() - mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, fromColumns, toViews, 0); + mAdapter = new NearbyAdapter(); setListAdapter(mAdapter); // Prepare the loader. Either re-connect with an existing one, @@ -64,9 +72,83 @@ public class NearbyListFragment extends ListFragment { + private class NearbyAdapter extends ArrayAdapter { - @Override - public void onListItemClick(ListView l, View v, int position, long id) { - // Do something when a list item is clicked + public List mAttractionList; + private Context mContext; + + public NearbyAdapter(Context context, List attractions) { + super(context, R.layout.item_place); + mContext = context; + mAttractionList = attractions; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // Get the data item for this position + User user = getItem(position); + // Check if an existing view is being reused, otherwise inflate the view + if (convertView == null) { + convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_user, parent, false); + } + // Lookup view for data population + TextView tvName = (TextView) convertView.findViewById(R.id.tvName); + TextView tvHome = (TextView) convertView.findViewById(R.id.tvHome); + // Populate the data into the template view using the data object + tvName.setText(user.name); + tvHome.setText(user.hometown); + // Return the completed view to render on screen + return convertView; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + LayoutInflater inflater = LayoutInflater.from(mContext); + View view = inflater.inflate(R.layout.list_row, parent, false); + return new RecyclerView.ViewHolder(view, this); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + Attraction attraction = mAttractionList.get(position); + + holder.mTitleTextView.setText(attraction.name); + holder.mDescriptionTextView.setText(attraction.description); + Glide.with(mContext) + .load(attraction.imageUrl) + .diskCacheStrategy(DiskCacheStrategy.SOURCE) + .placeholder(R.drawable.empty_photo) + .override(mImageSize, mImageSize) + .into(holder.mImageView); + + String distance = + Utils.formatDistanceBetween(mLatestLocation, attraction.location); + if (TextUtils.isEmpty(distance)) { + holder.mOverlayTextView.setVisibility(View.GONE); + } else { + holder.mOverlayTextView.setVisibility(View.VISIBLE); + holder.mOverlayTextView.setText(distance); + } + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public int getItemCount() { + return mAttractionList == null ? 0 : mAttractionList.size(); + } + + @Override + public void onItemClick(View view, int position) { + if (!mItemClicked) { + mItemClicked = true; + View heroView = view.findViewById(android.R.id.icon); + DetailActivity.launch( + getActivity(), mAdapter.mAttractionList.get(position).name, heroView); + } + } } } diff --git a/app/src/main/res/layout/item_place.xml b/app/src/main/res/layout/item_place.xml new file mode 100644 index 000000000..ebd627690 --- /dev/null +++ b/app/src/main/res/layout/item_place.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file From 613f0bc6ad9e1e679a43a5727e72ddd936bdf2bd Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 24 Aug 2016 19:01:56 +1200 Subject: [PATCH 26/80] Add Name and Desc fields, attractions->places --- .../commons/nearby/NearbyListFragment.java | 33 +++++++++---------- app/src/main/res/layout/item_place.xml | 4 +-- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 52e82380a..ac2f2b2db 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -3,21 +3,15 @@ package fr.free.nrw.commons.nearby; import android.content.Context; import android.os.Bundle; -import android.provider.ContactsContract; -import android.support.v4.app.Fragment; import android.support.v4.app.ListFragment; -import android.support.v4.view.ViewPager; -import android.support.v4.widget.SimpleCursorAdapter; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.util.Log; -import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Adapter; import android.widget.ArrayAdapter; -import android.widget.ListAdapter; import android.widget.ProgressBar; import android.widget.TextView; @@ -59,7 +53,7 @@ public class NearbyListFragment extends ListFragment { //TODO: Original is an AttractionAdapter. Not a CursorAdapter. // Create an empty adapter we will use to display the loaded data. // We pass null for the cursor, then update it in onLoadFinished() - mAdapter = new NearbyAdapter(); + mAdapter = new NearbyAdapter(getActivity(), ); setListAdapter(mAdapter); // Prepare the loader. Either re-connect with an existing one, @@ -74,29 +68,32 @@ public class NearbyListFragment extends ListFragment { private class NearbyAdapter extends ArrayAdapter { - public List mAttractionList; + public List placesList; private Context mContext; - public NearbyAdapter(Context context, List attractions) { - super(context, R.layout.item_place); + public NearbyAdapter(Context context, List places) { + super(context, 0); mContext = context; - mAttractionList = attractions; + placesList = places; } @Override public View getView(int position, View convertView, ViewGroup parent) { // Get the data item for this position - User user = getItem(position); + Place place = (Place) getItem(position); // Check if an existing view is being reused, otherwise inflate the view if (convertView == null) { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_user, parent, false); + convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_place, parent, false); } + // Lookup view for data population TextView tvName = (TextView) convertView.findViewById(R.id.tvName); - TextView tvHome = (TextView) convertView.findViewById(R.id.tvHome); + TextView tvDesc = (TextView) convertView.findViewById(R.id.tvDesc); + // Populate the data into the template view using the data object - tvName.setText(user.name); - tvHome.setText(user.hometown); + tvName.setText(place.name); + tvDesc.setText(place.description); + // Return the completed view to render on screen return convertView; } @@ -110,7 +107,7 @@ public class NearbyListFragment extends ListFragment { @Override public void onBindViewHolder(ViewHolder holder, int position) { - Attraction attraction = mAttractionList.get(position); + Attraction attraction = placesList.get(position); holder.mTitleTextView.setText(attraction.name); holder.mDescriptionTextView.setText(attraction.description); @@ -138,7 +135,7 @@ public class NearbyListFragment extends ListFragment { @Override public int getItemCount() { - return mAttractionList == null ? 0 : mAttractionList.size(); + return placesList == null ? 0 : placesList.size(); } @Override diff --git a/app/src/main/res/layout/item_place.xml b/app/src/main/res/layout/item_place.xml index ebd627690..660595547 100644 --- a/app/src/main/res/layout/item_place.xml +++ b/app/src/main/res/layout/item_place.xml @@ -7,8 +7,8 @@ android:layout_height="wrap_content" android:text="Name" /> + android:text="Desc" /> \ No newline at end of file From c6c72af03f659391ce3d25282fc8c38b67f278a5 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 24 Aug 2016 19:11:47 +1200 Subject: [PATCH 27/80] Link mAdapter --- .../fr/free/nrw/commons/nearby/NearbyListFragment.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index ac2f2b2db..a3e4af69a 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -12,6 +12,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Adapter; import android.widget.ArrayAdapter; +import android.widget.ListAdapter; import android.widget.ProgressBar; import android.widget.TextView; @@ -24,7 +25,9 @@ public class NearbyListFragment extends ListFragment { private LatLng mLatestLocation; private int mImageSize; private boolean mItemClicked; - Adapter mAdapter; + ArrayAdapter mAdapter; + + List places; private static final String TAG = "NearbyListFragment"; @@ -39,6 +42,7 @@ public class NearbyListFragment extends ListFragment { View view = inflater.inflate(R.layout.fragment_nearby, container, false); + places = loadAttractionsFromLocation(mLatestLocation); // Create a progress bar to display while the list loads ProgressBar progressBar = new ProgressBar(getActivity()); @@ -53,7 +57,7 @@ public class NearbyListFragment extends ListFragment { //TODO: Original is an AttractionAdapter. Not a CursorAdapter. // Create an empty adapter we will use to display the loaded data. // We pass null for the cursor, then update it in onLoadFinished() - mAdapter = new NearbyAdapter(getActivity(), ); + mAdapter = new NearbyAdapter(getActivity(), places); setListAdapter(mAdapter); // Prepare the loader. Either re-connect with an existing one, From fb3188914dba79df0ac4afca8fd1b3ba8481fc8c Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 24 Aug 2016 19:16:42 +1200 Subject: [PATCH 28/80] Remove RecyclerView methods in NearbyAdapter --- .../commons/nearby/NearbyListFragment.java | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index a3e4af69a..7956f299f 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -54,15 +54,9 @@ public class NearbyListFragment extends ListFragment { ViewGroup root = (ViewGroup) view.getRootView(); root.addView(progressBar); - //TODO: Original is an AttractionAdapter. Not a CursorAdapter. - // Create an empty adapter we will use to display the loaded data. - // We pass null for the cursor, then update it in onLoadFinished() mAdapter = new NearbyAdapter(getActivity(), places); setListAdapter(mAdapter); - // Prepare the loader. Either re-connect with an existing one, - // or start a new one. - getLoaderManager().initLoader(0, null, this); return view; } @@ -102,36 +96,6 @@ public class NearbyListFragment extends ListFragment { return convertView; } - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - LayoutInflater inflater = LayoutInflater.from(mContext); - View view = inflater.inflate(R.layout.list_row, parent, false); - return new RecyclerView.ViewHolder(view, this); - } - - @Override - public void onBindViewHolder(ViewHolder holder, int position) { - Attraction attraction = placesList.get(position); - - holder.mTitleTextView.setText(attraction.name); - holder.mDescriptionTextView.setText(attraction.description); - Glide.with(mContext) - .load(attraction.imageUrl) - .diskCacheStrategy(DiskCacheStrategy.SOURCE) - .placeholder(R.drawable.empty_photo) - .override(mImageSize, mImageSize) - .into(holder.mImageView); - - String distance = - Utils.formatDistanceBetween(mLatestLocation, attraction.location); - if (TextUtils.isEmpty(distance)) { - holder.mOverlayTextView.setVisibility(View.GONE); - } else { - holder.mOverlayTextView.setVisibility(View.VISIBLE); - holder.mOverlayTextView.setText(distance); - } - } - @Override public long getItemId(int position) { return position; From ee278965890d25180a82967f2227bcc2cb2eebf9 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 24 Aug 2016 19:24:47 +1200 Subject: [PATCH 29/80] Add loadFromLocation method --- .../commons/nearby/NearbyListFragment.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 7956f299f..04f1d60a6 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -16,6 +16,8 @@ import android.widget.ListAdapter; import android.widget.ProgressBar; import android.widget.TextView; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import fr.free.nrw.commons.R; @@ -62,7 +64,28 @@ public class NearbyListFragment extends ListFragment { - + private static List loadAttractionsFromLocation(final LatLng curLatLng) { + //String closestCity = TouristAttractions.getClosestCity(curLatLng); + //if (closestCity != null) { + List attractions = TouristAttractions.get(); + if (curLatLng != null) { + Collections.sort(attractions, + new Comparator() { + @Override + public int compare(Attraction lhs, Attraction rhs) { + double lhsDistance = SphericalUtil.computeDistanceBetween( + lhs.location, curLatLng); + double rhsDistance = SphericalUtil.computeDistanceBetween( + rhs.location, curLatLng); + return (int) (lhsDistance - rhsDistance); + } + } + ); + } + return attractions; + //} + //return null; + } private class NearbyAdapter extends ArrayAdapter { From 404e19e9d5e495213c2b6769b8ff051df54f22ea Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 24 Aug 2016 19:31:31 +1200 Subject: [PATCH 30/80] Modify loadAttractionsFromLocation --- .../fr/free/nrw/commons/nearby/NearbyListFragment.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 04f1d60a6..5b2004eb6 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -64,12 +64,12 @@ public class NearbyListFragment extends ListFragment { - private static List loadAttractionsFromLocation(final LatLng curLatLng) { + private static List loadAttractionsFromLocation(final LatLng curLatLng) { //String closestCity = TouristAttractions.getClosestCity(curLatLng); //if (closestCity != null) { - List attractions = TouristAttractions.get(); + List places = NearbyPlaces.get(); if (curLatLng != null) { - Collections.sort(attractions, + Collections.sort(places, new Comparator() { @Override public int compare(Attraction lhs, Attraction rhs) { @@ -82,7 +82,7 @@ public class NearbyListFragment extends ListFragment { } ); } - return attractions; + return places; //} //return null; } From ffe70f9d310593dfa2a936f7ebea33f9f7651157 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 25 Aug 2016 18:08:39 +1200 Subject: [PATCH 31/80] Modify loadAttractionsFromLocation and copy over MathUtil methods --- .../commons/nearby/NearbyListFragment.java | 44 ++++++++++++++----- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 5b2004eb6..3790c3af8 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -44,6 +44,7 @@ public class NearbyListFragment extends ListFragment { View view = inflater.inflate(R.layout.fragment_nearby, container, false); + //Load from data source (NearbyPlaces.java) places = loadAttractionsFromLocation(mLatestLocation); // Create a progress bar to display while the list loads @@ -61,21 +62,18 @@ public class NearbyListFragment extends ListFragment { return view; } - - - + private static List loadAttractionsFromLocation(final LatLng curLatLng) { - //String closestCity = TouristAttractions.getClosestCity(curLatLng); - //if (closestCity != null) { + List places = NearbyPlaces.get(); if (curLatLng != null) { Collections.sort(places, - new Comparator() { + new Comparator() { @Override - public int compare(Attraction lhs, Attraction rhs) { - double lhsDistance = SphericalUtil.computeDistanceBetween( + public int compare(Place lhs, Place rhs) { + double lhsDistance = computeDistanceBetween( lhs.location, curLatLng); - double rhsDistance = SphericalUtil.computeDistanceBetween( + double rhsDistance = computeDistanceBetween( rhs.location, curLatLng); return (int) (lhsDistance - rhsDistance); } @@ -83,8 +81,32 @@ public class NearbyListFragment extends ListFragment { ); } return places; - //} - //return null; + } + + private static double computeDistanceBetween(LatLng from, LatLng to) { + return computeAngleBetween(from, to) * 6371009.0D; + } + + private static double computeAngleBetween(LatLng from, LatLng to) { + return distanceRadians(Math.toRadians(from.latitude), Math.toRadians(from.longitude), Math.toRadians(to.latitude), Math.toRadians(to.longitude)); + } + + + private static double distanceRadians(double lat1, double lng1, double lat2, double lng2) { + return arcHav(havDistance(lat1, lat2, lng1 - lng2)); + } + + private static double arcHav(double x) { + return 2.0D * Math.asin(Math.sqrt(x)); + } + + private static double havDistance(double lat1, double lat2, double dLng) { + return hav(lat1 - lat2) + hav(dLng) * Math.cos(lat1) * Math.cos(lat2); + } + + private static double hav(double x) { + double sinHalf = Math.sin(x * 0.5D); + return sinHalf * sinHalf; } private class NearbyAdapter extends ArrayAdapter { From 3809c1fdbd0b8ef870f9313181885cada2fde9a8 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 25 Aug 2016 18:11:19 +1200 Subject: [PATCH 32/80] Comment out methods that only need to be added later --- .../fr/free/nrw/commons/nearby/NearbyListFragment.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 3790c3af8..4a944fd9a 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -62,7 +62,7 @@ public class NearbyListFragment extends ListFragment { return view; } - + private static List loadAttractionsFromLocation(final LatLng curLatLng) { List places = NearbyPlaces.get(); @@ -145,7 +145,7 @@ public class NearbyListFragment extends ListFragment { public long getItemId(int position) { return position; } - +/* @Override public int getItemCount() { return placesList == null ? 0 : placesList.size(); @@ -153,12 +153,14 @@ public class NearbyListFragment extends ListFragment { @Override public void onItemClick(View view, int position) { + if (!mItemClicked) { mItemClicked = true; View heroView = view.findViewById(android.R.id.icon); DetailActivity.launch( getActivity(), mAdapter.mAttractionList.get(position).name, heroView); } - } + + }*/ } } From 55810cd0503ca4f1cb6dd37b48d4bdc29db292a4 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 25 Aug 2016 18:26:17 +1200 Subject: [PATCH 33/80] Add check to only read 10 lines --- .../fr/free/nrw/commons/nearby/NearbyListFragment.java | 2 ++ .../main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 4a944fd9a..7e0283d54 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -47,6 +47,7 @@ public class NearbyListFragment extends ListFragment { //Load from data source (NearbyPlaces.java) places = loadAttractionsFromLocation(mLatestLocation); + /* // Create a progress bar to display while the list loads ProgressBar progressBar = new ProgressBar(getActivity()); progressBar.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, @@ -56,6 +57,7 @@ public class NearbyListFragment extends ListFragment { // Must add the progress bar to the root of the layout ViewGroup root = (ViewGroup) view.getRootView(); root.addView(progressBar); +*/ mAdapter = new NearbyAdapter(getActivity(), places); setListAdapter(mAdapter); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java index ff2ad093c..5655be2de 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -31,8 +31,13 @@ public class NearbyPlaces { boolean firstLine = true; String line; - while ((line = in.readLine()) != null) { + int counter = 0; + //while ((line = in.readLine()) != null) { + while (in.readLine() != null && counter < 11) { + + line = in.readLine(); + counter++; // Skip CSV header. if (firstLine) { firstLine = false; From 9836fb920e5007c321387ad1acf46a6dc636e31c Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 25 Aug 2016 18:32:13 +1200 Subject: [PATCH 34/80] Change to ListView in layout file to solve crash --- .../java/fr/free/nrw/commons/nearby/NearbyPlaces.java | 2 +- app/src/main/res/layout/fragment_nearby.xml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java index 5655be2de..db7285164 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -34,7 +34,7 @@ public class NearbyPlaces { int counter = 0; //while ((line = in.readLine()) != null) { - while (in.readLine() != null && counter < 11) { + while (in.readLine() != null && counter < 110) { line = in.readLine(); counter++; diff --git a/app/src/main/res/layout/fragment_nearby.xml b/app/src/main/res/layout/fragment_nearby.xml index 3509b8411..228c8f8db 100644 --- a/app/src/main/res/layout/fragment_nearby.xml +++ b/app/src/main/res/layout/fragment_nearby.xml @@ -1,6 +1,6 @@ - - - \ No newline at end of file + \ No newline at end of file From b7d0e6e7259da08b6efcde1bbf6ce1d2ffce2aa4 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 25 Aug 2016 18:45:08 +1200 Subject: [PATCH 35/80] Change listview code and .xml file --- .../nrw/commons/nearby/NearbyListFragment.java | 5 ++++- app/src/main/res/layout/fragment_nearby.xml | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 7e0283d54..e9f924073 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -13,6 +13,7 @@ import android.view.ViewGroup; import android.widget.Adapter; import android.widget.ArrayAdapter; import android.widget.ListAdapter; +import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; @@ -58,9 +59,11 @@ public class NearbyListFragment extends ListFragment { ViewGroup root = (ViewGroup) view.getRootView(); root.addView(progressBar); */ + final ListView listview = (ListView) view.findViewById(R.id.listview); mAdapter = new NearbyAdapter(getActivity(), places); - setListAdapter(mAdapter); + //setListAdapter(mAdapter); + listview.setAdapter(mAdapter); return view; } diff --git a/app/src/main/res/layout/fragment_nearby.xml b/app/src/main/res/layout/fragment_nearby.xml index 228c8f8db..2dfa8d999 100644 --- a/app/src/main/res/layout/fragment_nearby.xml +++ b/app/src/main/res/layout/fragment_nearby.xml @@ -1,6 +1,13 @@ - \ No newline at end of file + + + + + From d62fd565b6c5cc4fa12388a6ab78242e7d0533a9 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 25 Aug 2016 18:56:39 +1200 Subject: [PATCH 36/80] Moved adapter setup to onViewCreated, to prevent crash --- .../fr/free/nrw/commons/nearby/NearbyActivity.java | 1 + .../nrw/commons/nearby/NearbyListFragment.java | 14 ++++++++++++-- app/src/main/res/layout/activity_nearby.xml | 2 ++ app/src/main/res/layout/fragment_nearby.xml | 2 +- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 5ea78b9df..70f4d5be8 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -6,6 +6,7 @@ import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; +import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.util.Log; diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index e9f924073..7792a93ed 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -59,15 +59,25 @@ public class NearbyListFragment extends ListFragment { ViewGroup root = (ViewGroup) view.getRootView(); root.addView(progressBar); */ + + + return view; + } + + // This event is triggered soon after onCreateView(). + // Any view setup should occur here. E.g., view lookups and attaching view listeners. + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + // Setup any handles to view objects here + // EditText etFoo = (EditText) view.findViewById(R.id.etFoo); final ListView listview = (ListView) view.findViewById(R.id.listview); mAdapter = new NearbyAdapter(getActivity(), places); //setListAdapter(mAdapter); listview.setAdapter(mAdapter); - - return view; } + private static List loadAttractionsFromLocation(final LatLng curLatLng) { List places = NearbyPlaces.get(); diff --git a/app/src/main/res/layout/activity_nearby.xml b/app/src/main/res/layout/activity_nearby.xml index c36b47ab4..779fbb1c0 100644 --- a/app/src/main/res/layout/activity_nearby.xml +++ b/app/src/main/res/layout/activity_nearby.xml @@ -3,9 +3,11 @@ android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_nearby.xml b/app/src/main/res/layout/fragment_nearby.xml index 2dfa8d999..dd2adfc31 100644 --- a/app/src/main/res/layout/fragment_nearby.xml +++ b/app/src/main/res/layout/fragment_nearby.xml @@ -9,5 +9,5 @@ android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> - + From f5d448285fc6a2eeb115a8c5f1dc5dda127aa233 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 25 Aug 2016 19:00:40 +1200 Subject: [PATCH 37/80] Clarify fragment code --- .../java/fr/free/nrw/commons/nearby/NearbyActivity.java | 9 +++++++++ .../fr/free/nrw/commons/nearby/NearbyListFragment.java | 5 +---- app/src/main/res/layout/activity_nearby.xml | 8 ++++---- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 70f4d5be8..3d9ebefc3 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -7,6 +7,7 @@ import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.support.v4.app.ActivityCompat; +import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.util.Log; @@ -32,11 +33,19 @@ public class NearbyActivity extends AppCompatActivity { registerLocationManager(); + // Begin the transaction + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + NearbyListFragment fragment = new NearbyListFragment(); + ft.add(R.id.container, fragment); + ft.commit(); + + /* if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new NearbyListFragment()) .commit(); } + */ } @Override diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 7792a93ed..f29a34cbe 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -64,12 +64,9 @@ public class NearbyListFragment extends ListFragment { return view; } - // This event is triggered soon after onCreateView(). - // Any view setup should occur here. E.g., view lookups and attaching view listeners. @Override public void onViewCreated(View view, Bundle savedInstanceState) { - // Setup any handles to view objects here - // EditText etFoo = (EditText) view.findViewById(R.id.etFoo); + final ListView listview = (ListView) view.findViewById(R.id.listview); mAdapter = new NearbyAdapter(getActivity(), places); diff --git a/app/src/main/res/layout/activity_nearby.xml b/app/src/main/res/layout/activity_nearby.xml index 779fbb1c0..daa243281 100644 --- a/app/src/main/res/layout/activity_nearby.xml +++ b/app/src/main/res/layout/activity_nearby.xml @@ -4,10 +4,10 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + android:layout_width="match_parent" + android:layout_height="match_parent"> + \ No newline at end of file From 854b1ce25410960ec4c7cdebe2f284b43a9631f7 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 25 Aug 2016 19:10:21 +1200 Subject: [PATCH 38/80] Add comments and notifyDataSetChanged() --- .../java/fr/free/nrw/commons/nearby/NearbyListFragment.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index f29a34cbe..7f41b0ad2 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -72,6 +72,8 @@ public class NearbyListFragment extends ListFragment { mAdapter = new NearbyAdapter(getActivity(), places); //setListAdapter(mAdapter); listview.setAdapter(mAdapter); + Log.d(TAG, "Adapter set to ListView"); + mAdapter.notifyDataSetChanged(); } From 01a104f0293f69df652ebbfd7fe26c573f07c931 Mon Sep 17 00:00:00 2001 From: misaochan Date: Thu, 25 Aug 2016 19:13:02 +1200 Subject: [PATCH 39/80] Add comments --- .../fr/free/nrw/commons/nearby/NearbyListFragment.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 7f41b0ad2..4b5149dff 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -45,9 +45,6 @@ public class NearbyListFragment extends ListFragment { View view = inflater.inflate(R.layout.fragment_nearby, container, false); - //Load from data source (NearbyPlaces.java) - places = loadAttractionsFromLocation(mLatestLocation); - /* // Create a progress bar to display while the list loads ProgressBar progressBar = new ProgressBar(getActivity()); @@ -67,8 +64,11 @@ public class NearbyListFragment extends ListFragment { @Override public void onViewCreated(View view, Bundle savedInstanceState) { - final ListView listview = (ListView) view.findViewById(R.id.listview); + //Load from data source (NearbyPlaces.java) + //TODO: Do asynchronously? + places = loadAttractionsFromLocation(mLatestLocation); + final ListView listview = (ListView) view.findViewById(R.id.listview); mAdapter = new NearbyAdapter(getActivity(), places); //setListAdapter(mAdapter); listview.setAdapter(mAdapter); From 2cdc07c601c2158ac40bb4c0b5532e45ba9b3ebc Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 26 Aug 2016 18:31:48 +1200 Subject: [PATCH 40/80] Check sorted list - location not working --- .../java/fr/free/nrw/commons/nearby/NearbyActivity.java | 3 +-- .../fr/free/nrw/commons/nearby/NearbyListFragment.java | 8 +++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 3d9ebefc3..5d985df34 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -31,8 +31,6 @@ public class NearbyActivity extends AppCompatActivity { setContentView(R.layout.activity_nearby); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - registerLocationManager(); - // Begin the transaction FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); NearbyListFragment fragment = new NearbyListFragment(); @@ -70,6 +68,7 @@ public class NearbyActivity extends AppCompatActivity { try { locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); Location location = locationManager.getLastKnownLocation(provider); + Log.d(TAG, "Checking for location..."); if (location != null) { myLocationListener.onLocationChanged(location); } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 4b5149dff..2bca37d91 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -61,11 +61,12 @@ public class NearbyListFragment extends ListFragment { return view; } + //TODO: Do asynchronously? @Override public void onViewCreated(View view, Bundle savedInstanceState) { //Load from data source (NearbyPlaces.java) - //TODO: Do asynchronously? + //FIXME: mLatestLocation not set. Hardcode it first for testing places = loadAttractionsFromLocation(mLatestLocation); final ListView listview = (ListView) view.findViewById(R.id.listview); @@ -81,6 +82,7 @@ public class NearbyListFragment extends ListFragment { List places = NearbyPlaces.get(); if (curLatLng != null) { + Log.d(TAG, "Sorting places by distance..."); Collections.sort(places, new Comparator() { @Override @@ -94,6 +96,10 @@ public class NearbyListFragment extends ListFragment { } ); } + //FIXME: This doesn't sort appropriately + for(int i = 0; i < places.size(); i++) { + System.out.println("Sorted " + places.get(i).name); + } return places; } From 5953395fa2e4bc2bc1b1ed011100ea48fb73a78a Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 26 Aug 2016 18:41:08 +1200 Subject: [PATCH 41/80] Pass location to NearbyListFragment --- .../fr/free/nrw/commons/nearby/NearbyActivity.java | 11 +++++++++-- .../free/nrw/commons/nearby/NearbyListFragment.java | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 5d985df34..fe745d926 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -19,6 +19,7 @@ public class NearbyActivity extends AppCompatActivity { private LocationManager locationManager; private String provider; private Criteria criteria; + private LatLng mLatestLocation; private double currentLatitude, currentLongitude; //private String gpsCoords; @@ -30,6 +31,7 @@ public class NearbyActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_nearby); getSupportActionBar().setDisplayHomeAsUpEnabled(true); + registerLocationManager(); // Begin the transaction FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); @@ -50,12 +52,14 @@ public class NearbyActivity extends AppCompatActivity { protected void onResume(){ super.onResume(); - registerLocationManager(); + //TODO: Check if we need String or double coords, and in what format //gpsCoords = String.valueOf(currentLatitude) + "|" + String.valueOf(currentLongitude); } - + protected LatLng getmLatestLocation() { + return mLatestLocation; + } /** * Registers a LocationManager to listen for current location */ @@ -68,6 +72,7 @@ public class NearbyActivity extends AppCompatActivity { try { locationManager.requestLocationUpdates(provider, 400, 1, myLocationListener); Location location = locationManager.getLastKnownLocation(provider); + //Location works, just need to 'send' GPS coords via emulator extended controls if testing on emulator Log.d(TAG, "Checking for location..."); if (location != null) { myLocationListener.onLocationChanged(location); @@ -97,6 +102,8 @@ public class NearbyActivity extends AppCompatActivity { currentLatitude = location.getLatitude(); currentLongitude = location.getLongitude(); Log.d(TAG, "Latitude: " + String.valueOf(currentLatitude) + " Longitude: " + String.valueOf(currentLongitude)); + + mLatestLocation = new LatLng(currentLatitude, currentLongitude); } @Override diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 2bca37d91..c5c43d3a7 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -66,6 +66,7 @@ public class NearbyListFragment extends ListFragment { public void onViewCreated(View view, Bundle savedInstanceState) { //Load from data source (NearbyPlaces.java) + LatLng mLatestLocation = ((NearbyActivity) getActivity()).getmLatestLocation(); //FIXME: mLatestLocation not set. Hardcode it first for testing places = loadAttractionsFromLocation(mLatestLocation); From 8adb257e97ecf1467ab51f05af7c8943ad628e40 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 26 Aug 2016 18:46:01 +1200 Subject: [PATCH 42/80] Test for sorting - it works --- .../java/fr/free/nrw/commons/nearby/NearbyListFragment.java | 6 ++++-- .../main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index c5c43d3a7..4c9f284d4 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -66,8 +66,10 @@ public class NearbyListFragment extends ListFragment { public void onViewCreated(View view, Bundle savedInstanceState) { //Load from data source (NearbyPlaces.java) - LatLng mLatestLocation = ((NearbyActivity) getActivity()).getmLatestLocation(); - //FIXME: mLatestLocation not set. Hardcode it first for testing + + //LatLng mLatestLocation = ((NearbyActivity) getActivity()).getmLatestLocation(); + //FIXME: Hardcoding mLatestLocation to Michigan for testing + LatLng mLatestLocation = new LatLng(44.182205, -84.506836); places = loadAttractionsFromLocation(mLatestLocation); final ListView listview = (ListView) view.findViewById(R.id.listview); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java index db7285164..04fa6342d 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -34,7 +34,7 @@ public class NearbyPlaces { int counter = 0; //while ((line = in.readLine()) != null) { - while (in.readLine() != null && counter < 110) { + while (in.readLine() != null && counter < 500) { line = in.readLine(); counter++; From a0ea2a09b90308afcd242ac9349f9c8c5f70ff94 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 26 Aug 2016 18:50:39 +1200 Subject: [PATCH 43/80] Print distance between current location and Place --- .../commons/nearby/NearbyListFragment.java | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index 4c9f284d4..c7677f3f3 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -17,6 +17,7 @@ import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; +import java.text.NumberFormat; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -25,12 +26,12 @@ import fr.free.nrw.commons.R; public class NearbyListFragment extends ListFragment { - private LatLng mLatestLocation; private int mImageSize; private boolean mItemClicked; - ArrayAdapter mAdapter; + private ArrayAdapter mAdapter; - List places; + private List places; + private LatLng mLatestLocation; private static final String TAG = "NearbyListFragment"; @@ -67,9 +68,9 @@ public class NearbyListFragment extends ListFragment { //Load from data source (NearbyPlaces.java) - //LatLng mLatestLocation = ((NearbyActivity) getActivity()).getmLatestLocation(); + mLatestLocation = ((NearbyActivity) getActivity()).getmLatestLocation(); //FIXME: Hardcoding mLatestLocation to Michigan for testing - LatLng mLatestLocation = new LatLng(44.182205, -84.506836); + mLatestLocation = new LatLng(44.182205, -84.506836); places = loadAttractionsFromLocation(mLatestLocation); final ListView listview = (ListView) view.findViewById(R.id.listview); @@ -81,7 +82,7 @@ public class NearbyListFragment extends ListFragment { } - private static List loadAttractionsFromLocation(final LatLng curLatLng) { + private List loadAttractionsFromLocation(final LatLng curLatLng) { List places = NearbyPlaces.get(); if (curLatLng != null) { @@ -101,11 +102,29 @@ public class NearbyListFragment extends ListFragment { } //FIXME: This doesn't sort appropriately for(int i = 0; i < places.size(); i++) { - System.out.println("Sorted " + places.get(i).name); + String distance = formatDistanceBetween(mLatestLocation, places.get(i).location); + System.out.println("Sorted " + places.get(i).name + " at " + distance + " away."); } return places; } + private String formatDistanceBetween(LatLng point1, LatLng point2) { + if (point1 == null || point2 == null) { + return null; + } + + NumberFormat numberFormat = NumberFormat.getNumberInstance(); + double distance = Math.round(computeDistanceBetween(point1, point2)); + + // Adjust to KM if M goes over 1000 (see javadoc of method for note + // on only supporting metric) + if (distance >= 1000) { + numberFormat.setMaximumFractionDigits(1); + return numberFormat.format(distance / 1000) + "km"; + } + return numberFormat.format(distance) + "m"; + } + private static double computeDistanceBetween(LatLng from, LatLng to) { return computeAngleBetween(from, to) * 6371009.0D; } From 6b2af436d95f9c9736e20bb5655adad4d459c70e Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 26 Aug 2016 18:55:37 +1200 Subject: [PATCH 44/80] Change limit back to 100 --- app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java index 04fa6342d..7fb55db91 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -34,7 +34,7 @@ public class NearbyPlaces { int counter = 0; //while ((line = in.readLine()) != null) { - while (in.readLine() != null && counter < 500) { + while (in.readLine() != null && counter < 100) { line = in.readLine(); counter++; From f81b40454a2fab861c33bcf12ba1f8af703e9df4 Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 26 Aug 2016 18:59:09 +1200 Subject: [PATCH 45/80] Use current location again --- .../java/fr/free/nrw/commons/nearby/NearbyListFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index c7677f3f3..f9450a49d 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -70,7 +70,7 @@ public class NearbyListFragment extends ListFragment { mLatestLocation = ((NearbyActivity) getActivity()).getmLatestLocation(); //FIXME: Hardcoding mLatestLocation to Michigan for testing - mLatestLocation = new LatLng(44.182205, -84.506836); + //mLatestLocation = new LatLng(44.182205, -84.506836); places = loadAttractionsFromLocation(mLatestLocation); final ListView listview = (ListView) view.findViewById(R.id.listview); From 48e55de44a9de0bd699de27e1ed3042f2ff4f701 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 29 Aug 2016 17:12:22 +1200 Subject: [PATCH 46/80] Put utility functions at bottom --- .../commons/nearby/NearbyListFragment.java | 111 +++++++++--------- 1 file changed, 57 insertions(+), 54 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index f9450a49d..c287d1590 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -108,6 +108,63 @@ public class NearbyListFragment extends ListFragment { return places; } + private class NearbyAdapter extends ArrayAdapter { + + public List placesList; + private Context mContext; + + public NearbyAdapter(Context context, List places) { + super(context, 0); + mContext = context; + placesList = places; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // Get the data item for this position + Place place = (Place) getItem(position); + // Check if an existing view is being reused, otherwise inflate the view + if (convertView == null) { + convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_place, parent, false); + } + + // Lookup view for data population + TextView tvName = (TextView) convertView.findViewById(R.id.tvName); + TextView tvDesc = (TextView) convertView.findViewById(R.id.tvDesc); + + // Populate the data into the template view using the data object + tvName.setText(place.name); + tvDesc.setText(place.description); + + // Return the completed view to render on screen + return convertView; + } + + @Override + public long getItemId(int position) { + return position; + } + + +/* + @Override + public int getItemCount() { + return placesList == null ? 0 : placesList.size(); + } + + @Override + public void onItemClick(View view, int position) { + + if (!mItemClicked) { + mItemClicked = true; + View heroView = view.findViewById(android.R.id.icon); + DetailActivity.launch( + getActivity(), mAdapter.mAttractionList.get(position).name, heroView); + } + + }*/ + } + private String formatDistanceBetween(LatLng point1, LatLng point2) { if (point1 == null || point2 == null) { return null; @@ -151,58 +208,4 @@ public class NearbyListFragment extends ListFragment { return sinHalf * sinHalf; } - private class NearbyAdapter extends ArrayAdapter { - - public List placesList; - private Context mContext; - - public NearbyAdapter(Context context, List places) { - super(context, 0); - mContext = context; - placesList = places; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - // Get the data item for this position - Place place = (Place) getItem(position); - // Check if an existing view is being reused, otherwise inflate the view - if (convertView == null) { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_place, parent, false); - } - - // Lookup view for data population - TextView tvName = (TextView) convertView.findViewById(R.id.tvName); - TextView tvDesc = (TextView) convertView.findViewById(R.id.tvDesc); - - // Populate the data into the template view using the data object - tvName.setText(place.name); - tvDesc.setText(place.description); - - // Return the completed view to render on screen - return convertView; - } - - @Override - public long getItemId(int position) { - return position; - } -/* - @Override - public int getItemCount() { - return placesList == null ? 0 : placesList.size(); - } - - @Override - public void onItemClick(View view, int position) { - - if (!mItemClicked) { - mItemClicked = true; - View heroView = view.findViewById(android.R.id.icon); - DetailActivity.launch( - getActivity(), mAdapter.mAttractionList.get(position).name, heroView); - } - - }*/ - } } From d2e1c50fc5fd80ffa507a293a167927caac7ebcc Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 29 Aug 2016 17:31:36 +1200 Subject: [PATCH 47/80] Add logging to adapter --- .../java/fr/free/nrw/commons/nearby/NearbyListFragment.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index c287d1590..a8d9ac4df 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -100,7 +100,7 @@ public class NearbyListFragment extends ListFragment { } ); } - //FIXME: This doesn't sort appropriately + for(int i = 0; i < places.size(); i++) { String distance = formatDistanceBetween(mLatestLocation, places.get(i).location); System.out.println("Sorted " + places.get(i).name + " at " + distance + " away."); @@ -123,6 +123,9 @@ public class NearbyListFragment extends ListFragment { public View getView(int position, View convertView, ViewGroup parent) { // Get the data item for this position Place place = (Place) getItem(position); + //FIXME: This never gets called + Log.d(TAG, "Place " + place.name); + // Check if an existing view is being reused, otherwise inflate the view if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_place, parent, false); From b779ec097d25dc98f83a8d14c96eb9cf89e51d36 Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 29 Aug 2016 17:45:43 +1200 Subject: [PATCH 48/80] Modify listview, add button for debugging --- .../commons/nearby/NearbyListFragment.java | 6 +++-- app/src/main/res/layout/fragment_nearby.xml | 22 ++++++++++++++----- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index a8d9ac4df..38173fe42 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -71,12 +71,14 @@ public class NearbyListFragment extends ListFragment { mLatestLocation = ((NearbyActivity) getActivity()).getmLatestLocation(); //FIXME: Hardcoding mLatestLocation to Michigan for testing //mLatestLocation = new LatLng(44.182205, -84.506836); - places = loadAttractionsFromLocation(mLatestLocation); - final ListView listview = (ListView) view.findViewById(R.id.listview); + places = loadAttractionsFromLocation(mLatestLocation); mAdapter = new NearbyAdapter(getActivity(), places); + + ListView listview = (ListView) view.findViewById(R.id.listview); //setListAdapter(mAdapter); listview.setAdapter(mAdapter); + Log.d(TAG, "Adapter set to ListView"); mAdapter.notifyDataSetChanged(); } diff --git a/app/src/main/res/layout/fragment_nearby.xml b/app/src/main/res/layout/fragment_nearby.xml index dd2adfc31..3704543d9 100644 --- a/app/src/main/res/layout/fragment_nearby.xml +++ b/app/src/main/res/layout/fragment_nearby.xml @@ -1,13 +1,23 @@ - - - + android:layout_height="fill_parent" + android:layout_above="@+id/btn_New"> + +