Display groups posts

This commit is contained in:
Pierre HUBERT 2018-12-08 21:05:05 +01:00
parent 5ce499f688
commit e111bec5f0
7 changed files with 239 additions and 2 deletions

View File

@ -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 !");
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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));

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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"