mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-11-27 15:59:29 +00:00
Made all fragments that display posts extends AbstractPostsListFragment
This commit is contained in:
parent
cf763ccb18
commit
ff8f791f1e
@ -4,9 +4,11 @@ import android.app.AlertDialog;
|
|||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.CallSuper;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.app.FragmentTransaction;
|
||||||
import android.support.v7.widget.DividerItemDecoration;
|
import android.support.v7.widget.DividerItemDecoration;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
@ -16,7 +18,11 @@ import android.view.MenuInflater;
|
|||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.communiquons.android.comunic.client.R;
|
import org.communiquons.android.comunic.client.R;
|
||||||
@ -33,13 +39,13 @@ import org.communiquons.android.comunic.client.data.models.UserInfo;
|
|||||||
import org.communiquons.android.comunic.client.data.utils.AccountUtils;
|
import org.communiquons.android.comunic.client.data.utils.AccountUtils;
|
||||||
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.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.ScrollRecyclerView;
|
import org.communiquons.android.comunic.client.ui.views.ScrollRecyclerView;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Posts list fragment
|
* Posts list fragment
|
||||||
@ -50,8 +56,8 @@ import java.util.ArrayList;
|
|||||||
* Created by pierre on 3/18/18.
|
* Created by pierre on 3/18/18.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class PostsListFragment extends Fragment
|
abstract class AbstractPostsListFragment extends Fragment
|
||||||
implements onPostUpdateListener, OnScrollChangeDetectListener {
|
implements onPostUpdateListener, OnScrollChangeDetectListener, PostsCreateFormFragment.OnPostCreated {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Menu action : no action
|
* Menu action : no action
|
||||||
@ -86,51 +92,80 @@ public class PostsListFragment extends Fragment
|
|||||||
/**
|
/**
|
||||||
* The list of posts
|
* The list of posts
|
||||||
*/
|
*/
|
||||||
PostsList mPostsList;
|
private PostsList mPostsList;
|
||||||
|
|
||||||
/**
|
|
||||||
* Events listener
|
|
||||||
*/
|
|
||||||
private OnPostListFragmentsUpdateListener onPostListFragmentsUpdateListener = null;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Post adapter
|
* Post adapter
|
||||||
*/
|
*/
|
||||||
PostsAdapter mPostsAdapter;
|
private PostsAdapter mPostsAdapter;
|
||||||
|
|
||||||
/**
|
|
||||||
* The list of posts
|
|
||||||
*/
|
|
||||||
ScrollRecyclerView mRecyclerView;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Posts helper
|
* Posts helper
|
||||||
*/
|
*/
|
||||||
PostsHelper mPostsHelper;
|
private PostsHelper mPostsHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Comments helper
|
* Comments helper
|
||||||
*/
|
*/
|
||||||
CommentsHelper mCommentsHelper;
|
private CommentsHelper mCommentsHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Users helper
|
* Users helper
|
||||||
*/
|
*/
|
||||||
GetUsersHelper mUserHelper;
|
private GetUsersHelper mUserHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Likes helper
|
* Likes helper
|
||||||
*/
|
*/
|
||||||
LikesHelper mLikesHelper;
|
private LikesHelper mLikesHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the list of posts of the fragment
|
* Views
|
||||||
*
|
|
||||||
* @param list The list of post
|
|
||||||
*/
|
*/
|
||||||
public void setPostsList(PostsList list) {
|
private ScrollRecyclerView mRecyclerView;
|
||||||
this.mPostsList = list;
|
private ProgressBar mProgressBar;
|
||||||
mPostsAdapter = null;
|
private Button mCreatePostButton;
|
||||||
|
private FrameLayout mCreatePostLayout;
|
||||||
|
private TextView mNoPostsNotice;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Arguments used to create post form
|
||||||
|
*/
|
||||||
|
Bundle mCreateFormArgs;
|
||||||
|
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
return inflater.inflate(R.layout.fragment_postslist, container, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@CallSuper
|
||||||
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||||
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
|
//Get views
|
||||||
|
mRecyclerView = view.findViewById(R.id.posts_list);
|
||||||
|
mProgressBar = view.findViewById(R.id.progressBar);
|
||||||
|
mCreatePostButton = view.findViewById(R.id.create_post_btn);
|
||||||
|
mCreatePostLayout = view.findViewById(R.id.create_post_form);
|
||||||
|
mNoPostsNotice = view.findViewById(R.id.no_post_notice);
|
||||||
|
|
||||||
|
//Setup posts list
|
||||||
|
mRecyclerView.setOnScrollChangeDetectListener(this);
|
||||||
|
mRecyclerView.addItemDecoration(new DividerItemDecoration(mRecyclerView.getContext(),
|
||||||
|
DividerItemDecoration.VERTICAL));
|
||||||
|
|
||||||
|
mCreatePostButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
setPostFormVisibility(mCreatePostLayout.getVisibility() != View.VISIBLE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
enablePostFormFragment(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -148,32 +183,103 @@ public class PostsListFragment extends Fragment
|
|||||||
|
|
||||||
//Create likes helper
|
//Create likes helper
|
||||||
mLikesHelper = new LikesHelper(getActivity());
|
mLikesHelper = new LikesHelper(getActivity());
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
|
|
||||||
return inflater.inflate(R.layout.fragment_postslist, container, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
public void onResume() {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onResume();
|
||||||
|
|
||||||
//Get the list view
|
if(mPostsList == null) {
|
||||||
mRecyclerView = view.findViewById(R.id.posts_list);
|
setProgressBarVisibility(true);
|
||||||
mRecyclerView.setOnScrollChangeDetectListener(this);
|
setNoPostsNoticeVisibility(false);
|
||||||
mRecyclerView.addItemDecoration(new DividerItemDecoration(mRecyclerView.getContext(),
|
onLoadPosts();
|
||||||
DividerItemDecoration.VERTICAL));
|
}
|
||||||
|
else{
|
||||||
|
setPostsList(getPostsList());
|
||||||
|
show_posts();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Show the posts
|
/**
|
||||||
show();
|
* Set the list of posts of the fragment
|
||||||
|
*
|
||||||
|
* @param list The list of post
|
||||||
|
*/
|
||||||
|
protected void setPostsList(PostsList list) {
|
||||||
|
this.mPostsList = list;
|
||||||
|
mPostsAdapter = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current list of posts
|
||||||
|
*
|
||||||
|
* @return The current list of post / null if none
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
protected PostsList getPostsList(){
|
||||||
|
return this.mPostsList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a PostList has been set or not
|
||||||
|
*
|
||||||
|
* @return True if a list has been set / FALSE else
|
||||||
|
*/
|
||||||
|
protected boolean hasPostsList(){
|
||||||
|
return this.mPostsList != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load posts
|
||||||
|
*/
|
||||||
|
public abstract void onLoadPosts();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load more posts
|
||||||
|
*
|
||||||
|
* @param last_post_id The ID of the last post in the list
|
||||||
|
*/
|
||||||
|
public abstract void onLoadMorePosts(int last_post_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is triggered when we have got a new list of posts to apply
|
||||||
|
*
|
||||||
|
* @param list The list
|
||||||
|
*/
|
||||||
|
@CallSuper
|
||||||
|
protected void onGotNewPosts(@Nullable PostsList list){
|
||||||
|
|
||||||
|
setProgressBarVisibility(false);
|
||||||
|
|
||||||
|
if(getActivity() == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(list == null){
|
||||||
|
Toast.makeText(getActivity(), R.string.err_get_posts_list, Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!list.hasUsersInfo()){
|
||||||
|
Toast.makeText(getActivity(), R.string.err_get_user_info, Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mPostsList == null)
|
||||||
|
mPostsList = list;
|
||||||
|
else {
|
||||||
|
//Merge posts list
|
||||||
|
mPostsList.addAll(list);
|
||||||
|
Objects.requireNonNull(mPostsList.getUsersInfo()).putAll(list.getUsersInfo());
|
||||||
|
}
|
||||||
|
|
||||||
|
show_posts();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display the list of posts
|
* Display the list of posts
|
||||||
*/
|
*/
|
||||||
public void show(){
|
public void show_posts(){
|
||||||
|
|
||||||
//Check if the view has not been created yet...
|
//Check if the view has not been created yet...
|
||||||
if(getView() == null)
|
if(getView() == null)
|
||||||
@ -195,8 +301,126 @@ public class PostsListFragment extends Fragment
|
|||||||
//Notify data set update
|
//Notify data set update
|
||||||
mPostsAdapter.notifyDataSetChanged();
|
mPostsAdapter.notifyDataSetChanged();
|
||||||
|
|
||||||
|
//Update no post notice visibility
|
||||||
|
setProgressBarVisibility(false);
|
||||||
|
setNoPostsNoticeVisibility(mPostsList.size() == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the ID of the last post in the list
|
||||||
|
*
|
||||||
|
* @return The ID of the last post in the list / -1 in case of failure
|
||||||
|
*/
|
||||||
|
public int getLastPostID(){
|
||||||
|
if(!hasPostsList())
|
||||||
|
return -1;
|
||||||
|
if(getPostsList().size() < 1)
|
||||||
|
return -1;
|
||||||
|
return getPostsList().get(getPostsList().size() - 1).getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReachTop() {
|
||||||
|
//Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReachBottom() {
|
||||||
|
if(hasPostsList() && getPostsList().size() > 0)
|
||||||
|
onLoadMorePosts(getLastPostID());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected void setProgressBarVisibility(boolean visible){
|
||||||
|
mProgressBar.setVisibility(visible ? View.VISIBLE : View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setNoPostsNoticeVisibility(boolean visible){
|
||||||
|
mNoPostsNotice.setVisibility(visible ? View.VISIBLE : View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Posts form
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify whether post form should be enabled or not
|
||||||
|
*
|
||||||
|
* @param enable TRUE to enable / FALSE else
|
||||||
|
*/
|
||||||
|
protected void enablePostFormFragment(boolean enable){
|
||||||
|
mCreatePostButton.setVisibility(enable ? View.VISIBLE : View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize posts fragment
|
||||||
|
*
|
||||||
|
* @param page_type The type of the page
|
||||||
|
* @param page_id The ID of the page
|
||||||
|
*/
|
||||||
|
protected void init_create_post_fragment(int page_type, int page_id){
|
||||||
|
|
||||||
|
//Can not perform a transaction if the state has been saved
|
||||||
|
if(isStateSaved())
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Create bundle
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putInt(PostsCreateFormFragment.PAGE_TYPE_ARG, page_type);
|
||||||
|
args.putInt(PostsCreateFormFragment.PAGE_ID_ARG, page_id);
|
||||||
|
mCreateFormArgs = new Bundle(args);
|
||||||
|
|
||||||
|
//Create fragment
|
||||||
|
PostsCreateFormFragment fragment = new PostsCreateFormFragment();
|
||||||
|
fragment.setArguments(args);
|
||||||
|
fragment.setOnPostCreatedListener(this);
|
||||||
|
|
||||||
|
//Perform transaction
|
||||||
|
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
|
||||||
|
transaction.replace(R.id.create_post_form, fragment);
|
||||||
|
transaction.commit();
|
||||||
|
|
||||||
|
//Hide the post form by default
|
||||||
|
setPostFormVisibility(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set post form visibility
|
||||||
|
*/
|
||||||
|
protected void setPostFormVisibility(boolean visible){
|
||||||
|
mCreatePostLayout.setVisibility(visible ? View.VISIBLE : View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPostCreated(Post post) {
|
||||||
|
init_create_post_fragment(mCreateFormArgs.getInt(PostsCreateFormFragment.PAGE_TYPE_ARG),
|
||||||
|
mCreateFormArgs.getInt(PostsCreateFormFragment.PAGE_ID_ARG));
|
||||||
|
setPostsList(null);
|
||||||
|
setProgressBarVisibility(true);
|
||||||
|
setNoPostsNoticeVisibility(false);
|
||||||
|
onLoadPosts();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Posts actions
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateComment(int pos, final View button, final Post post,
|
public void onCreateComment(int pos, final View button, final Post post,
|
||||||
final EditCommentContentView input) {
|
final EditCommentContentView input) {
|
||||||
@ -673,27 +897,4 @@ 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();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,28 +1,14 @@
|
|||||||
package org.communiquons.android.comunic.client.ui.fragments;
|
package org.communiquons.android.comunic.client.ui.fragments;
|
||||||
|
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
|
||||||
import android.support.annotation.NonNull;
|
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.support.v4.app.FragmentTransaction;
|
|
||||||
import android.util.ArrayMap;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.ProgressBar;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.communiquons.android.comunic.client.R;
|
import org.communiquons.android.comunic.client.R;
|
||||||
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.asynctasks.SafeAsyncTask;
|
import org.communiquons.android.comunic.client.data.asynctasks.SafeAsyncTask;
|
||||||
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.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.asynctasks.GetLatestPostsTask;
|
import org.communiquons.android.comunic.client.ui.asynctasks.GetLatestPostsTask;
|
||||||
import org.communiquons.android.comunic.client.ui.listeners.OnPostListFragmentsUpdateListener;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Latest posts fragment
|
* Latest posts fragment
|
||||||
@ -31,55 +17,18 @@ import org.communiquons.android.comunic.client.ui.listeners.OnPostListFragmentsU
|
|||||||
* Created by pierre on 5/10/18.
|
* Created by pierre on 5/10/18.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class LatestPostsFragment extends Fragment
|
public class LatestPostsFragment extends AbstractPostsListFragment {
|
||||||
implements OnPostListFragmentsUpdateListener {
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Debug tag
|
* Debug tag
|
||||||
*/
|
*/
|
||||||
private static final String TAG = "LatestPostsFragment";
|
private static final String TAG = "LatestPostsFragment";
|
||||||
|
|
||||||
/**
|
|
||||||
* The list of posts
|
|
||||||
*/
|
|
||||||
PostsList mPostsList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fragment that displays the list of posts
|
|
||||||
*/
|
|
||||||
private PostsListFragment mPostsListFragment;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load posts task
|
* Load posts task
|
||||||
*/
|
*/
|
||||||
private GetLatestPostsTask mGetLatestPostsTask;
|
private GetLatestPostsTask mGetLatestPostsTask;
|
||||||
|
|
||||||
/**
|
|
||||||
* Loading progress bar
|
|
||||||
*/
|
|
||||||
ProgressBar mProgressBar;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* No posts notice
|
|
||||||
*/
|
|
||||||
TextView mNoPostNotice;
|
|
||||||
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
|
|
||||||
return inflater.inflate(R.layout.fragment_latest_posts, container, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
|
||||||
super.onViewCreated(view, savedInstanceState);
|
|
||||||
|
|
||||||
//Get some of the views
|
|
||||||
mProgressBar = view.findViewById(R.id.loading_progress);
|
|
||||||
mNoPostNotice = view.findViewById(R.id.no_post_notice);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
@ -87,28 +36,14 @@ public class LatestPostsFragment extends Fragment
|
|||||||
//Update dock and activity title
|
//Update dock and activity title
|
||||||
getActivity().setTitle(R.string.fragment_latestposts_title);
|
getActivity().setTitle(R.string.fragment_latestposts_title);
|
||||||
MainActivity.SetNavbarSelectedOption(getActivity(), R.id.action_latest_posts);
|
MainActivity.SetNavbarSelectedOption(getActivity(), R.id.action_latest_posts);
|
||||||
|
|
||||||
//Refresh the list of posts of the user
|
|
||||||
if(mPostsList == null)
|
|
||||||
refresh_posts_list();
|
|
||||||
else {
|
|
||||||
mPostsListFragment = null;
|
|
||||||
show_posts_list();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStop() {
|
public void onStop() {
|
||||||
super.onStop();
|
super.onStop();
|
||||||
|
|
||||||
unset_all_load_tasks();
|
unset_all_load_tasks();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSaveInstanceState(@NonNull Bundle outState) {
|
|
||||||
super.onSaveInstanceState(outState);
|
|
||||||
unset_all_load_tasks();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unset all pending load tasks
|
* Unset all pending load tasks
|
||||||
@ -132,36 +67,53 @@ public class LatestPostsFragment extends Fragment
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Refresh the list of posts of the user
|
public void onLoadPosts() {
|
||||||
*/
|
|
||||||
private void refresh_posts_list(){
|
|
||||||
|
|
||||||
//Show progress bar / hide no posts notice
|
|
||||||
toggleLoadingBarVisibility(true);
|
|
||||||
toggleNoPostNoticeVisibility(false);
|
|
||||||
|
|
||||||
//Get the list of latest posts
|
//Get the list of latest posts
|
||||||
unset_all_load_tasks();
|
unset_all_load_tasks();
|
||||||
mGetLatestPostsTask = new GetLatestPostsTask(getActivity());
|
mGetLatestPostsTask = new GetLatestPostsTask(getActivity());
|
||||||
mGetLatestPostsTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<PostsList>() {
|
mGetLatestPostsTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<PostsList>() {
|
||||||
@Override
|
@Override
|
||||||
public void OnPostExecute(PostsList posts) {
|
public void OnPostExecute(PostsList posts) {
|
||||||
on_got_new_posts_list(posts);
|
onGotNewPosts(posts);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mGetLatestPostsTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, 0);
|
mGetLatestPostsTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* This function is called when we have got a new post list
|
public void onLoadMorePosts(int last_post_id) {
|
||||||
*
|
|
||||||
* @param list The new list of posts
|
|
||||||
*/
|
|
||||||
private void on_got_new_posts_list(@Nullable PostsList list) {
|
|
||||||
|
|
||||||
//Hide loading bar
|
//Check if post loading is already locked
|
||||||
toggleLoadingBarVisibility(false);
|
if(is_loading_posts())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(!hasPostsList())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(getPostsList().size() == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
setProgressBarVisibility(true);
|
||||||
|
|
||||||
|
//Get the ID of the oldest post to start from
|
||||||
|
int start = last_post_id - 1;
|
||||||
|
|
||||||
|
//Get older posts
|
||||||
|
mGetLatestPostsTask = new GetLatestPostsTask(getActivity());
|
||||||
|
mGetLatestPostsTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<PostsList>() {
|
||||||
|
@Override
|
||||||
|
public void OnPostExecute(PostsList posts) {
|
||||||
|
onGotNewPosts(posts);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mGetLatestPostsTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, start);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onGotNewPosts(@Nullable PostsList list) {
|
||||||
|
|
||||||
|
setProgressBarVisibility(false);
|
||||||
|
|
||||||
//Check for errors
|
//Check for errors
|
||||||
if (list == null) {
|
if (list == null) {
|
||||||
@ -173,91 +125,7 @@ public class LatestPostsFragment extends Fragment
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Save the list of posts
|
super.onGotNewPosts(list);
|
||||||
if (mPostsList == null)
|
|
||||||
mPostsList = list;
|
|
||||||
else {
|
|
||||||
mPostsList.addAll(list);
|
|
||||||
assert mPostsList.getUsersInfo() != null;
|
|
||||||
mPostsList.getUsersInfo().putAll(list.getUsersInfo());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
show_posts_list();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show posts list
|
|
||||||
*/
|
|
||||||
private void show_posts_list(){
|
|
||||||
|
|
||||||
//Hide loading bar
|
|
||||||
toggleLoadingBarVisibility(false);
|
|
||||||
|
|
||||||
if(mPostsListFragment == null){
|
|
||||||
|
|
||||||
//Apply the post fragment
|
|
||||||
mPostsListFragment = new PostsListFragment();
|
|
||||||
mPostsListFragment.setPostsList(mPostsList);
|
|
||||||
mPostsListFragment.setOnPostListFragmentsUpdateListener(this);
|
|
||||||
|
|
||||||
//Create and commit a transaction
|
|
||||||
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
|
|
||||||
transaction.replace(R.id.posts_list_target, mPostsListFragment);
|
|
||||||
transaction.commit();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
//Append the new posts list
|
|
||||||
mPostsListFragment.show();
|
|
||||||
|
|
||||||
//Check if the posts list is empty
|
|
||||||
toggleNoPostNoticeVisibility(mPostsList.size() == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLoadMorePosts() {
|
|
||||||
|
|
||||||
//Check if post loading is already locked
|
|
||||||
if(is_loading_posts())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(mPostsList == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(mPostsList.size() == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
//Display loading bar
|
|
||||||
toggleLoadingBarVisibility(true);
|
|
||||||
|
|
||||||
//Get the ID of the oldest post to start from
|
|
||||||
int start = mPostsList.get(mPostsList.size()-1).getId() - 1;
|
|
||||||
|
|
||||||
//Get older posts
|
|
||||||
mGetLatestPostsTask = new GetLatestPostsTask(getActivity());
|
|
||||||
mGetLatestPostsTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<PostsList>() {
|
|
||||||
@Override
|
|
||||||
public void OnPostExecute(PostsList posts) {
|
|
||||||
on_got_new_posts_list(posts);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
mGetLatestPostsTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, start);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Toggle progress bar visibility
|
|
||||||
*
|
|
||||||
* @param visible Specify whether the progress bar should be visible or not
|
|
||||||
*/
|
|
||||||
private void toggleLoadingBarVisibility(boolean visible){
|
|
||||||
mProgressBar.setVisibility(visible ? View.VISIBLE : View.GONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Toggle no post notice visibility
|
|
||||||
*
|
|
||||||
* @param visible The visibility of the no post notice
|
|
||||||
*/
|
|
||||||
private void toggleNoPostNoticeVisibility(boolean visible){
|
|
||||||
mNoPostNotice.setVisibility(visible ? View.VISIBLE : View.GONE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -2,13 +2,7 @@ package org.communiquons.android.comunic.client.ui.fragments;
|
|||||||
|
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.support.v4.app.FragmentTransaction;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.communiquons.android.comunic.client.R;
|
import org.communiquons.android.comunic.client.R;
|
||||||
@ -25,7 +19,7 @@ import org.communiquons.android.comunic.client.ui.asynctasks.GetSinglePostTask;
|
|||||||
* Created by pierre on 4/12/18.
|
* Created by pierre on 4/12/18.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class SinglePostFragment extends Fragment {
|
public class SinglePostFragment extends AbstractPostsListFragment {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name of the argument that contains the ID of the post to open
|
* The name of the argument that contains the ID of the post to open
|
||||||
@ -37,11 +31,6 @@ public class SinglePostFragment extends Fragment {
|
|||||||
*/
|
*/
|
||||||
private int mPostID = 0;
|
private int mPostID = 0;
|
||||||
|
|
||||||
/**
|
|
||||||
* Post list that contains only a single post
|
|
||||||
*/
|
|
||||||
private PostsList mPostsList;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get single post task
|
* Get single post task
|
||||||
*/
|
*/
|
||||||
@ -52,28 +41,11 @@ public class SinglePostFragment extends Fragment {
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
//Get post ID
|
//Get post ID
|
||||||
|
assert getArguments() != null;
|
||||||
mPostID = getArguments().getInt(ARGUMENT_POST_ID);
|
mPostID = getArguments().getInt(ARGUMENT_POST_ID);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
|
|
||||||
return inflater.inflate(R.layout.fragment_single_post, container, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
|
|
||||||
//Check if the fragment contains information about the post
|
|
||||||
if(mPostsList == null){
|
|
||||||
getPostInfo();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
show_posts();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStop() {
|
public void onStop() {
|
||||||
super.onStop();
|
super.onStop();
|
||||||
@ -85,11 +57,8 @@ public class SinglePostFragment extends Fragment {
|
|||||||
mGetSinglePostTask.setOnPostExecuteListener(null);
|
mGetSinglePostTask.setOnPostExecuteListener(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Get information about the post and its related users
|
public void onLoadPosts() {
|
||||||
*/
|
|
||||||
private void getPostInfo(){
|
|
||||||
|
|
||||||
//Perform the request in the background
|
//Perform the request in the background
|
||||||
unset_all_tasks();
|
unset_all_tasks();
|
||||||
|
|
||||||
@ -97,18 +66,22 @@ public class SinglePostFragment extends Fragment {
|
|||||||
mGetSinglePostTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<PostsList>() {
|
mGetSinglePostTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<PostsList>() {
|
||||||
@Override
|
@Override
|
||||||
public void OnPostExecute(PostsList posts) {
|
public void OnPostExecute(PostsList posts) {
|
||||||
onGotPostInfo(posts);
|
onGotNewPosts(posts);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mGetSinglePostTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, mPostID);
|
mGetSinglePostTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, mPostID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* This method is triggered once we got information about the post
|
public void onLoadMorePosts(int last_post_id) {
|
||||||
*/
|
|
||||||
private void onGotPostInfo(@Nullable PostsList list) {
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onGotNewPosts(@Nullable PostsList list) {
|
||||||
|
|
||||||
|
setProgressBarVisibility(false);
|
||||||
|
|
||||||
//Check if we did not get post information
|
|
||||||
if (list == null) {
|
if (list == null) {
|
||||||
Toast.makeText(getActivity(), R.string.err_get_post_info, Toast.LENGTH_SHORT).show();
|
Toast.makeText(getActivity(), R.string.err_get_post_info, Toast.LENGTH_SHORT).show();
|
||||||
return;
|
return;
|
||||||
@ -120,25 +93,7 @@ public class SinglePostFragment extends Fragment {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mPostsList = list;
|
super.onGotNewPosts(list);
|
||||||
|
|
||||||
show_posts();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Show the list of posts
|
|
||||||
*/
|
|
||||||
private void show_posts(){
|
|
||||||
|
|
||||||
//Apply the post fragment
|
|
||||||
PostsListFragment postsListFragment = new PostsListFragment();
|
|
||||||
postsListFragment.setPostsList(mPostsList);
|
|
||||||
|
|
||||||
//Create and commit a transaction
|
|
||||||
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
|
|
||||||
transaction.replace(R.id.posts_list_target, postsListFragment);
|
|
||||||
transaction.commit();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -4,16 +4,8 @@ import android.os.AsyncTask;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.annotation.UiThread;
|
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.support.v4.app.FragmentTransaction;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.communiquons.android.comunic.client.R;
|
import org.communiquons.android.comunic.client.R;
|
||||||
@ -21,15 +13,13 @@ import org.communiquons.android.comunic.client.data.arrays.PostsList;
|
|||||||
import org.communiquons.android.comunic.client.data.asynctasks.SafeAsyncTask;
|
import org.communiquons.android.comunic.client.data.asynctasks.SafeAsyncTask;
|
||||||
import org.communiquons.android.comunic.client.data.models.Post;
|
import org.communiquons.android.comunic.client.data.models.Post;
|
||||||
import org.communiquons.android.comunic.client.ui.asynctasks.LoadUserPostsTask;
|
import org.communiquons.android.comunic.client.ui.asynctasks.LoadUserPostsTask;
|
||||||
import org.communiquons.android.comunic.client.ui.listeners.OnPostListFragmentsUpdateListener;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User posts fragment
|
* User posts fragment
|
||||||
*
|
*
|
||||||
* @author Pierre HUBERT
|
* @author Pierre HUBERT
|
||||||
*/
|
*/
|
||||||
public class UserPostsFragment extends Fragment
|
public class UserPostsFragment extends AbstractPostsListFragment {
|
||||||
implements PostsCreateFormFragment.OnPostCreated, OnPostListFragmentsUpdateListener {
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bundle arguments
|
* Bundle arguments
|
||||||
@ -47,41 +37,11 @@ public class UserPostsFragment extends Fragment
|
|||||||
*/
|
*/
|
||||||
private boolean mCanPostsText;
|
private boolean mCanPostsText;
|
||||||
|
|
||||||
/**
|
|
||||||
* The list of posts of the user
|
|
||||||
*/
|
|
||||||
private PostsList mPostsList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create post button
|
|
||||||
*/
|
|
||||||
private Button mCreatePostButton;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* No post on user page notice
|
|
||||||
*/
|
|
||||||
private TextView mNoPostNotice;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create post layout
|
|
||||||
*/
|
|
||||||
private FrameLayout mCreatePostLayout;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load user posts task
|
* Load user posts task
|
||||||
*/
|
*/
|
||||||
private LoadUserPostsTask mLoadUserPostsTask;
|
private LoadUserPostsTask mLoadUserPostsTask;
|
||||||
|
|
||||||
/**
|
|
||||||
* Posts list fragment
|
|
||||||
*/
|
|
||||||
private PostsListFragment mPostsListFragment;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Loading bar
|
|
||||||
*/
|
|
||||||
private ProgressBar mProgressBar;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@ -94,41 +54,14 @@ public class UserPostsFragment extends Fragment
|
|||||||
mCanPostsText = bundle.getBoolean(ARGUMENT_CAN_POST_TEXT);
|
mCanPostsText = bundle.getBoolean(ARGUMENT_CAN_POST_TEXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
|
||||||
return inflater.inflate(R.layout.fragment_postswithform, container, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
//Get the views
|
|
||||||
mCreatePostButton = view.findViewById(R.id.create_post_btn);
|
|
||||||
mCreatePostLayout = view.findViewById(R.id.create_posts_form_target);
|
|
||||||
mNoPostNotice = view.findViewById(R.id.no_post_notice);
|
|
||||||
mProgressBar = view.findViewById(R.id.progressBar);
|
|
||||||
|
|
||||||
setNoPostNoticeVisibility(false);
|
|
||||||
|
|
||||||
mCreatePostButton.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
//Invert form visibility
|
|
||||||
setPostFormVisibility(mCreatePostLayout.getVisibility() != View.VISIBLE);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//Add create post fragment, if possible
|
//Add create post fragment, if possible
|
||||||
|
enablePostFormFragment(mCanPostsText);
|
||||||
if(mCanPostsText)
|
if(mCanPostsText)
|
||||||
init_create_post_fragment();
|
init_create_post_fragment(PostsCreateFormFragment.PAGE_TYPE_USER, mUserID);
|
||||||
else
|
|
||||||
mCreatePostButton.setVisibility(View.GONE);
|
|
||||||
|
|
||||||
//Load user posts
|
|
||||||
mPostsList = null;
|
|
||||||
load_posts();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -154,13 +87,10 @@ public class UserPostsFragment extends Fragment
|
|||||||
&& mLoadUserPostsTask.getStatus() != AsyncTask.Status.FINISHED;
|
&& mLoadUserPostsTask.getStatus() != AsyncTask.Status.FINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Load user posts
|
|
||||||
*/
|
|
||||||
private void load_posts(){
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadPosts() {
|
||||||
cancel_load_task();
|
cancel_load_task();
|
||||||
setProgressBarVisibility(true);
|
|
||||||
|
|
||||||
mLoadUserPostsTask = new LoadUserPostsTask(mUserID, getActivity());
|
mLoadUserPostsTask = new LoadUserPostsTask(mUserID, getActivity());
|
||||||
mLoadUserPostsTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<PostsList>() {
|
mLoadUserPostsTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<PostsList>() {
|
||||||
@ -169,132 +99,14 @@ public class UserPostsFragment extends Fragment
|
|||||||
if(getActivity() == null)
|
if(getActivity() == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
apply_posts(posts);
|
onGotNewPosts(posts);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mLoadUserPostsTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
mLoadUserPostsTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Apply the list of posts
|
|
||||||
*/
|
|
||||||
@UiThread
|
|
||||||
private void apply_posts(@Nullable PostsList posts){
|
|
||||||
|
|
||||||
setProgressBarVisibility(false);
|
|
||||||
|
|
||||||
if(isStateSaved())
|
|
||||||
return;
|
|
||||||
|
|
||||||
//Check for errors
|
|
||||||
if(posts == null){
|
|
||||||
Toast.makeText(getActivity(), R.string.err_get_user_posts, Toast.LENGTH_SHORT).show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Check we didn't get user information
|
|
||||||
if(!posts.hasUsersInfo()){
|
|
||||||
Toast.makeText(getActivity(), R.string.err_get_users_info, Toast.LENGTH_SHORT).show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Create fragment if required
|
|
||||||
if(mPostsListFragment == null){
|
|
||||||
mPostsListFragment = new PostsListFragment();
|
|
||||||
mPostsListFragment.setPostsList(mPostsList);
|
|
||||||
mPostsListFragment.setOnPostListFragmentsUpdateListener(this);
|
|
||||||
|
|
||||||
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
|
|
||||||
transaction.replace(R.id.posts_list_target, mPostsListFragment);
|
|
||||||
transaction.commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(mPostsList != null){
|
|
||||||
|
|
||||||
//Merge post information with existing one
|
|
||||||
mPostsList.addAll(posts);
|
|
||||||
assert mPostsList.getUsersInfo() != null;
|
|
||||||
mPostsList.getUsersInfo().putAll(posts.getUsersInfo());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mPostsList = posts;
|
|
||||||
mPostsListFragment.setPostsList(mPostsList);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
mPostsListFragment.show();
|
|
||||||
|
|
||||||
setNoPostNoticeVisibility(mPostsList.size() < 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create and create post fragment
|
|
||||||
*/
|
|
||||||
private void init_create_post_fragment(){
|
|
||||||
|
|
||||||
//Can not perform a transaction if the state has been saved
|
|
||||||
if(isStateSaved())
|
|
||||||
return;
|
|
||||||
|
|
||||||
//Create bundle
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
args.putInt(PostsCreateFormFragment.PAGE_TYPE_ARG, PostsCreateFormFragment.PAGE_TYPE_USER);
|
|
||||||
args.putInt(PostsCreateFormFragment.PAGE_ID_ARG, mUserID);
|
|
||||||
|
|
||||||
//Create fragment
|
|
||||||
PostsCreateFormFragment fragment = new PostsCreateFormFragment();
|
|
||||||
fragment.setArguments(args);
|
|
||||||
fragment.setOnPostCreatedListener(this);
|
|
||||||
|
|
||||||
//Perform transaction
|
|
||||||
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
|
|
||||||
transaction.replace(R.id.create_posts_form_target, fragment);
|
|
||||||
transaction.commit();
|
|
||||||
|
|
||||||
//Hide the post form by default
|
|
||||||
setPostFormVisibility(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update progress bar visibility
|
|
||||||
*
|
|
||||||
* @param visibility TRUE for visible / FALSE else
|
|
||||||
*/
|
|
||||||
private void setProgressBarVisibility(boolean visibility){
|
|
||||||
mProgressBar.setVisibility(visibility ? View.VISIBLE : View.GONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update post creation form visibility
|
|
||||||
*
|
|
||||||
* @param visible New visibility
|
|
||||||
*/
|
|
||||||
private void setPostFormVisibility(boolean visible){
|
|
||||||
mCreatePostLayout.setVisibility(visible ? View.VISIBLE : View.GONE);
|
|
||||||
mCreatePostButton.setActivated(visible);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setNoPostNoticeVisibility(boolean visible){
|
|
||||||
mNoPostNotice.setVisibility(visible ? View.VISIBLE : View.GONE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPostCreated(Post post) {
|
public void onLoadMorePosts(int last_post_id) {
|
||||||
mPostsList = null;
|
|
||||||
load_posts();
|
|
||||||
init_create_post_fragment();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLoadMorePosts() {
|
|
||||||
|
|
||||||
if(mPostsList == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(mPostsList.size() < 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(is_loading_posts())
|
if(is_loading_posts())
|
||||||
return;
|
return;
|
||||||
@ -305,11 +117,31 @@ public class UserPostsFragment extends Fragment
|
|||||||
mLoadUserPostsTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<PostsList>() {
|
mLoadUserPostsTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<PostsList>() {
|
||||||
@Override
|
@Override
|
||||||
public void OnPostExecute(PostsList posts) {
|
public void OnPostExecute(PostsList posts) {
|
||||||
apply_posts(posts);
|
onGotNewPosts(posts);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mLoadUserPostsTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
|
mLoadUserPostsTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
|
||||||
mPostsList.get(mPostsList.size() -1).getId() -1);
|
last_post_id -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onGotNewPosts(@Nullable PostsList list) {
|
||||||
|
|
||||||
|
//Check for errors
|
||||||
|
if(list == null){
|
||||||
|
Toast.makeText(getActivity(), R.string.err_get_user_posts, Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check we didn't get user information
|
||||||
|
if(!list.hasUsersInfo()){
|
||||||
|
Toast.makeText(getActivity(), R.string.err_get_users_info, Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
super.onGotNewPosts(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
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,29 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:orientation="vertical" android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<!-- Loading progress bar -->
|
|
||||||
<ProgressBar
|
|
||||||
android:id="@+id/loading_progress"
|
|
||||||
android:layout_width="50dp"
|
|
||||||
android:layout_height="50dp"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:layout_centerHorizontal="true" />
|
|
||||||
|
|
||||||
<!-- No posts notice -->
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/no_post_notice"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/notice_no_latest_posts"
|
|
||||||
android:layout_centerHorizontal="true"
|
|
||||||
android:layout_marginTop="15dp" />
|
|
||||||
|
|
||||||
<!-- Posts list -->
|
|
||||||
<FrameLayout
|
|
||||||
android:id="@+id/posts_list_target"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" />
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
@ -1,5 +1,58 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<org.communiquons.android.comunic.client.ui.views.ScrollRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
|
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/linearLayout2"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/create_post_btn"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/action_create_post" />
|
||||||
|
|
||||||
|
<!-- Posts form target -->
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/create_post_form"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout="@layout/post_create_form" />
|
||||||
|
|
||||||
|
<!-- No post notice -->
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/no_post_notice"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:text="@string/notice_no_post_yet" />
|
||||||
|
|
||||||
|
<!-- Posts target -->
|
||||||
|
<org.communiquons.android.comunic.client.ui.views.ScrollRecyclerView
|
||||||
android:id="@+id/posts_list"
|
android:id="@+id/posts_list"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progressBar"
|
||||||
|
style="?android:attr/progressBarStyle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/linearLayout2"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</android.support.constraint.ConstraintLayout>
|
@ -1,60 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/linearLayout2"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/create_post_btn"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/action_create_post" />
|
|
||||||
|
|
||||||
<!-- Posts form target -->
|
|
||||||
<FrameLayout
|
|
||||||
android:id="@+id/create_posts_form_target"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout="@layout/post_create_form" />
|
|
||||||
|
|
||||||
<!-- No post notice -->
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/no_post_notice"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
android:text="@string/notice_no_post_user_page" />
|
|
||||||
|
|
||||||
<!-- Posts target -->
|
|
||||||
<FrameLayout
|
|
||||||
android:id="@+id/posts_list_target"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
tools:layout="@layout/fragment_postslist" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<ProgressBar
|
|
||||||
android:id="@+id/progressBar"
|
|
||||||
style="?android:attr/progressBarStyle"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="8dp"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="@+id/linearLayout2"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
|
||||||
|
|
||||||
</android.support.constraint.ConstraintLayout>
|
|
@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:orientation="vertical" android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:id="@+id/posts_list_target"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
@ -265,4 +265,6 @@
|
|||||||
<string name="err_update_conversation_message_content">Could not update conversation message content!</string>
|
<string name="err_update_conversation_message_content">Could not update conversation message content!</string>
|
||||||
<string name="success_update_conversation_message_content">The content of the conversation message has been successfully updated!</string>
|
<string name="success_update_conversation_message_content">The content of the conversation message has been successfully updated!</string>
|
||||||
<string name="err_get_older_posts">Could not get older posts!</string>
|
<string name="err_get_older_posts">Could not get older posts!</string>
|
||||||
|
<string name="err_get_posts_list">Could not get the list of posts!</string>
|
||||||
|
<string name="notice_no_post_yet">There is no post to display here yet.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user