mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-11-27 07:49:28 +00:00
CAn update the content of a conversation message.
This commit is contained in:
parent
d3f95adb46
commit
e533770b6d
@ -25,7 +25,7 @@
|
|||||||
</value>
|
</value>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectType">
|
<component name="ProjectType">
|
||||||
|
@ -190,6 +190,22 @@ class ConversationMessagesDbHelper {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update a conversation message in the database
|
||||||
|
*
|
||||||
|
* @param message Information about the message to update
|
||||||
|
* @return TRUE in case of success / FALSE else
|
||||||
|
*/
|
||||||
|
boolean updateMessage(ConversationMessage message){
|
||||||
|
|
||||||
|
SQLiteDatabase db = dbHelper.getWritableDatabase();
|
||||||
|
|
||||||
|
String conditions = ConversationsMessagesSchema.COLUMN_NAME_MESSAGE_ID + " = ?";
|
||||||
|
String[] values = new String[]{message.getId()+""};
|
||||||
|
|
||||||
|
return db.update(TABLE_NAME, getContentValues(message), conditions, values) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete a message from the local database
|
* Delete a message from the local database
|
||||||
*
|
*
|
||||||
|
@ -284,6 +284,32 @@ public class ConversationMessagesHelper {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update a conversation message
|
||||||
|
*
|
||||||
|
* @param message Information about the message to update
|
||||||
|
* @return TRUE for a success / FALSE else
|
||||||
|
*/
|
||||||
|
public boolean updateMessage(ConversationMessage message){
|
||||||
|
|
||||||
|
//Perform the request over the API
|
||||||
|
APIRequest request = new APIRequest(mContext, "conversations/updateMessage");
|
||||||
|
request.addInt("messageID", message.getId());
|
||||||
|
|
||||||
|
if(message.hasContent())
|
||||||
|
request.addString("content", message.getContent());
|
||||||
|
|
||||||
|
try {
|
||||||
|
APIResponse response = new APIRequestHelper().exec(request);
|
||||||
|
|
||||||
|
return response.getResponse_code() == 200 && mDbHelper.updateMessage(message);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete a conversation message
|
* Delete a conversation message
|
||||||
*
|
*
|
||||||
|
@ -131,6 +131,13 @@ public class ConversationMessage {
|
|||||||
this.content = content;
|
this.content = content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return TRUE if the content of the message has been specified / FALSE else
|
||||||
|
*/
|
||||||
|
public boolean hasContent(){
|
||||||
|
return this.content != null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the content of the message
|
* Get the content of the message
|
||||||
*
|
*
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package org.communiquons.android.comunic.client.ui.asynctasks;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import org.communiquons.android.comunic.client.data.asynctasks.SafeAsyncTask;
|
||||||
|
import org.communiquons.android.comunic.client.data.helpers.ConversationMessagesHelper;
|
||||||
|
import org.communiquons.android.comunic.client.data.models.ConversationMessage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the content of a conversation message
|
||||||
|
*
|
||||||
|
* @author Pierre HUBERT
|
||||||
|
*/
|
||||||
|
public class UpdateConversationMessageContentTask extends SafeAsyncTask<ConversationMessage, Void, Boolean> {
|
||||||
|
|
||||||
|
public UpdateConversationMessageContentTask(Context context) {
|
||||||
|
super(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Boolean doInBackground(ConversationMessage... conversationMessages) {
|
||||||
|
return new ConversationMessagesHelper(getContext()).updateMessage(conversationMessages[0]);
|
||||||
|
}
|
||||||
|
}
|
@ -39,6 +39,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.activities.MainActivity;
|
||||||
import org.communiquons.android.comunic.client.ui.adapters.ConversationMessageAdapter;
|
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.DeleteConversationMessageTask;
|
||||||
|
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.OnConversationMessageActionsListener;
|
||||||
import org.communiquons.android.comunic.client.ui.listeners.OnScrollChangeDetectListener;
|
import org.communiquons.android.comunic.client.ui.listeners.OnScrollChangeDetectListener;
|
||||||
import org.communiquons.android.comunic.client.ui.utils.BitmapUtils;
|
import org.communiquons.android.comunic.client.ui.utils.BitmapUtils;
|
||||||
@ -48,6 +49,8 @@ import org.communiquons.android.comunic.client.ui.views.ScrollRecyclerView;
|
|||||||
|
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.zip.Inflater;
|
||||||
|
|
||||||
import static android.app.Activity.RESULT_OK;
|
import static android.app.Activity.RESULT_OK;
|
||||||
|
|
||||||
@ -191,9 +194,10 @@ public class ConversationFragment extends Fragment
|
|||||||
private int mMessageInContextMenu;
|
private int mMessageInContextMenu;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Safely delete message
|
* Safe AsyncTasks
|
||||||
*/
|
*/
|
||||||
private DeleteConversationMessageTask mDeleteMessageAsyncTask;
|
private DeleteConversationMessageTask mDeleteMessageAsyncTask;
|
||||||
|
private UpdateConversationMessageContentTask mUpdateConversationMessageContentTask;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
@ -396,6 +400,7 @@ public class ConversationFragment extends Fragment
|
|||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
|
|
||||||
unsetPendingDeleteTasksCallback();
|
unsetPendingDeleteTasksCallback();
|
||||||
|
unsetPendingUpdatedTasksCallbacks();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -773,8 +778,10 @@ public class ConversationFragment extends Fragment
|
|||||||
PopupMenu popup = new PopupMenu(getActivity(), v);
|
PopupMenu popup = new PopupMenu(getActivity(), v);
|
||||||
popup.inflate(R.menu.menu_conversation_message);
|
popup.inflate(R.menu.menu_conversation_message);
|
||||||
|
|
||||||
if(message.getUser_id() != userID)
|
if(message.getUser_id() != userID) {
|
||||||
popup.getMenu().findItem(R.id.action_delete).setEnabled(false);
|
popup.getMenu().findItem(R.id.action_delete).setEnabled(false);
|
||||||
|
popup.getMenu().findItem(R.id.action_update_content).setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
popup.setOnMenuItemClickListener(this);
|
popup.setOnMenuItemClickListener(this);
|
||||||
|
|
||||||
@ -789,9 +796,15 @@ public class ConversationFragment extends Fragment
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(item.getItemId() == R.id.action_update_content){
|
||||||
|
onRequestConversationMessageUpdate(mMessageInContextMenu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConfirmDeleteConversationMessage(final int pos) {
|
public void onConfirmDeleteConversationMessage(final int pos) {
|
||||||
new AlertDialog.Builder(getActivity())
|
new AlertDialog.Builder(getActivity())
|
||||||
@ -810,6 +823,29 @@ public class ConversationFragment extends Fragment
|
|||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestConversationMessageUpdate(final int pos) {
|
||||||
|
|
||||||
|
View view = LayoutInflater.from(getActivity()).inflate(
|
||||||
|
R.layout.dialog_edit_conversation_message, null);
|
||||||
|
final EditText input = view.findViewById(R.id.input);
|
||||||
|
input.setText(messagesList.get(pos).getContent());
|
||||||
|
|
||||||
|
new AlertDialog.Builder(getActivity())
|
||||||
|
.setTitle(R.string.dialog_edit_conversation_message_content_title)
|
||||||
|
.setView(view)
|
||||||
|
.setNegativeButton(R.string.dialog_edit_conversation_message_content_cancel, null)
|
||||||
|
.setPositiveButton(R.string.dialog_edit_conversation_message_content_update, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
update_conversation_message(pos, ""+input.getText());
|
||||||
|
}
|
||||||
|
}).show();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete conversation message at a specified position
|
* Delete conversation message at a specified position
|
||||||
*
|
*
|
||||||
@ -861,4 +897,57 @@ public class ConversationFragment extends Fragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform the update of the content of a conversation message
|
||||||
|
*
|
||||||
|
* @param pos The position of the message to update
|
||||||
|
* @param content The new content of the message
|
||||||
|
*/
|
||||||
|
private void update_conversation_message(int pos, String content){
|
||||||
|
|
||||||
|
if(content.length() < 3){
|
||||||
|
Toast.makeText(getActivity(), R.string.err_invalid_conversation_message_content,
|
||||||
|
Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsetPendingUpdatedTasksCallbacks();
|
||||||
|
|
||||||
|
ConversationMessage message = messagesList.get(pos);
|
||||||
|
message.setContent(content);
|
||||||
|
|
||||||
|
mUpdateConversationMessageContentTask = new UpdateConversationMessageContentTask(getActivity());
|
||||||
|
mUpdateConversationMessageContentTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<Boolean>() {
|
||||||
|
@Override
|
||||||
|
public void OnPostExecute(Boolean aBoolean) {
|
||||||
|
if(getActivity() != null)
|
||||||
|
updateConversationMessageCallback(aBoolean);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mUpdateConversationMessageContentTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unset any conversation message update pending tasks
|
||||||
|
*/
|
||||||
|
private void unsetPendingUpdatedTasksCallbacks(){
|
||||||
|
if(mUpdateConversationMessageContentTask != null)
|
||||||
|
mUpdateConversationMessageContentTask.setOnPostExecuteListener(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update Conversation message callback
|
||||||
|
*
|
||||||
|
* @param result TRUE in case of result / FALSE else
|
||||||
|
*/
|
||||||
|
private void updateConversationMessageCallback(boolean result){
|
||||||
|
|
||||||
|
//Check for errors
|
||||||
|
Toast.makeText(getActivity(),
|
||||||
|
!result ? R.string.err_update_conversation_message_content :
|
||||||
|
R.string.success_update_conversation_message_content,
|
||||||
|
Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
|
convMessAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,4 +26,11 @@ public interface OnConversationMessageActionsListener {
|
|||||||
*/
|
*/
|
||||||
void onConfirmDeleteConversationMessage(int pos);
|
void onConfirmDeleteConversationMessage(int pos);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ask the user the new content for the conversation message
|
||||||
|
*
|
||||||
|
* @param pos The position of the message to update
|
||||||
|
*/
|
||||||
|
void onRequestConversationMessageUpdate(int pos);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
25
app/src/main/res/layout/dialog_edit_conversation_message.xml
Normal file
25
app/src/main/res/layout/dialog_edit_conversation_message.xml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?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.design.widget.TextInputLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<android.support.design.widget.TextInputEditText
|
||||||
|
android:id="@+id/input"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:hint="@string/hint_edit_conversation_message" />
|
||||||
|
|
||||||
|
</android.support.design.widget.TextInputLayout>
|
||||||
|
|
||||||
|
</android.support.constraint.ConstraintLayout>
|
@ -5,4 +5,8 @@
|
|||||||
android:id="@+id/action_delete"
|
android:id="@+id/action_delete"
|
||||||
android:title="@string/action_delete" />
|
android:title="@string/action_delete" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_update_content"
|
||||||
|
android:title="@string/action_update_content" />
|
||||||
|
|
||||||
</menu>
|
</menu>
|
@ -257,4 +257,12 @@
|
|||||||
<string name="err_delete_conversation_message">Une erreur a survenue lors de la suppression du message !</string>
|
<string name="err_delete_conversation_message">Une erreur a survenue lors de la suppression du message !</string>
|
||||||
<string name="err_get_user_friends">Une erreur a survenu lors de la récupération de la liste des amis de l\'utilisateur !</string>
|
<string name="err_get_user_friends">Une erreur a survenu lors de la récupération de la liste des amis de l\'utilisateur !</string>
|
||||||
<string name="notice_user_has_no_friend">Ce utilisateur n\'a aucun ami pour le moment.</string>
|
<string name="notice_user_has_no_friend">Ce utilisateur n\'a aucun ami pour le moment.</string>
|
||||||
|
<string name="action_update_content">Mettre à jour le contenu</string>
|
||||||
|
<string name="hint_edit_conversation_message">Contenu du message</string>
|
||||||
|
<string name="dialog_edit_conversation_message_content_title">Mise à jour du message</string>
|
||||||
|
<string name="dialog_edit_conversation_message_content_cancel">Annuler</string>
|
||||||
|
<string name="dialog_edit_conversation_message_content_update">Mettre à jour</string>
|
||||||
|
<string name="err_invalid_conversation_message_content">Le contenu du message est invalide !</string>
|
||||||
|
<string name="err_update_conversation_message_content">Une erreur a survenue lors de la mise à jour du contenu du message ! Veuillez réessayer…</string>
|
||||||
|
<string name="success_update_conversation_message_content">Le contenu du message a bien été mis à jour !</string>
|
||||||
</resources>
|
</resources>
|
@ -256,4 +256,12 @@
|
|||||||
<string name="tab_friends">Friends</string>
|
<string name="tab_friends">Friends</string>
|
||||||
<string name="err_get_user_friends">Could not get the friends of the user!</string>
|
<string name="err_get_user_friends">Could not get the friends of the user!</string>
|
||||||
<string name="notice_user_has_no_friend">This user has not any friend yet.</string>
|
<string name="notice_user_has_no_friend">This user has not any friend yet.</string>
|
||||||
|
<string name="action_update_content">Update content</string>
|
||||||
|
<string name="hint_edit_conversation_message">Message content</string>
|
||||||
|
<string name="dialog_edit_conversation_message_content_title">Update message</string>
|
||||||
|
<string name="dialog_edit_conversation_message_content_cancel">Cancel</string>
|
||||||
|
<string name="dialog_edit_conversation_message_content_update">Update</string>
|
||||||
|
<string name="err_invalid_conversation_message_content">The content of the conversation message is invalid!</string>
|
||||||
|
<string name="err_update_conversation_message_content">Could not update conversation message content!</string>
|
||||||
|
<string name="success_update_conversation_message_content">The content of the conversation message has been successfully updated!</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user