com.dwdesign.tweetings.model.ParcelableDirectMessage.java Source code

Java tutorial

Introduction

Here is the source code for com.dwdesign.tweetings.model.ParcelableDirectMessage.java

Source

/*
 *            Tweetings - Twitter client for Android
 * 
 * Copyright (C) 2012-2013 RBD Solutions Limited <apps@tweetings.net>
 * Copyright (C) 2012 Mariotaku Lee <mariotaku.lee@gmail.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.dwdesign.tweetings.model;

import static com.dwdesign.tweetings.util.Utils.parseURL;

import java.net.URL;
import java.util.Comparator;
import java.util.Date;

import twitter4j.DirectMessage;
import twitter4j.User;
import android.database.Cursor;
import android.os.Parcel;
import android.os.Parcelable;

public class ParcelableDirectMessage implements Parcelable {

    public static final Parcelable.Creator<ParcelableDirectMessage> CREATOR = new Parcelable.Creator<ParcelableDirectMessage>() {
        @Override
        public ParcelableDirectMessage createFromParcel(final Parcel in) {
            return new ParcelableDirectMessage(in);
        }

        @Override
        public ParcelableDirectMessage[] newArray(final int size) {
            return new ParcelableDirectMessage[size];
        }
    };

    public static final Comparator<ParcelableDirectMessage> MESSAGE_ID_COMPARATOR = new Comparator<ParcelableDirectMessage>() {

        @Override
        public int compare(final ParcelableDirectMessage object1, final ParcelableDirectMessage object2) {
            final long diff = object2.message_id - object1.message_id;
            if (diff > Integer.MAX_VALUE)
                return Integer.MAX_VALUE;
            if (diff < Integer.MIN_VALUE)
                return Integer.MIN_VALUE;
            return (int) diff;
        }
    };

    public final long account_id, message_id, message_timestamp;
    public final long sender_id, recipient_id;

    public final boolean is_gap;

    public final String text;
    public final String sender_name, recipient_name, sender_screen_name, recipient_screen_name;

    public final URL sender_profile_image_url, recipient_profile_image_url;

    public ParcelableDirectMessage(final Cursor cursor, final DirectMessageCursorIndices indices) {
        account_id = indices.account_id != -1 ? cursor.getLong(indices.account_id) : -1;
        is_gap = indices.is_gap != -1 ? cursor.getShort(indices.is_gap) == 1 : null;
        message_id = indices.message_id != -1 ? cursor.getLong(indices.message_id) : -1;
        message_timestamp = indices.message_timestamp != -1 ? cursor.getLong(indices.message_timestamp) : -1;
        sender_id = indices.sender_id != -1 ? cursor.getLong(indices.sender_id) : -1;
        recipient_id = indices.recipient_id != -1 ? cursor.getLong(indices.recipient_id) : -1;
        text = indices.text_plain != -1 ? cursor.getString(indices.text_plain) : null;
        sender_name = indices.sender_name != -1 ? cursor.getString(indices.sender_name) : null;
        recipient_name = indices.recipient_name != -1 ? cursor.getString(indices.recipient_name) : null;
        sender_screen_name = indices.sender_screen_name != -1 ? cursor.getString(indices.sender_screen_name) : null;
        recipient_screen_name = indices.recipient_screen_name != -1
                ? cursor.getString(indices.recipient_screen_name)
                : null;
        sender_profile_image_url = indices.sender_profile_image_url != -1
                ? parseURL(cursor.getString(indices.sender_profile_image_url))
                : null;
        recipient_profile_image_url = indices.recipient_profile_image_url != -1
                ? parseURL(cursor.getString(indices.recipient_profile_image_url))
                : null;
    }

    public ParcelableDirectMessage(final DirectMessage message, final long account_id, final boolean is_gap) {
        this.account_id = account_id;
        this.is_gap = is_gap;
        final User sender = message.getSender(), recipient = message.getRecipient();
        message_id = message.getId();
        message_timestamp = getTime(message.getCreatedAt());
        sender_id = sender != null ? sender.getId() : -1;
        recipient_id = recipient != null ? recipient.getId() : -1;
        text = message.getText();
        sender_name = sender != null ? sender.getName() : null;
        recipient_name = recipient != null ? recipient.getName() : null;
        sender_screen_name = sender != null ? sender.getScreenName() : null;
        recipient_screen_name = recipient != null ? recipient.getScreenName() : null;
        sender_profile_image_url = sender != null ? sender.getProfileImageURL() : null;
        recipient_profile_image_url = recipient != null ? recipient.getProfileImageURL() : null;
    }

    public ParcelableDirectMessage(final Parcel in) {
        account_id = in.readLong();
        message_id = in.readLong();
        message_timestamp = in.readLong();
        sender_id = in.readLong();
        recipient_id = in.readLong();
        is_gap = in.readInt() == 1;
        text = in.readString();
        sender_name = in.readString();
        recipient_name = in.readString();
        sender_screen_name = in.readString();
        recipient_screen_name = in.readString();
        sender_profile_image_url = (URL) in.readSerializable();
        recipient_profile_image_url = (URL) in.readSerializable();
    }

    @Override
    public int describeContents() {
        return hashCode();
    }

    @Override
    public String toString() {
        return text;
    }

    @Override
    public void writeToParcel(final Parcel out, final int flags) {
        out.writeLong(account_id);
        out.writeLong(message_id);
        out.writeLong(message_timestamp);
        out.writeLong(sender_id);
        out.writeLong(recipient_id);
        out.writeInt(is_gap ? 1 : 0);
        out.writeString(text);
        out.writeString(sender_name);
        out.writeString(recipient_name);
        out.writeString(sender_screen_name);
        out.writeString(recipient_screen_name);
        out.writeSerializable(sender_profile_image_url);
        out.writeSerializable(recipient_profile_image_url);
    }

    private long getTime(final Date date) {
        return date != null ? date.getTime() : 0;
    }
}