Java tutorial
/* * 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.parseString; import static com.dwdesign.tweetings.util.Utils.parseURL; import java.net.URL; import java.util.Comparator; import java.util.Date; import twitter4j.User; import android.os.Parcel; import android.os.Parcelable; public class ParcelableUser implements Parcelable { public static final Parcelable.Creator<ParcelableUser> CREATOR = new Parcelable.Creator<ParcelableUser>() { @Override public ParcelableUser createFromParcel(final Parcel in) { return new ParcelableUser(in); } @Override public ParcelableUser[] newArray(final int size) { return new ParcelableUser[size]; } }; public final long account_id, user_id, created_at, position; public final boolean is_protected, is_verified; public final String description, name, screen_name, location, profile_image_url_string; public URL profile_image_url; public static final Comparator<ParcelableUser> POSITION_COMPARATOR = new Comparator<ParcelableUser>() { @Override public int compare(final ParcelableUser object1, final ParcelableUser object2) { final long diff = object1.position - object2.position; if (diff > Integer.MAX_VALUE) return Integer.MAX_VALUE; if (diff < Integer.MIN_VALUE) return Integer.MIN_VALUE; return (int) diff; } }; public ParcelableUser(final Parcel in) { position = in.readLong(); account_id = in.readLong(); user_id = in.readLong(); created_at = in.readLong(); is_protected = in.readInt() == 1; is_verified = in.readInt() == 1; name = in.readString(); screen_name = in.readString(); description = in.readString(); location = in.readString(); profile_image_url_string = in.readString(); profile_image_url = parseURL(profile_image_url_string); } public ParcelableUser(final User user, final long account_id) { this(user, account_id, 0); } public ParcelableUser(final User user, final long account_id, final long position) { this.position = position; this.account_id = account_id; user_id = user.getId(); created_at = getTime(user.getCreatedAt()); is_protected = user.isProtected(); is_verified = user.isVerified(); name = user.getName(); screen_name = user.getScreenName(); description = user.getDescription(); location = user.getLocation(); profile_image_url = user.getProfileImageURL(); profile_image_url_string = parseString(profile_image_url); } @Override public int describeContents() { return hashCode(); } @Override public boolean equals(final Object o) { if (!(o instanceof ParcelableUser)) return false; final ParcelableUser that = (ParcelableUser) o; return user_id == that.user_id; } @Override public String toString() { return description; } @Override public void writeToParcel(final Parcel out, final int flags) { out.writeLong(position); out.writeLong(account_id); out.writeLong(user_id); out.writeLong(created_at); out.writeInt(is_protected ? 1 : 0); out.writeInt(is_verified ? 1 : 0); out.writeString(name); out.writeString(screen_name); out.writeString(description); out.writeString(location); out.writeString(profile_image_url_string); } private long getTime(final Date date) { return date != null ? date.getTime() : 0; } }