mirror of
https://github.com/viq/NewsBlur.git
synced 2025-09-18 21:43:31 +00:00
Initial work on paging the activities list
This commit is contained in:
parent
18e2124514
commit
673f9e99bd
4 changed files with 88 additions and 23 deletions
|
@ -12,8 +12,6 @@ import com.newsblur.domain.UserDetails;
|
|||
import com.newsblur.fragment.ProfileActivityFragment;
|
||||
import com.newsblur.fragment.ProfileDetailsFragment;
|
||||
import com.newsblur.network.APIManager;
|
||||
import com.newsblur.domain.ActivityDetails;
|
||||
import com.newsblur.network.domain.ActivitiesResponse;
|
||||
import com.newsblur.network.domain.ProfileResponse;
|
||||
import com.newsblur.util.PrefsUtils;
|
||||
|
||||
|
@ -73,7 +71,6 @@ public class Profile extends NbActivity {
|
|||
|
||||
private class LoadUserTask extends AsyncTask<Void, Void, Void> {
|
||||
private UserDetails user;
|
||||
private ActivityDetails[] activities;
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
|
@ -88,7 +85,6 @@ public class Profile extends NbActivity {
|
|||
String intentUserId = getIntent().getStringExtra(USER_ID);
|
||||
profileResponse = apiManager.getUser(intentUserId);
|
||||
user = profileResponse.user;
|
||||
activities = apiManager.getActivities(intentUserId).activities;
|
||||
} else {
|
||||
apiManager.updateUserProfile();
|
||||
user = PrefsUtils.getUserDetails(Profile.this);
|
||||
|
@ -96,10 +92,6 @@ public class Profile extends NbActivity {
|
|||
// have failed then user.id == null would cause a force close
|
||||
if (user.id != null) {
|
||||
profileResponse = apiManager.getUser(user.id);
|
||||
ActivitiesResponse activitiesResponse = apiManager.getActivities(user.id);
|
||||
if (activitiesResponse != null) {
|
||||
activities = activitiesResponse.activities;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
@ -109,10 +101,7 @@ public class Profile extends NbActivity {
|
|||
protected void onPostExecute(Void result) {
|
||||
if (user != null && detailsFragment != null && activitiesFragment != null) {
|
||||
detailsFragment.setUser(Profile.this, user, TextUtils.isEmpty(userId));
|
||||
// activities could be null if no profile response was received
|
||||
if (activities != null) {
|
||||
activitiesFragment.setActivitiesAndUser(Profile.this, activities, user);
|
||||
}
|
||||
activitiesFragment.setUser(Profile.this, user);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,26 +1,33 @@
|
|||
package com.newsblur.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AbsListView;
|
||||
import android.widget.ListView;
|
||||
|
||||
import com.newsblur.R;
|
||||
import com.newsblur.domain.UserDetails;
|
||||
import com.newsblur.domain.ActivityDetails;
|
||||
import com.newsblur.network.APIManager;
|
||||
import com.newsblur.network.domain.ActivitiesResponse;
|
||||
import com.newsblur.view.ActivitiesAdapter;
|
||||
|
||||
public class ProfileActivityFragment extends Fragment {
|
||||
|
||||
private ListView activityList;
|
||||
ActivitiesAdapter adapter;
|
||||
|
||||
private ActivitiesAdapter adapter;
|
||||
private APIManager apiManager;
|
||||
private UserDetails user;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
apiManager = new APIManager(getActivity());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -30,17 +37,89 @@ public class ProfileActivityFragment extends Fragment {
|
|||
if (adapter != null) {
|
||||
displayActivities();
|
||||
}
|
||||
activityList.setOnScrollListener(new EndlessScrollListener());
|
||||
return v;
|
||||
}
|
||||
|
||||
public void setActivitiesAndUser(Context context, final ActivityDetails[] activities, UserDetails user ) {
|
||||
// Set the activities, create the adapter
|
||||
adapter = new ActivitiesAdapter(context, activities, user);
|
||||
public void setUser(Context context, UserDetails user) {
|
||||
// TODO reset the page number in the listener for new user?
|
||||
this.user = user;
|
||||
adapter = new ActivitiesAdapter(context, user);
|
||||
displayActivities();
|
||||
}
|
||||
|
||||
private void displayActivities() {
|
||||
activityList.setAdapter(adapter);
|
||||
loadPage(1);
|
||||
}
|
||||
|
||||
private void loadPage(final int pageNumber) {
|
||||
// TODO progress indicator
|
||||
// TODO pass limit?
|
||||
new AsyncTask<Void, Void, ActivityDetails[]>() {
|
||||
|
||||
@Override
|
||||
protected ActivityDetails[] doInBackground(Void... voids) {
|
||||
ActivitiesResponse activitiesResponse = apiManager.getActivities(user.id, pageNumber);
|
||||
if (activitiesResponse != null) {
|
||||
return activitiesResponse.activities;
|
||||
} else {
|
||||
return new ActivityDetails[0];
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(ActivityDetails[] result) {
|
||||
for (ActivityDetails activity : result) {
|
||||
adapter.add(activity);
|
||||
}
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* Detects when user is close to the end of the current page and starts loading the next page
|
||||
* so the user will not have to wait (that much) for the next entries.
|
||||
*
|
||||
* @author Ognyan Bankov
|
||||
*
|
||||
* https://github.com/ogrebgr/android_volley_examples/blob/master/src/com/github/volley_examples/Act_NetworkListView.java
|
||||
*/
|
||||
public class EndlessScrollListener implements AbsListView.OnScrollListener {
|
||||
// how many entries earlier to start loading next page
|
||||
private int visibleThreshold = 5;
|
||||
private int currentPage = 1;
|
||||
private int previousTotal = 0;
|
||||
private boolean loading = true;
|
||||
|
||||
public EndlessScrollListener() {
|
||||
}
|
||||
public EndlessScrollListener(int visibleThreshold) {
|
||||
this.visibleThreshold = visibleThreshold;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScroll(AbsListView view, int firstVisibleItem,
|
||||
int visibleItemCount, int totalItemCount) {
|
||||
if (loading) {
|
||||
if (totalItemCount > previousTotal) {
|
||||
loading = false;
|
||||
previousTotal = totalItemCount;
|
||||
currentPage++;
|
||||
}
|
||||
}
|
||||
if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
|
||||
// I load the next page of gigs using a background task,
|
||||
// but you can call any function here.
|
||||
loadPage(currentPage);
|
||||
loading = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScrollStateChanged(AbsListView view, int scrollState) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -438,10 +438,11 @@ public class APIManager {
|
|||
}
|
||||
}
|
||||
|
||||
public ActivitiesResponse getActivities(String userId) {
|
||||
public ActivitiesResponse getActivities(String userId, int pageNumber) {
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(APIConstants.PARAMETER_USER_ID, userId);
|
||||
values.put(APIConstants.PARAMETER_LIMIT, "10");
|
||||
values.put(APIConstants.PARAMETER_PAGE_NUMBER, Integer.toString(pageNumber));
|
||||
final APIResponse response = get(APIConstants.URL_USER_ACTIVITIES, values);
|
||||
if (!response.isError()) {
|
||||
ActivitiesResponse activitiesResponse = (ActivitiesResponse) response.getResponse(gson, ActivitiesResponse.class);
|
||||
|
|
|
@ -35,16 +35,12 @@ public class ActivitiesAdapter extends ArrayAdapter<ActivityDetails> {
|
|||
private Context context;
|
||||
private UserDetails currentUserDetails;
|
||||
|
||||
public ActivitiesAdapter(final Context context, final ActivityDetails[] activities, UserDetails user) {
|
||||
public ActivitiesAdapter(final Context context, UserDetails user) {
|
||||
super(context, R.id.row_activity_text);
|
||||
inflater = LayoutInflater.from(context);
|
||||
imageLoader = ((NewsBlurApplication) context.getApplicationContext()).getImageLoader();
|
||||
this.context = context;
|
||||
|
||||
for (ActivityDetails response : activities) {
|
||||
add(response);
|
||||
}
|
||||
|
||||
currentUserDetails = user;
|
||||
|
||||
Resources resources = context.getResources();
|
||||
|
|
Loading…
Add table
Reference in a new issue