mirror of
				https://github.com/pierre42100/ComunicAndroid
				synced 2025-11-04 11:34:06 +00:00 
			
		
		
		
	Improved conversation messages sending system
This commit is contained in:
		@@ -10,6 +10,7 @@ import org.communiquons.android.comunic.client.data.models.APIPostFile;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.models.APIRequest;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.models.APIResponse;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.models.ConversationMessage;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.models.NewConversationMessage;
 | 
			
		||||
import org.json.JSONArray;
 | 
			
		||||
import org.json.JSONException;
 | 
			
		||||
import org.json.JSONObject;
 | 
			
		||||
@@ -92,31 +93,29 @@ public class ConversationMessagesHelper {
 | 
			
		||||
    /**
 | 
			
		||||
     * Send a new message to the conversation
 | 
			
		||||
     *
 | 
			
		||||
     * @param convID Target conversation ID
 | 
			
		||||
     * @param message The message to send
 | 
			
		||||
     * @param image Image to include with the request, as bitmap (can be null)
 | 
			
		||||
     * @param message Information about the message to send
 | 
			
		||||
     * @return true in case of success / false else
 | 
			
		||||
     */
 | 
			
		||||
    public boolean sendMessage(int convID, String message, @Nullable Bitmap image){
 | 
			
		||||
    public boolean sendMessage(NewConversationMessage message){
 | 
			
		||||
 | 
			
		||||
        //Make an API request
 | 
			
		||||
        APIFileRequest params = new APIFileRequest(mContext,
 | 
			
		||||
                "conversations/sendMessage");
 | 
			
		||||
        params.addString("conversationID", ""+convID);
 | 
			
		||||
        params.addString("message", message);
 | 
			
		||||
        params.addInt("conversationID", message.getConversationID());
 | 
			
		||||
        params.addString("message", message.getMessage());
 | 
			
		||||
 | 
			
		||||
        //Include image (if any)
 | 
			
		||||
        if(image != null) {
 | 
			
		||||
        if(message.hasImage()) {
 | 
			
		||||
            APIPostFile file = new APIPostFile();
 | 
			
		||||
            file.setFieldName("image");
 | 
			
		||||
            file.setFileName("conversationImage.png");
 | 
			
		||||
            file.setBitmap(image);
 | 
			
		||||
            file.setBitmap(message.getImage());
 | 
			
		||||
            params.addFile(file);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
 | 
			
		||||
            if(image != null){
 | 
			
		||||
            if(message.hasImage()){
 | 
			
		||||
                //Perform a POST request
 | 
			
		||||
                new APIRequestHelper().execPostFile(params);
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,44 @@
 | 
			
		||||
package org.communiquons.android.comunic.client.data.models;
 | 
			
		||||
 | 
			
		||||
import android.graphics.Bitmap;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * New conversation message information
 | 
			
		||||
 *
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
public class NewConversationMessage {
 | 
			
		||||
 | 
			
		||||
    //Private fields
 | 
			
		||||
    private int conversationID;
 | 
			
		||||
    private String message;
 | 
			
		||||
    private Bitmap image;
 | 
			
		||||
 | 
			
		||||
    public int getConversationID() {
 | 
			
		||||
        return conversationID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setConversationID(int conversationID) {
 | 
			
		||||
        this.conversationID = conversationID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMessage() {
 | 
			
		||||
        return message;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMessage(String message) {
 | 
			
		||||
        this.message = message;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Bitmap getImage() {
 | 
			
		||||
        return image;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean hasImage(){
 | 
			
		||||
        return image != null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setImage(Bitmap image) {
 | 
			
		||||
        this.image = image;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,23 @@
 | 
			
		||||
package org.communiquons.android.comunic.client.ui.asynctasks;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
 | 
			
		||||
import org.communiquons.android.comunic.client.data.helpers.ConversationMessagesHelper;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.models.NewConversationMessage;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Send conversation message task
 | 
			
		||||
 *
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
public class SendConversationMessageTask extends SafeAsyncTask<NewConversationMessage, Void, Boolean> {
 | 
			
		||||
 | 
			
		||||
    public SendConversationMessageTask(Context context) {
 | 
			
		||||
        super(context);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected Boolean doInBackground(NewConversationMessage... newConversationMessages) {
 | 
			
		||||
        return new ConversationMessagesHelper(getContext()).sendMessage(newConversationMessages[0]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -26,6 +26,7 @@ import android.widget.Toast;
 | 
			
		||||
 | 
			
		||||
import org.communiquons.android.comunic.client.R;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.arrays.ConversationMessagesList;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.models.NewConversationMessage;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.asynctasks.SafeAsyncTask;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.helpers.ConversationMessagesHelper;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.helpers.ConversationsListHelper;
 | 
			
		||||
@@ -39,6 +40,7 @@ import org.communiquons.android.comunic.client.data.utils.AccountUtils;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.activities.MainActivity;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.adapters.ConversationMessageAdapter;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.asynctasks.DeleteConversationMessageTask;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.asynctasks.SendConversationMessageTask;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.asynctasks.UpdateConversationMessageContentTask;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.listeners.OnConversationMessageActionsListener;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.listeners.OnScrollChangeDetectListener;
 | 
			
		||||
@@ -194,6 +196,7 @@ public class ConversationFragment extends Fragment
 | 
			
		||||
    /**
 | 
			
		||||
     * Safe AsyncTasks
 | 
			
		||||
     */
 | 
			
		||||
    private SendConversationMessageTask mSendConversationMessageTask;
 | 
			
		||||
    private DeleteConversationMessageTask mDeleteMessageAsyncTask;
 | 
			
		||||
    private UpdateConversationMessageContentTask mUpdateConversationMessageContentTask;
 | 
			
		||||
 | 
			
		||||
@@ -397,6 +400,7 @@ public class ConversationFragment extends Fragment
 | 
			
		||||
    public void onDestroy() {
 | 
			
		||||
        super.onDestroy();
 | 
			
		||||
 | 
			
		||||
        unsetSendMessageTask();
 | 
			
		||||
        unsetPendingDeleteTasksCallback();
 | 
			
		||||
        unsetPendingUpdatedTasksCallbacks();
 | 
			
		||||
    }
 | 
			
		||||
@@ -601,7 +605,7 @@ public class ConversationFragment extends Fragment
 | 
			
		||||
    private void send_message(){
 | 
			
		||||
 | 
			
		||||
        //Check message length
 | 
			
		||||
        if(new_message_content.length() < 3 && new_message_bitmap == null){
 | 
			
		||||
        if(new_message_content.length() < 2 && new_message_bitmap == null){
 | 
			
		||||
            Toast.makeText(getActivity(), R.string.conversation_message_err_too_short,
 | 
			
		||||
                    Toast.LENGTH_SHORT).show();
 | 
			
		||||
            return;
 | 
			
		||||
@@ -612,22 +616,31 @@ public class ConversationFragment extends Fragment
 | 
			
		||||
        new_message_progress_bar.setVisibility(View.VISIBLE);
 | 
			
		||||
 | 
			
		||||
        //Get the message content
 | 
			
		||||
        final String message_content = new_message_content.getText()+"";
 | 
			
		||||
        String message_content = new_message_content.getText()+"";
 | 
			
		||||
 | 
			
		||||
        if(message_content.length() < 3 && new_message_bitmap == null)
 | 
			
		||||
            message_content += " ";
 | 
			
		||||
 | 
			
		||||
        NewConversationMessage newMessage = new NewConversationMessage();
 | 
			
		||||
        newMessage.setConversationID(conversation_id);
 | 
			
		||||
        newMessage.setMessage(message_content);
 | 
			
		||||
        newMessage.setImage(new_message_bitmap);
 | 
			
		||||
 | 
			
		||||
        //Send the message
 | 
			
		||||
        new AsyncTask<Void, Void, Boolean>(){
 | 
			
		||||
 | 
			
		||||
        unsetSendMessageTask();
 | 
			
		||||
        mSendConversationMessageTask = new SendConversationMessageTask(getActivity());
 | 
			
		||||
        mSendConversationMessageTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<Boolean>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            protected Boolean doInBackground(Void... params) {
 | 
			
		||||
                return convMessHelper.sendMessage(conversation_id,
 | 
			
		||||
                        message_content, new_message_bitmap);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            protected void onPostExecute(Boolean success) {
 | 
			
		||||
            public void OnPostExecute(Boolean success) {
 | 
			
		||||
                send_callback(success);
 | 
			
		||||
            }
 | 
			
		||||
        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
 | 
			
		||||
        });
 | 
			
		||||
        mSendConversationMessageTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, newMessage);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void unsetSendMessageTask(){
 | 
			
		||||
        if(mSendConversationMessageTask != null)
 | 
			
		||||
            mSendConversationMessageTask.setOnPostExecuteListener(null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user