Android Open Source - mmx-starter-android My M M X Listener






From Project

Back to project page mmx-starter-android.

License

The source code is released under:

Apache License

If you think the Android project mmx-starter-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.magnet.demo.mmx.starter;
//from w w  w  . jav a  2  s  .com
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.media.RingtoneManager;
import android.util.Log;

import com.magnet.mmx.MMXClient;
import com.magnet.mmx.client.MMXMessage;
import com.magnet.mmx.client.PubSubManager;
import com.magnet.mmx.util.XIDUtil;

import java.util.ArrayList;

/**
 * This is the singleton MMXListener that should be passed to
 * MMXClient.connect().  The reason for this is that the application developer needs to implement
 * these methods to handle situations where messages arrive even when there is no UI shown to the developer.
 *
 * In this implementation, messages are dropped if no additional listeners are registered.  In an ideal
 * situation, the application will decide how to handle messages when there are no listeners by overriding
 * the onMessageReceived and onPubsubItemReceived methods.
 */
public class MyMMXListener implements MMXClient.MMXListener {
  private static final String TAG = MyMMXListener.class.getSimpleName();
  private static MyMMXListener sInstance = null;
  private ArrayList<MMXClient.MMXListener> mListeners = new ArrayList<MMXClient.MMXListener>();
  private Context mApplicationContext = null;
  private int mNoteId = 0;

  private MyMMXListener(Context context) {
    mApplicationContext = context.getApplicationContext();
  };

  public synchronized static MyMMXListener getInstance(Context context) {
    if (sInstance == null) {
      sInstance = new MyMMXListener(context);
    }
    return sInstance;
  }

  public void onConnectionEvent(MMXClient mmxClient, MMXClient.ConnectionEvent connectionEvent) {
    Log.d(TAG, "onConnectionEvent(): start.  event=" + connectionEvent);
    synchronized (mListeners) {
      for (MMXClient.MMXListener listener : mListeners) {
        listener.onConnectionEvent(mmxClient, connectionEvent);
      }
    }
  }

  public void onMessageReceived(MMXClient mmxClient, MMXMessage mmxMessage, String receiptId) {
    Log.d(TAG, "onMesasgeReceived(): start. ");
    synchronized (mListeners) {
      for (MMXClient.MMXListener listener : mListeners) {
        listener.onMessageReceived(mmxClient, mmxMessage, receiptId);
      }
    }
    doNotify(mmxMessage);
  }

  public void onSendFailed(MMXClient mmxClient, String messageId) {
    Log.d(TAG, "onSendFailed(): start.  ");
    synchronized (mListeners) {
      for (MMXClient.MMXListener listener : mListeners) {
        listener.onSendFailed(mmxClient, messageId);
      }
    }
  }

  public void onMessageDelivered(MMXClient mmxClient, String recipient, String messageId) {
    Log.d(TAG, "onMessageDelivered(): messageId=" + messageId);
    synchronized (mListeners) {
      for (MMXClient.MMXListener listener : mListeners) {
        listener.onMessageDelivered(mmxClient, recipient, messageId);
      }
    }
  }

  public void onPubsubItemReceived(MMXClient mmxClient, PubSubManager.MMXTopic mmxTopic, MMXMessage mmxMessage) {
    Log.d(TAG, "onPubsubItemReceived(): topic=" + mmxTopic);
    synchronized (mListeners) {
      for (MMXClient.MMXListener listener : mListeners) {
        listener.onPubsubItemReceived(mmxClient, mmxTopic, mmxMessage);
      }
    }
  }

  public void registerListener(MMXClient.MMXListener listener) {
    synchronized (mListeners) {
      MMXClient.MMXListener existingListener = null;
      for (MMXClient.MMXListener curListener : mListeners) {
        if (curListener == listener) {
          existingListener = listener;
          break;
        }
      }
      if (existingListener == null) {
        mListeners.add(0, listener);
      }
    }
  }

  public void unregisterListener(MMXClient.MMXListener listener) {
    synchronized (mListeners) {
      for (int i=mListeners.size(); --i >= 0;) {
        if (mListeners.get(i) == listener) {
          mListeners.remove(i);
          break;
        }
      }
    }
  }

  public void doNotify(MMXMessage message) {
    String messageText = message.getPayload().getDataAsString();
    String from = XIDUtil.getUserId(message.getFrom());
    NotificationManager noteMgr = (NotificationManager) mApplicationContext.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification note = new Notification.Builder(mApplicationContext).setAutoCancel(true)
            .setSmallIcon(R.drawable.ic_launcher).setWhen(System.currentTimeMillis())
            .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
            .setContentTitle("Message from " + from).setContentText(messageText).build();
    noteMgr.notify(mNoteId++, note);
  }
}




Java Source Code List

com.magnet.demo.mmx.starter.ApplicationTest.java
com.magnet.demo.mmx.starter.MainActivity.java
com.magnet.demo.mmx.starter.MyApplication.java
com.magnet.demo.mmx.starter.MyMMXListener.java
com.magnet.demo.mmx.starter.MyWakeupListener.java