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

Reply via email to