diff --git a/docs-android/app/src/main/java/com/sismics/docs/MainApplication.java b/docs-android/app/src/main/java/com/sismics/docs/MainApplication.java
index 88924c12..c381cec1 100644
--- a/docs-android/app/src/main/java/com/sismics/docs/MainApplication.java
+++ b/docs-android/app/src/main/java/com/sismics/docs/MainApplication.java
@@ -16,14 +16,16 @@ import org.json.JSONObject;
public class MainApplication extends Application {
@Override
public void onCreate() {
- // Fetching /user/info from cache
+ // Fetching GET /user from cache
JSONObject json = PreferenceUtil.getCachedJson(getApplicationContext(), PreferenceUtil.PREF_CACHED_USER_INFO_JSON);
ApplicationContext.getInstance().setUserInfo(getApplicationContext(), json);
- // TODO Fullscreen preview
+ // TODO Tags in drawer & search on select
// TODO Sharing
// TODO Error feedback
// TODO Printing
+ // TODO Fullscreen preview
+ // TODO Caching preferences
super.onCreate();
}
diff --git a/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentActivity.java b/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentActivity.java
index 57996b65..78d01f25 100644
--- a/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentActivity.java
+++ b/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentActivity.java
@@ -19,6 +19,7 @@ import android.widget.TextView;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.sismics.docs.R;
import com.sismics.docs.adapter.FilePagerAdapter;
+import com.sismics.docs.event.DocumentFullscreenEvent;
import com.sismics.docs.model.application.ApplicationContext;
import com.sismics.docs.resource.FileResource;
import com.sismics.docs.util.PreferenceUtil;
@@ -31,6 +32,8 @@ import org.json.JSONObject;
import java.util.Date;
+import de.greenrobot.event.EventBus;
+
/**
* Document activity.
*
@@ -92,6 +95,8 @@ public class DocumentActivity extends ActionBarActivity {
// Grab the document
refreshDocument(document);
+
+ EventBus.getDefault().register(this);
}
/**
@@ -223,4 +228,14 @@ public class DocumentActivity extends ActionBarActivity {
request.setDescription(description);
downloadManager.enqueue(request);
}
+
+ public void onEvent(DocumentFullscreenEvent event) {
+ findViewById(R.id.detailLayout).setVisibility(event.isFullscreen() ? View.GONE : View.VISIBLE);
+ }
+
+ @Override
+ protected void onDestroy() {
+ EventBus.getDefault().unregister(this);
+ super.onDestroy();
+ }
}
\ No newline at end of file
diff --git a/docs-android/app/src/main/java/com/sismics/docs/activity/MainActivity.java b/docs-android/app/src/main/java/com/sismics/docs/activity/MainActivity.java
index ade0539f..d16bf54e 100644
--- a/docs-android/app/src/main/java/com/sismics/docs/activity/MainActivity.java
+++ b/docs-android/app/src/main/java/com/sismics/docs/activity/MainActivity.java
@@ -13,13 +13,20 @@ import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ListView;
import android.widget.TextView;
+import com.loopj.android.http.JsonHttpResponseHandler;
import com.sismics.docs.R;
+import com.sismics.docs.adapter.TagListAdapter;
import com.sismics.docs.event.SearchEvent;
import com.sismics.docs.model.application.ApplicationContext;
import com.sismics.docs.provider.RecentSuggestionsProvider;
+import com.sismics.docs.resource.TagResource;
+import org.apache.http.Header;
import org.json.JSONObject;
import de.greenrobot.event.EventBus;
@@ -49,7 +56,7 @@ public class MainActivity extends ActionBarActivity {
setContentView(R.layout.main_activity);
// Enable ActionBar app icon to behave as action to toggle nav drawer
- DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
+ final DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
@@ -68,6 +75,31 @@ public class MainActivity extends ActionBarActivity {
TextView emailTextView = (TextView) findViewById(R.id.emailTextView);
emailTextView.setText(userInfo.optString("email"));
+ // Get tag list to fill the drawer
+ final ListView tagListView = (ListView) findViewById(R.id.tagListView);
+ TagResource.stats(this, new JsonHttpResponseHandler() {
+ @Override
+ public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
+ tagListView.setAdapter(new TagListAdapter(response.optJSONArray("stats")));
+ }
+ });
+
+ // Click on a tag
+ tagListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ TagListAdapter adapter = (TagListAdapter) tagListView.getAdapter();
+ if (adapter == null) return;
+ JSONObject tag = adapter.getItem(position);
+ if (tag == null) return;
+ SearchView searchView = (SearchView) searchItem.getActionView();
+ searchView.setQuery("tag:" + tag.optString("name"), true);
+ searchView.setIconified(false);
+ searchView.clearFocus();
+ drawerLayout.closeDrawers();
+ }
+ });
+
handleIntent(getIntent());
}
diff --git a/docs-android/app/src/main/java/com/sismics/docs/adapter/TagListAdapter.java b/docs-android/app/src/main/java/com/sismics/docs/adapter/TagListAdapter.java
new file mode 100644
index 00000000..4924234e
--- /dev/null
+++ b/docs-android/app/src/main/java/com/sismics/docs/adapter/TagListAdapter.java
@@ -0,0 +1,77 @@
+package com.sismics.docs.adapter;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
+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.sismics.docs.R;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+/**
+ * Tag list adapter.
+ *
+ * @author bgamard.
+ */
+public class TagListAdapter extends BaseAdapter {
+ /**
+ * Tags.
+ */
+ private JSONArray tags;
+
+ /**
+ * Tag list adapter.
+ *
+ * @param tags Tags
+ */
+ public TagListAdapter(JSONArray tags) {
+ this.tags = tags;
+ }
+
+ @Override
+ public int getCount() {
+ return tags.length();
+ }
+
+ @Override
+ public JSONObject getItem(int position) {
+ return tags.optJSONObject(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.tag_list_item, parent, false);
+ }
+
+ // Fill the view
+ JSONObject tag = getItem(position);
+ TextView tagTextView = (TextView) view.findViewById(R.id.tagTextView);
+ tagTextView.setText(tag.optString("name"));
+ TextView tagCountTextView = (TextView) view.findViewById(R.id.tagCountTextView);
+ tagCountTextView.setText(tag.optString("count"));
+
+ // Label color filtering
+ ImageView labelImageView = (ImageView) view.findViewById(R.id.labelImageView);
+ Drawable labelDrawable = labelImageView.getDrawable().mutate();
+ labelDrawable.setColorFilter(Color.parseColor(tag.optString("color")), PorterDuff.Mode.MULTIPLY);
+ labelImageView.setImageDrawable(labelDrawable);
+ labelImageView.invalidate();
+
+ return view;
+ }
+}
diff --git a/docs-android/app/src/main/java/com/sismics/docs/event/DocumentFullscreenEvent.java b/docs-android/app/src/main/java/com/sismics/docs/event/DocumentFullscreenEvent.java
new file mode 100644
index 00000000..fda86776
--- /dev/null
+++ b/docs-android/app/src/main/java/com/sismics/docs/event/DocumentFullscreenEvent.java
@@ -0,0 +1,17 @@
+package com.sismics.docs.event;
+
+/**
+ * @author bgamard.
+ */
+public class DocumentFullscreenEvent {
+
+ private boolean fullscreen;
+
+ public DocumentFullscreenEvent(boolean fullscreen) {
+ this.fullscreen = fullscreen;
+ }
+
+ public boolean isFullscreen() {
+ return fullscreen;
+ }
+}
diff --git a/docs-android/app/src/main/java/com/sismics/docs/resource/TagResource.java b/docs-android/app/src/main/java/com/sismics/docs/resource/TagResource.java
new file mode 100644
index 00000000..9e70ef24
--- /dev/null
+++ b/docs-android/app/src/main/java/com/sismics/docs/resource/TagResource.java
@@ -0,0 +1,24 @@
+package com.sismics.docs.resource;
+
+import android.content.Context;
+
+import com.loopj.android.http.JsonHttpResponseHandler;
+
+/**
+ * Access to /tag API.
+ *
+ * @author bgamard
+ */
+public class TagResource extends BaseResource {
+ /**
+ * GET /tag/stats.
+ *
+ * @param context Context
+ * @param responseHandler Callback
+ */
+ public static void stats(Context context, JsonHttpResponseHandler responseHandler) {
+ init(context);
+
+ client.get(getApiUrl(context) + "/tag/stats", responseHandler);
+ }
+}
diff --git a/docs-android/app/src/main/res/drawable-xhdpi/ic_label_white_24dp.png b/docs-android/app/src/main/res/drawable-xhdpi/ic_label_white_24dp.png
new file mode 100644
index 00000000..3baa5154
Binary files /dev/null and b/docs-android/app/src/main/res/drawable-xhdpi/ic_label_white_24dp.png differ
diff --git a/docs-android/app/src/main/res/drawable-xxhdpi/ic_label_white_24dp.png b/docs-android/app/src/main/res/drawable-xxhdpi/ic_label_white_24dp.png
new file mode 100644
index 00000000..3a5cf280
Binary files /dev/null and b/docs-android/app/src/main/res/drawable-xxhdpi/ic_label_white_24dp.png differ
diff --git a/docs-android/app/src/main/res/layout/doc_list_item.xml b/docs-android/app/src/main/res/layout/doc_list_item.xml
index 85cf044c..17a480e0 100644
--- a/docs-android/app/src/main/res/layout/doc_list_item.xml
+++ b/docs-android/app/src/main/res/layout/doc_list_item.xml
@@ -3,7 +3,6 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
android:padding="12dp"
android:clickable="true"
android:focusable="true"
diff --git a/docs-android/app/src/main/res/layout/document_activity.xml b/docs-android/app/src/main/res/layout/document_activity.xml
index 49f1595c..832165de 100644
--- a/docs-android/app/src/main/res/layout/document_activity.xml
+++ b/docs-android/app/src/main/res/layout/document_activity.xml
@@ -6,6 +6,7 @@
android:layout_height="match_parent">
+ android:layout_height="match_parent"/>
+ android:indeterminate="true"/>
diff --git a/docs-android/app/src/main/res/layout/file_viewpager_item.xml b/docs-android/app/src/main/res/layout/file_viewpager_item.xml
index fc1e6846..79513525 100644
--- a/docs-android/app/src/main/res/layout/file_viewpager_item.xml
+++ b/docs-android/app/src/main/res/layout/file_viewpager_item.xml
@@ -10,13 +10,13 @@
android:layout_height="15dip"
android:id="@+id/fileProgressBar"
android:indeterminate="false"
- android:layout_centerInParent="true" />
+ android:layout_centerInParent="true"/>
+ android:src="@drawable/ic_launcher"/>
diff --git a/docs-android/app/src/main/res/layout/tag_list_item.xml b/docs-android/app/src/main/res/layout/tag_list_item.xml
new file mode 100644
index 00000000..2724a7b7
--- /dev/null
+++ b/docs-android/app/src/main/res/layout/tag_list_item.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file