Commit 265d6c5a authored by Tiago Cunha's avatar Tiago Cunha

Rough edit

parent 8b3ed8b1
......@@ -364,12 +364,18 @@ public class MethodCallHelper {
/**
* send message.
*/
public Task<Void> sendMessage(String messageId, String roomId, String msg) {
public Task<Void> sendMessage(String messageId, String roomId, String msg, long editedAt) {
try {
return sendMessage(new JSONObject()
JSONObject messageJson = new JSONObject()
.put("_id", messageId)
.put("rid", roomId)
.put("msg", msg));
.put("msg", msg);
if (editedAt == 0) {
return sendMessage(messageJson);
} else {
return updateMessage(messageJson);
}
} catch (JSONException exception) {
return Task.forError(exception);
}
......@@ -383,6 +389,11 @@ public class MethodCallHelper {
.onSuccessTask(task -> Task.forResult(null));
}
private Task<Void> updateMessage(final JSONObject messageJson) {
return call("updateMessage", TIMEOUT_MS, () -> new JSONArray().put(messageJson))
.onSuccessTask(task -> Task.forResult(null));
}
/**
* mark all messages are read in the room.
*/
......
......@@ -42,6 +42,8 @@ public interface RoomContract {
void resendMessage(Message message);
void updateMessage(Message message, String content);
void deleteMessage(Message message);
void onUnreadCount();
......
......@@ -120,6 +120,8 @@ public class RoomFragment extends AbstractChatRoomFragment
private MethodCallHelper methodCallHelper;
private AbsoluteUrlHelper absoluteUrlHelper;
private Message edittingMessage = null;
public RoomFragment() {
}
......@@ -459,6 +461,11 @@ public class RoomFragment extends AbstractChatRoomFragment
@Override
public boolean onBackPressed() {
if (edittingMessage != null) {
edittingMessage = null;
messageFormManager.clearComposingText();
return true;
}
return closeSideMenuIfNeeded();
}
......@@ -513,7 +520,11 @@ public class RoomFragment extends AbstractChatRoomFragment
}
private void sendMessage(String messageText) {
presenter.sendMessage(messageText);
if (edittingMessage == null) {
presenter.sendMessage(messageText);
} else {
presenter.updateMessage(edittingMessage, messageText);
}
}
@Override
......@@ -560,6 +571,7 @@ public class RoomFragment extends AbstractChatRoomFragment
public void onMessageSendSuccessfully() {
scrollToLatestMessage();
messageFormManager.onMessageSend();
edittingMessage = null;
}
@Override
......@@ -597,5 +609,7 @@ public class RoomFragment extends AbstractChatRoomFragment
}
private void onEditMessage(Message message) {
edittingMessage = message;
messageFormManager.setEditMessage(message.getMessage());
}
}
......@@ -141,6 +141,24 @@ public class RoomPresenter extends BasePresenter<RoomContract.View>
addSubscription(subscription);
}
@Override
public void updateMessage(Message message, String content) {
final Disposable subscription = getCurrentUser()
.flatMap(user -> messageInteractor.update(message, user, content))
.subscribeOn(AndroidSchedulers.from(BackgroundLooper.get()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
success -> {
if (success) {
view.onMessageSendSuccessfully();
}
},
Logger::report
);
addSubscription(subscription);
}
@Override
public void deleteMessage(Message message) {
final Disposable subscription = messageInteractor.delete(message)
......
......@@ -119,6 +119,8 @@ public class MessageOptionsDialogFragment extends BottomSheetDialogFragment {
.subscribe(
pair -> {
if (pair.second) {
bottomSheetDialog.findViewById(R.id.message_options_info)
.setVisibility(View.GONE);
View editView = bottomSheetDialog.findViewById(R.id.message_options_edit_action);
editView.setVisibility(View.VISIBLE);
editView.setOnClickListener(view -> internalListener.onEdit(pair.first));
......
......@@ -33,6 +33,11 @@ public class MessageFormManager {
messageFormLayout.setEnabled(true);
}
public void setEditMessage(String message) {
clearComposingText();
messageFormLayout.setText(message);
}
private void sendMessage(String message) {
if (sendMessageCallback == null) {
return;
......
......@@ -57,13 +57,14 @@ public class NewMessageObserver extends AbstractModelObserver<RealmMessage> {
final String messageId = message.getId();
final String roomId = message.getRoomId();
final String msg = message.getMessage();
final long editedAt = message.getEditedAt();
realmHelper.executeTransaction(realm ->
realm.createOrUpdateObjectFromJson(RealmMessage.class, new JSONObject()
.put(RealmMessage.ID, messageId)
.put(RealmMessage.SYNC_STATE, SyncState.SYNCING)
)
).onSuccessTask(task -> methodCall.sendMessage(messageId, roomId, msg)
).onSuccessTask(task -> methodCall.sendMessage(messageId, roomId, msg, editedAt)
).continueWith(task -> {
if (task.isFaulted()) {
RCLog.w(task.getError());
......
......@@ -6,6 +6,7 @@ import io.realm.RealmMigration;
import io.realm.RealmObjectSchema;
import io.realm.RealmSchema;
import chat.rocket.persistence.realm.models.ddp.RealmMessage;
import chat.rocket.persistence.realm.models.ddp.RealmPermission;
import chat.rocket.persistence.realm.models.ddp.RealmRole;
import chat.rocket.persistence.realm.models.ddp.RealmRoomRole;
......@@ -60,6 +61,13 @@ public class Migration implements RealmMigration {
.addField(RealmRoomRole.Columns.ROOM_ID, String.class)
.addRealmObjectField(RealmRoomRole.Columns.USER, schema.get("RealmUser"))
.addRealmListField(RealmRoomRole.Columns.ROLES, schema.get("RealmRole"));
oldVersion++;
}
if (oldVersion == 4) {
RealmObjectSchema messageSchema = schema.get("RealmMessage");
messageSchema.addField(RealmMessage.EDITED_AT, long.class);
}
}
}
......@@ -15,7 +15,7 @@ public class RealmStore {
.name(name + ".realm")
.modules(new RocketChatLibraryModule())
.migration(new Migration())
.schemaVersion(4)
.schemaVersion(5)
.build();
}
......
......@@ -43,6 +43,7 @@ public class RealmMessage extends RealmObject {
public static final String GROUPABLE = "groupable";
public static final String ATTACHMENTS = "attachments";
public static final String URLS = "urls";
public static final String EDITED_AT = "editedAt";
@PrimaryKey private String _id;
private String t; //type:
......@@ -56,6 +57,7 @@ public class RealmMessage extends RealmObject {
private String avatar;
private String attachments; //JSONArray.
private String urls; //JSONArray.
private long editedAt;
public static JSONObject customizeJson(JSONObject messageJson) throws JSONException {
long ts = messageJson.getJSONObject(TIMESTAMP).getLong(JsonConstants.DATE);
......@@ -66,6 +68,15 @@ public class RealmMessage extends RealmObject {
messageJson.put(GROUPABLE, true);
}
long editedAt = 0L;
JSONObject editedAtObj = messageJson.optJSONObject(EDITED_AT);
if (editedAtObj != null) {
editedAt = editedAtObj.optLong(JsonConstants.DATE);
}
messageJson.remove(EDITED_AT);
messageJson.put(EDITED_AT, editedAt);
return messageJson;
}
......@@ -165,6 +176,14 @@ public class RealmMessage extends RealmObject {
this.avatar = avatar;
}
public long getEditedAt() {
return editedAt;
}
public void setEditedAt(long editedAt) {
this.editedAt = editedAt;
}
public Message asMessage() {
return Message.builder()
.setId(_id)
......@@ -177,6 +196,7 @@ public class RealmMessage extends RealmObject {
.setGroupable(groupable)
.setAlias(alias)
.setAvatar(avatar)
.setEditedAt(editedAt)
.setAttachments(getCoreAttachments())
.setWebContents(getWebContents())
.build();
......
......@@ -71,6 +71,7 @@ public class RealmMessageRepository extends RealmRepository implements MessageRe
realmMessage.setTimestamp(message.getTimestamp());
realmMessage.setRoomId(message.getRoomId());
realmMessage.setMessage(message.getMessage());
realmMessage.setEditedAt(message.getEditedAt());
RealmUser realmUser = realmMessage.getUser();
if (realmUser == null) {
......
......@@ -12,6 +12,7 @@ import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
......@@ -135,8 +136,8 @@ public class MessageFormLayout extends LinearLayout {
}
}
private TextView getEditor() {
return (TextView) composer.findViewById(R.id.editor);
private EditText getEditor() {
return (EditText) composer.findViewById(R.id.editor);
}
public final String getText() {
......@@ -144,11 +145,19 @@ public class MessageFormLayout extends LinearLayout {
}
public final void setText(final CharSequence text) {
final TextView editor = getEditor();
final EditText editor = getEditor();
editor.post(new Runnable() {
@Override
public void run() {
editor.setText(text);
if (text.length() > 0) {
editor.setSelection(text.length());
InputMethodManager inputMethodManager = (InputMethodManager) editor.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
editor.requestFocus();
inputMethodManager.showSoftInput(editor, 0);
}
}
});
}
......
......@@ -56,6 +56,7 @@ class MessageInteractor(private val messageRepository: MessageRepository,
.setMessage(messageText)
.setGroupable(false)
.setUser(sender)
.setEditedAt(0)
.build()
return messageRepository.save(message)
......@@ -66,6 +67,14 @@ class MessageInteractor(private val messageRepository: MessageRepository,
message.withSyncState(SyncState.NOT_SYNCED).withUser(sender))
}
fun update(message: Message, sender: User, content: String): Single<Boolean> {
return messageRepository.save(
message.withSyncState(SyncState.NOT_SYNCED)
.withUser(sender)
.withMessage(content)
.withEditedAt(message.editedAt + 1))
}
fun delete(message: Message): Single<Boolean> {
return messageRepository.delete(message)
}
......
......@@ -38,10 +38,16 @@ public abstract class Message {
@Nullable
public abstract String getAvatar();
public abstract long getEditedAt();
public abstract Message withSyncState(int syncState);
public abstract Message withUser(User user);
public abstract Message withMessage(String message);
public abstract Message withEditedAt(long editedAt);
public static Builder builder() {
return new AutoValue_Message.Builder();
}
......@@ -59,7 +65,7 @@ public abstract class Message {
public abstract Builder setTimestamp(long timestamp);
public abstract Builder setMessage(String msg);
public abstract Builder setMessage(String message);
public abstract Builder setUser(User user);
......@@ -73,6 +79,8 @@ public abstract class Message {
public abstract Builder setAvatar(String avatar);
public abstract Builder setEditedAt(long editedAt);
public abstract Message build();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment