mirror of
				https://github.com/pierre42100/ComunicAndroid
				synced 2025-10-31 09:34:47 +00:00 
			
		
		
		
	Can update group membership
This commit is contained in:
		| @@ -161,6 +161,70 @@ public class GroupsHelper extends BaseHelper { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Send a group membership request | ||||
|      * | ||||
|      * @param groupID The ID of the target group | ||||
|      * @return Depends of the success of the operation | ||||
|      */ | ||||
|     public boolean sendRequest(int groupID){ | ||||
|         APIRequest request = new APIRequest(getContext(), "groups/send_request"); | ||||
|         request.addInt("id", groupID); | ||||
|         return performMembershipUpdate(request); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Cancel a group membership request | ||||
|      * | ||||
|      * @param groupID the ID of the target group | ||||
|      * @return TRUE in case of success / FALSE else | ||||
|      */ | ||||
|     public boolean cancelRequest(int groupID){ | ||||
|         APIRequest request = new APIRequest(getContext(), "groups/cancel_request"); | ||||
|         request.addInt("id", groupID); | ||||
|         return performMembershipUpdate(request); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Respond to a group membership invitation | ||||
|      * | ||||
|      * @param groupID The ID of the target group | ||||
|      * @param accept TRUE to accept invitation / FALSE else | ||||
|      */ | ||||
|     public boolean respondInvitation(int groupID, boolean accept){ | ||||
|         APIRequest request = new APIRequest(getContext(), "groups/respond_invitation"); | ||||
|         request.addInt("id", groupID); | ||||
|         request.addBoolean("accept", accept); | ||||
|         return performMembershipUpdate(request); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Leave a group | ||||
|      * | ||||
|      * @param groupID The ID of the group to leave | ||||
|      * @return TRUE for a success / FALSE else | ||||
|      */ | ||||
|     public boolean leaveGroup(int groupID){ | ||||
|         APIRequest request = new APIRequest(getContext(), "groups/remove_membership"); | ||||
|         request.addInt("id", groupID); | ||||
|         return performMembershipUpdate(request); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Perform on the server a membership update | ||||
|      * | ||||
|      * @param request The request to perform | ||||
|      * @return Depends of the success of the operation | ||||
|      */ | ||||
|     private boolean performMembershipUpdate(APIRequest request){ | ||||
|         try { | ||||
|             return new APIRequestHelper().exec(request).getResponse_code() == 200; | ||||
|         } catch (Exception e) { | ||||
|             e.printStackTrace(); | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Parse group information into GroupInfo object | ||||
|      * | ||||
|   | ||||
| @@ -10,7 +10,9 @@ import android.widget.TextView; | ||||
|  | ||||
| import org.communiquons.android.comunic.client.R; | ||||
| import org.communiquons.android.comunic.client.data.models.GroupInfo; | ||||
| import org.communiquons.android.comunic.client.ui.listeners.OnGroupMembershipUpdateListener; | ||||
| import org.communiquons.android.comunic.client.ui.views.GroupImageView; | ||||
| import org.communiquons.android.comunic.client.ui.views.GroupMembershipStatusView; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| @@ -26,6 +28,8 @@ public class GroupsListAdapter extends BaseRecyclerViewAdapter { | ||||
|      */ | ||||
|     private ArrayList<GroupInfo> mList = new ArrayList<>(); | ||||
|  | ||||
|     private OnGroupMembershipUpdateListener mOnGroupMembershipUpdateListener; | ||||
|  | ||||
|     public GroupsListAdapter(Context context) { | ||||
|         super(context); | ||||
|     } | ||||
| @@ -39,6 +43,15 @@ public class GroupsListAdapter extends BaseRecyclerViewAdapter { | ||||
|         this.mList = List; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set the group membership update listener | ||||
|      * | ||||
|      * @param onGroupMembershipUpdateListener The listener | ||||
|      */ | ||||
|     public void setOnGroupMembershipUpdateListener(OnGroupMembershipUpdateListener onGroupMembershipUpdateListener) { | ||||
|         this.mOnGroupMembershipUpdateListener = onGroupMembershipUpdateListener; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int getItemCount() { | ||||
|         return mList.size(); | ||||
| @@ -57,6 +70,7 @@ public class GroupsListAdapter extends BaseRecyclerViewAdapter { | ||||
|         ((GroupHolder)viewHolder).bind(i); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * Single group holder class | ||||
|      */ | ||||
| @@ -64,12 +78,16 @@ public class GroupsListAdapter extends BaseRecyclerViewAdapter { | ||||
|  | ||||
|         private GroupImageView mGroupImageView; | ||||
|         private TextView mGroupName; | ||||
|         private GroupMembershipStatusView mGroupMembershipStatus; | ||||
|  | ||||
|         GroupHolder(@NonNull View itemView) { | ||||
|             super(itemView); | ||||
|  | ||||
|             mGroupImageView = itemView.findViewById(R.id.groupImage); | ||||
|             mGroupName = itemView.findViewById(R.id.groupName); | ||||
|             mGroupMembershipStatus = itemView.findViewById(R.id.groupMembershipStatusView); | ||||
|  | ||||
|             mGroupMembershipStatus.setOnGroupMembershipUpdateListener(mOnGroupMembershipUpdateListener); | ||||
|         } | ||||
|  | ||||
|         GroupInfo getGroup(int pos){ | ||||
| @@ -80,6 +98,7 @@ public class GroupsListAdapter extends BaseRecyclerViewAdapter { | ||||
|             GroupInfo groupInfo = getGroup(pos); | ||||
|             mGroupImageView.setGroup(groupInfo); | ||||
|             mGroupName.setText(groupInfo.getDisplayName()); | ||||
|             mGroupMembershipStatus.setGroup(groupInfo); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,21 @@ | ||||
| package org.communiquons.android.comunic.client.ui.asynctasks; | ||||
|  | ||||
| import android.content.Context; | ||||
|  | ||||
| import org.communiquons.android.comunic.client.data.helpers.GroupsHelper; | ||||
|  | ||||
| /** | ||||
|  * Cancel a group membership request task | ||||
|  * | ||||
|  * @author Pierre HUBERT | ||||
|  */ | ||||
| public class CancelGroupMembershipRequestTask extends SafeAsyncTask<Integer, Void, Boolean> { | ||||
|     public CancelGroupMembershipRequestTask(Context context) { | ||||
|         super(context); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected Boolean doInBackground(Integer... integers) { | ||||
|         return new GroupsHelper(getContext()).cancelRequest(integers[0]); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,21 @@ | ||||
| package org.communiquons.android.comunic.client.ui.asynctasks; | ||||
|  | ||||
| import android.content.Context; | ||||
|  | ||||
| import org.communiquons.android.comunic.client.data.helpers.GroupsHelper; | ||||
|  | ||||
| /** | ||||
|  * Leave group task | ||||
|  * | ||||
|  * @author Pierre HUBERT | ||||
|  */ | ||||
| public class LeaveGroupTask extends SafeAsyncTask<Integer, Void, Boolean> { | ||||
|     public LeaveGroupTask(Context context) { | ||||
|         super(context); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected Boolean doInBackground(Integer... integers) { | ||||
|         return new GroupsHelper(getContext()).leaveGroup(integers[0]); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,27 @@ | ||||
| package org.communiquons.android.comunic.client.ui.asynctasks; | ||||
|  | ||||
| import android.content.Context; | ||||
|  | ||||
| import org.communiquons.android.comunic.client.data.helpers.GroupsHelper; | ||||
|  | ||||
| /** | ||||
|  * Respond to a group membership invitation task | ||||
|  * | ||||
|  * @author Pierre HUBERT | ||||
|  */ | ||||
| public class RespondGroupInvitationTask extends SafeAsyncTask<Integer, Void, Boolean> { | ||||
|  | ||||
|     private boolean mAccept; | ||||
|  | ||||
|  | ||||
|     public RespondGroupInvitationTask(Context context, boolean accept) { | ||||
|         super(context); | ||||
|         this.mAccept = accept; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     @Override | ||||
|     protected Boolean doInBackground(Integer... integers) { | ||||
|         return new GroupsHelper(getContext()).respondInvitation(integers[0], mAccept); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,21 @@ | ||||
| package org.communiquons.android.comunic.client.ui.asynctasks; | ||||
|  | ||||
| import android.content.Context; | ||||
|  | ||||
| import org.communiquons.android.comunic.client.data.helpers.GroupsHelper; | ||||
|  | ||||
| /** | ||||
|  * Send a group membership request task | ||||
|  * | ||||
|  * @author Pierre HUBERT | ||||
|  */ | ||||
| public class SendGroupMembershipRequestTask extends SafeAsyncTask<Integer, Void, Boolean> { | ||||
|     public SendGroupMembershipRequestTask(Context context) { | ||||
|         super(context); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected Boolean doInBackground(Integer... integers) { | ||||
|         return new GroupsHelper(getContext()).sendRequest(integers[0]); | ||||
|     } | ||||
| } | ||||
| @@ -1,8 +1,21 @@ | ||||
| package org.communiquons.android.comunic.client.ui.fragments.groups; | ||||
|  | ||||
| import android.content.DialogInterface; | ||||
| import android.os.AsyncTask; | ||||
| import android.support.annotation.CallSuper; | ||||
| import android.support.v7.app.AlertDialog; | ||||
| import android.widget.Toast; | ||||
|  | ||||
| import org.communiquons.android.comunic.client.R; | ||||
| import org.communiquons.android.comunic.client.data.models.GroupInfo; | ||||
| import org.communiquons.android.comunic.client.ui.activities.MainActivity; | ||||
| import org.communiquons.android.comunic.client.ui.asynctasks.CancelGroupMembershipRequestTask; | ||||
| import org.communiquons.android.comunic.client.ui.asynctasks.LeaveGroupTask; | ||||
| import org.communiquons.android.comunic.client.ui.asynctasks.RespondGroupInvitationTask; | ||||
| import org.communiquons.android.comunic.client.ui.asynctasks.SafeAsyncTask; | ||||
| import org.communiquons.android.comunic.client.ui.asynctasks.SendGroupMembershipRequestTask; | ||||
| import org.communiquons.android.comunic.client.ui.fragments.AbstractFragment; | ||||
| import org.communiquons.android.comunic.client.ui.listeners.OnGroupMembershipUpdateListener; | ||||
|  | ||||
| import java.util.Objects; | ||||
|  | ||||
| @@ -11,7 +24,12 @@ import java.util.Objects; | ||||
|  * | ||||
|  * @author Pierre HUBERT | ||||
|  */ | ||||
| abstract class AbstractGroupFragment extends AbstractFragment { | ||||
| abstract class AbstractGroupFragment extends AbstractFragment implements OnGroupMembershipUpdateListener { | ||||
|  | ||||
|     /** | ||||
|      * Debug tag | ||||
|      */ | ||||
|     private static final String TAG = AbstractGroupFragment.class.getSimpleName(); | ||||
|  | ||||
|     @Override | ||||
|     public void onResume() { | ||||
| @@ -20,4 +38,82 @@ abstract class AbstractGroupFragment extends AbstractFragment { | ||||
|         MainActivity.SetNavbarSelectedOption(Objects.requireNonNull(getActivity()), | ||||
|                 R.id.action_personal_page); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onRespondInvitation(GroupInfo group, boolean accept) { | ||||
|         RespondGroupInvitationTask respondGroupInvitationTask = | ||||
|                 new RespondGroupInvitationTask(getContext(), accept); | ||||
|         performGroupMembershipUpdate(group.getId(), respondGroupInvitationTask); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onCancelRequest(GroupInfo group) { | ||||
|         CancelGroupMembershipRequestTask task = new CancelGroupMembershipRequestTask(getActivity()); | ||||
|         performGroupMembershipUpdate(group.getId(), task); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onSendRequest(GroupInfo group) { | ||||
|         SendGroupMembershipRequestTask task = new SendGroupMembershipRequestTask(getActivity()); | ||||
|         performGroupMembershipUpdate(group.getId(), task); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onLeaveGroup(GroupInfo group) { | ||||
|         final int groupID = group.getId(); | ||||
|         new AlertDialog.Builder(getActivity()) | ||||
|                 .setTitle(R.string.dialog_leave_group_title) | ||||
|                 .setMessage(R.string.dialog_leave_group_message) | ||||
|                 .setNegativeButton(R.string.dialog_leave_group_cancel, null) | ||||
|  | ||||
|                 .setPositiveButton(R.string.dialog_leave_group_confirm, new DialogInterface.OnClickListener() { | ||||
|                     @Override | ||||
|                     public void onClick(DialogInterface dialog, int which) { | ||||
|                         leaveGroup(groupID); | ||||
|                     } | ||||
|                 }).show(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Do leave the group for the user | ||||
|      * | ||||
|      * @param groupID The ID of the group to leave | ||||
|      */ | ||||
|     private void leaveGroup(final int groupID) { | ||||
|         LeaveGroupTask leaveGroupTask = new LeaveGroupTask(getActivity()); | ||||
|         performGroupMembershipUpdate(groupID, leaveGroupTask); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Perform group membership update | ||||
|      * | ||||
|      * @param groupID The ID of the target group | ||||
|      * @param task    Task to execute | ||||
|      */ | ||||
|     private void performGroupMembershipUpdate(final int groupID, SafeAsyncTask<Integer, Void, Boolean> task) { | ||||
|         task.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<Boolean>() { | ||||
|             @Override | ||||
|             public void OnPostExecute(Boolean success) { | ||||
|                 onGroupMembershipUpdated(success, groupID); | ||||
|             } | ||||
|         }); | ||||
|         task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, groupID); | ||||
|         getTasksManager().addTask(task); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * This method is called when the membership to a group has been updated | ||||
|      * | ||||
|      * @param success TRUE if the operation was a success / FALSE else | ||||
|      * @param groupID Information about the updated group | ||||
|      */ | ||||
|     @CallSuper | ||||
|     public void onGroupMembershipUpdated(boolean success, int groupID) { | ||||
|  | ||||
|         //Check for errors | ||||
|         if (!success) | ||||
|             Toast.makeText(getActivity(), R.string.err_update_group_membership, | ||||
|                     Toast.LENGTH_SHORT).show(); | ||||
|  | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -120,17 +120,29 @@ public class UserGroupsFragment extends AbstractGroupFragment { | ||||
|  | ||||
|         setProgressBarVisibility(false); | ||||
|  | ||||
|         mGroupsAdapter = new GroupsListAdapter(getActivity()); | ||||
|         mGroupsAdapter.setList(new ArrayList<>(mGroupsList.values())); | ||||
|         if(mGroupsAdapter == null) { | ||||
|             mGroupsAdapter = new GroupsListAdapter(getActivity()); | ||||
|  | ||||
|         mGroupsView.setAdapter(mGroupsAdapter); | ||||
|         mGroupsView.setLayoutManager(new LinearLayoutManager(getActivity())); | ||||
|         mGroupsView.addItemDecoration(new DividerItemDecoration(getActivity(), | ||||
|                 DividerItemDecoration.VERTICAL)); | ||||
|             mGroupsView.setAdapter(mGroupsAdapter); | ||||
|             mGroupsView.setLayoutManager(new LinearLayoutManager(getActivity())); | ||||
|             mGroupsView.addItemDecoration(new DividerItemDecoration(getActivity(), | ||||
|                     DividerItemDecoration.VERTICAL)); | ||||
|         } | ||||
|  | ||||
|  | ||||
|         mGroupsAdapter.setOnGroupMembershipUpdateListener(this); | ||||
|         mGroupsAdapter.setList(new ArrayList<>(mGroupsList.values())); | ||||
|         mGroupsAdapter.notifyDataSetChanged(); | ||||
|  | ||||
|         setNoGroupNoticeVisibility(mGroupsList.size() == 0); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onGroupMembershipUpdated(boolean success, int groupID) { | ||||
|         super.onGroupMembershipUpdated(success, groupID); | ||||
|         getGroupsList(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Update (set) progressbar visibility | ||||
|      * | ||||
|   | ||||
| @@ -0,0 +1,35 @@ | ||||
| package org.communiquons.android.comunic.client.ui.listeners; | ||||
|  | ||||
| import org.communiquons.android.comunic.client.data.models.GroupInfo; | ||||
|  | ||||
| public interface OnGroupMembershipUpdateListener { | ||||
|  | ||||
|     /** | ||||
|      * Respond to a group membership invitation | ||||
|      * | ||||
|      * @param group Information about the target group | ||||
|      * @param accept TRUE to accept / FALSE else | ||||
|      */ | ||||
|     void onRespondInvitation(GroupInfo group, boolean accept); | ||||
|  | ||||
|     /** | ||||
|      * Cancel a group membership request | ||||
|      * | ||||
|      * @param group The target group | ||||
|      */ | ||||
|     void onCancelRequest(GroupInfo group); | ||||
|  | ||||
|     /** | ||||
|      * Send a request to join a group | ||||
|      * | ||||
|      * @param group The target group | ||||
|      */ | ||||
|     void onSendRequest(GroupInfo group); | ||||
|  | ||||
|     /** | ||||
|      * Send a request to leave a group | ||||
|      * | ||||
|      * @param group The target group | ||||
|      */ | ||||
|     void onLeaveGroup(GroupInfo group); | ||||
| } | ||||
| @@ -0,0 +1,173 @@ | ||||
| package org.communiquons.android.comunic.client.ui.views; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.support.annotation.NonNull; | ||||
| import android.support.annotation.Nullable; | ||||
| import android.support.constraint.ConstraintLayout; | ||||
| import android.util.AttributeSet; | ||||
| import android.view.View; | ||||
| import android.widget.Button; | ||||
|  | ||||
| import org.communiquons.android.comunic.client.R; | ||||
| import org.communiquons.android.comunic.client.data.models.GroupInfo; | ||||
| import org.communiquons.android.comunic.client.ui.listeners.OnGroupMembershipUpdateListener; | ||||
|  | ||||
| /** | ||||
|  * Group membership button | ||||
|  * | ||||
|  * @author Pierre HUBERT | ||||
|  */ | ||||
| public class GroupMembershipStatusView extends BaseFrameLayoutView implements View.OnClickListener { | ||||
|  | ||||
|     /** | ||||
|      * Views | ||||
|      */ | ||||
|     private ConstraintLayout respondInvitationForm; | ||||
|     private Button rejectButton; | ||||
|     private Button acceptButton; | ||||
|     private ConstraintLayout cancelRequestForm; | ||||
|     private Button cancelButton; | ||||
|     private ConstraintLayout requestForm; | ||||
|     private Button joinButton; | ||||
|     private ConstraintLayout memberForm; | ||||
|     private Button leaveButton; | ||||
|  | ||||
|     /** | ||||
|      * Group information | ||||
|      */ | ||||
|     private GroupInfo mInfo; | ||||
|  | ||||
|     /** | ||||
|      * Listener | ||||
|      */ | ||||
|     private OnGroupMembershipUpdateListener mOnGroupMembershipUpdateListener; | ||||
|  | ||||
|  | ||||
|     public GroupMembershipStatusView(@NonNull Context context) { | ||||
|         this(context, null); | ||||
|     } | ||||
|  | ||||
|     public GroupMembershipStatusView(@NonNull Context context, @Nullable AttributeSet attrs) { | ||||
|         this(context, attrs, 0); | ||||
|     } | ||||
|  | ||||
|     public GroupMembershipStatusView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { | ||||
|         super(context, attrs, defStyleAttr); | ||||
|  | ||||
|         View view = inflate(getContext(), R.layout.view_group_membership_status, this); | ||||
|         respondInvitationForm = view.findViewById(R.id.respondInvitationForm); | ||||
|         rejectButton = view.findViewById(R.id.rejectButton); | ||||
|         acceptButton = view.findViewById(R.id.acceptButton); | ||||
|         cancelRequestForm = view.findViewById(R.id.cancelRequestForm); | ||||
|         cancelButton = view.findViewById(R.id.cancelButton); | ||||
|         requestForm = view.findViewById(R.id.requestForm); | ||||
|         joinButton = view.findViewById(R.id.joinButton); | ||||
|         memberForm = view.findViewById(R.id.memberForm); | ||||
|         leaveButton = view.findViewById(R.id.leaveButton); | ||||
|  | ||||
|         //Show only one form | ||||
|         showForm(respondInvitationForm); | ||||
|  | ||||
|         rejectButton.setOnClickListener(this); | ||||
|         acceptButton.setOnClickListener(this); | ||||
|         cancelButton.setOnClickListener(this); | ||||
|         joinButton.setOnClickListener(this); | ||||
|         leaveButton.setOnClickListener(this); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set the group membership update listener | ||||
|      * | ||||
|      * @param onGroupMembershipUpdateListener The listener | ||||
|      */ | ||||
|     public void setOnGroupMembershipUpdateListener(OnGroupMembershipUpdateListener onGroupMembershipUpdateListener) { | ||||
|         this.mOnGroupMembershipUpdateListener = onGroupMembershipUpdateListener; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Assign the view to a new group | ||||
|      * | ||||
|      * @param info Information about the group | ||||
|      */ | ||||
|     public void setGroup(GroupInfo info) { | ||||
|         mInfo = info; | ||||
|         showButtons(true); | ||||
|  | ||||
|         switch (info.getMembershipLevel()) { | ||||
|             case VISITOR: | ||||
|                 showForm(requestForm); | ||||
|                 return; | ||||
|  | ||||
|             case PENDING: | ||||
|                 showForm(cancelRequestForm); | ||||
|                 return; | ||||
|  | ||||
|             case INVITED: | ||||
|                 showForm(respondInvitationForm); | ||||
|                 return; | ||||
|  | ||||
|             default: | ||||
|                 showForm(memberForm); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Display the form contained in a specific view and hide the other ones | ||||
|      * | ||||
|      * @param v The container of the form to show | ||||
|      */ | ||||
|     private void showForm(View v) { | ||||
|  | ||||
|         respondInvitationForm.setVisibility(v.equals(respondInvitationForm) | ||||
|                 ? View.VISIBLE : View.GONE); | ||||
|         cancelRequestForm.setVisibility(v.equals(cancelRequestForm) | ||||
|                 ? View.VISIBLE : View.GONE); | ||||
|         requestForm.setVisibility(v.equals(requestForm) | ||||
|                 ? View.VISIBLE : View.GONE); | ||||
|         memberForm.setVisibility(v.equals(memberForm) ? View.VISIBLE : View.GONE); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Update buttons visibility | ||||
|      * | ||||
|      * @param visible New visibility for the buttons | ||||
|      */ | ||||
|     private void showButtons(boolean visible){ | ||||
|         rejectButton.setVisibility(visible ? View.VISIBLE : View.GONE); | ||||
|         acceptButton.setVisibility(visible ? View.VISIBLE : View.GONE); | ||||
|         cancelButton.setVisibility(visible ? View.VISIBLE : View.GONE); | ||||
|         joinButton.setVisibility(visible ? View.VISIBLE : View.GONE); | ||||
|         leaveButton.setVisibility(View.VISIBLE); //View cannot be hidden | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onClick(View v) { | ||||
|  | ||||
|         if(mOnGroupMembershipUpdateListener == null) | ||||
|             return; | ||||
|  | ||||
|         showButtons(false); | ||||
|  | ||||
|         if(v.equals(rejectButton)){ | ||||
|             mOnGroupMembershipUpdateListener.onRespondInvitation(mInfo, false); | ||||
|         } | ||||
|  | ||||
|         else if(v.equals(acceptButton)){ | ||||
|             mOnGroupMembershipUpdateListener.onRespondInvitation(mInfo, true); | ||||
|         } | ||||
|  | ||||
|         else if(v.equals(cancelButton)){ | ||||
|             mOnGroupMembershipUpdateListener.onCancelRequest(mInfo); | ||||
|         } | ||||
|  | ||||
|         else if (v.equals(joinButton)){ | ||||
|             mOnGroupMembershipUpdateListener.onSendRequest(mInfo); | ||||
|         } | ||||
|  | ||||
|         else if(v.equals(leaveButton)){ | ||||
|             mOnGroupMembershipUpdateListener.onLeaveGroup(mInfo); | ||||
|         } | ||||
|  | ||||
|     } | ||||
| } | ||||
							
								
								
									
										137
									
								
								app/src/main/res/layout/view_group_membership_status.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								app/src/main/res/layout/view_group_membership_status.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,137 @@ | ||||
| <?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" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent"> | ||||
|  | ||||
|     <android.support.constraint.ConstraintLayout | ||||
|         android:id="@+id/respondInvitationForm" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginEnd="8dp" | ||||
|         android:layout_marginStart="8dp" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toTopOf="parent"> | ||||
|  | ||||
|         <TextView | ||||
|             android:id="@+id/textView9" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_marginEnd="8dp" | ||||
|             android:layout_marginStart="8dp" | ||||
|             android:text="@string/notice_group_invited" | ||||
|             app:layout_constraintEnd_toEndOf="@+id/acceptButton" | ||||
|             app:layout_constraintStart_toStartOf="@+id/acceptButton" /> | ||||
|  | ||||
|         <Button | ||||
|             android:id="@+id/rejectButton" | ||||
|             style="@style/GroupMembershipButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:backgroundTint="@android:color/holo_red_dark" | ||||
|             android:text="@string/action_group_reject_request" | ||||
|             android:textColor="@android:color/white" | ||||
|             app:layout_constraintEnd_toEndOf="@+id/acceptButton" | ||||
|             app:layout_constraintStart_toStartOf="@+id/acceptButton" | ||||
|             app:layout_constraintTop_toBottomOf="@+id/acceptButton" /> | ||||
|  | ||||
|         <Button | ||||
|             android:id="@+id/acceptButton" | ||||
|             style="@style/GroupMembershipButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_marginEnd="8dp" | ||||
|             android:backgroundTint="@color/holo_green_dark" | ||||
|             android:text="@string/action_group_accept_request" | ||||
|             android:textColor="@android:color/white" | ||||
|             app:layout_constraintEnd_toEndOf="parent" | ||||
|             app:layout_constraintTop_toBottomOf="@+id/textView9" /> | ||||
|     </android.support.constraint.ConstraintLayout> | ||||
|  | ||||
|     <android.support.constraint.ConstraintLayout | ||||
|         android:id="@+id/cancelRequestForm" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginEnd="8dp" | ||||
|         android:layout_marginStart="8dp" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toBottomOf="@+id/respondInvitationForm"> | ||||
|  | ||||
|         <TextView | ||||
|             android:id="@+id/textView10" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:text="@string/notice_group_requested" | ||||
|             app:layout_constraintEnd_toEndOf="@+id/cancelButton" | ||||
|             app:layout_constraintStart_toStartOf="@+id/cancelButton" | ||||
|             app:layout_constraintTop_toTopOf="parent" /> | ||||
|  | ||||
|         <Button | ||||
|             android:id="@+id/cancelButton" | ||||
|             style="@style/GroupMembershipButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_marginBottom="8dp" | ||||
|             android:layout_marginEnd="8dp" | ||||
|             android:backgroundTint="@android:color/holo_red_dark" | ||||
|             android:text="@string/action_group_cancel_membership_request" | ||||
|             android:textColor="@android:color/white" | ||||
|             app:layout_constraintBottom_toBottomOf="parent" | ||||
|             app:layout_constraintEnd_toEndOf="parent" | ||||
|             app:layout_constraintTop_toBottomOf="@+id/textView10" /> | ||||
|     </android.support.constraint.ConstraintLayout> | ||||
|  | ||||
|     <android.support.constraint.ConstraintLayout | ||||
|         android:id="@+id/requestForm" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginEnd="8dp" | ||||
|         android:layout_marginStart="8dp" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toBottomOf="@+id/cancelRequestForm"> | ||||
|  | ||||
|         <Button | ||||
|             android:id="@+id/joinButton" | ||||
|             style="@style/GroupMembershipButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_marginBottom="8dp" | ||||
|             android:layout_marginEnd="8dp" | ||||
|             android:layout_marginTop="8dp" | ||||
|             android:backgroundTint="@color/dark_blue" | ||||
|             android:text="@string/action_join_group" | ||||
|             android:textColor="@android:color/white" | ||||
|             app:layout_constraintBottom_toBottomOf="parent" | ||||
|             app:layout_constraintEnd_toEndOf="parent" | ||||
|             app:layout_constraintTop_toTopOf="parent" /> | ||||
|     </android.support.constraint.ConstraintLayout> | ||||
|  | ||||
|     <android.support.constraint.ConstraintLayout | ||||
|         android:id="@+id/memberForm" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginEnd="8dp" | ||||
|         android:layout_marginStart="8dp" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toBottomOf="@+id/requestForm"> | ||||
|  | ||||
|         <Button | ||||
|             android:id="@+id/leaveButton" | ||||
|             style="@style/GroupMembershipButton" | ||||
|             android:layout_width="wrap_content" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_marginBottom="8dp" | ||||
|             android:layout_marginEnd="8dp" | ||||
|             android:layout_marginTop="8dp" | ||||
|             android:backgroundTint="@android:color/holo_red_dark" | ||||
|             android:text="@string/action_leave_group" | ||||
|             android:textColor="@android:color/white" | ||||
|             app:layout_constraintBottom_toBottomOf="parent" | ||||
|             app:layout_constraintEnd_toEndOf="parent" | ||||
|             app:layout_constraintTop_toTopOf="parent" /> | ||||
|     </android.support.constraint.ConstraintLayout> | ||||
| </android.support.constraint.ConstraintLayout> | ||||
| @@ -13,10 +13,11 @@ | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginStart="8dp" | ||||
|         tools:text="Group Name" | ||||
|         android:textSize="18sp" | ||||
|         app:layout_constraintBottom_toBottomOf="@+id/groupImage" | ||||
|         app:layout_constraintStart_toEndOf="@+id/groupImage" | ||||
|         app:layout_constraintTop_toTopOf="@+id/groupImage" /> | ||||
|         app:layout_constraintTop_toTopOf="@+id/groupImage" | ||||
|         tools:text="Group Name" /> | ||||
|  | ||||
|     <org.communiquons.android.comunic.client.ui.views.GroupImageView | ||||
|         android:id="@+id/groupImage" | ||||
| @@ -29,4 +30,13 @@ | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toTopOf="parent" | ||||
|         app:srcCompat="@drawable/ic_friends" /> | ||||
|  | ||||
|     <org.communiquons.android.comunic.client.ui.views.GroupMembershipStatusView | ||||
|         android:id="@+id/groupMembershipStatusView" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginBottom="8dp" | ||||
|         android:layout_marginEnd="8dp" | ||||
|         app:layout_constraintBottom_toBottomOf="parent" | ||||
|         app:layout_constraintEnd_toEndOf="parent" /> | ||||
| </android.support.constraint.ConstraintLayout> | ||||
| @@ -300,4 +300,16 @@ | ||||
|     <string name="action_user_groups">Mes groupes</string> | ||||
|     <string name="err_get_user_groups">Une erreur a survenu lors de la récupération de vos groupes !</string> | ||||
|     <string name="notice_no_group">Vous n\'avez aucun groupe pour le moment.</string> | ||||
|     <string name="notice_group_invited">Invité</string> | ||||
|     <string name="action_group_accept_request">Accepter</string> | ||||
|     <string name="action_group_reject_request">Rejeter</string> | ||||
|     <string name="notice_group_requested">Demande envoyée</string> | ||||
|     <string name="action_group_cancel_membership_request">Annuler</string> | ||||
|     <string name="action_join_group">Rejoindre</string> | ||||
|     <string name="action_leave_group">Quitter</string> | ||||
|     <string name="dialog_leave_group_title">Quitter le groupe</string> | ||||
|     <string name="dialog_leave_group_message">Voulez-vous vraiment quitter ce groupe ? Il se peut que vous ne puissez pas le rejoindre ultérieurement !</string> | ||||
|     <string name="dialog_leave_group_cancel">Annuler</string> | ||||
|     <string name="dialog_leave_group_confirm">Quitter</string> | ||||
|     <string name="err_update_group_membership">Une erreur a survenue lors de la mise à jour de votre appartenance au groupe !</string> | ||||
| </resources> | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <color name="colorPrimaryDark">#303F9F</color> | ||||
|     <color name="colorAccent">#ff4081</color> | ||||
|  | ||||
|     <color name="holo_green_dark">#ff669900</color> | ||||
|     <color name="holo_green_dark">#669900</color> | ||||
|     <color name="darker_gray">#aaa</color> | ||||
|     <color name="darker_darker_gray">#5b5b5b</color> | ||||
|     <color name="dark_blue">#303f9f</color> | ||||
|   | ||||
| @@ -299,4 +299,16 @@ | ||||
|     <string name="action_user_groups">My groups</string> | ||||
|     <string name="err_get_user_groups">Could not get the groups of the user!</string> | ||||
|     <string name="notice_no_group">You do not have any group yet.</string> | ||||
|     <string name="notice_group_invited">Invited</string> | ||||
|     <string name="action_group_accept_request">Accept</string> | ||||
|     <string name="action_group_reject_request">Reject</string> | ||||
|     <string name="notice_group_requested">Requested</string> | ||||
|     <string name="action_group_cancel_membership_request">Cancel</string> | ||||
|     <string name="action_join_group">Join</string> | ||||
|     <string name="action_leave_group">Leave</string> | ||||
|     <string name="dialog_leave_group_title">Leave group</string> | ||||
|     <string name="dialog_leave_group_message">Do you really want to leave this group? You might not be able to join it later!</string> | ||||
|     <string name="dialog_leave_group_cancel">Cancel</string> | ||||
|     <string name="dialog_leave_group_confirm">Leave</string> | ||||
|     <string name="err_update_group_membership">Could not update group membership!</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -174,4 +174,10 @@ | ||||
|         <item name="android:padding">2dp</item> | ||||
|         <item name="android:layout_gravity">center</item> | ||||
|     </style> | ||||
|  | ||||
|     <!-- Groups membership button --> | ||||
|     <style name="GroupMembershipButton" > | ||||
|         <item name="android:minHeight">40dip</item> | ||||
|         <item name="android:minWidth">80dip</item> | ||||
|     </style> | ||||
| </resources> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Pierre HUBERT
					Pierre HUBERT