diff --git a/docs-android/app/app.iml b/docs-android/app/app.iml
index afd2300c..0bab8df3 100644
--- a/docs-android/app/app.iml
+++ b/docs-android/app/app.iml
@@ -71,12 +71,11 @@
-
+
-
+
-
@@ -84,17 +83,16 @@
-
-
-
-
+
-
+
+
+
diff --git a/docs-android/app/build.gradle b/docs-android/app/build.gradle
index e162b17a..ae3b0aeb 100644
--- a/docs-android/app/build.gradle
+++ b/docs-android/app/build.gradle
@@ -3,7 +3,7 @@ buildscript {
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:1.3.0'
+ classpath 'com.android.tools.build:gradle:1.5.0'
}
}
apply plugin: 'com.android.application'
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 ea2e8cbe..1e056730 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
@@ -31,6 +31,7 @@ import android.widget.Toast;
import com.sismics.docs.R;
import com.sismics.docs.adapter.AclListAdapter;
+import com.sismics.docs.adapter.CommentListAdapter;
import com.sismics.docs.adapter.FilePagerAdapter;
import com.sismics.docs.event.DocumentDeleteEvent;
import com.sismics.docs.event.DocumentEditEvent;
@@ -40,6 +41,7 @@ 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;
+import com.sismics.docs.resource.CommentResource;
import com.sismics.docs.resource.DocumentResource;
import com.sismics.docs.resource.FileResource;
import com.sismics.docs.service.FileUploadService;
@@ -241,6 +243,9 @@ public class DocumentViewActivity extends AppCompatActivity {
}
});
+ // Grab the comments
+ updateComments();
+
// Grab the attached files
updateFiles();
@@ -268,6 +273,15 @@ public class DocumentViewActivity extends AppCompatActivity {
}
return true;
+ case R.id.comments:
+ drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
+ if (drawerLayout.isDrawerVisible(GravityCompat.START)) {
+ drawerLayout.closeDrawer(GravityCompat.START);
+ } else {
+ drawerLayout.openDrawer(GravityCompat.START);
+ }
+ return true;
+
case R.id.download_file:
downloadCurrentFile();
return true;
@@ -572,6 +586,42 @@ public class DocumentViewActivity extends AppCompatActivity {
});
}
+ /**
+ * Refresh comments list.
+ */
+ private void updateComments() {
+ if (document == null) return;
+
+ final View progressBar = findViewById(R.id.commentProgressView);
+ final TextView emptyView = (TextView) findViewById(R.id.commentEmptyView);
+ final ListView listView = (ListView) findViewById(R.id.commentListView);
+ progressBar.setVisibility(View.VISIBLE);
+ emptyView.setVisibility(View.GONE);
+ listView.setVisibility(View.GONE);
+
+ CommentResource.list(this, document.optString("id"), new JsonHttpResponseHandler() {
+ @Override
+ public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
+ JSONArray comments = response.optJSONArray("comments");
+ listView.setAdapter(new CommentListAdapter(comments));
+ listView.setVisibility(View.VISIBLE);
+ progressBar.setVisibility(View.GONE);
+ if (comments.length() == 0) {
+ listView.setVisibility(View.GONE);
+ emptyView.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onAllFailure(int statusCode, Header[] headers, byte[] responseBytes, Throwable throwable) {
+ emptyView.setText(R.string.error_loading_comments);
+ progressBar.setVisibility(View.GONE);
+ listView.setVisibility(View.GONE);
+ emptyView.setVisibility(View.VISIBLE);
+ }
+ });
+ }
+
/**
* Refresh files list.
*/
diff --git a/docs-android/app/src/main/java/com/sismics/docs/adapter/CommentListAdapter.java b/docs-android/app/src/main/java/com/sismics/docs/adapter/CommentListAdapter.java
new file mode 100644
index 00000000..7ef0384d
--- /dev/null
+++ b/docs-android/app/src/main/java/com/sismics/docs/adapter/CommentListAdapter.java
@@ -0,0 +1,102 @@
+package com.sismics.docs.adapter;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.text.format.DateFormat;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.androidquery.AQuery;
+import com.androidquery.callback.BitmapAjaxCallback;
+import com.sismics.docs.R;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Comment list adapter.
+ *
+ * @author bgamard.
+ */
+public class CommentListAdapter extends BaseAdapter {
+ /**
+ * AQuery.
+ */
+ private AQuery aq;
+
+ /**
+ * Tags.
+ */
+ private List commentList = new ArrayList<>();
+
+ /**
+ * Comment list adapter.
+ *
+ * @param commentsArray Comments
+ */
+ public CommentListAdapter(JSONArray commentsArray) {
+ for (int i = 0; i < commentsArray.length(); i++) {
+ commentList.add(commentsArray.optJSONObject(i));
+ }
+ }
+
+ @Override
+ public int getCount() {
+ return commentList.size();
+ }
+
+ @Override
+ public JSONObject getItem(int position) {
+ return commentList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return getItem(position).optString("id").hashCode();
+ }
+
+ @Override
+ public View getView(int position, View view, ViewGroup parent) {
+ if (view == null) {
+ LayoutInflater vi = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ view = vi.inflate(R.layout.comment_list_item, parent, false);
+ }
+
+ if (aq == null) {
+ aq = new AQuery(view);
+ } else {
+ aq.recycle(view);
+ }
+
+ // Fill the view
+ JSONObject comment = getItem(position);
+ TextView creatorTextView = (TextView) view.findViewById(R.id.creatorTextView);
+ TextView dateTextView = (TextView) view.findViewById(R.id.dateTextView);
+ TextView contentTextView = (TextView) view.findViewById(R.id.contentTextView);
+ ImageView gravatarImageView = (ImageView) view.findViewById(R.id.gravatarImageView);
+ creatorTextView.setText(comment.optString("creator"));
+ dateTextView.setText(DateFormat.getDateFormat(dateTextView.getContext()).format(new Date(comment.optLong("create_date"))));
+ contentTextView.setText(comment.optString("content"));
+
+ // Gravatar image
+ String gravatarUrl = "http://www.gravatar.com/avatar/" + comment.optString("creator_gravatar") + "?s=128d=identicon";
+ if (aq.shouldDelay(position, view, parent, gravatarUrl)) {
+ aq.id(gravatarImageView).image((Bitmap) null);
+ } else {
+ aq.id(gravatarImageView).image(new BitmapAjaxCallback()
+ .url(gravatarUrl)
+ .animation(AQuery.FADE_IN_NETWORK)
+ );
+ }
+
+ return view;
+ }
+}
diff --git a/docs-android/app/src/main/java/com/sismics/docs/resource/CommentResource.java b/docs-android/app/src/main/java/com/sismics/docs/resource/CommentResource.java
new file mode 100644
index 00000000..cf7bec0b
--- /dev/null
+++ b/docs-android/app/src/main/java/com/sismics/docs/resource/CommentResource.java
@@ -0,0 +1,35 @@
+package com.sismics.docs.resource;
+
+import android.content.Context;
+
+import com.sismics.docs.listener.JsonHttpResponseHandler;
+
+
+/**
+ * Access to /comment API.
+ *
+ * @author bgamard
+ */
+public class CommentResource extends BaseResource {
+ /**
+ * GET /comment/id.
+ *
+ * @param context Context
+ * @param documentId Document ID
+ * @param responseHandler Callback
+ */
+ public static void list(Context context, String documentId, JsonHttpResponseHandler responseHandler) {
+ init(context);
+
+ client.get(getApiUrl(context) + "/comment/" + documentId, 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/layout/comment_list_item.xml b/docs-android/app/src/main/res/layout/comment_list_item.xml
new file mode 100644
index 00000000..7396aac6
--- /dev/null
+++ b/docs-android/app/src/main/res/layout/comment_list_item.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs-android/app/src/main/res/layout/document_view_activity.xml b/docs-android/app/src/main/res/layout/document_view_activity.xml
index 19744f59..7a0d3cf9 100644
--- a/docs-android/app/src/main/res/layout/document_view_activity.xml
+++ b/docs-android/app/src/main/res/layout/document_view_activity.xml
@@ -37,6 +37,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
- All languages
Toggle informations
Who can access
+ Show comments
+ Comments
+ No comments
+ Error loading comments