Android Open Source - BerryTube Chat Message






From Project

Back to project page BerryTube.

License

The source code is released under:

GNU General Public License

If you think the Android project BerryTube 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

/*
 * BerryTube Service//w  w w . ja va2  s . c om
 * Copyright (C) 2012 Daniel Triendl <trellmor@trellmor.com>
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.trellmor.berrytube;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;

import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

/**
 * This class encapsulates a chat message
 * 
 * @author Daniel Triendl
 */
public class ChatMessage {
  private static final String TAG = ChatMessage.class.getName();
  private static final SimpleDateFormat TIMESTAMP_FORMAT = new SimpleDateFormat(
      "EEE, d MMM yyyy HH:mm:ss z", Locale.US);

  /**
   * Message is not an emote
   */
  public final static int EMOTE_FALSE = 0;
  /**
   * Message is a royal Canterlot voice emote
   */
  public final static int EMOTE_RCV = 1;
  /**
   * Message is a sweetiebot emote
   */
  public final static int EMOTE_SWEETIEBOT = 2;
  /**
   * Message is a spoiler
   */
  public final static int EMOTE_SPOILER = 3;
  /**
   * Message is a /me activity
   */
  public final static int EMOTE_ACT = 4;
  /**
   * Message is a video request
   */
  public final static int EMOTE_REQUEST = 5;
  /**
   * Message is new poll notification
   */
  public final static int EMOTE_POLL = 6;
  /**
   * Message is a drink notification
   */
  public final static int EMOTE_DRINK = 7;

  private String mNick;
  private String mMsg;
  private int mEmote = EMOTE_FALSE;
  private int mFlair = 0;
  private int mMulti;
  private long mTimeStamp;
  private boolean mHidden;
  private boolean mFlaunt = false;
  private int mType = 0;

  /**
   * Constructs a <code>ChatMessage</code>
   * 
   * @param nick
   *            Sender name
   * @param msg
   *            Text content
   * @param emote
   *            Emote type
   * @param flair
   *            Sender flair
   * @param type
   *            User level
   * @param flaunt
   *            User is flaunting
   * @param multi
   *            Multiplier for <code>EMOTE_DRINK</code> notifications
   */
  public ChatMessage(String nick, String msg, int emote, int flair, int type,
      boolean flaunt, int multi) {
    this.mNick = nick;
    this.mMsg = msg;
    this.mEmote = emote;
    this.mFlair = flair;
    this.mTimeStamp = System.currentTimeMillis();
    this.mHidden = (emote == EMOTE_SPOILER);
    this.mType = type;
    this.mFlaunt = flaunt;
  }

  /**
   * Constructs a <code>ChatMessage</code> from an <code>JSONObject</code>
   * 
   * @param message
   *            <code>JSONObject<code> containing all the required fields to form a chat message
   * @throws JSONException
   */
  public ChatMessage(JSONObject message) throws JSONException {
    mNick = message.getString("nick");
    mMsg = message.getString("msg");
    mMulti = message.getInt("multi");
    mType = message.getInt("type");

    // check emote
    if (message.has("emote") && message.get("emote") instanceof String) {
      String emote = message.getString("emote");
      if (emote.compareTo("rcv") == 0)
        this.mEmote = EMOTE_RCV;
      else if (emote.compareTo("sweetiebot") == 0)
        this.mEmote = EMOTE_SWEETIEBOT;
      else if (emote.compareTo("spoiler") == 0)
        this.mEmote = EMOTE_SPOILER;
      else if (emote.compareTo("act") == 0)
        this.mEmote = EMOTE_ACT;
      else if (emote.compareTo("request") == 0)
        this.mEmote = EMOTE_REQUEST;
      else if (emote.compareTo("poll") == 0)
        this.mEmote = EMOTE_POLL;
      else if (emote.compareTo("drink") == 0)
        this.mEmote = EMOTE_DRINK;
    } else
      mEmote = 0;

    JSONObject metadata = message.getJSONObject("metadata");
    mFlair = metadata.optInt("flair");
    mFlaunt = metadata.optBoolean("nameflaunt");

    try {
      this.mTimeStamp = TIMESTAMP_FORMAT.parse(
          message.getString("timestamp")).getTime();
    } catch (ParseException pe) {
      Log.w(TAG, "Error parsing timestamp string");
      this.mTimeStamp = System.currentTimeMillis();
    }
    this.mHidden = (this.mEmote == EMOTE_SPOILER);
  }

