Skip to content
This repository was archived by the owner on Jul 25, 2024. It is now read-only.

Commit 133ebaa

Browse files
kunall17Sam1301
authored andcommitted
Fetch raw message content before editing.
1 parent cb6c4a7 commit 133ebaa

File tree

4 files changed

+146
-60
lines changed

4 files changed

+146
-60
lines changed

app/src/main/java/com/zulip/android/activities/MessageListFragment.java

Lines changed: 107 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import android.support.v7.app.AppCompatActivity;
1414
import android.support.v7.widget.LinearLayoutManager;
1515
import android.support.v7.widget.RecyclerView;
16+
import android.text.TextUtils;
1617
import android.util.Log;
1718
import android.util.SparseArray;
1819
import android.view.LayoutInflater;
@@ -39,6 +40,9 @@
3940
import com.zulip.android.networking.AsyncGetOldMessages;
4041
import com.zulip.android.networking.ZulipAsyncPushTask;
4142
import com.zulip.android.networking.response.EditResponse;
43+
import com.zulip.android.networking.response.RawMessageResponse;
44+
import com.zulip.android.networking.util.DefaultCallback;
45+
import com.zulip.android.util.CommonProgressDialog;
4246
import com.zulip.android.util.Constants;
4347
import com.zulip.android.util.MessageListener;
4448
import com.zulip.android.util.MutedTopics;
@@ -174,7 +178,7 @@ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
174178
}
175179
}
176180
});
177-
mListener.setLayoutBehaviour(linearLayoutManager,adapter);
181+
mListener.setLayoutBehaviour(linearLayoutManager, adapter);
178182
return view;
179183
}
180184

