Can like posts.

This commit is contained in:
Pierre 2018-04-07 16:42:11 +02:00
parent 98fcec6779
commit 523b30cc90
6 changed files with 178 additions and 13 deletions

View File

@ -0,0 +1,71 @@
package org.communiquons.android.comunic.client.data.likes;
import android.content.Context;
import org.communiquons.android.comunic.client.api.APIRequest;
import org.communiquons.android.comunic.client.api.APIRequestParameters;
import org.communiquons.android.comunic.client.api.APIResponse;
/**
* Likes Helper
*
* @author Pierre HUBERT
* Created by pierre on 4/7/18.
*/
public class LikesHelper {
/**
* The context of the application
*/
private Context mContext;
/**
* Public constructor of the likes helper class
*
* @param context The context of the application
*/
public LikesHelper(Context context){
//Save the context
mContext = context.getApplicationContext();
}
/**
* Update the like other a content
*
* @param type The type of the element
* @param id The ID of the target element
* @param liking New liking status
* @return TRUE for a success / FALSE for a failure
*/
public boolean update(LikesType type, int id, boolean liking){
//Perform an API request
APIRequestParameters params = new APIRequestParameters(mContext, "likes/update");
params.addInt("id", id);
params.addBoolean("like", liking);
//Put the kind of element
switch (type){
case POST:
params.addString("type", "post");
break;
default:
throw new RuntimeException("Unrecognized kind of post !");
}
//Intend to perform the request
try {
APIResponse response = new APIRequest().exec(params);
return response.getResponse_code() == 200;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}

View File

@ -0,0 +1,17 @@
package org.communiquons.android.comunic.client.data.likes;
/**
* Likes types
*
* @author Pierre HUBERT
* Created by pierre on 4/7/18.
*/
public enum LikesType {
/**
* For the posts
*/
POST
}

View File

@ -139,7 +139,7 @@ public class Post {
//Set and get the number of likes other the like
void setNumberLike(int numberLike) {
public void setNumberLike(int numberLike) {
this.numberLike = numberLike;
}
@ -149,7 +149,7 @@ public class Post {
//Set and get the liking state over the post
void setLiking(boolean liking) {
public void setLiking(boolean liking) {
isLiking = liking;
}

View File

@ -166,6 +166,13 @@ public class PostsAdapter extends ArrayAdapter<Post>{
LikeButtonView likeButtonView = convertView.findViewById(R.id.like_button);
likeButtonView.setNumberLikes(post.getNumberLike());
likeButtonView.setIsLiking(post.isLiking());
likeButtonView.setUpdateListener(new LikeButtonView.OnLikeUpdateListener() {
@Override
public void OnLikeUpdate(boolean isLiking) {
//Call listener
mListener.onPostLikeUpdate(post, isLiking);
}
});
//Process post comments
ArrayList<Comment> comments = post.getComments_list();
@ -282,6 +289,14 @@ public class PostsAdapter extends ArrayAdapter<Post>{
*/
void showPostActions(View button, int pos, Post post);
/**
* Handles the update of the likes of a post
*
* @param post The target post
* @param is_liking New liking status
*/
void onPostLikeUpdate(Post post, boolean is_liking);
/**
* Handles the deletion process of a post
*

View File

@ -24,6 +24,8 @@ import org.communiquons.android.comunic.client.data.UsersInfo.GetUsersHelper;
import org.communiquons.android.comunic.client.data.UsersInfo.UserInfo;
import org.communiquons.android.comunic.client.data.comments.Comment;
import org.communiquons.android.comunic.client.data.comments.CommentsHelper;
import org.communiquons.android.comunic.client.data.likes.LikesHelper;
import org.communiquons.android.comunic.client.data.likes.LikesType;
import org.communiquons.android.comunic.client.data.posts.Post;
import org.communiquons.android.comunic.client.data.posts.PostsHelper;
import org.communiquons.android.comunic.client.data.posts.PostsList;
@ -111,6 +113,11 @@ public class PostsListFragment extends Fragment
*/
GetUsersHelper mUserHelper;
/**
* Likes helper
*/
LikesHelper mLikesHelper;
/**
* Set the list of posts of the fragment
*
@ -129,6 +136,23 @@ public class PostsListFragment extends Fragment
this.mUsersInfo = list;
}
@Override
public void onStart() {
super.onStart();
//Create post helper
mPostsHelper = new PostsHelper(getActivity());
//Create comment helper
mCommentsHelper = new CommentsHelper(getActivity());
//Create user helper
mUserHelper = new GetUsersHelper(getActivity(), DatabaseHelper.getInstance(getActivity()));
//Create likes helper
mLikesHelper = new LikesHelper(getActivity());
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
@ -151,15 +175,6 @@ public class PostsListFragment extends Fragment
*/
public void show(){
//Create post helper
mPostsHelper = new PostsHelper(getActivity());
//Create comment helper
mCommentsHelper = new CommentsHelper(getActivity());
//Create user helper
mUserHelper = new GetUsersHelper(getActivity(), DatabaseHelper.getInstance(getActivity()));
//Check if the list of posts is not null
if(mPostsList == null && mUsersInfo == null)
return;
@ -292,6 +307,24 @@ public class PostsListFragment extends Fragment
button.showContextMenu();
}
@Override
public void onPostLikeUpdate(final Post post, final boolean is_liking) {
//Save new post information
post.setNumberLike(post.getNumberLike() + (is_liking ? 1 : -1));
post.setLiking(is_liking);
//Perform the update in the background
new AsyncTask<Void, Void, Boolean>(){
@Override
protected Boolean doInBackground(Void... params) {
return mLikesHelper.update(LikesType.POST, post.getId(), is_liking);
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
@Override
public void deletePost(final int pos) {

View File

@ -4,7 +4,6 @@ import android.content.Context;
import android.support.annotation.AttrRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StyleRes;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
@ -13,7 +12,6 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import org.communiquons.android.comunic.client.R;
import org.communiquons.android.comunic.client.data.utils.StringsUtils;
import org.communiquons.android.comunic.client.data.utils.UiUtils;
/**
@ -50,6 +48,11 @@ public class LikeButtonView extends FrameLayout implements View.OnClickListener
*/
private int numberLikes = 0;
/**
* Like Update listener
*/
private OnLikeUpdateListener mUpdateListener = null;
public LikeButtonView(@NonNull Context context) {
super(context);
initView();
@ -127,6 +130,15 @@ public class LikeButtonView extends FrameLayout implements View.OnClickListener
return mIsLiking;
}
/**
* Set like update listener
*
* @param updateListener The listener for the like update
*/
public void setUpdateListener(OnLikeUpdateListener updateListener) {
this.mUpdateListener = updateListener;
}
/**
* Refresh the like view
*/
@ -163,5 +175,22 @@ public class LikeButtonView extends FrameLayout implements View.OnClickListener
//Refresh display
refresh();
//Call listener (if any)
if(mUpdateListener != null)
mUpdateListener.OnLikeUpdate(mIsLiking);
}
/**
* Likes update listener interface
*/
public interface OnLikeUpdateListener {
/**
* This method is called when an update is done on a like
*
* @param isLiking New liking status
*/
void OnLikeUpdate(boolean isLiking);
}
}