From 0901e67853b24a8760129a0dc238c56417a17115 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Sat, 13 May 2017 13:41:53 +0300 Subject: [PATCH 1/5] Optimise unnecesarry method call --- .../nrw/commons/nearby/NearbyActivity.java | 95 +++++++++++++++++-- .../nrw/commons/nearby/NearbyController.java | 28 +++--- .../commons/nearby/NearbyListFragment.java | 53 ++++++++--- .../nrw/commons/nearby/NearbyMapFragment.java | 9 +- .../fr/free/nrw/commons/nearby/Place.java | 3 +- .../nrw/commons/utils/UriDeserializer.java | 19 ++++ .../free/nrw/commons/utils/UriSerializer.java | 17 ++++ app/src/main/res/layout/activity_nearby.xml | 7 ++ app/src/main/res/layout/fragment_nearby.xml | 7 -- 9 files changed, 192 insertions(+), 46 deletions(-) create mode 100644 app/src/main/java/fr/free/nrw/commons/utils/UriDeserializer.java create mode 100644 app/src/main/java/fr/free/nrw/commons/utils/UriSerializer.java 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 53e01af86..0d1c19d9b 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,35 +1,57 @@ package fr.free.nrw.commons.nearby; +import android.net.Uri; +import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.FragmentTransaction; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.view.View; +import android.widget.ProgressBar; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; import fr.free.nrw.commons.R; +import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.location.LocationServiceManager; import fr.free.nrw.commons.theme.BaseActivity; +import fr.free.nrw.commons.utils.UriDeserializer; +import fr.free.nrw.commons.utils.UriSerializer; public class NearbyActivity extends BaseActivity { + @BindView(R.id.progressBar) + ProgressBar progressBar; private boolean isMapViewActive = false; + //public List placeList; private LocationServiceManager locationManager; + private LatLng curLatLang; + private Gson gson; + private String gsonPlaceList; + private String gsonCurLatLng; + private Bundle bundle; + private NearbyAsyncTask nearbyAsyncTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_nearby); + ButterKnife.bind(this); if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } locationManager = new LocationServiceManager(this); locationManager.registerLocationManager(); + curLatLang = locationManager.getLatestLocation(); + nearbyAsyncTask = new NearbyAsyncTask(); + nearbyAsyncTask.execute(); - // Begin the transaction - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - NearbyListFragment fragment = new NearbyListFragment(); - ft.add(R.id.container, fragment); - ft.commit(); } @Override @@ -56,8 +78,15 @@ public class NearbyActivity extends BaseActivity { private void showMapView() { if (!isMapViewActive) { - getSupportFragmentManager().beginTransaction() - .replace(R.id.container, new NearbyMapFragment()).commit(); + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + NearbyMapFragment fragment = new NearbyMapFragment(); + fragment.setArguments(bundle); + ft.add(R.id.container, fragment); + ft.commit(); + + //NearbyController.loadAttractionsFromLocationToBaseMarkerOptions(curLatLang, placeList); + /*getSupportFragmentManager().beginTransaction() + .replace(R.id.container, new NearbyMapFragment()).commit();*/ isMapViewActive = true; } } @@ -68,6 +97,8 @@ public class NearbyActivity extends BaseActivity { } protected void refreshView() { + //placeList = NearbyController.loadAttractionsFromLocation(curLatLang, this); + nearbyAsyncTask.execute(); if (isMapViewActive) { getSupportFragmentManager().beginTransaction() .replace(R.id.container, new NearbyMapFragment()).commit(); @@ -86,4 +117,54 @@ public class NearbyActivity extends BaseActivity { super.onDestroy(); locationManager.unregisterLocationManager(); } + + private class NearbyAsyncTask extends AsyncTask> { + + @Override + protected void onPreExecute() { + super.onPreExecute(); + } + + @Override + protected void onProgressUpdate(Integer... values) { + super.onProgressUpdate(values); + } + + @Override + protected List doInBackground(Void... params) { + return NearbyController + .loadAttractionsFromLocation(curLatLang, getApplicationContext() + ); + } + + @Override + protected void onPostExecute(List placeList) { + super.onPostExecute(placeList); + + if (isCancelled()) { + return; + } + //placeList = NearbyController.loadAttractionsFromLocation(curLatLang, getApplicationContext()); + Gson gson = new GsonBuilder() + .registerTypeAdapter(Uri.class, new UriSerializer()) + .create(); + gsonPlaceList = gson.toJson(placeList); + gsonCurLatLng = gson.toJson(curLatLang); + + bundle = new Bundle(); + bundle.putString("PlaceList", gsonPlaceList); + bundle.putString("CurLatLng", gsonCurLatLng); + + // Begin the transaction + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + NearbyListFragment fragment = new NearbyListFragment(); + fragment.setArguments(bundle); + ft.add(R.id.container, fragment); + ft.commit(); + + if (progressBar != null) { + progressBar.setVisibility(View.GONE); + } + } + } } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java index 0d0712e1b..aca2a2113 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java @@ -26,7 +26,7 @@ import timber.log.Timber; public class NearbyController { private static final int MAX_RESULTS = 1000; - private static List loadAttractionsFromLocation(LatLng curLatLng, Context context) { + public static List loadAttractionsFromLocation(LatLng curLatLng, Context context) { Timber.d("Loading attractions near %s", curLatLng); if (curLatLng == null) { return Collections.emptyList(); @@ -59,35 +59,33 @@ public class NearbyController { /** * Loads attractions from location for list view, we need to return Place data type. * @param curLatLng users current location - * @param context current activity + * @param placeList list of nearby places in Place data type * @return Place list that holds nearby places */ - public static List loadAttractionsFromLocationToPlaces(LatLng curLatLng, - Context context) { - - List places = loadAttractionsFromLocation(curLatLng,context); - places = places.subList(0, Math.min(places.size(), MAX_RESULTS)); - for (Place place: places) { + public static List loadAttractionsFromLocationToPlaces( + LatLng curLatLng, + List placeList) { + placeList = placeList.subList(0, Math.min(placeList.size(), MAX_RESULTS)); + for (Place place: placeList) { String distance = formatDistanceBetween(curLatLng, place.location); place.setDistance(distance); } - return places; + return placeList; } /** *Loads attractions from location for map view, we need to return BaseMarkerOption data type. * @param curLatLng users current location - * @param context the activity + * @param placeList list of nearby places in Place data type * @return BaseMarkerOprions list that holds nearby places */ - public static List loadAttractionsFromLocationToBaseMarkerOptions( + public static List loadAttractionsFromLocationToBaseMarkerOptions ( LatLng curLatLng, - Context context) { + List placeList) { List baseMarkerOptionses = new ArrayList<>(); - List places = loadAttractionsFromLocation(curLatLng,context); - places = places.subList(0, Math.min(places.size(), MAX_RESULTS)); - for (Place place: places) { + placeList = placeList.subList(0, Math.min(placeList.size(), MAX_RESULTS)); + for (Place place: placeList) { String distance = formatDistanceBetween(curLatLng, place.location); place.setDistance(distance); baseMarkerOptionses.add(new MarkerOptions() 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 5921c0e30..e72636ae6 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 @@ -11,6 +11,12 @@ import android.view.ViewGroup; import android.widget.ListView; import android.widget.ProgressBar; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; import java.util.List; import butterknife.BindView; @@ -18,14 +24,18 @@ import butterknife.ButterKnife; import butterknife.OnItemClick; import fr.free.nrw.commons.R; import fr.free.nrw.commons.location.LatLng; +import fr.free.nrw.commons.utils.UriDeserializer; import timber.log.Timber; public class NearbyListFragment extends ListFragment { - private NearbyAsyncTask nearbyAsyncTask; + //private NearbyAsyncTask nearbyAsyncTask; + private Gson gson; + private List placeList; + private LatLng curLatLng; @BindView(R.id.listView) ListView listview; - @BindView(R.id.progressBar) ProgressBar progressBar; + private NearbyAdapter adapter; @@ -35,6 +45,19 @@ public class NearbyListFragment extends ListFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Bundle bundle = this.getArguments(); + gson = new GsonBuilder() + .registerTypeAdapter(Uri.class, new UriDeserializer()) + .create(); + if (bundle != null){ + String gsonPlaceList = bundle.getString("PlaceList"); + String gsonLatLng = bundle.getString("CurLatLng"); + Type listType = new TypeToken>() {}.getType(); + placeList = gson.fromJson(gsonPlaceList, listType); + Type curLatLngType = new TypeToken() {}.getType(); + curLatLng = gson.fromJson(gsonLatLng, curLatLngType); + NearbyController.loadAttractionsFromLocationToPlaces(curLatLng, placeList); + } setRetainInstance(true); } @@ -57,32 +80,37 @@ public class NearbyListFragment extends ListFragment { // to avoid double list when screen orientation changed if (savedInstanceState == null) { adapter.clear(); - nearbyAsyncTask = new NearbyAsyncTask(); - nearbyAsyncTask.execute(); - progressBar.setVisibility(View.VISIBLE); + //nearbyAsyncTask = new NearbyAsyncTask(); + //nearbyAsyncTask.execute(); + //progressBar.setVisibility(View.VISIBLE); Timber.d("Saved instance state is null, populating ListView"); } else { - progressBar.setVisibility(View.GONE); + //progressBar.setVisibility(View.GONE); } // If we are returning here from a screen orientation and the AsyncTask is still working, // re-create and display the progress dialog. if (isTaskRunning()) { - progressBar.setVisibility(View.VISIBLE); + //progressBar.setVisibility(View.VISIBLE); } + + adapter.clear(); + adapter.addAll(placeList); + adapter.notifyDataSetChanged(); } private boolean isTaskRunning() { - return nearbyAsyncTask != null && nearbyAsyncTask.getStatus() != AsyncTask.Status.FINISHED; + //return nearbyAsyncTask != null && nearbyAsyncTask.getStatus() != AsyncTask.Status.FINISHED; + return false; } @Override public void onDetach() { // All dialogs should be closed before leaving the activity in order to avoid // the: Activity has leaked window com.android.internal.policy... exception - if (progressBar != null && progressBar.isShown()) { + /* if (progressBar != null && progressBar.isShown()) { progressBar.setVisibility(View.GONE); - } + }*/ super.onDetach(); } @@ -92,10 +120,10 @@ public class NearbyListFragment extends ListFragment { // See http://stackoverflow.com/questions/18264408/incomplete-asynctask-crashes-my-app if (isTaskRunning()) { - nearbyAsyncTask.cancel(true); + //nearbyAsyncTask.cancel(true); } } - +/* private class NearbyAsyncTask extends AsyncTask> { @Override @@ -135,6 +163,7 @@ public class NearbyListFragment extends ListFragment { adapter.notifyDataSetChanged(); } } + */ @OnItemClick(R.id.listView) void onItemClicked(int position) { diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java index 7b627ecdf..3bf75e193 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java @@ -23,7 +23,7 @@ import java.util.List; import fr.free.nrw.commons.R; public class NearbyMapFragment extends android.support.v4.app.Fragment { - private NearbyAsyncTask nearbyAsyncTask; + //private NearbyAsyncTask nearbyAsyncTask; private fr.free.nrw.commons.location.LatLng currentLocation; private MapView mapView; @@ -60,8 +60,8 @@ public class NearbyMapFragment extends android.support.v4.app.Fragment { @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - nearbyAsyncTask = new NearbyAsyncTask(); - nearbyAsyncTask.execute(); + //nearbyAsyncTask = new NearbyAsyncTask(); + //nearbyAsyncTask.execute(); } @Override @@ -93,7 +93,7 @@ public class NearbyMapFragment extends android.support.v4.app.Fragment { mapView.onDestroy(); super.onDestroyView(); } - +/* private class NearbyAsyncTask extends AsyncTask> { @Override @@ -128,4 +128,5 @@ public class NearbyMapFragment extends android.support.v4.app.Fragment { }); } } + */ } 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 222a992cc..3439763c1 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 @@ -5,7 +5,7 @@ import android.net.Uri; import fr.free.nrw.commons.location.LatLng; -public class Place { +public class Place{ public final String name; public final String description; @@ -17,6 +17,7 @@ public class Place { public Bitmap secondaryImage; public String distance; + public Place(String name, String description, String longDescription, Uri secondaryImageUrl, LatLng location) { this.name = name; diff --git a/app/src/main/java/fr/free/nrw/commons/utils/UriDeserializer.java b/app/src/main/java/fr/free/nrw/commons/utils/UriDeserializer.java new file mode 100644 index 000000000..e63cfefa8 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/utils/UriDeserializer.java @@ -0,0 +1,19 @@ +package fr.free.nrw.commons.utils; + + +import android.net.Uri; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; + +import java.lang.reflect.Type; + +public class UriDeserializer implements JsonDeserializer { + @Override + public Uri deserialize(final JsonElement src, final Type srcType, + final JsonDeserializationContext context) throws JsonParseException { + return Uri.parse(src.getAsString()); + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/free/nrw/commons/utils/UriSerializer.java b/app/src/main/java/fr/free/nrw/commons/utils/UriSerializer.java new file mode 100644 index 000000000..d5a4c28ec --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/utils/UriSerializer.java @@ -0,0 +1,17 @@ +package fr.free.nrw.commons.utils; + +import android.net.Uri; + +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import java.lang.reflect.Type; + + +public class UriSerializer implements JsonSerializer { + public JsonElement serialize(Uri src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src.toString()); + } +} diff --git a/app/src/main/res/layout/activity_nearby.xml b/app/src/main/res/layout/activity_nearby.xml index d03ae8381..53f31056b 100644 --- a/app/src/main/res/layout/activity_nearby.xml +++ b/app/src/main/res/layout/activity_nearby.xml @@ -5,6 +5,13 @@ android:layout_height="match_parent" > + + - - Date: Sat, 13 May 2017 14:11:20 +0300 Subject: [PATCH 2/5] Fix map fragment --- .../nrw/commons/nearby/NearbyActivity.java | 54 ++++----- .../commons/nearby/NearbyListFragment.java | 106 +++--------------- .../nrw/commons/nearby/NearbyMapFragment.java | 74 ++++++------ 3 files changed, 73 insertions(+), 161 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 0d1c19d9b..663c40345 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,6 @@ import fr.free.nrw.commons.R; import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.location.LocationServiceManager; import fr.free.nrw.commons.theme.BaseActivity; -import fr.free.nrw.commons.utils.UriDeserializer; import fr.free.nrw.commons.utils.UriSerializer; public class NearbyActivity extends BaseActivity { @@ -46,6 +45,7 @@ public class NearbyActivity extends BaseActivity { if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } + bundle = new Bundle(); locationManager = new LocationServiceManager(this); locationManager.registerLocationManager(); curLatLang = locationManager.getLatestLocation(); @@ -78,15 +78,7 @@ public class NearbyActivity extends BaseActivity { private void showMapView() { if (!isMapViewActive) { - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - NearbyMapFragment fragment = new NearbyMapFragment(); - fragment.setArguments(bundle); - ft.add(R.id.container, fragment); - ft.commit(); - - //NearbyController.loadAttractionsFromLocationToBaseMarkerOptions(curLatLang, placeList); - /*getSupportFragmentManager().beginTransaction() - .replace(R.id.container, new NearbyMapFragment()).commit();*/ + setMapFragment(); isMapViewActive = true; } } @@ -97,15 +89,8 @@ public class NearbyActivity extends BaseActivity { } protected void refreshView() { - //placeList = NearbyController.loadAttractionsFromLocation(curLatLang, this); + nearbyAsyncTask = new NearbyAsyncTask(); nearbyAsyncTask.execute(); - if (isMapViewActive) { - getSupportFragmentManager().beginTransaction() - .replace(R.id.container, new NearbyMapFragment()).commit(); - } else { - getSupportFragmentManager().beginTransaction() - .replace(R.id.container, new NearbyListFragment()).commit(); - } } public LocationServiceManager getLocationManager() { @@ -144,27 +129,44 @@ public class NearbyActivity extends BaseActivity { if (isCancelled()) { return; } - //placeList = NearbyController.loadAttractionsFromLocation(curLatLang, getApplicationContext()); - Gson gson = new GsonBuilder() + + gson = new GsonBuilder() .registerTypeAdapter(Uri.class, new UriSerializer()) .create(); gsonPlaceList = gson.toJson(placeList); gsonCurLatLng = gson.toJson(curLatLang); - bundle = new Bundle(); + bundle.clear(); bundle.putString("PlaceList", gsonPlaceList); bundle.putString("CurLatLng", gsonCurLatLng); // Begin the transaction - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - NearbyListFragment fragment = new NearbyListFragment(); - fragment.setArguments(bundle); - ft.add(R.id.container, fragment); - ft.commit(); + if (isMapViewActive) { + setMapFragment(); + } else { + setListFragment(); + } if (progressBar != null) { progressBar.setVisibility(View.GONE); } } } + + public void setMapFragment() { + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + NearbyMapFragment fragment = new NearbyMapFragment(); + fragment.setArguments(bundle); + ft.add(R.id.container, fragment); + ft.commit(); + } + + public void setListFragment() { + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + NearbyListFragment fragment = new NearbyListFragment(); + fragment.setArguments(bundle); + ft.add(R.id.container, fragment); + ft.commit(); + } + } 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 e72636ae6..315082e9c 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,21 +2,18 @@ package fr.free.nrw.commons.nearby; import android.content.Intent; import android.net.Uri; -import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; -import android.widget.ProgressBar; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; -import java.util.ArrayList; import java.util.List; import butterknife.BindView; @@ -45,19 +42,6 @@ public class NearbyListFragment extends ListFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Bundle bundle = this.getArguments(); - gson = new GsonBuilder() - .registerTypeAdapter(Uri.class, new UriDeserializer()) - .create(); - if (bundle != null){ - String gsonPlaceList = bundle.getString("PlaceList"); - String gsonLatLng = bundle.getString("CurLatLng"); - Type listType = new TypeToken>() {}.getType(); - placeList = gson.fromJson(gsonPlaceList, listType); - Type curLatLngType = new TypeToken() {}.getType(); - curLatLng = gson.fromJson(gsonLatLng, curLatLngType); - NearbyController.loadAttractionsFromLocationToPlaces(curLatLng, placeList); - } setRetainInstance(true); } @@ -78,20 +62,22 @@ public class NearbyListFragment extends ListFragment { // Check that this is the first time view is created, // to avoid double list when screen orientation changed + Bundle bundle = this.getArguments(); + gson = new GsonBuilder() + .registerTypeAdapter(Uri.class, new UriDeserializer()) + .create(); + if (bundle != null){ + String gsonPlaceList = bundle.getString("PlaceList"); + String gsonLatLng = bundle.getString("CurLatLng"); + Type listType = new TypeToken>() {}.getType(); + placeList = gson.fromJson(gsonPlaceList, listType); + Type curLatLngType = new TypeToken() {}.getType(); + curLatLng = gson.fromJson(gsonLatLng, curLatLngType); + placeList = NearbyController.loadAttractionsFromLocationToPlaces(curLatLng, placeList); + } if (savedInstanceState == null) { adapter.clear(); - //nearbyAsyncTask = new NearbyAsyncTask(); - //nearbyAsyncTask.execute(); - //progressBar.setVisibility(View.VISIBLE); Timber.d("Saved instance state is null, populating ListView"); - } else { - //progressBar.setVisibility(View.GONE); - } - - // If we are returning here from a screen orientation and the AsyncTask is still working, - // re-create and display the progress dialog. - if (isTaskRunning()) { - //progressBar.setVisibility(View.VISIBLE); } adapter.clear(); @@ -99,72 +85,6 @@ public class NearbyListFragment extends ListFragment { adapter.notifyDataSetChanged(); } - private boolean isTaskRunning() { - //return nearbyAsyncTask != null && nearbyAsyncTask.getStatus() != AsyncTask.Status.FINISHED; - return false; - } - - @Override - public void onDetach() { - // All dialogs should be closed before leaving the activity in order to avoid - // the: Activity has leaked window com.android.internal.policy... exception - /* if (progressBar != null && progressBar.isShown()) { - progressBar.setVisibility(View.GONE); - }*/ - super.onDetach(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - // See http://stackoverflow.com/questions/18264408/incomplete-asynctask-crashes-my-app - if (isTaskRunning()) { - //nearbyAsyncTask.cancel(true); - } - } -/* - private class NearbyAsyncTask extends AsyncTask> { - - @Override - protected void onPreExecute() { - super.onPreExecute(); - progressBar.setVisibility(View.VISIBLE); - } - - @Override - protected void onProgressUpdate(Integer... values) { - super.onProgressUpdate(values); - progressBar.setProgress(values[0]); - } - - @Override - protected List doInBackground(Void... params) { - return NearbyController.loadAttractionsFromLocationToPlaces( - ((NearbyActivity)getActivity()) - .getLocationManager() - .getLatestLocation(), getActivity() - ); - } - - @Override - protected void onPostExecute(List places) { - super.onPostExecute(places); - - if (isCancelled()) { - return; - } - - if (progressBar != null) { - progressBar.setVisibility(View.GONE); - } - adapter.clear(); - adapter.addAll(places); - adapter.notifyDataSetChanged(); - } - } - */ - @OnItemClick(R.id.listView) void onItemClicked(int position) { Place place = (Place) listview.getItemAtPosition(position); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java index 3bf75e193..d0fbd9055 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java @@ -1,12 +1,15 @@ package fr.free.nrw.commons.nearby; -import android.os.AsyncTask; +import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.annotations.BaseMarkerOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; @@ -18,14 +21,19 @@ import com.mapbox.mapboxsdk.maps.MapboxMapOptions; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.services.android.telemetry.MapboxTelemetry; +import java.lang.reflect.Type; import java.util.List; import fr.free.nrw.commons.R; +import fr.free.nrw.commons.utils.UriDeserializer; public class NearbyMapFragment extends android.support.v4.app.Fragment { //private NearbyAsyncTask nearbyAsyncTask; - private fr.free.nrw.commons.location.LatLng currentLocation; private MapView mapView; + private Gson gson; + private List placeList; + private List baseMarkerOptionses; + private fr.free.nrw.commons.location.LatLng curLatLng; public NearbyMapFragment() { @@ -34,7 +42,21 @@ public class NearbyMapFragment extends android.support.v4.app.Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - currentLocation = ((NearbyActivity)getActivity()).getLocationManager().getLatestLocation(); + Bundle bundle = this.getArguments(); + gson = new GsonBuilder() + .registerTypeAdapter(Uri.class, new UriDeserializer()) + .create(); + if (bundle != null){ + String gsonPlaceList = bundle.getString("PlaceList"); + String gsonLatLng = bundle.getString("CurLatLng"); + Type listType = new TypeToken>() {}.getType(); + placeList = gson.fromJson(gsonPlaceList, listType); + Type curLatLngType = new TypeToken() {}.getType(); + curLatLng = gson.fromJson(gsonLatLng, curLatLngType); + baseMarkerOptionses = NearbyController + .loadAttractionsFromLocationToBaseMarkerOptions(curLatLng, placeList); + + } Mapbox.getInstance(getActivity(), getString(R.string.mapbox_commons_app_token)); MapboxTelemetry.getInstance().setTelemetryEnabled(false); @@ -46,13 +68,19 @@ public class NearbyMapFragment extends android.support.v4.app.Fragment { MapboxMapOptions options = new MapboxMapOptions() .styleUrl(Style.OUTDOORS) .camera(new CameraPosition.Builder() - .target(new LatLng(currentLocation.latitude, currentLocation.longitude)) + .target(new LatLng(curLatLng.latitude, curLatLng.longitude)) .zoom(11) .build()); // create map mapView = new MapView(getActivity(), options); mapView.onCreate(savedInstanceState); + mapView.getMapAsync(new OnMapReadyCallback() { + @Override + public void onMapReady(MapboxMap mapboxMap) { + mapboxMap.addMarkers(baseMarkerOptionses); + } + }); setHasOptionsMenu(false); return mapView; } @@ -60,8 +88,6 @@ public class NearbyMapFragment extends android.support.v4.app.Fragment { @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - //nearbyAsyncTask = new NearbyAsyncTask(); - //nearbyAsyncTask.execute(); } @Override @@ -93,40 +119,4 @@ public class NearbyMapFragment extends android.support.v4.app.Fragment { mapView.onDestroy(); super.onDestroyView(); } -/* - private class NearbyAsyncTask extends AsyncTask> { - - @Override - protected void onPreExecute() { - super.onPreExecute(); - } - - @Override - protected void onProgressUpdate(Integer... values) { - super.onProgressUpdate(values); - } - - @Override - protected List doInBackground(Void... params) { - return NearbyController - .loadAttractionsFromLocationToBaseMarkerOptions(currentLocation, getActivity() - ); - } - - @Override - protected void onPostExecute(final List baseMarkerOptionses) { - super.onPostExecute(baseMarkerOptionses); - - if (isCancelled()) { - return; - } - mapView.getMapAsync(new OnMapReadyCallback() { - @Override - public void onMapReady(MapboxMap mapboxMap) { - mapboxMap.addMarkers(baseMarkerOptionses); - } - }); - } - } - */ } From 2dafd88a6cd8383b1ad03e06c2c39c1bcf3ba606 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Sat, 13 May 2017 15:07:30 +0300 Subject: [PATCH 3/5] Fix Codacy issues --- .../nrw/commons/nearby/NearbyActivity.java | 18 ++++++++++++------ .../nrw/commons/nearby/NearbyController.java | 9 +++++++-- .../nrw/commons/nearby/NearbyListFragment.java | 17 ++++++++++------- .../nrw/commons/nearby/NearbyMapFragment.java | 2 +- .../java/fr/free/nrw/commons/nearby/Place.java | 2 +- .../nrw/commons/utils/UriDeserializer.java | 1 - 6 files changed, 31 insertions(+), 18 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 663c40345..f0420f873 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 @@ -10,24 +10,24 @@ import android.view.MenuItem; import android.view.View; import android.widget.ProgressBar; +import butterknife.BindView; +import butterknife.ButterKnife; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; -import fr.free.nrw.commons.R; import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.location.LocationServiceManager; +import fr.free.nrw.commons.R; import fr.free.nrw.commons.theme.BaseActivity; import fr.free.nrw.commons.utils.UriSerializer; +import java.util.List; + public class NearbyActivity extends BaseActivity { @BindView(R.id.progressBar) ProgressBar progressBar; private boolean isMapViewActive = false; - //public List placeList; private LocationServiceManager locationManager; private LatLng curLatLang; @@ -153,6 +153,9 @@ public class NearbyActivity extends BaseActivity { } } + /** + * Calls fragment for map view + */ public void setMapFragment() { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); NearbyMapFragment fragment = new NearbyMapFragment(); @@ -161,6 +164,9 @@ public class NearbyActivity extends BaseActivity { ft.commit(); } + /** + * Calls fragment for list view + */ public void setListFragment() { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); NearbyListFragment fragment = new NearbyListFragment(); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java index aca2a2113..dc36d165e 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java @@ -26,6 +26,12 @@ import timber.log.Timber; public class NearbyController { private static final int MAX_RESULTS = 1000; + /** + * Prepares Place list to make their distance information update later. + * @param curLatLng current location for user + * @param context context + * @return Place list without distance information + */ public static List loadAttractionsFromLocation(LatLng curLatLng, Context context) { Timber.d("Loading attractions near %s", curLatLng); if (curLatLng == null) { @@ -62,7 +68,6 @@ public class NearbyController { * @param placeList list of nearby places in Place data type * @return Place list that holds nearby places */ - public static List loadAttractionsFromLocationToPlaces( LatLng curLatLng, List placeList) { @@ -80,7 +85,7 @@ public class NearbyController { * @param placeList list of nearby places in Place data type * @return BaseMarkerOprions list that holds nearby places */ - public static List loadAttractionsFromLocationToBaseMarkerOptions ( + public static List loadAttractionsFromLocationToBaseMarkerOptions( LatLng curLatLng, List placeList) { List baseMarkerOptionses = new ArrayList<>(); 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 315082e9c..eafa10382 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 @@ -9,19 +9,22 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ListView; +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnItemClick; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; -import java.lang.reflect.Type; -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnItemClick; import fr.free.nrw.commons.R; import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.utils.UriDeserializer; + +import java.lang.reflect.Type; +import java.util.List; + + import timber.log.Timber; public class NearbyListFragment extends ListFragment { @@ -66,7 +69,7 @@ public class NearbyListFragment extends ListFragment { gson = new GsonBuilder() .registerTypeAdapter(Uri.class, new UriDeserializer()) .create(); - if (bundle != null){ + if (bundle != null) { String gsonPlaceList = bundle.getString("PlaceList"); String gsonLatLng = bundle.getString("CurLatLng"); Type listType = new TypeToken>() {}.getType(); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java index d0fbd9055..f3fd6b6bf 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java @@ -46,7 +46,7 @@ public class NearbyMapFragment extends android.support.v4.app.Fragment { gson = new GsonBuilder() .registerTypeAdapter(Uri.class, new UriDeserializer()) .create(); - if (bundle != null){ + if (bundle != null) { String gsonPlaceList = bundle.getString("PlaceList"); String gsonLatLng = bundle.getString("CurLatLng"); Type listType = new TypeToken>() {}.getType(); 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 3439763c1..f3e8e9438 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 @@ -5,7 +5,7 @@ import android.net.Uri; import fr.free.nrw.commons.location.LatLng; -public class Place{ +public class Place { public final String name; public final String description; diff --git a/app/src/main/java/fr/free/nrw/commons/utils/UriDeserializer.java b/app/src/main/java/fr/free/nrw/commons/utils/UriDeserializer.java index e63cfefa8..ad37b27fc 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/UriDeserializer.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/UriDeserializer.java @@ -1,6 +1,5 @@ package fr.free.nrw.commons.utils; - import android.net.Uri; import com.google.gson.JsonDeserializationContext; From 59ad9c5c91558166006efa5e2a5b2a09ae0999d8 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Sat, 13 May 2017 15:14:25 +0300 Subject: [PATCH 4/5] Fix Codacy issues --- .../java/fr/free/nrw/commons/nearby/NearbyActivity.java | 7 ++++--- .../java/fr/free/nrw/commons/nearby/NearbyMapFragment.java | 6 +++--- 2 files changed, 7 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 f0420f873..a2921fd9c 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 @@ -18,10 +18,11 @@ import com.google.gson.GsonBuilder; import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.location.LocationServiceManager; -import fr.free.nrw.commons.R; import fr.free.nrw.commons.theme.BaseActivity; import fr.free.nrw.commons.utils.UriSerializer; +import fr.free.nrw.commons.R; + import java.util.List; public class NearbyActivity extends BaseActivity { @@ -154,7 +155,7 @@ public class NearbyActivity extends BaseActivity { } /** - * Calls fragment for map view + * Calls fragment for map view. */ public void setMapFragment() { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); @@ -165,7 +166,7 @@ public class NearbyActivity extends BaseActivity { } /** - * Calls fragment for list view + * Calls fragment for list view. */ public void setListFragment() { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java index f3fd6b6bf..07702c6c0 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java @@ -21,12 +21,12 @@ import com.mapbox.mapboxsdk.maps.MapboxMapOptions; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.services.android.telemetry.MapboxTelemetry; -import java.lang.reflect.Type; -import java.util.List; - import fr.free.nrw.commons.R; import fr.free.nrw.commons.utils.UriDeserializer; +import java.lang.reflect.Type; +import java.util.List; + public class NearbyMapFragment extends android.support.v4.app.Fragment { //private NearbyAsyncTask nearbyAsyncTask; private MapView mapView; From 200625dccaf254a042a84092e4e212329d905a39 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Sat, 13 May 2017 15:22:20 +0300 Subject: [PATCH 5/5] bug fix --- .../main/java/fr/free/nrw/commons/nearby/NearbyActivity.java | 4 +++- 1 file changed, 3 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 a2921fd9c..0f8f176de 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 @@ -79,8 +79,10 @@ public class NearbyActivity extends BaseActivity { private void showMapView() { if (!isMapViewActive) { - setMapFragment(); isMapViewActive = true; + if (nearbyAsyncTask.getStatus() == AsyncTask.Status.FINISHED) { + setMapFragment(); + } } }