@@ -398,68 +402,110 @@ private void editMessage(final Message message, final int position) {
398402
if (timeSinceMessageSend > maxMessageContentEditLimit) {
399403
Toast.makeText(getContext(), R.string.maximum_time_limit_error, Toast.LENGTH_SHORT).show();
400404
} else {
401-
final View dialogView = View.inflate(getContext(),
402-
R.layout.message_edit_dialog, null);
403-
//Pop up a dialog box with previous message content
404-
final AlertDialog dialog = new AlertDialog.Builder(getContext())
405-
.setTitle(R.string.edit_message)
406-
.setView(dialogView)
407-
.setPositiveButton(android.R.string.ok, null)
408-
.setNegativeButton(android.R.string.cancel, null)
409-
.create();
410-
dialog.getWindow().setSoftInputMode(
411-
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
412-
dialog.show();
413-
414-
final EditText dialogMessageEditText = (EditText) dialogView.findViewById(R.id.message_content);
415-
dialogMessageEditText.setText(message.getContent().trim());
416-
417-
//Move cursor to end of text
418-
dialogMessageEditText.setSelection(dialogMessageEditText.getText().length());
419-
420-
//OK button listener
421-
dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
422-
//Show edit option only on if current user send it.
423-
@Override
424-
public void onClick(View view) {
425-
dialog.cancel();
426-
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
427-
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
428-
//Start a progress dialog indicating editing message
429-
final ProgressDialog progress = new ProgressDialog(getActivity());
430-
progress.setCancelable(false);
431-
progress.setMessage(app.getString(R.string.editing_message));
432-
progress.show();
433-
final String editedMessageContent =
434-
dialogMessageEditText.getText().toString().length() == 0 ? getString(R.string.default_delete_text) : dialogMessageEditText.getText().toString();
435-
436-
app.getZulipServices()
437-
.editMessage(String.valueOf(message.getID()), editedMessageContent)
438-
.enqueue(new Callback<EditResponse>() {
439-
@Override
440-
public void onResponse(Call<EditResponse> call, Response<EditResponse> response) {
441-
if (response.isSuccessful()) {
442-
message.setContent(editedMessageContent);
443-
message.setFormattedContent(editedMessageContent);
444-
adapter.notifyItemChanged(position);
445-
progress.dismiss();
446-
Toast.makeText(getActivity(), R.string.message_edited, Toast.LENGTH_SHORT).show();
447-
} else {
448-
progress.dismiss();
449-
Toast.makeText(getActivity(), R.string.message_edit_failed, Toast.LENGTH_SHORT).show();
450-
}
451-
}
405+
final CommonProgressDialog commonProgressDialog = new CommonProgressDialog(getContext());
406+
commonProgressDialog.showWithMessage(getString(R.string.fetch_edit_message));
407+
app.getZulipServices()
408+
.fetchRawMessage(message.getID())
409+
.enqueue(new DefaultCallback<RawMessageResponse>() {
410+
@Override
411+
public void onSuccess(Call<RawMessageResponse> call, Response<RawMessageResponse> response) {
412+
RawMessageResponse messageResponse = response.body();
413+
commonProgressDialog.dismiss();
414+
showEditMessageDialog(message, messageResponse.getRawContent(), position);
415+
}
416+
417+
@Override
418+
public void onError(Call<RawMessageResponse> call, Response<RawMessageResponse> response) {
419+
RawMessageResponse messageResponse = response.body();
420+
if (messageResponse != null) {
421+
Toast.makeText(getActivity(), (TextUtils.isEmpty(messageResponse.getMsg())) ? getString(R.string.message_edit_failed) :
422+
messageResponse.getMsg(), Toast.LENGTH_SHORT).show();
423+
} else {
424+
Toast.makeText(getActivity(), R.string.message_edit_failed, Toast.LENGTH_SHORT).show();
425+
}
426+
//If something fails msg will have something to display
427+
commonProgressDialog.dismiss();
428+
}
429+
430+
@Override
431+
public void onFailure(Call<RawMessageResponse> call, Throwable t) {
432+
super.onFailure(call, t);
433+
commonProgressDialog.dismiss();
434+
Toast.makeText(getActivity(), R.string.message_edit_failed, Toast.LENGTH_SHORT).show();
435+
}
436+
});
437+
}
438+
}
439+
440+
private void showEditMessageDialog(final Message message, final String rawContent, final int position) {
441+
442+
final View dialogView = View.inflate(getContext(),
443+
R.layout.message_edit_dialog, null);
444+
//Pop up a dialog box with previous message content
445+
final AlertDialog dialog = new AlertDialog.Builder(getContext())
446+
.setTitle(R.string.edit_message)
447+
.setView(dialogView)
448+
.setPositiveButton(android.R.string.ok, null)
449+
.setNegativeButton(android.R.string.cancel, null)
450+
.create();
451+
dialog.getWindow().setSoftInputMode(
452+
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
453+
dialog.show();
454+
455+
final EditText dialogMessageEditText = (EditText) dialogView.findViewById(R.id.message_content);
456+
dialogMessageEditText.setText(rawContent);
452457

453-
@Override
454-
public void onFailure(Call<EditResponse> call, Throwable t) {
458+
//Move cursor to end of text
459+
dialogMessageEditText.setSelection(dialogMessageEditText.getText().length());
460+
461+
//OK button listener
462+
dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
463+
//Show edit option only on if current user send it.
464+
@Override
465+
public void onClick(View view) {
466+
dialog.cancel();
467+
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
468+
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
469+
//Start a progress dialog indicating editing message
470+
final ProgressDialog progress = new ProgressDialog(getActivity());
471+
progress.setCancelable(false);
472+
progress.setMessage(app.getString(R.string.editing_message));
473+
progress.show();
474+
final String editedMessageContent =
475+
dialogMessageEditText.getText().toString().length() == 0 ? getString(R.string.default_delete_text) : dialogMessageEditText.getText().toString();
476+
477+
if (editedMessageContent.equals(rawContent)) {
478+
Toast.makeText(getActivity(), R.string.no_edit, Toast.LENGTH_SHORT).show();
479+
progress.dismiss();
480+
return;
481+
}
482+
483+
app.getZulipServices()
484+
.editMessage(String.valueOf(message.getID()), editedMessageContent)
485+
.enqueue(new Callback<EditResponse>() {
486+
@Override
487+
public void onResponse(Call<EditResponse> call, Response<EditResponse> response) {
488+
if (response.isSuccessful()) {
489+
message.setContent(editedMessageContent);
490+
message.setFormattedContent(editedMessageContent);
491+
adapter.notifyItemChanged(position);
492+
progress.dismiss();
493+
Toast.makeText(getActivity(), R.string.message_edited, Toast.LENGTH_SHORT).show();
494+
} else {
455495
progress.dismiss();
456-
ZLog.logException(t);
457496
Toast.makeText(getActivity(), R.string.message_edit_failed, Toast.LENGTH_SHORT).show();
458497
}
459-
});
460-
}
461-
});
462-
}
498+
}
499+
500+
@Override
501+
public void onFailure(Call<EditResponse> call, Throwable t) {
502+
progress.dismiss();
503+
ZLog.logException(t);
504+
Toast.makeText(getActivity(), R.string.message_edit_failed, Toast.LENGTH_SHORT).show();
505+
}
506+
});
507+
}
508+
});
463509
}
464510

