mirror of
				https://github.com/pierre42100/ComunicAndroid
				synced 2025-11-04 11:34:06 +00:00 
			
		
		
		
	Display groups posts
This commit is contained in:
		@@ -125,6 +125,50 @@ public class PostsHelper {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the list of the posts of a group
 | 
			
		||||
     *
 | 
			
		||||
     * @param groupID The ID of the group to get the post from
 | 
			
		||||
     * @return The list of posts / null in case of failure
 | 
			
		||||
     */
 | 
			
		||||
    @Nullable
 | 
			
		||||
    public PostsList get_group(int groupID){
 | 
			
		||||
        return get_group(groupID, -1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the list of the posts of a group
 | 
			
		||||
     *
 | 
			
		||||
     * @param groupID The ID of the group to get the post from
 | 
			
		||||
     * @param from The post to start from (-1 not to specify)
 | 
			
		||||
     * @return The list of posts / null in case of failure
 | 
			
		||||
     */
 | 
			
		||||
    @Nullable
 | 
			
		||||
    public PostsList get_group(int groupID, int from){
 | 
			
		||||
 | 
			
		||||
        //Perform a request on the API
 | 
			
		||||
        APIRequest params = new APIRequest(mContext, "posts/get_group");
 | 
			
		||||
        params.addInt("groupID", groupID);
 | 
			
		||||
 | 
			
		||||
        if(from > -1)
 | 
			
		||||
            params.addInt("startFrom", from);
 | 
			
		||||
 | 
			
		||||
        //Perform the request
 | 
			
		||||
        try {
 | 
			
		||||
 | 
			
		||||
            //Make the request on the API
 | 
			
		||||
            APIResponse response = new APIRequestHelper().exec(params);
 | 
			
		||||
 | 
			
		||||
            //Get the list of posts and process it
 | 
			
		||||
            JSONArray posts = response.getJSONArray();
 | 
			
		||||
            return parse_json_posts_list(posts);
 | 
			
		||||
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the list of latest posts of a user
 | 
			
		||||
     *
 | 
			
		||||
@@ -255,6 +299,10 @@ public class PostsHelper {
 | 
			
		||||
                req.addString("kind-page", "user");
 | 
			
		||||
                break;
 | 
			
		||||
 | 
			
		||||
            case GROUP_PAGE:
 | 
			
		||||
                req.addString("kind-page", "group");
 | 
			
		||||
                break;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                throw new RuntimeException("Unsupported kind of page !");
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -135,4 +135,33 @@ public class GroupInfo {
 | 
			
		||||
                || getMembershipLevel() == GroupsMembershipLevels.MODERATOR
 | 
			
		||||
                || getMembershipLevel() == GroupsMembershipLevels.MEMBER;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check if a user is at least the moderator of a group
 | 
			
		||||
     *
 | 
			
		||||
     * @return TRUE if the user is at least a moderator of the group / FALSE else
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isAtLeastModerator(){
 | 
			
		||||
        return getMembershipLevel() == GroupsMembershipLevels.ADMINISTRATOR
 | 
			
		||||
                || getMembershipLevel() == GroupsMembershipLevels.MODERATOR;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check if the current user can post texts on this group or not
 | 
			
		||||
     *
 | 
			
		||||
     * @return TRUE if the user can posts texts / FALSE else
 | 
			
		||||
     */
 | 
			
		||||
    public boolean canPostTexts(){
 | 
			
		||||
 | 
			
		||||
        //Posting texts on a group requires to be at least a member of it
 | 
			
		||||
        if(!isAtLeastMember())
 | 
			
		||||
            return false;
 | 
			
		||||
 | 
			
		||||
        if(getPostCreationLevel() == GroupPostsCreationLevel.MODERATORS && !isAtLeastModerator())
 | 
			
		||||
            return false;
 | 
			
		||||
 | 
			
		||||
        //If we get there, the user can certainly create posts
 | 
			
		||||
        //on the group
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,41 @@
 | 
			
		||||
package org.communiquons.android.comunic.client.ui.asynctasks;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
 | 
			
		||||
import org.communiquons.android.comunic.client.data.arrays.PostsList;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.helpers.PostsHelper;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get group posts safe async task
 | 
			
		||||
 *
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
public class GetGroupPostsTask extends SafeAsyncTask<Integer, Void, PostsList> {
 | 
			
		||||
 | 
			
		||||
    public GetGroupPostsTask(Context context) {
 | 
			
		||||
        super(context);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected PostsList doInBackground(Integer... integers) {
 | 
			
		||||
        PostsHelper helper = new PostsHelper(getContext());
 | 
			
		||||
        PostsList list;
 | 
			
		||||
 | 
			
		||||
        //Check if a start point has been specified
 | 
			
		||||
        if(integers.length == 1)
 | 
			
		||||
            list = helper.get_group(integers[0]);
 | 
			
		||||
        else
 | 
			
		||||
            list = helper.get_group(integers[0], integers[1]);
 | 
			
		||||
 | 
			
		||||
        //Check if the list of posts could not be retrieved
 | 
			
		||||
        if(list == null)
 | 
			
		||||
            return null;
 | 
			
		||||
 | 
			
		||||
        //Try to load related information
 | 
			
		||||
        if(!helper.load_related_information(list))
 | 
			
		||||
            return null;
 | 
			
		||||
 | 
			
		||||
        //Success. Now return information
 | 
			
		||||
        return list;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -56,6 +56,11 @@ public class PostsCreateFormFragment extends Fragment {
 | 
			
		||||
     */
 | 
			
		||||
    public static final int PAGE_TYPE_USER = 1;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Page type : group page
 | 
			
		||||
     */
 | 
			
		||||
    public static final int PAGE_TYPE_GROUP = 2;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * On post created interface
 | 
			
		||||
     */
 | 
			
		||||
@@ -249,6 +254,9 @@ public class PostsCreateFormFragment extends Fragment {
 | 
			
		||||
        switch (getArguments().getInt(PAGE_TYPE_ARG)){
 | 
			
		||||
            case PAGE_TYPE_USER:
 | 
			
		||||
                post.setPage_type(PageType.USER_PAGE);
 | 
			
		||||
 | 
			
		||||
            case PAGE_TYPE_GROUP:
 | 
			
		||||
                post.setPage_type(PageType.GROUP_PAGE);
 | 
			
		||||
        }
 | 
			
		||||
        post.setPage_id(getArguments().getInt(PAGE_ID_ARG));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@ import android.os.AsyncTask;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import android.support.annotation.NonNull;
 | 
			
		||||
import android.support.annotation.Nullable;
 | 
			
		||||
import android.support.v4.app.FragmentTransaction;
 | 
			
		||||
import android.view.LayoutInflater;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
import android.view.ViewGroup;
 | 
			
		||||
@@ -140,9 +141,27 @@ public class GroupPageMainFragment extends AbstractGroupFragment {
 | 
			
		||||
     */
 | 
			
		||||
    private void applyGroupInfo(){
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //Apply main group information
 | 
			
		||||
        mGroupName.setText(mAdvancedGroupInfo.getDisplayName());
 | 
			
		||||
        mGroupImage.setGroup(mAdvancedGroupInfo);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //Show posts list
 | 
			
		||||
        Bundle args = new Bundle();
 | 
			
		||||
        args.putInt(GroupsPostsFragment.ARGUMENT_GROUP_ID, mGroupID);
 | 
			
		||||
        args.putBoolean(GroupsPostsFragment.ARGUMENT_CAN_CREATE_GROUPS,
 | 
			
		||||
                mAdvancedGroupInfo.canPostTexts());
 | 
			
		||||
 | 
			
		||||
        GroupsPostsFragment fragment = new GroupsPostsFragment();
 | 
			
		||||
        fragment.setArguments(args);
 | 
			
		||||
 | 
			
		||||
        FragmentTransaction transaction
 | 
			
		||||
                = Objects.requireNonNull(getActivity()).getSupportFragmentManager().beginTransaction();
 | 
			
		||||
        transaction.replace(R.id.postsListTarget, fragment);
 | 
			
		||||
        transaction.commit();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,92 @@
 | 
			
		||||
package org.communiquons.android.comunic.client.ui.fragments.groups;
 | 
			
		||||
 | 
			
		||||
import android.os.AsyncTask;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import android.support.annotation.NonNull;
 | 
			
		||||
import android.support.annotation.Nullable;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
 | 
			
		||||
import org.communiquons.android.comunic.client.data.arrays.PostsList;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.asynctasks.GetGroupPostsTask;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.asynctasks.GetLatestPostsTask;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.asynctasks.SafeAsyncTask;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.fragments.AbstractPostsListFragment;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.fragments.PostsCreateFormFragment;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Group posts fragment
 | 
			
		||||
 *
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
public class GroupsPostsFragment extends AbstractPostsListFragment {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Debug tag
 | 
			
		||||
     */
 | 
			
		||||
    private static final String TAG = GroupsPostsFragment.class.getSimpleName();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Bundle arguments
 | 
			
		||||
     */
 | 
			
		||||
    public static final String ARGUMENT_GROUP_ID = "group_id";
 | 
			
		||||
    public static final String ARGUMENT_CAN_CREATE_GROUPS = "can_create_posts";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The ID of the current group
 | 
			
		||||
     */
 | 
			
		||||
    private int mGroupID;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Whether posts can be created by the user
 | 
			
		||||
     */
 | 
			
		||||
    private boolean mCanCreatePosts;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onCreate(@Nullable Bundle savedInstanceState) {
 | 
			
		||||
        super.onCreate(savedInstanceState);
 | 
			
		||||
 | 
			
		||||
        //Get target group ID
 | 
			
		||||
        assert getArguments() != null;
 | 
			
		||||
        mGroupID = getArguments().getInt(ARGUMENT_GROUP_ID);
 | 
			
		||||
        mCanCreatePosts = getArguments().getBoolean(ARGUMENT_CAN_CREATE_GROUPS);
 | 
			
		||||
 | 
			
		||||
        setDisplayPostsTarget(false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
 | 
			
		||||
        super.onViewCreated(view, savedInstanceState);
 | 
			
		||||
 | 
			
		||||
        enablePostFormFragment(mCanCreatePosts);
 | 
			
		||||
        if(mCanCreatePosts)
 | 
			
		||||
            init_create_post_fragment(PostsCreateFormFragment.PAGE_TYPE_GROUP, mGroupID);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onLoadPosts() {
 | 
			
		||||
        loadPosts(-1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onLoadMorePosts(int last_post_id) {
 | 
			
		||||
        loadPosts(last_post_id-1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Load a list of posts
 | 
			
		||||
     *
 | 
			
		||||
     * @param last_post_id The id of latest post to start from. Set -1 to get the latest posts
 | 
			
		||||
     */
 | 
			
		||||
    private void loadPosts(int last_post_id){
 | 
			
		||||
        getTasksManager().unsetSpecificTasks(GetLatestPostsTask.class);
 | 
			
		||||
        GetGroupPostsTask task = new GetGroupPostsTask(getActivity());
 | 
			
		||||
        task.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<PostsList>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void OnPostExecute(PostsList posts) {
 | 
			
		||||
                onGotNewPosts(posts);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, mGroupID, last_post_id);
 | 
			
		||||
        getTasksManager().addTask(task);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -5,8 +5,8 @@
 | 
			
		||||
    android:layout_height="match_parent"
 | 
			
		||||
    xmlns:tools="http://schemas.android.com/tools">
 | 
			
		||||
 | 
			
		||||
    <android.support.v7.widget.RecyclerView
 | 
			
		||||
        android:id="@+id/postsList"
 | 
			
		||||
    <FrameLayout
 | 
			
		||||
        android:id="@+id/postsListTarget"
 | 
			
		||||
        android:layout_width="match_parent"
 | 
			
		||||
        android:layout_height="0dp"
 | 
			
		||||
        android:layout_marginBottom="8dp"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user