diff --git a/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentEditActivity.java b/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentEditActivity.java
index 5fb78383..36cac205 100644
--- a/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentEditActivity.java
+++ b/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentEditActivity.java
@@ -162,7 +162,7 @@ public class DocumentEditActivity extends ActionBarActivity {
// Cancellable progress dialog
final ProgressDialog progressDialog = ProgressDialog.show(this,
- getString(R.string.document_editing_title),
+ getString(R.string.please_wait),
getString(R.string.document_editing_message), true, true,
new DialogInterface.OnCancelListener() {
@Override
diff --git a/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentViewActivity.java b/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentViewActivity.java
index 66508ec7..044df42a 100644
--- a/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentViewActivity.java
+++ b/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentViewActivity.java
@@ -30,6 +30,7 @@ import com.sismics.docs.adapter.FilePagerAdapter;
import com.sismics.docs.event.DocumentDeleteEvent;
import com.sismics.docs.event.DocumentEditEvent;
import com.sismics.docs.event.DocumentFullscreenEvent;
+import com.sismics.docs.event.FileDeleteEvent;
import com.sismics.docs.fragment.DocShareFragment;
import com.sismics.docs.listener.JsonHttpResponseHandler;
import com.sismics.docs.model.application.ApplicationContext;
@@ -205,7 +206,7 @@ public class DocumentViewActivity extends ActionBarActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.document_activity, menu);
+ inflater.inflate(R.menu.document_view_activity, menu);
return super.onCreateOptionsMenu(menu);
}
@@ -239,6 +240,10 @@ public class DocumentViewActivity extends ActionBarActivity {
startActivityForResult(intent, REQUEST_CODE_EDIT_DOCUMENT);
return true;
+ case R.id.delete_file:
+ deleteCurrentFile();
+ return true;
+
case R.id.delete_document:
deleteDocument();
return true;
@@ -273,6 +278,62 @@ public class DocumentViewActivity extends ActionBarActivity {
downloadFile(fileUrl, fileName, getTitle().toString(), getString(R.string.downloading_file, position + 1));
}
+ private void deleteCurrentFile() {
+ if (fileViewPager == null || filePagerAdapter == null) return;
+
+ final JSONObject file = filePagerAdapter.getObjectAt(fileViewPager.getCurrentItem());
+ if (file == null) return;
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+
+ builder.setTitle(R.string.delete_file_title)
+ .setMessage(R.string.delete_file_message)
+ .setCancelable(true)
+ .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ // Dismiss the confirmation dialog
+ dialog.dismiss();
+
+ // Show a progress dialog while deleting
+ final ProgressDialog progressDialog = ProgressDialog.show(DocumentViewActivity.this,
+ getString(R.string.please_wait),
+ getString(R.string.file_deleting_message), true, true,
+ new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ FileResource.cancel(DocumentViewActivity.this);
+ }
+ });
+
+ // Actual delete server call
+ final String fileId = file.optString("id");
+ FileResource.delete(DocumentViewActivity.this, fileId, new JsonHttpResponseHandler() {
+ @Override
+ public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
+ EventBus.getDefault().post(new FileDeleteEvent(fileId));
+ }
+
+ @Override
+ public void onAllFailure(int statusCode, Header[] headers, byte[] responseBytes, Throwable throwable) {
+ Toast.makeText(DocumentViewActivity.this, R.string.file_delete_failure, Toast.LENGTH_LONG).show();
+ }
+
+ @Override
+ public void onFinish() {
+ progressDialog.dismiss();
+ }
+ });
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ }
+ }).create().show();
+ }
+
/**
* Download the document (all files zipped).
*/
@@ -321,7 +382,7 @@ public class DocumentViewActivity extends ActionBarActivity {
// Show a progress dialog while deleting
final ProgressDialog progressDialog = ProgressDialog.show(DocumentViewActivity.this,
- getString(R.string.document_editing_title),
+ getString(R.string.please_wait),
getString(R.string.document_deleting_message), true, true,
new DialogInterface.OnCancelListener() {
@Override
@@ -394,6 +455,16 @@ public class DocumentViewActivity extends ActionBarActivity {
}
}
+ /**
+ * A file delete event has been fired.
+ *
+ * @param event File delete event
+ */
+ public void onEvent(FileDeleteEvent event) {
+ if (filePagerAdapter == null) return;
+ filePagerAdapter.remove(event.getFileId());
+ }
+
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (document == null) return;
diff --git a/docs-android/app/src/main/java/com/sismics/docs/adapter/FilePagerAdapter.java b/docs-android/app/src/main/java/com/sismics/docs/adapter/FilePagerAdapter.java
index 32e8b464..0170ad46 100644
--- a/docs-android/app/src/main/java/com/sismics/docs/adapter/FilePagerAdapter.java
+++ b/docs-android/app/src/main/java/com/sismics/docs/adapter/FilePagerAdapter.java
@@ -103,4 +103,22 @@ public class FilePagerAdapter extends PagerAdapter {
return files.optJSONObject(position);
}
+
+ /**
+ * Remove a file.
+ *
+ * @param fileId File ID
+ */
+ public void remove(String fileId) {
+ if (files == null || fileId == null) return;
+
+ for (int i = 0; i < files.length(); i++) {
+ JSONObject file = files.optJSONObject(i);
+ if (fileId.equals(file.optString("id"))) {
+ files.remove(i);
+ notifyDataSetChanged();
+ break;
+ }
+ }
+ }
}
diff --git a/docs-android/app/src/main/java/com/sismics/docs/event/FileDeleteEvent.java b/docs-android/app/src/main/java/com/sismics/docs/event/FileDeleteEvent.java
new file mode 100644
index 00000000..d7ac524b
--- /dev/null
+++ b/docs-android/app/src/main/java/com/sismics/docs/event/FileDeleteEvent.java
@@ -0,0 +1,31 @@
+package com.sismics.docs.event;
+
+/**
+ * File delete event.
+ *
+ * @author bgamard.
+ */
+public class FileDeleteEvent {
+ /**
+ * File ID.
+ */
+ private String fileId;
+
+ /**
+ * Create a document delete event.
+ *
+ * @param fileId File ID
+ */
+ public FileDeleteEvent(String fileId) {
+ this.fileId = fileId;
+ }
+
+ /**
+ * Getter of fileId.
+ *
+ * @return fileId
+ */
+ public String getFileId() {
+ return fileId;
+ }
+}
diff --git a/docs-android/app/src/main/java/com/sismics/docs/resource/FileResource.java b/docs-android/app/src/main/java/com/sismics/docs/resource/FileResource.java
index 1f7e4331..2e594817 100644
--- a/docs-android/app/src/main/java/com/sismics/docs/resource/FileResource.java
+++ b/docs-android/app/src/main/java/com/sismics/docs/resource/FileResource.java
@@ -30,6 +30,19 @@ public class FileResource extends BaseResource {
client.get(getApiUrl(context) + "/file/list?id=" + documentId, responseHandler);
}
+ /**
+ * DELETE /file/id.
+ *
+ * @param context Context
+ * @param id ID
+ * @param responseHandler Callback
+ */
+ public static void delete(Context context, String id, JsonHttpResponseHandler responseHandler) {
+ init(context);
+
+ client.delete(getApiUrl(context) + "/file/" + id, responseHandler);
+ }
+
/**
* PUT /file.
*
@@ -57,4 +70,13 @@ public class FileResource extends BaseResource {
params.put("file", is, "file", "application/octet-stream", true);
client.put(getApiUrl(context) + "/file", params, responseHandler);
}
+
+ /**
+ * Cancel pending requests.
+ *
+ * @param context Context
+ */
+ public static void cancel(Context context) {
+ client.cancelRequests(context, true);
+ }
}
diff --git a/docs-android/app/src/main/res/menu/document_activity.xml b/docs-android/app/src/main/res/menu/document_view_activity.xml
similarity index 88%
rename from docs-android/app/src/main/res/menu/document_activity.xml
rename to docs-android/app/src/main/res/menu/document_view_activity.xml
index f5b6123a..1a3a4d20 100644
--- a/docs-android/app/src/main/res/menu/document_activity.xml
+++ b/docs-android/app/src/main/res/menu/document_view_activity.xml
@@ -34,6 +34,12 @@
android:title="@string/download_document">
+ -
+
+
- Save
Edit document
Network error, please try again
- Please wait
+ Please wait
Sending your data
Delete document
Delete document
Really delete this document and all associated files?
Network error while deleting this document
Deleting document
+ Delete file
+ Really delete the current file?
+ Network error while deleting the current file
+ Deleting file
Error while reading the file
Sismics Docs
Uploading the new file to the document
Error uploading the new file
+ Delete current file