/* * CDDL HEADER START * * The contents of this file are subject to the terms of the Common Development * and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at * src/com/vodafone360/people/VODAFONE.LICENSE.txt or * http://github.com/360/360-Engine-for-Android * See the License for the specific language governing permissions and * limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each file and * include the License file at src/com/vodafone360/people/VODAFONE.LICENSE.txt. * If applicable, add the following below this CDDL HEADER, with the fields * enclosed by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * Copyright 2010 Vodafone Sales & Services Ltd. All rights reserved. * Use is subject to license terms. */ package com.vodafone360.people.engine.presence; import android.os.Parcel; import android.os.Parcelable; import com.vodafone360.people.utils.ThirdPartyAccount; /** * A wrapper for the user presence state on certain web or IM account */ public class NetworkPresence implements Parcelable { private String mUserId; private int mNetworkId; private int mOnlineStatusId; /** * Constructor with parameters. * * @param mNetworkId - the ordinal of the network name in the overall * hardcoded network list. * @param mOnlineStatusId - the ordinal of user presence status in the * overall hardcoded statuses list specifically for this web * account */ public NetworkPresence(String userId, int networkId, int onlineStatusId) { super(); this.mUserId = userId; this.mNetworkId = networkId; this.mOnlineStatusId = onlineStatusId; } /** * @return the ordinal of the network name on the overall hardcoded network * list. */ public int getNetworkId() { return mNetworkId; } /** * @return the ordinal of the online status name on the overall hardcoded * status list. */ public int getOnlineStatusId() { return mOnlineStatusId; } /** * @return user account name on Nowplus or other social network */ public String getUserId() { return mUserId; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + mNetworkId; result = prime * result + mOnlineStatusId; result = prime * result + ((mUserId == null) ? 0 : mUserId.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; NetworkPresence other = (NetworkPresence)obj; if (mNetworkId != other.mNetworkId) return false; if (mOnlineStatusId != other.mOnlineStatusId) return false; if (mUserId == null) { if (other.mUserId != null) return false; } else if (!mUserId.equals(other.mUserId)) return false; return true; } @Override public String toString() { return "NetworkPresence [mNetworkId=" + mNetworkId + ", mOnlineStatusId=" + mOnlineStatusId + ", mUserId=" + mUserId + "]"; } /** * Hard coded networks with enable IM list */ public static enum SocialNetwork implements Parcelable { FACEBOOK_COM("facebook.com"), HYVES_NL("hyves.nl"), GOOGLE("google"), MICROSOFT("microsoft"), VKONTAKTE_RU("vkontakte.ru"), ODNOKLASSNIKI_RU("odnoklassniki.ru"), INVALID("invalid"); private String mSocialNetwork; // / The name of the field as it appears // in the database private SocialNetwork(String field) { mSocialNetwork = field; } @Override public String toString() { return mSocialNetwork; } /** * This method returns the SocialNetwork object based on the underlying string. * @param value - the String containing the SocialNetwork name. * @return SocialNetwork object for the provided string. */ public static SocialNetwork getValue(String value) { try { return valueOf(value.replace('.', '_').toUpperCase()); } catch (Exception e) { return null; } } /** * * This method returns the SocialNetwork object based on index in the SocialNetwork enum. * This method should be called to get the SocialNetwork for a chat network id index. * * @param index - integer index. * @return SocialNetwork object for the provided index. * */ public static SocialNetwork getSocialNetworkValue(int index) { return values()[index]; } /** * This method returns the SocialNetwork object based on the provided * string. * * @param index - integer index. * @return SocialNetwork object for the provided underlying string. */ public static SocialNetwork getNetworkBasedOnString(String sns) { if (sns != null) { if (sns.contains(ThirdPartyAccount.SNS_TYPE_VKONTAKTE)) { return VKONTAKTE_RU; } else if (sns.contains(ThirdPartyAccount.SNS_TYPE_ODNOKLASSNIKI)) { return ODNOKLASSNIKI_RU; } else if (sns.contains(ThirdPartyAccount.SNS_TYPE_FACEBOOK)) { return FACEBOOK_COM; } else if (sns.contains(ThirdPartyAccount.SNS_TYPE_HYVES)) { return HYVES_NL; } else if (ThirdPartyAccount.isWindowsLive(sns)) { return MICROSOFT; } else if (sns.contains(ThirdPartyAccount.SNS_TYPE_GOOGLE)) { return GOOGLE; } } return null; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(final Parcel dest, final int flags) { dest.writeString(mSocialNetwork); } /*** * Parcelable.Creator for SocialNetwork. */ Parcelable.Creator<SocialNetwork> CREATOR = new Parcelable.Creator<SocialNetwork>() { @Override public SocialNetwork createFromParcel(final Parcel source) { return getNetworkBasedOnString(source.readString()); } @Override public SocialNetwork[] newArray(final int size) { return new SocialNetwork[size]; } }; } @Override public final int describeContents() { return 0; } @Override public final void writeToParcel(final Parcel parcel, final int flags) { parcel.writeString(mUserId); parcel.writeInt(mNetworkId); parcel.writeInt(mOnlineStatusId); } /*** * Read in NetworkPresence data from Parcel. * * @param in NetworkPresence Parcel. */ public final void readFromParcel(final Parcel in) { mUserId = in.readString(); mNetworkId = in.readInt(); mOnlineStatusId = in.readInt(); return; } /*** * Parcelable constructor for NetworkPresence. * * @param source NetworkPresence Parcel. */ public NetworkPresence(final Parcel source) { this.readFromParcel(source); } /*** * Parcelable.Creator for NetworkPresence. */ public static final Parcelable.Creator<NetworkPresence> CREATOR = new Parcelable.Creator<NetworkPresence>(){ public NetworkPresence createFromParcel(final Parcel in) { return new NetworkPresence(in); } @Override public NetworkPresence[] newArray(final int size) { return new NetworkPresence[size]; } }; }