mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-11-23 13:59:29 +00:00
Can get older posts in latest posts fragment.
This commit is contained in:
parent
128b05e3df
commit
3f858b790b
@ -115,9 +115,24 @@ public class PostsHelper {
|
|||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public PostsList get_latest() {
|
public PostsList get_latest() {
|
||||||
|
return get_latest(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the list of latest posts of a user
|
||||||
|
*
|
||||||
|
* @param from The ID of the newest post to start from (-1 to start from the newest post)
|
||||||
|
* @return The list of posts / null in case of failure
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public PostsList get_latest(int from) {
|
||||||
//Perform a request on the API
|
//Perform a request on the API
|
||||||
APIRequest params = new APIRequest(mContext, "posts/get_latest");
|
APIRequest params = new APIRequest(mContext, "posts/get_latest");
|
||||||
|
|
||||||
|
//Check if we have to start from a precise post
|
||||||
|
if(from > 0)
|
||||||
|
params.addInt("startFrom", from);
|
||||||
|
|
||||||
//Perform the request
|
//Perform the request
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ import org.communiquons.android.comunic.client.data.helpers.GetUsersHelper;
|
|||||||
import org.communiquons.android.comunic.client.data.helpers.PostsHelper;
|
import org.communiquons.android.comunic.client.data.helpers.PostsHelper;
|
||||||
import org.communiquons.android.comunic.client.data.models.UserInfo;
|
import org.communiquons.android.comunic.client.data.models.UserInfo;
|
||||||
import org.communiquons.android.comunic.client.ui.activities.MainActivity;
|
import org.communiquons.android.comunic.client.ui.activities.MainActivity;
|
||||||
|
import org.communiquons.android.comunic.client.ui.listeners.OnPostListFragmentsUpdateListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Latest posts fragment
|
* Latest posts fragment
|
||||||
@ -27,7 +28,8 @@ import org.communiquons.android.comunic.client.ui.activities.MainActivity;
|
|||||||
* Created by pierre on 5/10/18.
|
* Created by pierre on 5/10/18.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class LatestPostsFragment extends Fragment {
|
public class LatestPostsFragment extends Fragment
|
||||||
|
implements OnPostListFragmentsUpdateListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Debug tag
|
* Debug tag
|
||||||
@ -54,6 +56,11 @@ public class LatestPostsFragment extends Fragment {
|
|||||||
*/
|
*/
|
||||||
ArrayMap<Integer, UserInfo> mUserInfo;
|
ArrayMap<Integer, UserInfo> mUserInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fragment that displays the list of posts
|
||||||
|
*/
|
||||||
|
private PostsListFragment mPostsListFragment;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loading progress bar
|
* Loading progress bar
|
||||||
*/
|
*/
|
||||||
@ -64,6 +71,11 @@ public class LatestPostsFragment extends Fragment {
|
|||||||
*/
|
*/
|
||||||
TextView mNoPostNotice;
|
TextView mNoPostNotice;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Posts load lock
|
||||||
|
*/
|
||||||
|
private boolean mLoadPostsLock = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
@ -170,13 +182,14 @@ public class LatestPostsFragment extends Fragment {
|
|||||||
|
|
||||||
//Append the new posts list
|
//Append the new posts list
|
||||||
//Apply the post fragment
|
//Apply the post fragment
|
||||||
PostsListFragment postsListFragment = new PostsListFragment();
|
mPostsListFragment = new PostsListFragment();
|
||||||
postsListFragment.setPostsList(mPostsList);
|
mPostsListFragment.setPostsList(mPostsList);
|
||||||
postsListFragment.setUsersInfos(mUserInfo);
|
mPostsListFragment.setUsersInfos(mUserInfo);
|
||||||
|
mPostsListFragment.setOnPostListFragmentsUpdateListener(this);
|
||||||
|
|
||||||
//Create and commit a transaction
|
//Create and commit a transaction
|
||||||
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
|
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
|
||||||
transaction.replace(R.id.posts_list_target, postsListFragment);
|
transaction.replace(R.id.posts_list_target, mPostsListFragment);
|
||||||
transaction.commit();
|
transaction.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,4 +210,79 @@ public class LatestPostsFragment extends Fragment {
|
|||||||
private void toggleNoPostNoticeVisibility(boolean visible){
|
private void toggleNoPostNoticeVisibility(boolean visible){
|
||||||
mNoPostNotice.setVisibility(visible ? View.VISIBLE : View.GONE);
|
mNoPostNotice.setVisibility(visible ? View.VISIBLE : View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadMorePosts() {
|
||||||
|
|
||||||
|
//Check if post loading is already locked
|
||||||
|
if(mLoadPostsLock)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(mPostsList == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(mPostsList.size() == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Display loading bar
|
||||||
|
mLoadPostsLock = true;
|
||||||
|
toggleLoadingBarVisibility(true);
|
||||||
|
|
||||||
|
//Get the ID of the oldest post to start from
|
||||||
|
final int start = mPostsList.get(mPostsList.size()-1).getId() - 1;
|
||||||
|
|
||||||
|
//Get older posts
|
||||||
|
new GetOlderPosts().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, start);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class get and apply older posts
|
||||||
|
*/
|
||||||
|
private class GetOlderPosts extends AsyncTask<Integer, Void, PostsList> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected PostsList doInBackground(Integer... id) {
|
||||||
|
|
||||||
|
//Get the list of older posts
|
||||||
|
PostsList postsList = mPostsHelper.get_latest(id[0]);
|
||||||
|
|
||||||
|
//Check for errors
|
||||||
|
if(postsList == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
//Merge posts list
|
||||||
|
mPostsList.addAll(postsList);
|
||||||
|
|
||||||
|
//Get information about the users
|
||||||
|
ArrayMap<Integer, UserInfo> usersInfo
|
||||||
|
= mUserHelper.getMultiple(mPostsList.getUsersId());
|
||||||
|
|
||||||
|
//Check for errors
|
||||||
|
if(usersInfo == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
//Save new user information
|
||||||
|
mUserInfo = usersInfo;
|
||||||
|
|
||||||
|
return postsList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(PostsList posts) {
|
||||||
|
|
||||||
|
//Check if the activity has been detached
|
||||||
|
if(getActivity() == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Unlock post loading
|
||||||
|
mLoadPostsLock = false;
|
||||||
|
toggleLoadingBarVisibility(false);
|
||||||
|
|
||||||
|
//Apply new posts list
|
||||||
|
mPostsListFragment.setPostsList(mPostsList);
|
||||||
|
mPostsListFragment.setUsersInfos(mUserInfo);
|
||||||
|
mPostsListFragment.show();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@ import android.view.MenuItem;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ListView;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.communiquons.android.comunic.client.R;
|
import org.communiquons.android.comunic.client.R;
|
||||||
@ -32,8 +31,11 @@ import org.communiquons.android.comunic.client.data.helpers.PostsHelper;
|
|||||||
import org.communiquons.android.comunic.client.data.arrays.PostsList;
|
import org.communiquons.android.comunic.client.data.arrays.PostsList;
|
||||||
import org.communiquons.android.comunic.client.data.utils.StringsUtils;
|
import org.communiquons.android.comunic.client.data.utils.StringsUtils;
|
||||||
import org.communiquons.android.comunic.client.ui.adapters.PostsAdapter;
|
import org.communiquons.android.comunic.client.ui.adapters.PostsAdapter;
|
||||||
|
import org.communiquons.android.comunic.client.ui.listeners.OnPostListFragmentsUpdateListener;
|
||||||
|
import org.communiquons.android.comunic.client.ui.listeners.OnScrollChangeDetectListener;
|
||||||
import org.communiquons.android.comunic.client.ui.listeners.onPostUpdateListener;
|
import org.communiquons.android.comunic.client.ui.listeners.onPostUpdateListener;
|
||||||
import org.communiquons.android.comunic.client.ui.views.EditCommentContentView;
|
import org.communiquons.android.comunic.client.ui.views.EditCommentContentView;
|
||||||
|
import org.communiquons.android.comunic.client.ui.views.ScrollListView;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@ -47,7 +49,7 @@ import java.util.ArrayList;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
public class PostsListFragment extends Fragment
|
public class PostsListFragment extends Fragment
|
||||||
implements onPostUpdateListener {
|
implements onPostUpdateListener, OnScrollChangeDetectListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Menu action : no action
|
* Menu action : no action
|
||||||
@ -85,10 +87,15 @@ public class PostsListFragment extends Fragment
|
|||||||
PostsList mPostsList;
|
PostsList mPostsList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Informations about the related users
|
* Information about the related users
|
||||||
*/
|
*/
|
||||||
ArrayMap<Integer, UserInfo> mUsersInfo;
|
ArrayMap<Integer, UserInfo> mUsersInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Events listener
|
||||||
|
*/
|
||||||
|
private OnPostListFragmentsUpdateListener onPostListFragmentsUpdateListener = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Post adapter
|
* Post adapter
|
||||||
*/
|
*/
|
||||||
@ -97,14 +104,13 @@ public class PostsListFragment extends Fragment
|
|||||||
/**
|
/**
|
||||||
* The list of posts
|
* The list of posts
|
||||||
*/
|
*/
|
||||||
ListView mListView;
|
ScrollListView mListView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Posts helper
|
* Posts helper
|
||||||
*/
|
*/
|
||||||
PostsHelper mPostsHelper;
|
PostsHelper mPostsHelper;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Comments helper
|
* Comments helper
|
||||||
*/
|
*/
|
||||||
@ -167,6 +173,7 @@ public class PostsListFragment extends Fragment
|
|||||||
|
|
||||||
//Get the list view
|
//Get the list view
|
||||||
mListView = view.findViewById(R.id.posts_list);
|
mListView = view.findViewById(R.id.posts_list);
|
||||||
|
mListView.setOnScrollChangeDetectListener(this);
|
||||||
|
|
||||||
//Show the posts
|
//Show the posts
|
||||||
show();
|
show();
|
||||||
@ -670,4 +677,27 @@ public class PostsListFragment extends Fragment
|
|||||||
|
|
||||||
return super.onContextItemSelected(item);
|
return super.onContextItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public OnPostListFragmentsUpdateListener getOnPostListFragmentsUpdateListener() {
|
||||||
|
return onPostListFragmentsUpdateListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnPostListFragmentsUpdateListener(
|
||||||
|
OnPostListFragmentsUpdateListener onPostListFragmentsUpdateListener) {
|
||||||
|
this.onPostListFragmentsUpdateListener = onPostListFragmentsUpdateListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReachTop() {
|
||||||
|
//Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReachBottom() {
|
||||||
|
|
||||||
|
//Request more posts
|
||||||
|
if(onPostListFragmentsUpdateListener != null)
|
||||||
|
onPostListFragmentsUpdateListener.onLoadMorePosts();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
package org.communiquons.android.comunic.client.ui.listeners;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Posts list fragment update listener
|
||||||
|
*
|
||||||
|
* @author Pierre HUBERT
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface OnPostListFragmentsUpdateListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is triggered when the user request to load more posts
|
||||||
|
*/
|
||||||
|
void onLoadMorePosts();
|
||||||
|
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<ListView android:id="@+id/posts_list"
|
<org.communiquons.android.comunic.client.ui.views.ScrollListView android:id="@+id/posts_list"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
Loading…
Reference in New Issue
Block a user