aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/suggestion/util
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/suggestion/util')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/suggestion/util/SuggestionServiceConnectionManager.java55
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/suggestion/util/SuggestionTokenizer.java52
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/suggestion/util/SuggestionUtils.java62
3 files changed, 169 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/suggestion/util/SuggestionServiceConnectionManager.java b/WordPress/src/main/java/org/wordpress/android/ui/suggestion/util/SuggestionServiceConnectionManager.java
new file mode 100644
index 000000000..bcbdebe30
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/suggestion/util/SuggestionServiceConnectionManager.java
@@ -0,0 +1,55 @@
+package org.wordpress.android.ui.suggestion.util;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+
+import org.wordpress.android.ui.suggestion.service.SuggestionService;
+
+public class SuggestionServiceConnectionManager implements ServiceConnection {
+
+ private final Context mContext;
+ private final int mRemoteBlogId;
+ private boolean mAttemptingToBind = false;
+ private boolean mBindCalled = false;
+
+ public SuggestionServiceConnectionManager(Context context, int remoteBlogId) {
+ mContext = context;
+ mRemoteBlogId = remoteBlogId;
+ }
+
+ public void bindToService() {
+ if (!mAttemptingToBind) {
+ mAttemptingToBind = true;
+ mBindCalled = true;
+ Intent intent = new Intent(mContext, SuggestionService.class);
+ mContext.bindService(intent, this, Context.BIND_AUTO_CREATE);
+ }
+ }
+
+ public void unbindFromService() {
+ mAttemptingToBind = false;
+ if (mBindCalled) {
+ mContext.unbindService(this);
+ mBindCalled = false;
+ }
+ }
+
+ @Override
+ public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
+ SuggestionService.SuggestionBinder b = (SuggestionService.SuggestionBinder) iBinder;
+ SuggestionService suggestionService = b.getService();
+
+ suggestionService.updateSuggestions(mRemoteBlogId);
+ suggestionService.updateTags(mRemoteBlogId);
+
+ mAttemptingToBind = false;
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName componentName) {
+ // noop
+ }
+}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/suggestion/util/SuggestionTokenizer.java b/WordPress/src/main/java/org/wordpress/android/ui/suggestion/util/SuggestionTokenizer.java
new file mode 100644
index 000000000..7dbf8da8e
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/suggestion/util/SuggestionTokenizer.java
@@ -0,0 +1,52 @@
+package org.wordpress.android.ui.suggestion.util;
+
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.TextUtils;
+import android.widget.MultiAutoCompleteTextView;
+
+public class SuggestionTokenizer implements MultiAutoCompleteTextView.Tokenizer {
+
+ @Override
+ public CharSequence terminateToken(CharSequence text) {
+ int i = text.length();
+ while (i > 0 && text.charAt(i - 1) == ' ') {
+ i--;
+ }
+ if (text instanceof Spanned) {
+ SpannableString sp = new SpannableString(text + " ");
+ TextUtils.copySpansFrom((Spanned) text, 0, text.length(), Object.class, sp, 0);
+ return sp;
+ } else {
+ return text + " ";
+ }
+ }
+
+ @Override
+ public int findTokenStart(CharSequence text, int cursor) {
+ int i = cursor;
+ while (i > 0 && text.charAt(i - 1) != '@') {
+ i--;
+ }
+
+ if (i < 1 || text.charAt(i - 1) != '@') {
+ return cursor;
+ }
+
+ return i;
+ }
+
+ @Override
+ public int findTokenEnd(CharSequence text, int cursor) {
+ int i = cursor;
+ int len = text.length();
+ while (i < len) {
+ if (text.charAt(i) == ' ') {
+ return i;
+ } else {
+ i++;
+ }
+ }
+ return len;
+ }
+}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/suggestion/util/SuggestionUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/suggestion/util/SuggestionUtils.java
new file mode 100644
index 000000000..be0e7fd00
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/suggestion/util/SuggestionUtils.java
@@ -0,0 +1,62 @@
+package org.wordpress.android.ui.suggestion.util;
+
+import android.content.Context;
+
+import org.wordpress.android.WordPress;
+import org.wordpress.android.datasets.SuggestionTable;
+import org.wordpress.android.models.Blog;
+import org.wordpress.android.models.Suggestion;
+import org.wordpress.android.models.Tag;
+import org.wordpress.android.ui.suggestion.adapters.SuggestionAdapter;
+import org.wordpress.android.ui.suggestion.adapters.TagSuggestionAdapter;
+
+import java.util.List;
+
+public class SuggestionUtils {
+
+ public static SuggestionAdapter setupSuggestions(final int remoteBlogId, Context context, SuggestionServiceConnectionManager serviceConnectionManager) {
+ Blog blog = WordPress.wpDB.getBlogForDotComBlogId(Integer.toString(remoteBlogId));
+ boolean isDotComFlag = (blog != null && blog.isDotcomFlag());
+
+ return SuggestionUtils.setupSuggestions(remoteBlogId, context, serviceConnectionManager, isDotComFlag);
+ }
+
+ public static SuggestionAdapter setupSuggestions(final int remoteBlogId, Context context, SuggestionServiceConnectionManager serviceConnectionManager, boolean isDotcomFlag) {
+ if (!isDotcomFlag) {
+ return null;
+ }
+
+ SuggestionAdapter suggestionAdapter = new SuggestionAdapter(context);
+
+ List<Suggestion> suggestions = SuggestionTable.getSuggestionsForSite(remoteBlogId);
+ // if the suggestions are not stored yet, we want to trigger an update for it
+ if (suggestions.isEmpty()) {
+ serviceConnectionManager.bindToService();
+ }
+ suggestionAdapter.setSuggestionList(suggestions);
+ return suggestionAdapter;
+ }
+
+ public static TagSuggestionAdapter setupTagSuggestions(final int remoteBlogId, Context context, SuggestionServiceConnectionManager serviceConnectionManager) {
+ Blog blog = WordPress.wpDB.getBlogForDotComBlogId(Integer.toString(remoteBlogId));
+ boolean isDotComFlag = (blog != null && blog.isDotcomFlag());
+
+ return SuggestionUtils.setupTagSuggestions(remoteBlogId, context, serviceConnectionManager, isDotComFlag);
+ }
+
+ public static TagSuggestionAdapter setupTagSuggestions(final int remoteBlogId, Context context, SuggestionServiceConnectionManager serviceConnectionManager, boolean isDotcomFlag) {
+ if (!isDotcomFlag) {
+ return null;
+ }
+
+ TagSuggestionAdapter tagSuggestionAdapter = new TagSuggestionAdapter(context);
+
+ List<Tag> tags = SuggestionTable.getTagsForSite(remoteBlogId);
+ // if the tags are not stored yet, we want to trigger an update for it
+ if (tags.isEmpty()) {
+ serviceConnectionManager.bindToService();
+ }
+ tagSuggestionAdapter.setTagList(tags);
+ return tagSuggestionAdapter;
+ }
+}