  /**
   * Get the sender name
   * 
   * @return Sender name
   */
  public String getNick() {
    return mNick;
  }

  /**
   * Get the chat messages content
   * 
   * @return Text content
   */
  public String getMsg() {
    return mMsg;
  }

  /**
   * Get the emote type
   * 
   * @return Emote type
   */
  public int getEmote() {
    return mEmote;
  }

  /**
   * Check if the message is an emote
   * 
   * @return true if the message is an emote
   */
  public boolean isEmote() {
    return mEmote != EMOTE_FALSE;
  }

  /**
   * Check if a notification should be displayed if the users nick is
   * mentioned in the message
   * 
   * @return true if the message can be highlighted
   */
  public boolean isHighlightable() {
    switch (mEmote) {
    case EMOTE_ACT:
    case EMOTE_FALSE:
      return true;
    default:
      return false;
    }
  }

  /**
   * Get the senders flair
   * 
   * @return Flair index
   */
  public int getFlair() {
    return mFlair;
  }

  /**
   * Get the multiplication number for <code>EMOTE_DRINK</code> notifications
   * 
   * @return Multiplier
   */
  public int getMulti() {
    return mMulti;
  }

  /**
   * Get the timestamp for this message
   * 
   * @return The timestamp, in milliseconds since 1970
   */
  public long getTimestamp() {
    return mTimeStamp;
  }

  /**
   * Get the user level
   * 
   * @return user lever
   * @see com.trellmor.berrytube.ChatUser
   */
  public int getType() {
    return mType;
  }

  /**
   * User is flaunting and nick should be colored according to type
   * 
   * @return flaunting
   */
  public boolean isFlaunt() {
    return mFlaunt;
  }

  /**
   * Get whether or not this message is hidden. This is only applicable if the
   * message's emote type is <code>EMOTE_SPOILER</code>.
   * 
   * @return <b>true</b> if this message is a <code>EMOTE_SPOILER</code> and
   *         if its hidden flag is true; <b>false</b> otherwise
   */
  public boolean isHidden() {
    return mHidden && (mEmote == EMOTE_SPOILER);
  }

  /**
   * Flips the flag indicating whether this message should be hidden. This is
   * only applicable if the message's emote type is <code>EMOTE_SPOILER</code>
   * .
   */
  public void toggleHidden() {
    mHidden = !mHidden;
  }

  /**
   * Compares the lower case nick and the message
   * 
   * @see java.lang.Object#equals(java.lang.Object)
   */
  @Override
  public boolean equals(Object obj) {
    if (this.getClass() == obj.getClass()) {
      ChatMessage msg = (ChatMessage) obj;

      return this.mNick.toLowerCase(Locale.ENGLISH).equals(
          msg.getNick().toLowerCase(Locale.ENGLISH))
          && this.mMsg.equals(msg.getMsg());
    }
    return false;
  }

  /**
   * Converts the chat message to a String containing the sender name and the
   * text
   */
  @Override
  public String toString() {
    return mNick + ": " + mMsg;
  }
}




Java Source Code List

com.trellmor.berrytube.BerryTubeBinder.java
com.trellmor.berrytube.BerryTubeCallback.java
com.trellmor.berrytube.BerryTubeIOCallback.java
com.trellmor.berrytube.BerryTube.java
com.trellmor.berrytube.ChatMessage.java
com.trellmor.berrytube.ChatUser.java
com.trellmor.berrytube.Poll.java
com.trellmor.berrytubechat.BerryTubeUtils.java
com.trellmor.berrytubechat.ChatActivity.java
com.trellmor.berrytubechat.ChatMessageAdapter.java
com.trellmor.berrytubechat.ChatMessageFormatter.java
com.trellmor.berrytubechat.FlairGetter.java
com.trellmor.berrytubechat.MainActivity.java
com.trellmor.berrytubechat.SettingsActivity.java
com.trellmor.berrytubechat.SettingsFragment.java
com.trellmor.berrytubechat.SimpleCrypto.java