Brion VIBBER has submitted this change and it was merged. Change subject: Show error message if saving fails & offer to retry ......................................................................
Show error message if saving fails & offer to retry Also introduce EditingException to handle non-network cases of exceptions. Change-Id: I17b9afdb501020e41ede4b4af5b1c03422f1336b --- M wikipedia/res/values/strings.xml M wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java M wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java A wikipedia/src/main/java/org/wikipedia/editing/EditingException.java 4 files changed, 62 insertions(+), 9 deletions(-) Approvals: Brion VIBBER: Verified; Looks good to me, approved diff --git a/wikipedia/res/values/strings.xml b/wikipedia/res/values/strings.xml index c7fe2ed..0978fd9 100644 --- a/wikipedia/res/values/strings.xml +++ b/wikipedia/res/values/strings.xml @@ -48,4 +48,7 @@ <string name="edit_section_error_retry">Retry</string> <string name="dialog_saving_in_progress">Saving...</string> <string name="edit_saved_successfully">Edit saved!</string> + <string name="dialog_message_edit_failed">Edit failed!</string> + <string name="dialog_message_edit_failed_retry">Retry</string> + <string name="dialog_message_edit_failed_cancel">Cancel</string> </resources> \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java b/wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java index b8ff30e..ee634ce 100644 --- a/wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java +++ b/wikipedia/src/main/java/org/wikipedia/editing/DoEditTask.java @@ -47,9 +47,10 @@ public String processResult(ApiResult result) throws Throwable { JSONObject resultJSON = result.asObject(); Log.d("Wikipedia", resultJSON.toString(4)); - if (resultJSON.has("edit")) { - return resultJSON.optJSONObject("edit").optString("result"); + if (resultJSON.has("error")) { + JSONObject errorJSON = resultJSON.optJSONObject("error"); + throw new EditingException(errorJSON.optString("code"), errorJSON.optString("info")); } - throw new RuntimeException("Edit failed. Handle all cases, will you?"); + return resultJSON.optJSONObject("edit").optString("result"); } } diff --git a/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java b/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java index c7401e0..a725ea1 100644 --- a/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java +++ b/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java @@ -1,14 +1,18 @@ package org.wikipedia.editing; import android.app.Activity; +import android.app.AlertDialog; import android.app.ProgressDialog; +import android.content.DialogInterface; import android.os.Bundle; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; +import com.github.kevinsawicki.http.HttpRequest; import org.wikipedia.PageTitle; import org.wikipedia.R; import org.wikipedia.Utils; @@ -68,19 +72,45 @@ } private void doSave() { - final ProgressDialog dialog = new ProgressDialog(this); - dialog.setIndeterminate(true); - dialog.setCancelable(false); - dialog.setMessage(getString(R.string.dialog_saving_in_progress)); + final ProgressDialog progressDialog = new ProgressDialog(this); + progressDialog.setIndeterminate(true); + progressDialog.setCancelable(false); + progressDialog.setMessage(getString(R.string.dialog_saving_in_progress)); new DoEditTask(this, title, sectionText.getText().toString(), section.getId()) { @Override public void onBeforeExecute() { - dialog.show(); + progressDialog.show(); + } + + @Override + public void onCatch(Throwable caught) { + if (!(caught instanceof HttpRequest.HttpRequestException)) { + throw new RuntimeException(caught); + } + Log.d("Wikipedia", caught.toString()); + final AlertDialog retryDialog = new AlertDialog.Builder(EditSectionActivity.this) + .setMessage(R.string.dialog_message_edit_failed) + .setPositiveButton(R.string.dialog_message_edit_failed_retry, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + doSave(); + dialog.dismiss(); + progressDialog.dismiss(); + } + }) + .setNegativeButton(R.string.dialog_message_edit_failed_cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + progressDialog.dismiss(); + } + }).create(); + retryDialog.show(); } @Override public void onFinish(String result) { - dialog.hide(); + progressDialog.hide(); setResult(EditHandler.RESULT_REFRESH_PAGE); Toast.makeText(EditSectionActivity.this, R.string.edit_saved_successfully, Toast.LENGTH_LONG).show(); finish(); diff --git a/wikipedia/src/main/java/org/wikipedia/editing/EditingException.java b/wikipedia/src/main/java/org/wikipedia/editing/EditingException.java new file mode 100644 index 0000000..49219c2 --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/editing/EditingException.java @@ -0,0 +1,19 @@ +package org.wikipedia.editing; + +public class EditingException extends Exception { + private final String code; + private final String info; + + public EditingException(String code, String info) { + this.code = code; + this.info = info; + } + + public String getCode() { + return code; + } + + public String getMessage() { + return info; + } +} -- To view, visit https://gerrit.wikimedia.org/r/107573 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I17b9afdb501020e41ede4b4af5b1c03422f1336b Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Yuvipanda <yuvipa...@gmail.com> Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits