From d428eaf39764560d2b08184e3e19aaa51b12306d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20P=C3=B3=C5=82grabia?= Date: Sun, 11 Sep 2016 22:56:25 +0200 Subject: [PATCH] Implemented "endless" listview for panoramio. --- .../urbanexplorer/MainActivity.java | 2 + .../urbanexplorer/fragments/HomeFragment.java | 197 ++++++++---------- .../workers/FetchingPhotosWorker.java | 25 +++ app/src/main/res/drawable/nav_left.png | Bin 14312 -> 0 bytes app/src/main/res/drawable/nav_right.png | Bin 14501 -> 0 bytes app/src/main/res/layout/fragment_home.xml | 37 +--- 6 files changed, 119 insertions(+), 142 deletions(-) create mode 100644 app/src/main/java/pl/tpolgrabia/urbanexplorer/workers/FetchingPhotosWorker.java delete mode 100644 app/src/main/res/drawable/nav_left.png delete mode 100644 app/src/main/res/drawable/nav_right.png diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java index 9234987..6ddf626 100644 --- a/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java @@ -11,6 +11,7 @@ import android.view.GestureDetector; import android.view.MenuItem; import android.view.MotionEvent; import android.widget.LinearLayout; +import android.widget.Toast; import com.crashlytics.android.Crashlytics; import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache; import com.nostra13.universalimageloader.core.DisplayImageOptions; @@ -188,6 +189,7 @@ public class MainActivity extends ActionBarActivity implements GestureDetector.O } private void swipeDown() { + Toast.makeText(this, "Swiped down", Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/HomeFragment.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/HomeFragment.java index 8ddc435..5e3a47e 100644 --- a/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/HomeFragment.java +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/HomeFragment.java @@ -8,6 +8,7 @@ import android.location.LocationManager; import android.os.Bundle; import android.provider.Settings; import android.support.v4.app.Fragment; +import android.support.v4.widget.SwipeRefreshLayout; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; @@ -24,7 +25,10 @@ import pl.tpolgrabia.urbanexplorer.dto.PanoramioImageInfo; import pl.tpolgrabia.urbanexplorer.utils.NumberUtils; import pl.tpolgrabia.urbanexplorer.utils.PanoramioUtils; +import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Semaphore; +import java.util.concurrent.atomic.AtomicBoolean; import static android.content.Context.LOCATION_SERVICE; @@ -39,6 +43,7 @@ public class HomeFragment extends Fragment implements LocationListener { private static final int LOCATION_SETTINGS_REQUEST_ID = 1; private static final String LOCATIONS_LIST_IMAGE_SIZE = "medium"; private static final String LOCATIONS_ORDER = "popularity"; + private static final int PANORAMIA_BULK_DATA_SIZE = 10; private boolean gpsLocationEnabled; private boolean networkLocationEnabled; private boolean locationEnabled; @@ -49,14 +54,10 @@ public class HomeFragment extends Fragment implements LocationListener { private boolean initialized = false; private View inflatedView; - private TextView pageSizeWidget; - private TextView pageIdWidget; private Long pageId = 1L; - private ListView locations; - private ImageView prevWidget; - private ImageView nextWidget; - private Long photosCount; - private TextView locationsResultInfo; + private Semaphore loading = new Semaphore(1, true); + private List photos = new ArrayList<>(); + private boolean photosInitialized = false; public HomeFragment() { // Required empty public constructor @@ -77,6 +78,8 @@ public class HomeFragment extends Fragment implements LocationListener { return; } + // loading.release(); + } private Double safeParseDouble(CharSequence text) { @@ -97,11 +100,12 @@ public class HomeFragment extends Fragment implements LocationListener { Bundle savedInstanceState) { // Inflate the layout for this fragment inflatedView = inflater.inflate(R.layout.fragment_home, container, false); - locations = (ListView)inflatedView.findViewById(R.id.locations); + ListView locations = (ListView)inflatedView.findViewById(R.id.locations); + final ListView finalLocations = locations; locations.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView adapterView, View view, int pos, long rowId) { - PanoramioAdapter panAdapter = (PanoramioAdapter) locations.getAdapter(); + PanoramioAdapter panAdapter = (PanoramioAdapter) finalLocations.getAdapter(); PanoramioImageInfo photoInfo = panAdapter.getItem(pos); MainActivity activity = (MainActivity) getActivity(); activity.switchToPhoto(photoInfo); @@ -122,16 +126,27 @@ public class HomeFragment extends Fragment implements LocationListener { int visibleItemCount, int totalItemCount) { - if (firstVisibleItem <= 0) { - // scrolled to the top - Log.v(CLASS_TAG, "Scrolled to the top"); - } + try { - if (firstVisibleItem + visibleItemCount >= totalItemCount) { - Log.v(CLASS_TAG, "Scrolled to the bottom"); - // scrolled to the bottom - fetchAdditionalPhotos(firstVisibleItem, visibleItemCount); + if (firstVisibleItem <= 0) { + // scrolled to the top + Log.v(CLASS_TAG, "Scrolled to the top"); + } + if (firstVisibleItem + visibleItemCount >= totalItemCount) { + Log.v(CLASS_TAG, "Scrolled to the bottom"); + // scrolled to the bottom + final View fragView = getView(); + if (fragView == null) { + Log.v(CLASS_TAG, "Frag still not initialized"); + return; + } + fetchAdditionalPhotos(); + + } + + } catch (InterruptedException e) { + Log.e(CLASS_TAG, "Aquiring lock interrupted exception", e); } } @@ -159,100 +174,64 @@ public class HomeFragment extends Fragment implements LocationListener { // ); locations = (ListView)inflatedView.findViewById(R.id.locations); - inflatedView.findViewById(R.id.update_places).setOnClickListener( - new View.OnClickListener() { - @Override - public void onClick(View view) { - fetchPanoramioLocations(); - } - } - ); - - pageSizeWidget = (TextView) inflatedView.findViewById(R.id.locations_page_size); - pageIdWidget = (TextView) inflatedView.findViewById(R.id.locations_page_id); - - pageIdWidget.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { - Log.d(CLASS_TAG, "Before text changed"); - } - - @Override - public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { - pageId = Math.max(1, NumberUtils.safeParseLong(charSequence)); - Log.d(CLASS_TAG, "text changed"); - } - - @Override - public void afterTextChanged(Editable editable) { - Log.d(CLASS_TAG, "After text changed"); - } - }); - - pageSizeWidget.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { - Log.d(CLASS_TAG, "Before text changed"); - } - - @Override - public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { - fetchPanoramioLocations(); - Log.d(CLASS_TAG, "text changed"); - } - - @Override - public void afterTextChanged(Editable editable) { - Log.d(CLASS_TAG, "After text changed"); - } - }); - - prevWidget = (ImageView)inflatedView.findViewById(R.id.prev); - nextWidget = (ImageView)inflatedView.findViewById(R.id.next); - - prevWidget.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (pageId > 1) { - pageId--; - pageIdWidget.setText(Long.toString(pageId)); - fetchPanoramioLocations(); - } - } - }); - - nextWidget.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - pageId++; - pageIdWidget.setText(Long.toString(pageId)); - fetchPanoramioLocations(); - } - }); initialized = true; - fetchAdditionalPhotos(0, 10); +// try { +// fetchAdditionalPhotos(0, PANORAMIA_BULK_DATA_SIZE); +// } catch (InterruptedException e) { +// Log.e(CLASS_TAG, "Acquiring lock interrupted", e); +// } // FIXME hardcoded values return inflatedView; } - private void fetchAdditionalPhotos(int firstVisibleItem, int visibleItemCount) { + private void fetchAdditionalPhotos() throws InterruptedException { + if (!initialized) { Log.v(CLASS_TAG, "Fetching additional photos blocked till system is initialized"); return; } - Log.v(CLASS_TAG, "Fetching additional photos"); - Location location = locationService.getLastKnownLocation(locationProvider); + if (locationProvider == null) { + Log.i(CLASS_TAG, "Location providers not available"); + Toast.makeText(getActivity(), "Location provicers not available", Toast.LENGTH_SHORT).show(); + return; + } + + if (getView() == null) { + Log.v(CLASS_TAG, "Application still not initialized"); + return; + } + + final Location location = locationService.getLastKnownLocation(locationProvider); + + if (location == null) { + Log.i(CLASS_TAG, "Location still not available"); + Toast.makeText(getActivity(), "Location still not available", Toast.LENGTH_SHORT).show(); + return; + } + + Log.v(CLASS_TAG, "Fetching additional photos. Trying loading acquirng lock"); + if (!loading.tryAcquire()) { + Log.v(CLASS_TAG, "Fetching additional photos. Loading in progress"); + return; + } + + + int offset = photos.size(); + + Log.v(CLASS_TAG, "Fetching additional photos offset: " + offset + ", count: " + PANORAMIA_BULK_DATA_SIZE); + Log.d(CLASS_TAG, "Fetching location using " + locationProvider + " provider"); + PanoramioUtils.fetchPanoramioImages( getActivity(), location.getLatitude(), location.getLongitude(), fetchRadiusX(), fetchRadiusY(), - (long)(firstVisibleItem + visibleItemCount), + (long)(offset + PANORAMIA_BULK_DATA_SIZE), fetchLocationPageSize(), new PanoramioResponseCallback() { @Override @@ -263,21 +242,25 @@ public class HomeFragment extends Fragment implements LocationListener { return; } - PanoramioAdapter adapter = (PanoramioAdapter) locations.getAdapter(); - if (adapter != null) { - adapter.addAll(images); + ListView locations = (ListView) getView().findViewById(R.id.locations); + ArrayAdapter adapter = (ArrayAdapter) locations.getAdapter(); + photos.addAll(images); + if (adapter == null) { + locations.setAdapter(new PanoramioAdapter(getActivity(), R.id.list_item, images)); } else { - locations.setAdapter(new PanoramioAdapter(getActivity(), - R.layout.location_item, - images)); + adapter.addAll(images); } + // locations.setSelection(photos.size() - 1 - PANORAMIA_BULK_DATA_SIZE); // TODO loading on end scroll should now working // TODO we can remove pagination // TODO we can think about removing first items also and last if the number // TODO of items exceeds the limit (to save the memory) - Log.v(CLASS_TAG, "Finished loading additional photos"); + Log.v(CLASS_TAG, "Finished Fetching additional photos count: " + photos.size()); + + photosInitialized = true; + loading.release(); } } @@ -304,11 +287,11 @@ public class HomeFragment extends Fragment implements LocationListener { Long pageSize = fetchLocationPageSize(); Long start = (pageId - 1) * pageSize + 1; Long end = pageId * pageSize; - locationsResultInfo.setText("" + start + "-" + end + " from " + imagesCount); ArrayAdapter adapter = new PanoramioAdapter(getActivity(), R.layout.location_item, images); + ListView locations = (ListView)getView().findViewById(R.id.locations); locations.setAdapter(adapter); } } @@ -316,12 +299,7 @@ public class HomeFragment extends Fragment implements LocationListener { } private Long fetchLocationPageSize() { - final CharSequence sPageSize = pageSizeWidget != null ? pageSizeWidget.getText() : null; - return NumberUtils.safeParseLong(sPageSize); - } - - private Long fetchLocationPageId() { - return Math.max(0L, NumberUtils.safeParseLong(pageIdWidget.getText())); + return new Long(PANORAMIA_BULK_DATA_SIZE); } private Double fetchRadiusX() { @@ -341,6 +319,13 @@ public class HomeFragment extends Fragment implements LocationListener { double lng = location.getLongitude(); TextView locationInfo = (TextView) getActivity().findViewById(R.id.locationInfo); locationInfo.setText("Location: (" + lat + "," + lng + ")"); + if (!photosInitialized) { + try { + fetchAdditionalPhotos(); + } catch (InterruptedException e) { + Log.e(CLASS_TAG, "Failed acquirng loading lock", e); + } + } } @Override diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/workers/FetchingPhotosWorker.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/workers/FetchingPhotosWorker.java new file mode 100644 index 0000000..a4d85e8 --- /dev/null +++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/workers/FetchingPhotosWorker.java @@ -0,0 +1,25 @@ +package pl.tpolgrabia.urbanexplorer.workers; + +import android.os.AsyncTask; +import pl.tpolgrabia.urbanexplorer.fragments.HomeFragment; + +/** + * Created by tpolgrabia on 11.09.16. + */ +public class FetchingPhotosWorker extends AsyncTask { + + private HomeFragment homeFragment; + + public FetchingPhotosWorker(HomeFragment homeFragment) { + this.homeFragment = homeFragment; + } + + @Override + protected Boolean doInBackground(Boolean... params) { + for (Boolean arg : params) { + + } + + return null; + } +} diff --git a/app/src/main/res/drawable/nav_left.png b/app/src/main/res/drawable/nav_left.png deleted file mode 100644 index 249ff2934823a64aeb7ba353ee29c8285432c07c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14312 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 diff --git a/app/src/main/res/drawable/nav_right.png b/app/src/main/res/drawable/nav_right.png deleted file mode 100644 index 52ecd10d3f53a64e9944f8a2d9e2c7cb6629b784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14501 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 diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 83f5419..de1bd00 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -38,6 +38,7 @@ + - - - - - - - - - - - -