Created
September 10, 2014 15:31
-
-
Save kcoleman731/2a3f9ec86c57ed68f77f to your computer and use it in GitHub Desktop.
Example Layer Conversation Adapter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.layer.sample.adapters; | |
| import android.database.DataSetObserver; | |
| import android.net.Uri; | |
| import android.view.View; | |
| import android.view.ViewGroup; | |
| import android.widget.Adapter; | |
| import com.layer.sdk.LayerChange; | |
| import com.layer.sdk.LayerChangeEvent; | |
| import com.layer.sdk.LayerChangeEventListener; | |
| import com.layer.sdk.LayerClient; | |
| import com.layer.sdk.exceptions.NotAuthenticatedException; | |
| import com.layer.sdk.exceptions.PersistenceClosedException; | |
| import com.layer.sdk.messaging.Conversation; | |
| import java.util.concurrent.ConcurrentLinkedQueue; | |
| public abstract class LayerConversationsAdapter implements Adapter, LayerChangeEventListener.MainThread { | |
| private ConcurrentLinkedQueue<DataSetObserver> mDataSetObservers = new ConcurrentLinkedQueue<DataSetObserver>(); | |
| final OrderedIds mIds = new OrderedIds(); | |
| private LayerClient mClient; | |
| private Options mOptions; | |
| public LayerConversationsAdapter(LayerClient client, Options options) { | |
| mClient = client; | |
| mOptions = (options == null) ? new DefaultOptions() : options; | |
| refresh(); | |
| } | |
| public void refresh() { | |
| mIds.clear(); | |
| try { | |
| int i = 0; | |
| for (Uri uri : mClient.getConversationIds()) { | |
| mIds.append(i++, uri); | |
| } | |
| } catch (NotAuthenticatedException e) { | |
| } catch (PersistenceClosedException e) { | |
| } | |
| notifyDataSetChanged(); | |
| } | |
| public void notifyDataSetChanged() { | |
| for (DataSetObserver observer : mDataSetObservers) { | |
| observer.onChanged(); | |
| } | |
| } | |
| //================================= | |
| // Options | |
| //================================= | |
| public static class Options { | |
| boolean mIsUpdateOnMessage; | |
| public Options() { | |
| } | |
| public Options setIsUpdateOnMessage(boolean isUpdateOnMessage) { | |
| mIsUpdateOnMessage = isUpdateOnMessage; | |
| return this; | |
| } | |
| public boolean isUpdateOnMessage() { | |
| return mIsUpdateOnMessage; | |
| } | |
| } | |
| public static class DefaultOptions extends Options { | |
| @Override | |
| public boolean isUpdateOnMessage() { | |
| return true; | |
| } | |
| } | |
| //================================= | |
| // Listener | |
| //================================= | |
| @Override | |
| public void onEventMainThread(LayerChangeEvent event) { | |
| // TODO: update index from 0 to lastMessageDate when implemented. | |
| boolean isChange = false; | |
| for (LayerChange change : event.getChanges()) { | |
| switch (change.getObjectType()) { | |
| case CONVERSATION: | |
| Conversation conversation = (Conversation) change.getObject(); | |
| isChange = true; | |
| switch (change.getChangeType()) { | |
| case INSERT: | |
| mIds.insert(0, conversation.getId()); | |
| break; | |
| case UPDATE: | |
| if (change.getAttributeName().equals("id")) { | |
| Uri oldId = (Uri) change.getOldValue(); | |
| Uri newId = (Uri) change.getNewValue(); | |
| mIds.update(oldId, newId, 0); | |
| } | |
| break; | |
| case DELETE: | |
| mIds.delete(conversation.getId()); | |
| break; | |
| } | |
| break; | |
| case MESSAGE: | |
| if (mOptions.isUpdateOnMessage()) { | |
| isChange = true; | |
| } | |
| break; | |
| } | |
| } | |
| // Update UI? | |
| if (isChange) { | |
| notifyDataSetChanged(); | |
| } | |
| } | |
| //================================= | |
| // Adapter | |
| //================================= | |
| @Override | |
| public int getCount() { | |
| return mIds.size(); | |
| } | |
| @Override | |
| public Conversation getItem(int position) { | |
| try { | |
| return mClient.getConversation(mIds.getId(position)); | |
| } catch (NotAuthenticatedException e) { | |
| return null; | |
| } catch (PersistenceClosedException e) { | |
| return null; | |
| } | |
| } | |
| @Override | |
| public long getItemId(int position) { | |
| return position; | |
| } | |
| @Override | |
| public boolean hasStableIds() { | |
| return false; | |
| } | |
| @Override | |
| public abstract View getView(int position, View convertV, ViewGroup viewGroup); | |
| @Override | |
| public abstract int getItemViewType(int position); | |
| @Override | |
| public abstract int getViewTypeCount(); | |
| @Override | |
| public boolean isEmpty() { | |
| return mIds.isEmpty(); | |
| } | |
| @Override | |
| public void registerDataSetObserver(DataSetObserver dataSetObserver) { | |
| if (!mDataSetObservers.contains(dataSetObserver)) { | |
| mDataSetObservers.add(dataSetObserver); | |
| } | |
| } | |
| @Override | |
| public void unregisterDataSetObserver(DataSetObserver dataSetObserver) { | |
| mDataSetObservers.remove(dataSetObserver); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment