Skip to content

Instantly share code, notes, and snippets.

@kcoleman731
Created September 10, 2014 15:31
Show Gist options
  • Select an option

  • Save kcoleman731/2a3f9ec86c57ed68f77f to your computer and use it in GitHub Desktop.

Select an option

Save kcoleman731/2a3f9ec86c57ed68f77f to your computer and use it in GitHub Desktop.
Example Layer Conversation Adapter
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