Presence.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:6k
源码类别:

android开发

开发平台:

C/C++

  1. /*
  2.  * Copyright (C) 2007 Esmertec AG.
  3.  * Copyright (C) 2007 The Android Open Source Project
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package com.android.im.engine;
  18. import java.util.Collections;
  19. import java.util.Map;
  20. import android.os.Parcel;
  21. import android.os.Parcelable;
  22. /**
  23.  * A <code>Presence</code> is an abstract presentation of the user's presence
  24.  * information.
  25.  *
  26.  * Note that changes made to the Presence data won't be reflected to the
  27.  * server until <code>ImConnection.updateUserPresence</code> is called.
  28.  * Only the logged in user can update its own presence data via
  29.  * <code>ImConnection.updateUserPresence</code>. Changes to any other
  30.  * contact's presence data won't be saved or sent to the server.
  31.  */
  32. public final class Presence implements Parcelable {
  33.     public static final int OFFLINE = 0;
  34.     public static final int DO_NOT_DISTURB = 1;
  35.     public static final int AWAY = 2;
  36.     public static final int IDLE = 3;
  37.     public static final int AVAILABLE = 4;
  38.     public static final int CLIENT_TYPE_DEFAULT = 0;
  39.     public static final int CLIENT_TYPE_MOBILE = 1;
  40.     private int mStatus;
  41.     private String mStatusText;
  42.     private byte[] mAvatarData;
  43.     private String mAvatarType;
  44.     private int mClientType;
  45.     private Map<String, String> mExtendedInfo;
  46.     public Presence() {
  47.         this(Presence.OFFLINE, null, null, null, CLIENT_TYPE_DEFAULT, null);
  48.     }
  49.     public Presence(int status, String statusText, byte[] avatarData,
  50.             String avatarType, int clientType) {
  51.         this(status, statusText, avatarData, avatarType, clientType, null);
  52.     }
  53.     public Presence(int status, String statusText, byte[] avatarData,
  54.             String avatarType, int clientType, Map<String, String> extendedInfo) {
  55.         setStatus(status);
  56.         mStatusText = statusText;
  57.         setAvatar(avatarData, avatarType);
  58.         mClientType = clientType;
  59.         mExtendedInfo = extendedInfo;
  60.     }
  61.     public Presence(Presence p) {
  62.         this(p.mStatus, p.mStatusText, p.mAvatarData, p.mAvatarType,
  63.                 p.mClientType, p.mExtendedInfo);
  64.     }
  65.     public Presence(Parcel source) {
  66.         mStatus = source.readInt();
  67.         mStatusText = source.readString();
  68.         mAvatarData = source.createByteArray();
  69.         mAvatarType = source.readString();
  70.         mClientType = source.readInt();
  71.         // TODO - what ClassLoader should be passed to readMap?
  72.         // TODO - switch to Bundle
  73.         mExtendedInfo = source.readHashMap(null);
  74.     }
  75.     /**
  76.      * Get avatar bitmap.
  77.      *
  78.      * @return Avatar bitmap. Note any changes made to the bitmap itself
  79.      *         won't be saved or sent back to the server. To change avatar
  80.      *         call <code>setAvatar</code> with a <b>new</b> bitmap instance.
  81.      * FIXME: Avatar is stored as a byte array and a type string now, it will
  82.      * be encapsulated with an Object after we change to ContentProvider.
  83.      */
  84.     public byte[] getAvatarData() {
  85.         if(mAvatarData == null){
  86.             return null;
  87.         } else {
  88.             byte[] data = new byte[mAvatarData.length];
  89.             System.arraycopy(mAvatarData, 0, data, 0, mAvatarData.length);
  90.             return data;
  91.         }
  92.     }
  93.     /**
  94.      * Get the MIME type of avatar.
  95.      *
  96.      * @return the MIME type of avatar.
  97.      */
  98.     public String getAvatarType() {
  99.         return mAvatarType;
  100.     }
  101.     public int getClientType() {
  102.         return mClientType;
  103.     }
  104.     public Map<String, String> getExtendedInfo() {
  105.         return mExtendedInfo == null ? null : Collections.unmodifiableMap(mExtendedInfo);
  106.     }
  107.     public boolean isOnline() {
  108.         return mStatus != OFFLINE;
  109.     }
  110.     public int getStatus() {
  111.         return mStatus;
  112.     }
  113.     public void setStatus(int status) {
  114.         if (status < OFFLINE || status > AVAILABLE ) {
  115.             throw new IllegalArgumentException("invalid presence status value");
  116.         }
  117.         mStatus = status;
  118.     }
  119.     public String getStatusText() {
  120.         return mStatusText;
  121.     }
  122.     public void setAvatar(byte[] data, String type) {
  123.         if(data != null) {
  124.             mAvatarData = new byte[data.length];
  125.             System.arraycopy(data, 0, mAvatarData, 0, data.length);
  126.         } else {
  127.             mAvatarData = null;
  128.         }
  129.         mAvatarType = type;
  130.     }
  131.     public void setStatusText(String statusText) {
  132.         mStatusText = statusText;
  133.     }
  134.     public void setClientType(int clientType) {
  135.         mClientType = clientType;
  136.     }
  137.     public void writeToParcel(Parcel dest, int flags) {
  138.         dest.writeInt(mStatus);
  139.         dest.writeString(mStatusText);
  140.         dest.writeByteArray(mAvatarData);
  141.         dest.writeString(mAvatarType);
  142.         dest.writeInt(mClientType);
  143.         dest.writeMap(mExtendedInfo);
  144.     }
  145.     public int describeContents() {
  146.         return 0;
  147.     }
  148.     public static final Parcelable.Creator<Presence> CREATOR = new Parcelable.Creator<Presence>() {
  149.         public Presence createFromParcel(Parcel source) {
  150.             return new Presence(source);
  151.         }
  152.         public Presence[] newArray(int size) {
  153.             return new Presence[size];
  154.         }
  155.     };
  156. }