diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapter.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapter.java index 63161f87b..96a42e008 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapter.java @@ -8,26 +8,15 @@ import android.widget.ArrayAdapter; import fr.free.nrw.commons.R; -import java.util.List; - import timber.log.Timber; public class NearbyAdapter extends ArrayAdapter { - private List placesList; - private Context context; - - public List getPlacesList() { - return placesList; - } /** Accepts activity context and list of places. * @param context activity context - * @param places list of places */ - public NearbyAdapter(Context context, List places) { - super(context, R.layout.item_place, places); - this.context = context; - placesList = places; + public NearbyAdapter(Context context) { + super(context, R.layout.item_place); } @Override @@ -43,13 +32,14 @@ public class NearbyAdapter extends ArrayAdapter { } NearbyViewHolder viewHolder = new NearbyViewHolder(convertView); - viewHolder.bindModel(context, place); + viewHolder.bindModel(getContext(), place); // Return the completed view to render on screen return convertView; } @Override public long getItemId(int position) { + // TODO: use Wikidata Q-ID instead? return position; } } 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 537687567..6dae3bc90 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 @@ -21,7 +21,6 @@ import butterknife.ButterKnife; import butterknife.OnItemClick; import fr.free.nrw.commons.R; import fr.free.nrw.commons.location.LatLng; -import timber.log.Timber; import java.util.Collections; import java.util.Comparator; @@ -30,15 +29,17 @@ import java.util.List; import java.util.Locale; import java.util.Map; -public class NearbyListFragment extends ListFragment implements TaskListener { +import timber.log.Timber; + +public class NearbyListFragment extends ListFragment { private static final int MAX_RESULTS = 1000; private NearbyAsyncTask nearbyAsyncTask; - @BindView(R.id.listview) ListView listview; + @BindView(R.id.listView) ListView listview; @BindView(R.id.progressBar) ProgressBar progressBar; - private boolean isTaskRunning = false; + private NearbyAdapter adapter; public NearbyListFragment() { } @@ -56,15 +57,19 @@ public class NearbyListFragment extends ListFragment implements TaskListener { Timber.d("NearbyListFragment created"); View view = inflater.inflate(R.layout.fragment_nearby, container, false); ButterKnife.bind(this, view); + adapter = new NearbyAdapter(getActivity()); + listview.setAdapter(adapter); return view; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { - //Check that this is the first time view is created, to avoid double list when screen orientation changed + // Check that this is the first time view is created, + // to avoid double list when screen orientation changed if (savedInstanceState == null) { - nearbyAsyncTask = new NearbyAsyncTask(this); + adapter.clear(); + nearbyAsyncTask = new NearbyAsyncTask(); nearbyAsyncTask.execute(); progressBar.setVisibility(View.VISIBLE); Timber.d("Saved instance state is null, populating ListView"); @@ -74,29 +79,13 @@ public class NearbyListFragment extends ListFragment implements TaskListener { // If we are returning here from a screen orientation and the AsyncTask is still working, // re-create and display the progress dialog. - if (isTaskRunning) { + if (isTaskRunning()) { progressBar.setVisibility(View.VISIBLE); } } - @Override - public void onSaveInstanceState(Bundle outInstanceState) { - // See http://stackoverflow.com/questions/8942135/listview-added-dublicate-item-in-list-when-screen-orientation-changes - outInstanceState.putInt("value", 1); - } - - @Override - public void onTaskStarted() { - isTaskRunning = true; - progressBar.setVisibility(View.VISIBLE); - } - - @Override - public void onTaskFinished(List result) { - if (progressBar != null) { - progressBar.setVisibility(View.GONE); - } - isTaskRunning = false; + private boolean isTaskRunning() { + return nearbyAsyncTask != null && nearbyAsyncTask.getStatus() != AsyncTask.Status.FINISHED; } @Override @@ -114,23 +103,17 @@ public class NearbyListFragment extends ListFragment implements TaskListener { super.onDestroy(); // See http://stackoverflow.com/questions/18264408/incomplete-asynctask-crashes-my-app - if (nearbyAsyncTask != null && nearbyAsyncTask.getStatus() != AsyncTask.Status.FINISHED) { + if (isTaskRunning()) { nearbyAsyncTask.cancel(true); } } private class NearbyAsyncTask extends AsyncTask> { - private final TaskListener listener; - - public NearbyAsyncTask(TaskListener listener) { - this.listener = listener; - } - @Override protected void onPreExecute() { super.onPreExecute(); - listener.onTaskStarted(); + progressBar.setVisibility(View.VISIBLE); } @Override @@ -154,17 +137,16 @@ public class NearbyListFragment extends ListFragment implements TaskListener { return; } - progressBar.setVisibility(View.GONE); - NearbyAdapter adapter = new NearbyAdapter(getActivity(), places); - - listview.setAdapter(adapter); - - listener.onTaskFinished(places); + if (progressBar != null) { + progressBar.setVisibility(View.GONE); + } + adapter.clear(); + adapter.addAll(places); adapter.notifyDataSetChanged(); } } - @OnItemClick(R.id.listview) + @OnItemClick(R.id.listView) void onItemClicked(int position) { Place place = (Place) listview.getItemAtPosition(position); LatLng placeLatLng = place.location; diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/TaskListener.java b/app/src/main/java/fr/free/nrw/commons/nearby/TaskListener.java deleted file mode 100644 index 947575d31..000000000 --- a/app/src/main/java/fr/free/nrw/commons/nearby/TaskListener.java +++ /dev/null @@ -1,10 +0,0 @@ -package fr.free.nrw.commons.nearby; - -import java.util.List; - -// As per https://androidresearch.wordpress.com/2013/05/10/dealing-with-asynctask-and-screen-orientation/ -public interface TaskListener { - void onTaskStarted(); - - void onTaskFinished(List result); -} \ 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 2f8d6fc9b..aaa9586f2 100644 --- a/app/src/main/res/layout/fragment_nearby.xml +++ b/app/src/main/res/layout/fragment_nearby.xml @@ -12,7 +12,7 @@ />