465511
@SuppressWarnings("deprecation")
@@ -713,7 +759,8 @@ public interface Listener {
713759

714760
void clearChatBox();
715761

716-
void setLayoutBehaviour(LinearLayoutManager linearLayoutManager , RecyclerMessageAdapter adapter);
762+
void setLayoutBehaviour(LinearLayoutManager linearLayoutManager, RecyclerMessageAdapter adapter);
763+
717764
}
718765

719766
public void showLatestMessages() {
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.zulip.android.networking.response;
2+
3+
4+
import com.google.gson.annotations.SerializedName;
5+
6+
/**
7+
* Used for fetching the raw content of any message (in markdown format)
8+
* <p>
9+
* example : {"msg":"","result":"success","raw_content":":+1: texthere\n"}
10+
*/
11+
public class RawMessageResponse {
12+
13+
@SerializedName("msg")
14+
private String msg;
15+
16+
@SerializedName("result")
17+
private String result;
18+
19+
@SerializedName("raw_content")
20+
private String rawContent;
21+
22+
public String getMsg() {
23+
return msg;
24+
}
25+
26+
public String getResult() {
27+
return result;
28+
}
29+
30+
public String getRawContent() {
31+
return rawContent;
32+
}
33+
}

app/src/main/java/com/zulip/android/service/ZulipServices.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.zulip.android.networking.response.EditResponse;
55
import com.zulip.android.networking.response.GetMessagesResponse;
66
import com.zulip.android.networking.response.LoginResponse;
7+
import com.zulip.android.networking.response.RawMessageResponse;
78
import com.zulip.android.networking.response.UploadResponse;
89
import com.zulip.android.networking.response.UserConfigurationResponse;
910
import com.zulip.android.networking.response.ZulipBackendResponse;
@@ -65,4 +66,7 @@ Call<GetMessagesResponse> getMessages(@Query("anchor") String anchor,
6566
@FormUrlEncoded
6667
@PATCH("v1/messages/{id}")
6768
Call<EditResponse> editMessage(@Path("id") String messageId, @Field("content") String messageContent);
69+
70+
@GET("v1/messages/{id}")
71+
Call<RawMessageResponse> fetchRawMessage(@Path("id") int messageId);
6872
}

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,4 +151,6 @@
151151
<string name="connecting_to_server">Connecting to server</string>
152152
<string name="refreshing">Refreshing</string>
153153
<string name="logging_out">Logging out</string>
154+
<string name="fetch_edit_message">Preparing Message for edit</string>
155+
<string name="no_edit">No edits detected</string>
154156
</resources>

0 commit comments

Comments
 (0)