mirror of
				https://github.com/pierre42100/ComunicAndroid
				synced 2025-10-31 09:34:47 +00:00 
			
		
		
		
	Display posts list using RecyclerView
This commit is contained in:
		| @@ -0,0 +1,35 @@ | ||||
| package org.communiquons.android.comunic.client.ui.adapters; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.support.v7.widget.RecyclerView; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Base RecyclerView adapter | ||||
|  * | ||||
|  * @author Pierre HUBERT | ||||
|  */ | ||||
| public abstract class BaseRecyclerViewAdapter extends RecyclerView.Adapter { | ||||
|  | ||||
|     private Context mContext; | ||||
|  | ||||
|     /** | ||||
|      * Initialize adapter | ||||
|      * | ||||
|      * @param context Activity context | ||||
|      */ | ||||
|     BaseRecyclerViewAdapter(Context context){ | ||||
|         super(); | ||||
|  | ||||
|         mContext = context; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the activity context | ||||
|      * | ||||
|      * @return The activity contexts | ||||
|      */ | ||||
|     public Context getContext() { | ||||
|         return mContext; | ||||
|     } | ||||
| } | ||||
| @@ -1,35 +1,32 @@ | ||||
| package org.communiquons.android.comunic.client.ui.adapters; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.support.annotation.CallSuper; | ||||
| import android.support.annotation.NonNull; | ||||
| import android.support.annotation.Nullable; | ||||
| import android.support.v7.widget.RecyclerView; | ||||
| import android.util.ArrayMap; | ||||
| import android.util.Log; | ||||
| import android.view.KeyEvent; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.widget.ArrayAdapter; | ||||
| import android.widget.FrameLayout; | ||||
| import android.widget.ImageView; | ||||
| import android.widget.LinearLayout; | ||||
| import android.widget.TextView; | ||||
| import android.widget.Toast; | ||||
|  | ||||
| import org.communiquons.android.comunic.client.R; | ||||
| import org.communiquons.android.comunic.client.data.helpers.ImageLoadHelper; | ||||
| import org.communiquons.android.comunic.client.data.models.UserInfo; | ||||
| import org.communiquons.android.comunic.client.data.arrays.PostsList; | ||||
| import org.communiquons.android.comunic.client.data.models.Comment; | ||||
| import org.communiquons.android.comunic.client.data.models.Post; | ||||
| import org.communiquons.android.comunic.client.data.enums.PostTypes; | ||||
| import org.communiquons.android.comunic.client.data.arrays.PostsList; | ||||
| import org.communiquons.android.comunic.client.data.models.UserInfo; | ||||
| import org.communiquons.android.comunic.client.data.utils.Utilities; | ||||
| import org.communiquons.android.comunic.client.ui.listeners.onPostUpdateListener; | ||||
| import org.communiquons.android.comunic.client.ui.utils.UiUtils; | ||||
| import org.communiquons.android.comunic.client.data.utils.Utilities; | ||||
| import org.communiquons.android.comunic.client.ui.views.EditCommentContentView; | ||||
| import org.communiquons.android.comunic.client.ui.views.EnlargeableWebImageView; | ||||
| import org.communiquons.android.comunic.client.ui.views.LikeButtonView; | ||||
| import org.communiquons.android.comunic.client.ui.views.MovieView; | ||||
| import org.communiquons.android.comunic.client.ui.views.PDFLinkButtonView; | ||||
| import org.communiquons.android.comunic.client.ui.views.WebImageView; | ||||
| import org.communiquons.android.comunic.client.ui.views.WebLinkView; | ||||
| import org.communiquons.android.comunic.client.ui.views.WebUserAccountImage; | ||||
|  | ||||
| @@ -42,22 +39,36 @@ import java.util.ArrayList; | ||||
|  * Created by pierre on 1/21/18. | ||||
|  */ | ||||
|  | ||||
| public class PostsAdapter extends ArrayAdapter<Post>{ | ||||
| public class PostsAdapter extends BaseRecyclerViewAdapter { | ||||
|  | ||||
|     /** | ||||
|      * Debug tag | ||||
|      */ | ||||
|     private static final String TAG = "PostsAdapter"; | ||||
|     private static final String TAG = PostsAdapter.class.getCanonicalName(); | ||||
|  | ||||
|     /** | ||||
|      * View types | ||||
|      */ | ||||
|     private static final int VIEW_TYPE_POST_TEXT = 0; | ||||
|     private static final int VIEW_TYPE_POST_IMAGE = 1; | ||||
|     private static final int VIEW_TYPE_POST_MOVIE = 2; | ||||
|     private static final int VIEW_TYPE_POST_PDF = 3; | ||||
|     private static final int VIEW_TYPE_POST_WEBLINK = 4; | ||||
|  | ||||
|     /** | ||||
|      * Posts list | ||||
|      */ | ||||
|     private PostsList mList; | ||||
|  | ||||
|     /** | ||||
|      * Information about the users | ||||
|      */ | ||||
|     private ArrayMap<Integer, UserInfo> mUsersInfos; | ||||
|     private ArrayMap<Integer, UserInfo> mUsersInfo; | ||||
|  | ||||
|     /** | ||||
|      * Utilities object | ||||
|      */ | ||||
|     private Utilities utils; | ||||
|     private Utilities mUtils; | ||||
|  | ||||
|     /** | ||||
|      * Actions update listener | ||||
| @@ -69,268 +80,354 @@ public class PostsAdapter extends ArrayAdapter<Post>{ | ||||
|      * | ||||
|      * @param context The context of execution of the application | ||||
|      * @param list The list of posts | ||||
|      * @param usersInfos Informations about the user | ||||
|      * @param usersInfo Information about the user | ||||
|      * @param listener Specify the listener to perform callback actions such as create a comment | ||||
|      *                 for example | ||||
|      */ | ||||
|     public PostsAdapter(Context context, PostsList list, ArrayMap<Integer, UserInfo> usersInfos, | ||||
|     public PostsAdapter(Context context, PostsList list, ArrayMap<Integer, UserInfo> usersInfo, | ||||
|                         onPostUpdateListener listener){ | ||||
|         super(context, 0, list); | ||||
|         super(context); | ||||
|  | ||||
|         //Save the users info object | ||||
|         mUsersInfos = usersInfos; | ||||
|         mList = list; | ||||
|         mUsersInfo = usersInfo; | ||||
|  | ||||
|         //Create utilities object | ||||
|         utils = new Utilities(getContext()); | ||||
|         //Utilities | ||||
|         mUtils = new Utilities(getContext()); | ||||
|  | ||||
|         mListener = listener; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int getItemCount() { | ||||
|         return mList.size(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int getItemViewType(int position) { | ||||
|         switch (mList.get(position).getType()){ | ||||
|  | ||||
|             case IMAGE: | ||||
|                 return VIEW_TYPE_POST_IMAGE; | ||||
|  | ||||
|             case PDF: | ||||
|                 return VIEW_TYPE_POST_PDF; | ||||
|  | ||||
|             case WEBLINK: | ||||
|                 return VIEW_TYPE_POST_WEBLINK; | ||||
|  | ||||
|             case MOVIE: | ||||
|                 return VIEW_TYPE_POST_MOVIE; | ||||
|  | ||||
|             case TEXT: | ||||
|             default: | ||||
|                 return VIEW_TYPE_POST_TEXT; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @NonNull | ||||
|     @Override | ||||
|     public View getView(final int position, @Nullable View convertView, | ||||
|                         @NonNull ViewGroup parent) { | ||||
|     public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int type) { | ||||
|  | ||||
|         //Check if the view has to be inflated | ||||
|         if(convertView == null) | ||||
|             convertView = LayoutInflater.from(getContext()) | ||||
|                     .inflate(R.layout.post_item, parent, false); | ||||
|         View view = LayoutInflater.from(getContext()).inflate(R.layout.post_item, viewGroup, | ||||
|                 false); | ||||
|  | ||||
|         //Get information about the post and the user | ||||
|         final Post post = getItem(position); | ||||
|         assert post != null; | ||||
|         UserInfo userInfo = null; | ||||
|         if(mUsersInfos.containsKey(post.getUserID())) | ||||
|             userInfo = mUsersInfos.get(post.getUserID()); | ||||
|         switch (type){ | ||||
|             case VIEW_TYPE_POST_IMAGE: | ||||
|                 return new ImagePostHolder(view); | ||||
|  | ||||
|         //Get the views related to user Information | ||||
|         WebUserAccountImage userAccountImage = convertView.findViewById(R.id.user_account_image); | ||||
|         TextView userAccountName = convertView.findViewById(R.id.user_account_name); | ||||
|             case VIEW_TYPE_POST_PDF: | ||||
|                 return new PDFPostHolder(view); | ||||
|  | ||||
|         //Set user information if available | ||||
|         if(userInfo != null){ | ||||
|             userAccountName.setText(userInfo.getDisplayFullName()); | ||||
|             userAccountImage.setUser(userInfo); | ||||
|             case VIEW_TYPE_POST_WEBLINK: | ||||
|                 return new WebLinkPostHolder(view); | ||||
|  | ||||
|             case VIEW_TYPE_POST_MOVIE: | ||||
|                 return new MoviePostHolder(view); | ||||
|  | ||||
|                 default: | ||||
|                     return new TextPostHolder(view); | ||||
|         } | ||||
|         else { | ||||
|             //Reset user information | ||||
|             userAccountName.setText(""); | ||||
|             userAccountImage.removeUser(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) { | ||||
|         ((TextPostHolder)viewHolder).bind(position); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Text posts holder | ||||
|      */ | ||||
|     private class TextPostHolder extends RecyclerView.ViewHolder { | ||||
|  | ||||
|         private WebUserAccountImage mUserAccountImage; | ||||
|         private TextView mUserAccountName; | ||||
|         private TextView mPostDate; | ||||
|         private TextView mPostVisibility; | ||||
|         private ImageView mPostActions; | ||||
|         private FrameLayout mAdditionnalViews; | ||||
|         private TextView mPostContent; | ||||
|         private LikeButtonView mLikeButton; | ||||
|         private LinearLayout mCommentsList; | ||||
|         private LinearLayout mCreateCommentForm; | ||||
|         private EditCommentContentView mEditCommentContentView; | ||||
|         private ImageView mSendCommentButton; | ||||
|  | ||||
|         TextPostHolder(@NonNull View itemView) { | ||||
|             super(itemView); | ||||
|  | ||||
|             mUserAccountImage = itemView.findViewById(R.id.user_account_image); | ||||
|             mUserAccountName = itemView.findViewById(R.id.user_account_name); | ||||
|             mPostDate = itemView.findViewById(R.id.post_creation_time); | ||||
|             mPostVisibility = itemView.findViewById(R.id.post_visibility); | ||||
|             mPostActions = itemView.findViewById(R.id.post_actions_btn); | ||||
|             mAdditionnalViews = itemView.findViewById(R.id.additional_views); | ||||
|             mPostContent = itemView.findViewById(R.id.post_content); | ||||
|             mLikeButton = itemView.findViewById(R.id.like_button); | ||||
|             mCommentsList = itemView.findViewById(R.id.comments_list); | ||||
|             mCreateCommentForm = itemView.findViewById(R.id.create_comment_form); | ||||
|             mEditCommentContentView = itemView.findViewById(R.id.input_comment_content); | ||||
|             mSendCommentButton = itemView.findViewById(R.id.comment_send_button); | ||||
|         } | ||||
|  | ||||
|  | ||||
|         //Set post creation time | ||||
|         ((TextView) convertView.findViewById(R.id.post_creation_time)).setText(utils. | ||||
|                 timeToString(Utilities.time() - post.getPost_time())); | ||||
|  | ||||
|  | ||||
|         //Set post visibility level | ||||
|         TextView visibilityLevel = convertView.findViewById(R.id.post_visibility); | ||||
|         switch (post.getVisibilityLevel()){ | ||||
|  | ||||
|             case PUBLIC: | ||||
|                 visibilityLevel.setText(R.string.post_visibility_public); | ||||
|                 break; | ||||
|  | ||||
|             case FRIENDS: | ||||
|                 visibilityLevel.setText(R.string.post_visibility_friends); | ||||
|                 break; | ||||
|  | ||||
|             case MEMBERS: | ||||
|                 visibilityLevel.setText(R.string.post_visibility_members); | ||||
|                 break; | ||||
|  | ||||
|             case PRIVATE: | ||||
|             default: | ||||
|                 visibilityLevel.setText(R.string.post_visibility_private); | ||||
|                 break; | ||||
|         Post getPost(int position){ | ||||
|             return mList.get(position); | ||||
|         } | ||||
|  | ||||
|         //Set post actions | ||||
|         convertView.findViewById(R.id.post_actions_btn).setOnClickListener( | ||||
|                 new View.OnClickListener() { | ||||
|             @Override | ||||
|             public void onClick(View v) { | ||||
|                 mListener.showPostActions(v, position, post); | ||||
|         /** | ||||
|          * @return Additional views container | ||||
|          */ | ||||
|         FrameLayout getAdditionnalViewsLayout(){ | ||||
|             return mAdditionnalViews; | ||||
|         } | ||||
|  | ||||
|         @CallSuper | ||||
|         void bind(final int position){ | ||||
|  | ||||
|             Post post = getPost(position); | ||||
|             UserInfo user = null; | ||||
|             if(mUsersInfo.containsKey(post.getUserID())) | ||||
|                 user = mUsersInfo.get(post.getUserID()); | ||||
|  | ||||
|  | ||||
|             //Apply user information | ||||
|             if(user != null){ | ||||
|                 mUserAccountImage.setUser(user); | ||||
|                 mUserAccountName.setText(user.getDisplayFullName()); | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|  | ||||
|         //Set post content | ||||
|         ((TextView) convertView.findViewById(R.id.post_content)).setText(Utilities.prepareStringTextView(post.getContent())); | ||||
|  | ||||
|         //Set post image (if any) | ||||
|         WebImageView postImage = convertView.findViewById(R.id.post_image); | ||||
|         if(post.getType() == PostTypes.IMAGE){ | ||||
|  | ||||
|             //Make image visible | ||||
|             postImage.setVisibility(View.VISIBLE); | ||||
|  | ||||
|             //Load image | ||||
|             postImage.loadURL(post.getFile_path_url()); | ||||
|         } | ||||
|         else { | ||||
|  | ||||
|             //Hide the image | ||||
|             postImage.setVisibility(View.GONE); | ||||
|  | ||||
|             //Remove the image | ||||
|             postImage.removeImage(); | ||||
|  | ||||
|         } | ||||
|  | ||||
|  | ||||
|         //Set post movie (if any) | ||||
|         MovieView movieView = convertView.findViewById(R.id.post_movie); | ||||
|  | ||||
|         if(post.getType() == PostTypes.MOVIE){ | ||||
|             movieView.setVisibility(View.VISIBLE); | ||||
|             movieView.setMovie(post.getMovie()); | ||||
|         } | ||||
|  | ||||
|         else { | ||||
|             movieView.setVisibility(View.GONE); | ||||
|         } | ||||
|  | ||||
|  | ||||
|         //Set post weblink (if any) | ||||
|         WebLinkView webLinkView = convertView.findViewById(R.id.post_web_link); | ||||
|  | ||||
|         if(post.hasWebLink()){ | ||||
|             webLinkView.setVisibility(View.VISIBLE); | ||||
|             webLinkView.setLink(post.getWebLink()); | ||||
|         } | ||||
|         else { | ||||
|             webLinkView.setVisibility(View.GONE); | ||||
|         } | ||||
|  | ||||
|  | ||||
|         //Set post file PDF (if any) | ||||
|         PDFLinkButtonView pdfLinkButtonView = convertView.findViewById(R.id.btn_pdf_link); | ||||
|  | ||||
|         if(post.getType() != PostTypes.PDF) | ||||
|             pdfLinkButtonView.setVisibility(View.GONE); | ||||
|         else { | ||||
|             pdfLinkButtonView.setVisibility(View.VISIBLE); | ||||
|             pdfLinkButtonView.setPDFUrl(post.getFile_path_url()); | ||||
|         } | ||||
|  | ||||
|  | ||||
|         //Set posts likes | ||||
|         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); | ||||
|             else { | ||||
|                 mUserAccountImage.removeUser(); | ||||
|                 mUserAccountName.setText(""); | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|         //Process post comments | ||||
|         ArrayList<Comment> comments = post.getComments_list(); | ||||
|         LinearLayout commentsView = convertView.findViewById(R.id.comments_list); | ||||
|         commentsView.removeAllViews(); | ||||
|         if(comments != null) { | ||||
|  | ||||
|             //Show comments list | ||||
|             convertView.findViewById(R.id.comments_list).setVisibility(View.VISIBLE); | ||||
|             //Post date | ||||
|             mPostDate.setText(mUtils.timeToString(Utilities.time() - post.getPost_time())); | ||||
|  | ||||
|             for (Comment comment : comments) { | ||||
|  | ||||
|                 //Check if the comment has been deleted | ||||
|                 if(comment.isDeleted()) | ||||
|                     continue; //Skip comment | ||||
|             //Display post visibility | ||||
|             switch (post.getVisibilityLevel()){ | ||||
|  | ||||
|                 //Try to find information about the user | ||||
|                 UserInfo commentUser = mUsersInfos.containsKey(comment.getUserID()) ? | ||||
|                         mUsersInfos.get(comment.getUserID()) : null; | ||||
|                 case PUBLIC: | ||||
|                     mPostVisibility.setText(R.string.post_visibility_public); | ||||
|                     break; | ||||
|  | ||||
|                 //Inflate the view | ||||
|                 View commentView = CommentsAdapter.getInflatedView(getContext(), comment, | ||||
|                         mListener, commentUser, commentsView); | ||||
|                 commentsView.addView(commentView); | ||||
|                 case FRIENDS: | ||||
|                     mPostVisibility.setText(R.string.post_visibility_friends); | ||||
|                     break; | ||||
|  | ||||
|                 case MEMBERS: | ||||
|                     mPostVisibility.setText(R.string.post_visibility_members); | ||||
|                     break; | ||||
|  | ||||
|                 case PRIVATE: | ||||
|                 default: | ||||
|                     mPostVisibility.setText(R.string.post_visibility_private); | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|         else { | ||||
|             //Hide comments list | ||||
|             convertView.findViewById(R.id.comments_list).setVisibility(View.GONE); | ||||
|         } | ||||
|  | ||||
|  | ||||
|         //Update comment creation form | ||||
|         View commentCreationForm = convertView.findViewById(R.id.create_comment_form); | ||||
|         EditCommentContentView input_comment = convertView.findViewById(R.id.input_comment_content); | ||||
|         if(comments == null){ | ||||
|             //Set post actions | ||||
|             mPostActions.setOnClickListener(new View.OnClickListener() { | ||||
|                 @Override | ||||
|                 public void onClick(View v) { | ||||
|                     mListener.showPostActions(v, position, getPost(position)); | ||||
|                 } | ||||
|             }); | ||||
|  | ||||
|             //Hide comment creation form | ||||
|             commentCreationForm.setVisibility(View.GONE); | ||||
|  | ||||
|         } | ||||
|         else { | ||||
|             //Set post content | ||||
|             mPostContent.setText(Utilities.prepareStringTextView(post.getContent())); | ||||
|  | ||||
|             //Display comment creation form | ||||
|             commentCreationForm.setVisibility(View.VISIBLE); | ||||
|  | ||||
|             //Make sure the form is correctly set up | ||||
|             if(input_comment.getPostID() != post.getId()){ | ||||
|             //Post likes | ||||
|             mLikeButton.setNumberLikes(post.getNumberLike()); | ||||
|             mLikeButton.setIsLiking(post.isLiking()); | ||||
|             mLikeButton.setUpdateListener(new LikeButtonView.OnLikeUpdateListener() { | ||||
|                 @Override | ||||
|                 public void OnLikeUpdate(boolean isLiking) { | ||||
|                     mListener.onPostLikeUpdate(getPost(position), isLiking); | ||||
|                 } | ||||
|             }); | ||||
|  | ||||
|                 //Reset input comment | ||||
|                 input_comment.setPostID(post.getId()); | ||||
|                 input_comment.setText(""); | ||||
|  | ||||
|                 //Make the send button lives | ||||
|                 final View finalConvertView = convertView; | ||||
|                 convertView.findViewById(R.id.comment_send_button) | ||||
|                         .setOnClickListener(new View.OnClickListener() { | ||||
|                     @Override | ||||
|                     public void onClick(View v) { | ||||
|                         sendComment(position, finalConvertView); | ||||
|                     } | ||||
|                 }); | ||||
|             //Post comments | ||||
|             ArrayList<Comment> comments = post.getComments_list(); | ||||
|             mCommentsList.removeAllViews(); | ||||
|             if(comments != null){ | ||||
|                 //Show list | ||||
|                 mCommentsList.setVisibility(View.VISIBLE); | ||||
|  | ||||
|                 //Make the comment input behaves like the send button when the user hit the | ||||
|                 //enter key | ||||
|                 input_comment.setOnKeyListener(new View.OnKeyListener() { | ||||
|                 for(Comment comment : comments){ | ||||
|  | ||||
|                     if(comment.isDeleted()) | ||||
|                         continue; | ||||
|  | ||||
|                     UserInfo commentUser = mUsersInfo.containsKey(comment.getUserID()) ? | ||||
|                             mUsersInfo.get(comment.getUserID()) : null; | ||||
|  | ||||
|                     View commentView = CommentsAdapter.getInflatedView(getContext(), comment, | ||||
|                             mListener, commentUser, mCommentsList); | ||||
|                     mCommentsList.addView(commentView); | ||||
|  | ||||
|                 } | ||||
|             } | ||||
|             else | ||||
|                 //Hide comments list | ||||
|                 mCommentsList.setVisibility(View.GONE); | ||||
|  | ||||
|  | ||||
|             //Comments creation form | ||||
|             if(comments == null) | ||||
|                 mCreateCommentForm.setVisibility(View.GONE); | ||||
|             else { | ||||
|                 mCreateCommentForm.setVisibility(View.VISIBLE); | ||||
|  | ||||
|                 if(mEditCommentContentView.getPostID() != post.getId()){ | ||||
|  | ||||
|                     mEditCommentContentView.setPostID(post.getId()); | ||||
|                     mEditCommentContentView.setText(""); | ||||
|  | ||||
|                     mSendCommentButton.setOnClickListener(new View.OnClickListener() { | ||||
|                         @Override | ||||
|                         public void onClick(View v) { | ||||
|                             sendComment(); | ||||
|                         } | ||||
|                     }); | ||||
|  | ||||
|                 } | ||||
|  | ||||
|                 mEditCommentContentView.setOnKeyListener(new View.OnKeyListener() { | ||||
|                     @Override | ||||
|                     public boolean onKey(View v, int keyCode, KeyEvent event) { | ||||
|  | ||||
|                         if(event.getAction() == KeyEvent.ACTION_DOWN | ||||
|                                 && keyCode == KeyEvent.KEYCODE_ENTER){ | ||||
|                             sendComment(position, finalConvertView); | ||||
|                         } | ||||
|                                 && keyCode == KeyEvent.KEYCODE_ENTER) | ||||
|                             sendComment(); | ||||
|  | ||||
|                         return false; | ||||
|                     } | ||||
|                 }); | ||||
|  | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return convertView; | ||||
|         private void sendComment(){ | ||||
|             mListener.onCreateComment(getLayoutPosition(), mSendCommentButton, | ||||
|                     getPost(getLayoutPosition()), mEditCommentContentView); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Intend to send a new comment to the server | ||||
|      * | ||||
|      * @param pos The position of the post to update | ||||
|      * @param container The container of the post item | ||||
|      * Image posts holder | ||||
|      */ | ||||
|     private void sendComment(int pos, View container){ | ||||
|     private class ImagePostHolder extends TextPostHolder { | ||||
|  | ||||
|         //Get post information | ||||
|         final Post post = getItem(pos); | ||||
|         if(post==null) | ||||
|             return; | ||||
|         private EnlargeableWebImageView mPostImage; | ||||
|  | ||||
|         //Get view about the comment | ||||
|         final EditCommentContentView commentInput = container.findViewById(R.id.input_comment_content); | ||||
|         final ImageView sendButton = container.findViewById(R.id.comment_send_button); | ||||
|         ImagePostHolder(@NonNull View itemView) { | ||||
|             super(itemView); | ||||
|  | ||||
|         //Call interface | ||||
|         mListener.onCreateComment(pos, sendButton, post, commentInput); | ||||
|             mPostImage = new EnlargeableWebImageView(getContext()); | ||||
|             getAdditionnalViewsLayout().addView(mPostImage, | ||||
|                     new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, | ||||
|                             UiUtils.GetPixel(getContext(), 200))); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
|         void bind(int position) { | ||||
|             super.bind(position); | ||||
|  | ||||
|             mPostImage.loadURL(getPost(position).getFile_path_url()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * PDF posts holder | ||||
|      */ | ||||
|     private class PDFPostHolder extends TextPostHolder { | ||||
|  | ||||
|         private PDFLinkButtonView mPDFLinkButton; | ||||
|  | ||||
|         PDFPostHolder(@NonNull View itemView) { | ||||
|             super(itemView); | ||||
|  | ||||
|             mPDFLinkButton = new PDFLinkButtonView(getContext(), null, R.style.PostPDFButton); | ||||
|             getAdditionnalViewsLayout().addView(mPDFLinkButton); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
|         void bind(int position) { | ||||
|             super.bind(position); | ||||
|  | ||||
|             mPDFLinkButton.setPDFUrl(getPost(position).getFile_path_url()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Web link post holder | ||||
|      */ | ||||
|     private class WebLinkPostHolder extends TextPostHolder { | ||||
|  | ||||
|         private WebLinkView mWebLinkView; | ||||
|  | ||||
|         WebLinkPostHolder(@NonNull View itemView) { | ||||
|             super(itemView); | ||||
|  | ||||
|             mWebLinkView = new WebLinkView(getContext()); | ||||
|             getAdditionnalViewsLayout().addView(mWebLinkView, | ||||
|                     new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, | ||||
|                             ViewGroup.LayoutParams.WRAP_CONTENT | ||||
|             )); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
|         void bind(int position) { | ||||
|             super.bind(position); | ||||
|  | ||||
|             mWebLinkView.setLink(getPost(position).getWebLink()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Movie post holder | ||||
|      */ | ||||
|     private class MoviePostHolder extends TextPostHolder { | ||||
|  | ||||
|         MovieView mMovieView; | ||||
|  | ||||
|         MoviePostHolder(@NonNull View itemView) { | ||||
|             super(itemView); | ||||
|  | ||||
|             mMovieView = new MovieView(getContext(), null, R.style.PostMovie); | ||||
|             getAdditionnalViewsLayout().addView(mMovieView, new FrameLayout.LayoutParams( | ||||
|                     ViewGroup.LayoutParams.MATCH_PARENT, | ||||
|                     UiUtils.GetPixel(getContext(), 200) | ||||
|             )); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
|         void bind(int position) { | ||||
|             super.bind(position); | ||||
|  | ||||
|             mMovieView.setMovie(getPost(position).getMovie()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import android.content.DialogInterface; | ||||
| import android.os.AsyncTask; | ||||
| import android.os.Bundle; | ||||
| import android.support.annotation.Nullable; | ||||
| import android.support.v7.widget.LinearLayoutManager; | ||||
| import android.util.ArrayMap; | ||||
| import android.util.Pair; | ||||
| import android.view.ContextMenu; | ||||
| @@ -36,7 +37,7 @@ import org.communiquons.android.comunic.client.ui.listeners.OnPostListFragmentsU | ||||
| 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.views.EditCommentContentView; | ||||
| import org.communiquons.android.comunic.client.ui.views.ScrollListView; | ||||
| import org.communiquons.android.comunic.client.ui.views.ScrollRecyclerView; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| @@ -105,7 +106,7 @@ public class PostsListFragment extends Fragment | ||||
|     /** | ||||
|      * The list of posts | ||||
|      */ | ||||
|     ScrollListView mListView; | ||||
|     ScrollRecyclerView mRecyclerView; | ||||
|  | ||||
|     /** | ||||
|      * Posts helper | ||||
| @@ -137,7 +138,7 @@ public class PostsListFragment extends Fragment | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set the list of users informations | ||||
|      * Set the list of users information | ||||
|      * | ||||
|      * @param list The list | ||||
|      */ | ||||
| @@ -173,8 +174,8 @@ public class PostsListFragment extends Fragment | ||||
|         super.onViewCreated(view, savedInstanceState); | ||||
|  | ||||
|         //Get the list view | ||||
|         mListView = view.findViewById(R.id.posts_list); | ||||
|         mListView.setOnScrollChangeDetectListener(this); | ||||
|         mRecyclerView = view.findViewById(R.id.posts_list); | ||||
|         mRecyclerView.setOnScrollChangeDetectListener(this); | ||||
|  | ||||
|         //Show the posts | ||||
|         show(); | ||||
| @@ -194,7 +195,8 @@ public class PostsListFragment extends Fragment | ||||
|             mPostsAdapter = new PostsAdapter(getActivity(), mPostsList, mUsersInfo, this); | ||||
|  | ||||
|             //Connect the adapter to the view | ||||
|             mListView.setAdapter(mPostsAdapter); | ||||
|             mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); | ||||
|             mRecyclerView.setAdapter(mPostsAdapter); | ||||
|         } | ||||
|  | ||||
|         //Notify data set update | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import android.app.AlertDialog; | ||||
| import android.content.Context; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.os.Build; | ||||
| import android.util.TypedValue; | ||||
|  | ||||
| import org.communiquons.android.comunic.client.R; | ||||
|  | ||||
| @@ -84,4 +85,15 @@ public class UiUtils { | ||||
|         return builder.show(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the amount of pixel matching to a dp | ||||
|      * | ||||
|      * @param context The context of the activity | ||||
|      * @param dp The number of dp to convert | ||||
|      * @return Matching number of pixel | ||||
|      */ | ||||
|     public static int GetPixel(Context context, int dp){ | ||||
|         return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, | ||||
|                 context.getResources().getDisplayMetrics()); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -5,7 +5,6 @@ import android.support.annotation.NonNull; | ||||
| import android.support.annotation.Nullable; | ||||
| import android.support.v7.widget.RecyclerView; | ||||
| import android.util.AttributeSet; | ||||
| import android.widget.AbsListView; | ||||
|  | ||||
| import org.communiquons.android.comunic.client.ui.listeners.OnScrollChangeDetectListener; | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,5 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <org.communiquons.android.comunic.client.ui.views.ScrollListView android:id="@+id/posts_list" | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android" | ||||
| <org.communiquons.android.comunic.client.ui.views.ScrollRecyclerView xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     android:id="@+id/posts_list" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent" | ||||
|     tools:listitem="@layout/post_item" | ||||
|     xmlns:tools="http://schemas.android.com/tools" /> | ||||
|     android:layout_height="match_parent" /> | ||||
| @@ -3,7 +3,7 @@ | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     style="@style/PostContainer" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent" | ||||
|     android:layout_height="wrap_content" | ||||
|     android:orientation="vertical"> | ||||
|  | ||||
|     <!-- Information about user who created the post --> | ||||
| @@ -59,45 +59,22 @@ | ||||
|             tools:text="Public" /> | ||||
|  | ||||
|         <ImageView | ||||
|             style="@style/PostActionsButton" | ||||
|             android:id="@+id/post_actions_btn" | ||||
|             style="@style/PostActionsButton" | ||||
|             android:layout_width="@dimen/post_options_btn_width" | ||||
|             android:layout_height="@dimen/post_options_btn_height" | ||||
|             android:src="@android:drawable/ic_menu_manage" | ||||
|             android:contentDescription="@string/post_action_btn_description"/> | ||||
|             android:contentDescription="@string/post_action_btn_description" | ||||
|             android:src="@android:drawable/ic_menu_manage" /> | ||||
|  | ||||
|  | ||||
|     </LinearLayout> | ||||
|  | ||||
|     <!-- Post image (if any) --> | ||||
|     <org.communiquons.android.comunic.client.ui.views.EnlargeableWebImageView | ||||
|         android:id="@+id/post_image" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="200dp" | ||||
|         android:src="@drawable/img_placeholder" | ||||
|         android:contentDescription="@string/post_image_description" | ||||
|         android:scaleType="centerInside" /> | ||||
|  | ||||
|     <!-- Post related movie (if any) --> | ||||
|     <org.communiquons.android.comunic.client.ui.views.MovieView | ||||
|         android:id="@+id/post_movie" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="200dp" | ||||
|         style="@style/PostMovie"/> | ||||
|  | ||||
|     <!-- Post Web link (if any) --> | ||||
|     <org.communiquons.android.comunic.client.ui.views.WebLinkView | ||||
|         android:id="@+id/post_web_link" | ||||
|     <!-- Additional views --> | ||||
|     <FrameLayout | ||||
|         android:id="@+id/additional_views" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" /> | ||||
|  | ||||
|     <!-- Related PDF (if any) --> | ||||
|     <org.communiquons.android.comunic.client.ui.views.PDFLinkButtonView | ||||
|         android:id="@+id/btn_pdf_link" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         style="@style/PostPDFButton"/> | ||||
|  | ||||
|     <!-- Post content --> | ||||
|     <TextView | ||||
|         android:id="@+id/post_content" | ||||
| @@ -109,9 +86,9 @@ | ||||
|     <!-- Like button --> | ||||
|     <org.communiquons.android.comunic.client.ui.views.LikeButtonView | ||||
|         android:id="@+id/like_button" | ||||
|         style="@style/PostLikeButton" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         style="@style/PostLikeButton"/> | ||||
|         android:layout_height="wrap_content" /> | ||||
|  | ||||
|     <!-- Post comments --> | ||||
|     <LinearLayout | ||||
| @@ -130,10 +107,10 @@ | ||||
|         <!-- Comment hint --> | ||||
|         <org.communiquons.android.comunic.client.ui.views.EditCommentContentView | ||||
|             android:id="@+id/input_comment_content" | ||||
|             style="@style/TextAppearance.AppCompat" | ||||
|             android:layout_width="0dp" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_weight="1" | ||||
|             style="@style/TextAppearance.AppCompat" | ||||
|             android:hint="@string/new_comment_hint" | ||||
|             android:inputType="text" /> | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Pierre HUBERT
					Pierre HUBERT