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 89aba390..5a2260a5 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 @@ -4,10 +4,18 @@ import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.MenuItem; import android.widget.ArrayAdapter; -import android.widget.MultiAutoCompleteTextView; import android.widget.Spinner; import com.sismics.docs.R; +import com.sismics.docs.adapter.TagAutoCompleteAdapter; +import com.sismics.docs.ui.view.TagsCompleteTextView; +import com.sismics.docs.util.PreferenceUtil; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; /** * Document edition activity. @@ -34,9 +42,21 @@ public class DocumentEditActivity extends ActionBarActivity { languageSpinner.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, new String[] { "French", "English", "Japanese" })); - MultiAutoCompleteTextView tagsEditText = (MultiAutoCompleteTextView) findViewById(R.id.tagsEditText); - tagsEditText.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, - new String[]{"Caluire", "Appartement", "Banque", "Assurance"})); + JSONObject tags = PreferenceUtil.getCachedJson(this, PreferenceUtil.PREF_CACHED_TAGS_JSON); + if (tags == null) { + finish(); + return; + } + JSONArray tagArray = tags.optJSONArray("stats"); + + List tagList = new ArrayList<>(); + for (int i = 0; i < tagArray.length(); i++) { + tagList.add(tagArray.optJSONObject(i)); + } + + TagsCompleteTextView tagsEditText = (TagsCompleteTextView) findViewById(R.id.tagsEditText); + tagsEditText.allowDuplicates(false); + tagsEditText.setAdapter(new TagAutoCompleteAdapter(this, 0, tagList)); } @Override diff --git a/docs-android/app/src/main/java/com/sismics/docs/adapter/TagAutoCompleteAdapter.java b/docs-android/app/src/main/java/com/sismics/docs/adapter/TagAutoCompleteAdapter.java new file mode 100644 index 00000000..999aeff2 --- /dev/null +++ b/docs-android/app/src/main/java/com/sismics/docs/adapter/TagAutoCompleteAdapter.java @@ -0,0 +1,53 @@ +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.TextView; + +import com.sismics.docs.R; +import com.tokenautocomplete.FilteredArrayAdapter; + +import org.json.JSONObject; + +import java.util.List; + +/** + * Tag auto-complete adapter. + * + * @author bgamard. + */ +public class TagAutoCompleteAdapter extends FilteredArrayAdapter { + public TagAutoCompleteAdapter(Context context, int resource, List objects) { + super(context, resource, objects); + } + + @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_autocomplete_item, parent, false); + } + + // Fill the view + JSONObject tag = getItem(position); + TextView textView = (TextView) view; + textView.setText(tag.optString("name")); + + Drawable drawable = textView.getCompoundDrawables()[0].mutate(); + drawable.setColorFilter(Color.parseColor(tag.optString("color")), PorterDuff.Mode.MULTIPLY); + textView.setCompoundDrawables(drawable, null, null, null); + textView.invalidate(); + + return view; + } + + @Override + protected boolean keepObject(JSONObject tag, String s) { + return tag.optString("name").toLowerCase().startsWith(s.toLowerCase()); + } +} diff --git a/docs-android/app/src/main/java/com/sismics/docs/ui/view/TagsCompleteTextView.java b/docs-android/app/src/main/java/com/sismics/docs/ui/view/TagsCompleteTextView.java index d0a9f8aa..525bd6a0 100644 --- a/docs-android/app/src/main/java/com/sismics/docs/ui/view/TagsCompleteTextView.java +++ b/docs-android/app/src/main/java/com/sismics/docs/ui/view/TagsCompleteTextView.java @@ -2,6 +2,10 @@ package com.sismics.docs.ui.view; import android.app.Activity; import android.content.Context; +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; +import android.text.InputFilter; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; @@ -11,18 +15,46 @@ import android.widget.TextView; import com.sismics.docs.R; import com.tokenautocomplete.TokenCompleteTextView; +import org.json.JSONObject; + +/** + * Auto-complete text view displaying tags. + * + * @author bgamard + */ public class TagsCompleteTextView extends TokenCompleteTextView { + public TagsCompleteTextView(Context context) { + super(context); + init(); + } + public TagsCompleteTextView(Context context, AttributeSet attrs) { super(context, attrs); + init(); + } + + public TagsCompleteTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(); + } + + private void init() { + setFilters(new InputFilter[] {}); } @Override protected View getViewForObject(Object object) { - String p = (String)object; + JSONObject tag = (JSONObject) object; LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE); - TextView view = (TextView) inflater.inflate(R.layout.tag_complete_item, (ViewGroup) getParent(), false); - view.setText(p); + View view = inflater.inflate(R.layout.tag_autocomplete_token, (ViewGroup) getParent(), false); + TextView textView = (TextView) view.findViewById(R.id.tagTextView); + textView.setText(tag.optString("name")); + + Drawable drawable = textView.getCompoundDrawables()[0].mutate(); + drawable.setColorFilter(Color.parseColor(tag.optString("color")), PorterDuff.Mode.MULTIPLY); + textView.setCompoundDrawables(drawable, null, null, null); + textView.invalidate(); return view; } diff --git a/docs-android/app/src/main/res/drawable/tag_autocomplete_token_bg.xml b/docs-android/app/src/main/res/drawable/tag_autocomplete_token_bg.xml new file mode 100644 index 00000000..52a1c132 --- /dev/null +++ b/docs-android/app/src/main/res/drawable/tag_autocomplete_token_bg.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/docs-android/app/src/main/res/layout/tag_autocomplete_item.xml b/docs-android/app/src/main/res/layout/tag_autocomplete_item.xml new file mode 100644 index 00000000..70bc5671 --- /dev/null +++ b/docs-android/app/src/main/res/layout/tag_autocomplete_item.xml @@ -0,0 +1,14 @@ + + \ No newline at end of file diff --git a/docs-android/app/src/main/res/layout/tag_autocomplete_token.xml b/docs-android/app/src/main/res/layout/tag_autocomplete_token.xml new file mode 100644 index 00000000..23d2d09d --- /dev/null +++ b/docs-android/app/src/main/res/layout/tag_autocomplete_token.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/docs-android/app/src/main/res/layout/tag_complete_item.xml b/docs-android/app/src/main/res/layout/tag_complete_item.xml deleted file mode 100644 index 4101f84b..00000000 --- a/docs-android/app/src/main/res/layout/tag_complete_item.xml +++ /dev/null @@ -1,14 +0,0 @@ - - \ No newline at end of file