2014-07-03 07:48:39 +02:00
|
|
|
/*
|
|
|
|
* Twidere - Twitter client for Android
|
|
|
|
*
|
|
|
|
* Copyright (C) 2012-2014 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 org.mariotaku.twidere.model;
|
|
|
|
|
|
|
|
import android.database.Cursor;
|
2015-04-23 18:27:13 +02:00
|
|
|
import android.os.Bundle;
|
2014-07-03 07:48:39 +02:00
|
|
|
import android.os.Parcel;
|
|
|
|
import android.os.Parcelable;
|
2014-11-01 17:57:31 +01:00
|
|
|
import android.support.annotation.NonNull;
|
2015-04-03 19:22:00 +02:00
|
|
|
import android.support.annotation.Nullable;
|
2015-01-01 11:38:34 +01:00
|
|
|
import android.text.TextUtils;
|
2014-07-03 07:48:39 +02:00
|
|
|
|
2015-04-23 16:59:20 +02:00
|
|
|
import com.bluelinelabs.logansquare.LoganSquare;
|
|
|
|
import com.bluelinelabs.logansquare.annotation.JsonField;
|
|
|
|
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
2015-05-26 13:19:03 +02:00
|
|
|
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
|
|
|
|
import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease;
|
2015-04-23 16:59:20 +02:00
|
|
|
|
2015-05-26 13:19:03 +02:00
|
|
|
import org.mariotaku.twidere.api.twitter.model.CardEntity;
|
|
|
|
import org.mariotaku.twidere.api.twitter.model.CardEntity.BindingValue;
|
|
|
|
import org.mariotaku.twidere.api.twitter.model.CardEntity.BooleanValue;
|
|
|
|
import org.mariotaku.twidere.api.twitter.model.CardEntity.ImageValue;
|
|
|
|
import org.mariotaku.twidere.api.twitter.model.CardEntity.StringValue;
|
|
|
|
import org.mariotaku.twidere.api.twitter.model.CardEntity.UserValue;
|
|
|
|
import org.mariotaku.twidere.api.twitter.model.Place;
|
|
|
|
import org.mariotaku.twidere.api.twitter.model.Status;
|
|
|
|
import org.mariotaku.twidere.api.twitter.model.User;
|
2015-01-11 10:28:45 +01:00
|
|
|
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
|
|
|
|
import org.mariotaku.twidere.util.HtmlEscapeHelper;
|
2015-01-19 18:46:14 +01:00
|
|
|
import org.mariotaku.twidere.util.TwitterContentUtils;
|
2014-07-03 07:48:39 +02:00
|
|
|
|
2015-04-23 16:59:20 +02:00
|
|
|
import java.io.IOException;
|
2014-07-03 07:48:39 +02:00
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.Comparator;
|
|
|
|
import java.util.Date;
|
2015-04-23 18:27:13 +02:00
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Map.Entry;
|
2014-07-03 07:48:39 +02:00
|
|
|
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonObject
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelablePlease(allFields = false)
|
2015-04-23 16:59:20 +02:00
|
|
|
public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus> {
|
2014-07-03 07:48:39 +02:00
|
|
|
|
2014-11-01 17:57:31 +01:00
|
|
|
public static final Parcelable.Creator<ParcelableStatus> CREATOR = new Parcelable.Creator<ParcelableStatus>() {
|
|
|
|
@Override
|
|
|
|
public ParcelableStatus createFromParcel(final Parcel in) {
|
2015-05-26 13:19:03 +02:00
|
|
|
ParcelableStatus status = new ParcelableStatus();
|
|
|
|
ParcelableStatusParcelablePlease.readFromParcel(status, in);
|
|
|
|
return status;
|
2014-11-01 17:57:31 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ParcelableStatus[] newArray(final int size) {
|
|
|
|
return new ParcelableStatus[size];
|
|
|
|
}
|
|
|
|
};
|
2015-05-26 13:19:03 +02:00
|
|
|
|
2015-04-23 18:27:13 +02:00
|
|
|
public static final Comparator<ParcelableStatus> REVERSE_ID_COMPARATOR = new Comparator<ParcelableStatus>() {
|
2014-11-01 17:57:31 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public int compare(final ParcelableStatus object1, final ParcelableStatus object2) {
|
2015-04-23 18:27:13 +02:00
|
|
|
final long diff = object1.id - object2.id;
|
2014-11-01 17:57:31 +01:00
|
|
|
if (diff > Integer.MAX_VALUE) return Integer.MAX_VALUE;
|
|
|
|
if (diff < Integer.MIN_VALUE) return Integer.MIN_VALUE;
|
|
|
|
return (int) diff;
|
|
|
|
}
|
|
|
|
};
|
2015-05-26 13:19:03 +02:00
|
|
|
|
2015-04-23 18:27:13 +02:00
|
|
|
public static final Comparator<ParcelableStatus> TIMESTAMP_COMPARATOR = new Comparator<ParcelableStatus>() {
|
2014-11-01 17:57:31 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public int compare(final ParcelableStatus object1, final ParcelableStatus object2) {
|
2015-04-23 18:27:13 +02:00
|
|
|
final long diff = object2.timestamp - object1.timestamp;
|
2014-11-01 17:57:31 +01:00
|
|
|
if (diff > Integer.MAX_VALUE) return Integer.MAX_VALUE;
|
|
|
|
if (diff < Integer.MIN_VALUE) return Integer.MIN_VALUE;
|
|
|
|
return (int) diff;
|
|
|
|
}
|
|
|
|
};
|
2015-05-26 13:19:03 +02:00
|
|
|
|
|
|
|
@ParcelableThisPlease
|
|
|
|
@JsonField(name = "id")
|
|
|
|
public long id;
|
|
|
|
@ParcelableThisPlease
|
|
|
|
@JsonField(name = "account_id")
|
|
|
|
public long account_id;
|
|
|
|
@ParcelableThisPlease
|
|
|
|
@JsonField(name = "timestamp")
|
|
|
|
public long timestamp;
|
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "user_id")
|
2015-04-23 18:27:13 +02:00
|
|
|
public long user_id;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "retweet_id")
|
2015-04-23 18:27:13 +02:00
|
|
|
public long retweet_id;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-25 18:17:04 +02:00
|
|
|
@JsonField(name = "retweeted_by_user_id")
|
|
|
|
public long retweeted_by_user_id;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "retweet_timestamp")
|
2015-04-23 18:27:13 +02:00
|
|
|
public long retweet_timestamp;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "retweet_count")
|
2015-04-23 18:27:13 +02:00
|
|
|
public long retweet_count;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "favorite_count")
|
2015-04-23 18:27:13 +02:00
|
|
|
public long favorite_count;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "reply_count")
|
2015-04-23 18:27:13 +02:00
|
|
|
public long reply_count;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "in_reply_to_status_id")
|
2015-04-23 18:27:13 +02:00
|
|
|
public long in_reply_to_status_id;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "in_reply_to_user_id")
|
2015-04-23 18:27:13 +02:00
|
|
|
public long in_reply_to_user_id;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "my_retweet_id")
|
2015-04-23 18:27:13 +02:00
|
|
|
public long my_retweet_id;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quote_id")
|
2015-04-23 18:27:13 +02:00
|
|
|
public long quote_id;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quote_timestamp")
|
2015-04-23 18:27:13 +02:00
|
|
|
public long quote_timestamp;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quoted_by_user_id")
|
2015-04-23 18:27:13 +02:00
|
|
|
public long quoted_by_user_id;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "is_gap")
|
2015-04-23 18:27:13 +02:00
|
|
|
public boolean is_gap;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "is_retweet")
|
2015-04-23 18:27:13 +02:00
|
|
|
public boolean is_retweet;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "is_favorite")
|
2015-04-23 18:27:13 +02:00
|
|
|
public boolean is_favorite;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "is_possibly_sensitive")
|
2015-04-23 18:27:13 +02:00
|
|
|
public boolean is_possibly_sensitive;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "user_is_following")
|
2015-04-23 18:27:13 +02:00
|
|
|
public boolean user_is_following;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "user_is_protected")
|
2015-04-23 18:27:13 +02:00
|
|
|
public boolean user_is_protected;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "user_is_verified")
|
2015-04-23 18:27:13 +02:00
|
|
|
public boolean user_is_verified;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "is_quote")
|
2015-04-23 18:27:13 +02:00
|
|
|
public boolean is_quote;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quoted_by_user_is_protected")
|
2015-04-23 18:27:13 +02:00
|
|
|
public boolean quoted_by_user_is_protected;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quoted_by_user_is_verified")
|
2015-04-23 18:27:13 +02:00
|
|
|
public boolean quoted_by_user_is_verified;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-25 18:17:04 +02:00
|
|
|
@JsonField(name = "retweeted_by_user_name")
|
|
|
|
public String retweeted_by_user_name;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-25 18:17:04 +02:00
|
|
|
@JsonField(name = "retweeted_by_user_screen_name")
|
|
|
|
public String retweeted_by_user_screen_name;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-25 18:17:04 +02:00
|
|
|
@JsonField(name = "retweeted_by_user_profile_image")
|
|
|
|
public String retweeted_by_user_profile_image;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "text_html")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String text_html;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "text_plain")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String text_plain;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "user_name")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String user_name;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "user_screen_name")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String user_screen_name;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "in_reply_to_name")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String in_reply_to_name;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "in_reply_to_screen_name")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String in_reply_to_screen_name;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "source")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String source;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "user_profile_image_url")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String user_profile_image_url;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "text_unescaped")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String text_unescaped;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "card_name")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String card_name;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quote_text_html")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String quote_text_html;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quote_text_plain")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String quote_text_plain;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quote_text_unescaped")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String quote_text_unescaped;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quote_source")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String quote_source;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-06-01 11:35:34 +02:00
|
|
|
@JsonField(name = "quote_retweet_count")
|
|
|
|
public long quote_retweet_count;
|
|
|
|
@ParcelableThisPlease
|
|
|
|
@JsonField(name = "quote_favorite_count")
|
|
|
|
public long quote_favorite_count;
|
|
|
|
@ParcelableThisPlease
|
|
|
|
@JsonField(name = "quote_reply_count")
|
|
|
|
public long quote_reply_count;
|
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quoted_by_user_name")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String quoted_by_user_name;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quoted_by_user_screen_name")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String quoted_by_user_screen_name;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quoted_by_user_profile_image")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String quoted_by_user_profile_image;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "location")
|
2015-04-23 18:27:13 +02:00
|
|
|
public ParcelableLocation location;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "place_full_name")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String place_full_name;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "mentions")
|
2015-04-23 18:27:13 +02:00
|
|
|
public ParcelableUserMention[] mentions;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "media")
|
2015-04-23 18:27:13 +02:00
|
|
|
public ParcelableMedia[] media;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "quote_media")
|
2015-04-23 18:27:13 +02:00
|
|
|
public ParcelableMedia[] quote_media;
|
2015-05-26 13:19:03 +02:00
|
|
|
@ParcelableThisPlease
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "card")
|
2015-04-23 18:27:13 +02:00
|
|
|
public ParcelableCardEntity card;
|
2015-01-01 11:38:34 +01:00
|
|
|
|
2014-11-01 17:57:31 +01:00
|
|
|
public ParcelableStatus(final Cursor c, final CursorIndices idx) {
|
|
|
|
id = idx.status_id != -1 ? c.getLong(idx.status_id) : -1;
|
|
|
|
account_id = idx.account_id != -1 ? c.getLong(idx.account_id) : -1;
|
|
|
|
timestamp = idx.status_timestamp != -1 ? c.getLong(idx.status_timestamp) : 0;
|
|
|
|
user_id = idx.user_id != -1 ? c.getLong(idx.user_id) : -1;
|
|
|
|
retweet_id = idx.retweet_id != -1 ? c.getLong(idx.retweet_id) : -1;
|
|
|
|
retweet_timestamp = idx.retweet_timestamp != -1 ? c.getLong(idx.retweet_timestamp) : -1;
|
2015-04-25 18:17:04 +02:00
|
|
|
retweeted_by_user_id = idx.retweeted_by_user_id != -1 ? c.getLong(idx.retweeted_by_user_id) : -1;
|
2014-11-01 17:57:31 +01:00
|
|
|
retweet_count = idx.retweet_count != -1 ? c.getLong(idx.retweet_count) : -1;
|
|
|
|
favorite_count = idx.favorite_count != -1 ? c.getLong(idx.favorite_count) : -1;
|
2014-11-17 14:37:25 +01:00
|
|
|
reply_count = idx.reply_count != -1 ? c.getLong(idx.reply_count) : -1;
|
2014-11-01 17:57:31 +01:00
|
|
|
in_reply_to_status_id = idx.in_reply_to_status_id != -1 ? c.getLong(idx.in_reply_to_status_id) : -1;
|
|
|
|
in_reply_to_user_id = idx.in_reply_to_user_id != -1 ? c.getLong(idx.in_reply_to_user_id) : -1;
|
|
|
|
is_gap = idx.is_gap != -1 && c.getInt(idx.is_gap) == 1;
|
|
|
|
is_retweet = idx.is_retweet != -1 && c.getInt(idx.is_retweet) == 1;
|
|
|
|
is_favorite = idx.is_favorite != -1 && c.getInt(idx.is_favorite) == 1;
|
|
|
|
user_is_protected = idx.is_protected != -1 && c.getInt(idx.is_protected) == 1;
|
|
|
|
user_is_verified = idx.is_verified != -1 && c.getInt(idx.is_verified) == 1;
|
2015-04-25 18:17:04 +02:00
|
|
|
retweeted_by_user_name = idx.retweeted_by_user_name != -1 ? c.getString(idx.retweeted_by_user_name) : null;
|
|
|
|
retweeted_by_user_screen_name = idx.retweeted_by_user_screen_name != -1 ? c
|
2014-11-01 17:57:31 +01:00
|
|
|
.getString(idx.retweeted_by_user_screen_name) : null;
|
2015-04-25 18:17:04 +02:00
|
|
|
retweeted_by_user_profile_image = idx.retweeted_by_user_profile_image != -1 ? c
|
2014-11-21 04:00:46 +01:00
|
|
|
.getString(idx.retweeted_by_user_profile_image) : null;
|
2014-11-01 17:57:31 +01:00
|
|
|
text_html = idx.text_html != -1 ? c.getString(idx.text_html) : null;
|
2015-04-23 09:40:11 +02:00
|
|
|
media = idx.media != -1 ? ParcelableMedia.fromSerializedJson(c.getString(idx.media)) : null;
|
|
|
|
quote_media = idx.quote_media != -1 ? ParcelableMedia.fromSerializedJson(c.getString(idx.quote_media)) : null;
|
2014-11-01 17:57:31 +01:00
|
|
|
text_plain = idx.text_plain != -1 ? c.getString(idx.text_plain) : null;
|
|
|
|
user_name = idx.user_name != -1 ? c.getString(idx.user_name) : null;
|
|
|
|
user_screen_name = idx.user_screen_name != -1 ? c.getString(idx.user_screen_name) : null;
|
|
|
|
in_reply_to_name = idx.in_reply_to_user_name != -1 ? c.getString(idx.in_reply_to_user_name) : null;
|
|
|
|
in_reply_to_screen_name = idx.in_reply_to_user_screen_name != -1 ? c
|
|
|
|
.getString(idx.in_reply_to_user_screen_name) : null;
|
|
|
|
source = idx.source != -1 ? c.getString(idx.source) : null;
|
|
|
|
location = idx.location != -1 ? new ParcelableLocation(c.getString(idx.location)) : null;
|
|
|
|
user_profile_image_url = idx.user_profile_image_url != -1 ? c.getString(idx.user_profile_image_url) : null;
|
|
|
|
text_unescaped = idx.text_unescaped != -1 ? c.getString(idx.text_unescaped) : null;
|
|
|
|
my_retweet_id = idx.my_retweet_id != -1 ? c.getLong(idx.my_retweet_id) : -1;
|
|
|
|
is_possibly_sensitive = idx.is_possibly_sensitive != -1 && c.getInt(idx.is_possibly_sensitive) == 1;
|
|
|
|
user_is_following = idx.is_following != -1 && c.getInt(idx.is_following) == 1;
|
2015-04-23 09:40:11 +02:00
|
|
|
mentions = idx.mentions != -1 ? ParcelableUserMention.fromSerializedJson(c.getString(idx.mentions)) : null;
|
2015-01-01 11:38:34 +01:00
|
|
|
card = idx.card != -1 ? ParcelableCardEntity.fromJSONString(c.getString(idx.card)) : null;
|
2015-04-03 19:22:00 +02:00
|
|
|
place_full_name = idx.place_full_name != -1 ? c.getString(idx.place_full_name) : null;
|
2015-04-07 17:43:03 +02:00
|
|
|
is_quote = idx.is_quote != -1 && c.getShort(idx.is_quote) == 1;
|
|
|
|
quote_id = idx.quote_id != -1 ? c.getLong(idx.quote_id) : -1;
|
|
|
|
quote_timestamp = idx.quote_timestamp != -1 ? c.getLong(idx.quote_timestamp) : -1;
|
|
|
|
quoted_by_user_id = idx.quoted_by_user_id != -1 ? c.getLong(idx.quoted_by_user_id) : -1;
|
|
|
|
quote_text_html = idx.quote_text_html != -1 ? c.getString(idx.quote_text_html) : null;
|
|
|
|
quote_text_plain = idx.quote_text_plain != -1 ? c.getString(idx.quote_text_plain) : null;
|
|
|
|
quote_text_unescaped = idx.quote_text_unescaped != -1 ? c.getString(idx.quote_text_unescaped) : null;
|
|
|
|
quoted_by_user_name = idx.quoted_by_user_name != -1 ? c.getString(idx.quoted_by_user_name) : null;
|
|
|
|
quoted_by_user_screen_name = idx.quoted_by_user_screen_name != -1 ? c.getString(idx.quoted_by_user_screen_name) : null;
|
|
|
|
quoted_by_user_profile_image = idx.quoted_by_user_profile_image != -1 ? c.getString(idx.quoted_by_user_profile_image) : null;
|
2015-04-08 08:33:07 +02:00
|
|
|
quoted_by_user_is_protected = idx.quoted_by_user_is_protected != -1 && c.getShort(idx.quoted_by_user_is_protected) == 1;
|
|
|
|
quoted_by_user_is_verified = idx.quoted_by_user_is_verified != -1 && c.getShort(idx.quoted_by_user_is_verified) == 1;
|
|
|
|
quote_source = idx.quote_source != -1 ? c.getString(idx.quote_source) : null;
|
2015-06-01 11:35:34 +02:00
|
|
|
quote_retweet_count = idx.quote_retweet_count != -1 ? c.getLong(idx.quote_retweet_count) : -1;
|
|
|
|
quote_favorite_count = idx.quote_favorite_count != -1 ? c.getLong(idx.quote_favorite_count) : -1;
|
|
|
|
quote_reply_count = idx.quote_reply_count != -1 ? c.getLong(idx.quote_reply_count) : -1;
|
2015-01-19 18:46:14 +01:00
|
|
|
card_name = card != null ? card.name : null;
|
2014-11-01 17:57:31 +01:00
|
|
|
}
|
|
|
|
|
2015-04-23 16:59:20 +02:00
|
|
|
public ParcelableStatus() {
|
2014-11-01 17:57:31 +01:00
|
|
|
}
|
|
|
|
|
2014-12-13 16:14:47 +01:00
|
|
|
public ParcelableStatus(final ParcelableStatus orig, final long override_my_retweet_id,
|
|
|
|
final long override_retweet_count) {
|
2014-12-11 06:40:08 +01:00
|
|
|
id = orig.id;
|
|
|
|
account_id = orig.account_id;
|
|
|
|
timestamp = orig.timestamp;
|
|
|
|
user_id = orig.user_id;
|
|
|
|
retweet_id = orig.retweet_id;
|
|
|
|
retweet_timestamp = orig.retweet_timestamp;
|
2015-04-25 18:17:04 +02:00
|
|
|
retweeted_by_user_id = orig.retweeted_by_user_id;
|
2014-12-13 16:14:47 +01:00
|
|
|
retweet_count = override_retweet_count;
|
2014-12-11 06:40:08 +01:00
|
|
|
favorite_count = orig.favorite_count;
|
|
|
|
reply_count = orig.reply_count;
|
|
|
|
in_reply_to_status_id = orig.in_reply_to_status_id;
|
|
|
|
is_gap = orig.is_gap;
|
|
|
|
is_retweet = orig.is_retweet;
|
|
|
|
is_favorite = orig.is_favorite;
|
|
|
|
user_is_protected = orig.user_is_protected;
|
|
|
|
user_is_verified = orig.user_is_verified;
|
2015-04-25 18:17:04 +02:00
|
|
|
retweeted_by_user_name = orig.retweeted_by_user_name;
|
|
|
|
retweeted_by_user_screen_name = orig.retweeted_by_user_screen_name;
|
|
|
|
retweeted_by_user_profile_image = orig.retweeted_by_user_profile_image;
|
2014-12-11 06:40:08 +01:00
|
|
|
text_html = orig.text_html;
|
|
|
|
text_plain = orig.text_plain;
|
|
|
|
user_name = orig.user_name;
|
|
|
|
user_screen_name = orig.user_screen_name;
|
|
|
|
in_reply_to_screen_name = orig.in_reply_to_screen_name;
|
|
|
|
source = orig.source;
|
|
|
|
user_profile_image_url = orig.user_profile_image_url;
|
|
|
|
media = orig.media;
|
2015-04-23 09:40:11 +02:00
|
|
|
quote_media = orig.quote_media;
|
2014-12-11 06:40:08 +01:00
|
|
|
location = orig.location;
|
|
|
|
my_retweet_id = override_my_retweet_id;
|
|
|
|
is_possibly_sensitive = orig.is_possibly_sensitive;
|
|
|
|
user_is_following = orig.user_is_following;
|
|
|
|
text_unescaped = orig.text_unescaped;
|
|
|
|
in_reply_to_user_id = orig.in_reply_to_user_id;
|
|
|
|
in_reply_to_name = orig.in_reply_to_name;
|
|
|
|
mentions = orig.mentions;
|
2015-01-01 11:38:34 +01:00
|
|
|
card = orig.card;
|
2015-04-03 19:22:00 +02:00
|
|
|
place_full_name = orig.place_full_name;
|
2015-04-07 17:43:03 +02:00
|
|
|
is_quote = orig.is_quote;
|
|
|
|
quote_id = orig.quote_id;
|
|
|
|
quote_timestamp = orig.quote_timestamp;
|
|
|
|
quoted_by_user_id = orig.quoted_by_user_id;
|
|
|
|
quoted_by_user_name = orig.quoted_by_user_name;
|
|
|
|
quoted_by_user_screen_name = orig.quoted_by_user_screen_name;
|
|
|
|
quoted_by_user_profile_image = orig.quoted_by_user_profile_image;
|
|
|
|
quote_text_html = orig.quote_text_html;
|
|
|
|
quote_text_plain = orig.quote_text_plain;
|
|
|
|
quote_text_unescaped = orig.quote_text_unescaped;
|
2015-04-08 08:33:07 +02:00
|
|
|
quote_source = orig.quote_source;
|
2015-06-01 11:35:34 +02:00
|
|
|
quote_retweet_count = orig.quote_retweet_count;
|
|
|
|
quote_favorite_count = orig.quote_favorite_count;
|
|
|
|
quote_reply_count = orig.quote_reply_count;
|
2015-04-08 08:33:07 +02:00
|
|
|
quoted_by_user_is_protected = orig.quoted_by_user_is_protected;
|
|
|
|
quoted_by_user_is_verified = orig.quoted_by_user_is_verified;
|
2015-01-19 18:46:14 +01:00
|
|
|
card_name = card != null ? card.name : null;
|
2014-12-11 06:40:08 +01:00
|
|
|
}
|
|
|
|
|
2014-11-01 17:57:31 +01:00
|
|
|
public ParcelableStatus(final Status orig, final long account_id, final boolean is_gap) {
|
|
|
|
this.is_gap = is_gap;
|
|
|
|
this.account_id = account_id;
|
|
|
|
id = orig.getId();
|
|
|
|
timestamp = getTime(orig.getCreatedAt());
|
2015-04-07 17:43:03 +02:00
|
|
|
|
2014-11-14 05:16:46 +01:00
|
|
|
final Status retweeted = orig.getRetweetedStatus();
|
|
|
|
final User retweet_user = retweeted != null ? orig.getUser() : null;
|
2015-04-07 17:43:03 +02:00
|
|
|
is_retweet = orig.isRetweet();
|
2014-11-14 05:16:46 +01:00
|
|
|
retweet_id = retweeted != null ? retweeted.getId() : -1;
|
|
|
|
retweet_timestamp = retweeted != null ? getTime(retweeted.getCreatedAt()) : -1;
|
2015-04-25 18:17:04 +02:00
|
|
|
retweeted_by_user_id = retweet_user != null ? retweet_user.getId() : -1;
|
|
|
|
retweeted_by_user_name = retweet_user != null ? retweet_user.getName() : null;
|
|
|
|
retweeted_by_user_screen_name = retweet_user != null ? retweet_user.getScreenName() : null;
|
2015-07-02 05:56:21 +02:00
|
|
|
retweeted_by_user_profile_image = TwitterContentUtils.getProfileImageUrl(retweet_user);
|
2015-04-07 17:43:03 +02:00
|
|
|
|
|
|
|
final Status quoted = orig.getQuotedStatus();
|
|
|
|
final User quote_user = quoted != null ? orig.getUser() : null;
|
|
|
|
is_quote = orig.isQuote();
|
|
|
|
quote_id = quoted != null ? quoted.getId() : -1;
|
|
|
|
quote_text_html = TwitterContentUtils.formatStatusText(orig);
|
2015-05-05 18:01:02 +02:00
|
|
|
quote_text_plain = TwitterContentUtils.unescapeTwitterStatusText(orig.getText());
|
2015-04-07 17:43:03 +02:00
|
|
|
quote_text_unescaped = HtmlEscapeHelper.toPlainText(quote_text_html);
|
2015-04-08 08:33:07 +02:00
|
|
|
quote_timestamp = orig.getCreatedAt().getTime();
|
|
|
|
quote_source = orig.getSource();
|
2015-06-01 11:35:34 +02:00
|
|
|
quote_retweet_count = orig.getRetweetCount();
|
|
|
|
quote_favorite_count = orig.getFavoriteCount();
|
|
|
|
quote_reply_count = orig.getReplyCount();
|
2015-04-08 08:33:07 +02:00
|
|
|
|
2015-04-07 17:43:03 +02:00
|
|
|
quoted_by_user_id = quote_user != null ? quote_user.getId() : -1;
|
|
|
|
quoted_by_user_name = quote_user != null ? quote_user.getName() : null;
|
|
|
|
quoted_by_user_screen_name = quote_user != null ? quote_user.getScreenName() : null;
|
2015-07-02 05:56:21 +02:00
|
|
|
quoted_by_user_profile_image = TwitterContentUtils.getProfileImageUrl(quote_user);
|
2015-04-08 08:33:07 +02:00
|
|
|
quoted_by_user_is_protected = quote_user != null && quote_user.isProtected();
|
|
|
|
quoted_by_user_is_verified = quote_user != null && quote_user.isVerified();
|
2015-04-07 17:43:03 +02:00
|
|
|
|
|
|
|
final Status status;
|
|
|
|
if (quoted != null) {
|
|
|
|
status = quoted;
|
|
|
|
} else if (retweeted != null) {
|
|
|
|
status = retweeted;
|
|
|
|
} else {
|
|
|
|
status = orig;
|
|
|
|
}
|
2014-11-01 17:57:31 +01:00
|
|
|
final User user = status.getUser();
|
|
|
|
user_id = user.getId();
|
|
|
|
user_name = user.getName();
|
|
|
|
user_screen_name = user.getScreenName();
|
2015-07-02 05:56:21 +02:00
|
|
|
user_profile_image_url = TwitterContentUtils.getProfileImageUrl(user);
|
2014-11-01 17:57:31 +01:00
|
|
|
user_is_protected = user.isProtected();
|
|
|
|
user_is_verified = user.isVerified();
|
|
|
|
user_is_following = user.isFollowing();
|
2015-01-11 10:28:45 +01:00
|
|
|
text_html = TwitterContentUtils.formatStatusText(status);
|
2015-04-15 09:32:20 +02:00
|
|
|
media = ParcelableMedia.fromStatus(status);
|
2015-04-23 09:40:11 +02:00
|
|
|
quote_media = quoted != null ? ParcelableMedia.fromStatus(orig) : null;
|
2015-05-05 18:01:02 +02:00
|
|
|
text_plain = TwitterContentUtils.unescapeTwitterStatusText(status.getText());
|
2014-11-01 17:57:31 +01:00
|
|
|
retweet_count = status.getRetweetCount();
|
|
|
|
favorite_count = status.getFavoriteCount();
|
2014-11-17 14:37:25 +01:00
|
|
|
reply_count = status.getReplyCount();
|
2015-04-10 18:29:23 +02:00
|
|
|
in_reply_to_name = TwitterContentUtils.getInReplyToName(retweeted != null ? retweeted : orig);
|
|
|
|
in_reply_to_screen_name = (retweeted != null ? retweeted : orig).getInReplyToScreenName();
|
|
|
|
in_reply_to_status_id = (retweeted != null ? retweeted : orig).getInReplyToStatusId();
|
|
|
|
in_reply_to_user_id = (retweeted != null ? retweeted : orig).getInReplyToUserId();
|
2014-11-01 17:57:31 +01:00
|
|
|
source = status.getSource();
|
2015-04-03 19:22:00 +02:00
|
|
|
location = ParcelableLocation.fromGeoLocation(status.getGeoLocation());
|
2014-11-01 17:57:31 +01:00
|
|
|
is_favorite = status.isFavorited();
|
2015-01-11 10:28:45 +01:00
|
|
|
text_unescaped = HtmlEscapeHelper.toPlainText(text_html);
|
2015-04-25 18:17:04 +02:00
|
|
|
my_retweet_id = retweeted_by_user_id == account_id ? id : status.getCurrentUserRetweet();
|
2014-11-01 17:57:31 +01:00
|
|
|
is_possibly_sensitive = status.isPossiblySensitive();
|
|
|
|
mentions = ParcelableUserMention.fromUserMentionEntities(status.getUserMentionEntities());
|
2015-01-01 11:38:34 +01:00
|
|
|
card = ParcelableCardEntity.fromCardEntity(status.getCard(), account_id);
|
2015-04-03 19:22:00 +02:00
|
|
|
place_full_name = getPlaceFullName(status.getPlace());
|
2015-01-19 18:46:14 +01:00
|
|
|
card_name = card != null ? card.name : null;
|
2014-11-01 17:57:31 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int compareTo(@NonNull final ParcelableStatus another) {
|
|
|
|
final long diff = another.id - id;
|
|
|
|
if (diff > Integer.MAX_VALUE) return Integer.MAX_VALUE;
|
|
|
|
if (diff < Integer.MIN_VALUE) return Integer.MIN_VALUE;
|
|
|
|
return (int) diff;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int describeContents() {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean equals(final Object obj) {
|
|
|
|
if (this == obj) return true;
|
|
|
|
if (obj == null) return false;
|
|
|
|
if (!(obj instanceof ParcelableStatus)) return false;
|
|
|
|
final ParcelableStatus other = (ParcelableStatus) obj;
|
|
|
|
return account_id == other.account_id && id == other.id;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int hashCode() {
|
|
|
|
final int prime = 31;
|
|
|
|
int result = 1;
|
|
|
|
result = prime * result + (int) (account_id ^ account_id >>> 32);
|
|
|
|
result = prime * result + (int) (id ^ id >>> 32);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2015-04-07 17:43:03 +02:00
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "ParcelableStatus{" +
|
|
|
|
"id=" + id +
|
|
|
|
", account_id=" + account_id +
|
|
|
|
", timestamp=" + timestamp +
|
|
|
|
", user_id=" + user_id +
|
|
|
|
", retweet_id=" + retweet_id +
|
2015-04-25 18:17:04 +02:00
|
|
|
", retweeted_by_user_id=" + retweeted_by_user_id +
|
2015-04-07 17:43:03 +02:00
|
|
|
", retweet_timestamp=" + retweet_timestamp +
|
|
|
|
", retweet_count=" + retweet_count +
|
|
|
|
", favorite_count=" + favorite_count +
|
|
|
|
", reply_count=" + reply_count +
|
|
|
|
", in_reply_to_status_id=" + in_reply_to_status_id +
|
|
|
|
", in_reply_to_user_id=" + in_reply_to_user_id +
|
|
|
|
", my_retweet_id=" + my_retweet_id +
|
2015-04-08 08:33:07 +02:00
|
|
|
", quote_id=" + quote_id +
|
|
|
|
", quote_timestamp=" + quote_timestamp +
|
|
|
|
", quoted_by_user_id=" + quoted_by_user_id +
|
2015-04-07 17:43:03 +02:00
|
|
|
", is_gap=" + is_gap +
|
|
|
|
", is_retweet=" + is_retweet +
|
|
|
|
", is_favorite=" + is_favorite +
|
|
|
|
", is_possibly_sensitive=" + is_possibly_sensitive +
|
|
|
|
", user_is_following=" + user_is_following +
|
|
|
|
", user_is_protected=" + user_is_protected +
|
|
|
|
", user_is_verified=" + user_is_verified +
|
2015-04-08 08:33:07 +02:00
|
|
|
", is_quote=" + is_quote +
|
|
|
|
", quoted_by_user_is_protected=" + quoted_by_user_is_protected +
|
|
|
|
", quoted_by_user_is_verified=" + quoted_by_user_is_verified +
|
2015-04-25 18:17:04 +02:00
|
|
|
", retweeted_by_user_name='" + retweeted_by_user_name + '\'' +
|
|
|
|
", retweeted_by_user_screen_name='" + retweeted_by_user_screen_name + '\'' +
|
|
|
|
", retweeted_by_user_profile_image='" + retweeted_by_user_profile_image + '\'' +
|
2015-04-07 17:43:03 +02:00
|
|
|
", text_html='" + text_html + '\'' +
|
|
|
|
", text_plain='" + text_plain + '\'' +
|
|
|
|
", user_name='" + user_name + '\'' +
|
|
|
|
", user_screen_name='" + user_screen_name + '\'' +
|
|
|
|
", in_reply_to_name='" + in_reply_to_name + '\'' +
|
|
|
|
", in_reply_to_screen_name='" + in_reply_to_screen_name + '\'' +
|
|
|
|
", source='" + source + '\'' +
|
|
|
|
", user_profile_image_url='" + user_profile_image_url + '\'' +
|
|
|
|
", text_unescaped='" + text_unescaped + '\'' +
|
|
|
|
", card_name='" + card_name + '\'' +
|
2015-04-08 08:33:07 +02:00
|
|
|
", quote_text_html='" + quote_text_html + '\'' +
|
|
|
|
", quote_text_plain='" + quote_text_plain + '\'' +
|
|
|
|
", quote_text_unescaped='" + quote_text_unescaped + '\'' +
|
|
|
|
", quote_source='" + quote_source + '\'' +
|
2015-06-01 11:35:34 +02:00
|
|
|
", quote_retweet_count=" + quote_retweet_count +
|
|
|
|
", quote_favorite_count=" + quote_favorite_count +
|
|
|
|
", quote_reply_count=" + quote_reply_count +
|
2015-04-08 08:33:07 +02:00
|
|
|
", quoted_by_user_name='" + quoted_by_user_name + '\'' +
|
|
|
|
", quoted_by_user_screen_name='" + quoted_by_user_screen_name + '\'' +
|
|
|
|
", quoted_by_user_profile_image='" + quoted_by_user_profile_image + '\'' +
|
2015-04-07 17:43:03 +02:00
|
|
|
", location=" + location +
|
2015-04-08 08:33:07 +02:00
|
|
|
", place_full_name='" + place_full_name + '\'' +
|
2015-04-07 17:43:03 +02:00
|
|
|
", mentions=" + Arrays.toString(mentions) +
|
|
|
|
", media=" + Arrays.toString(media) +
|
2015-06-01 11:35:34 +02:00
|
|
|
", quote_media=" + Arrays.toString(quote_media) +
|
2015-04-07 17:43:03 +02:00
|
|
|
", card=" + card +
|
|
|
|
'}';
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
private static String getPlaceFullName(@Nullable Place place) {
|
|
|
|
if (place == null) return null;
|
|
|
|
return place.getFullName();
|
2014-11-01 17:57:31 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
private static long getTime(final Date date) {
|
|
|
|
return date != null ? date.getTime() : 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static final class CursorIndices {
|
|
|
|
|
2014-11-17 14:37:25 +01:00
|
|
|
public final int _id, account_id, status_id, status_timestamp, user_name, user_screen_name,
|
|
|
|
text_html, text_plain, text_unescaped, user_profile_image_url, is_favorite, is_retweet,
|
|
|
|
is_gap, location, is_protected, is_verified, in_reply_to_status_id, in_reply_to_user_id,
|
|
|
|
in_reply_to_user_name, in_reply_to_user_screen_name, my_retweet_id, retweeted_by_user_name,
|
2014-11-21 04:00:46 +01:00
|
|
|
retweeted_by_user_screen_name, retweeted_by_user_profile_image, retweet_id, retweet_timestamp,
|
|
|
|
retweeted_by_user_id, user_id, source, retweet_count, favorite_count, reply_count,
|
2015-06-01 11:35:34 +02:00
|
|
|
is_possibly_sensitive, is_following, media, mentions, quote_media, card_name, card,
|
|
|
|
place_full_name, is_quote, quote_id, quote_text_html, quote_text_plain, quote_text_unescaped,
|
|
|
|
quote_timestamp, quote_source, quote_retweet_count, quote_favorite_count, quote_reply_count,
|
|
|
|
quoted_by_user_id, quoted_by_user_name, quoted_by_user_screen_name, quoted_by_user_profile_image,
|
|
|
|
quoted_by_user_is_protected, quoted_by_user_is_verified;
|
2015-04-07 17:43:03 +02:00
|
|
|
|
|
|
|
public CursorIndices(final Cursor cursor) {
|
|
|
|
_id = cursor.getColumnIndex(Statuses._ID);
|
|
|
|
account_id = cursor.getColumnIndex(Statuses.ACCOUNT_ID);
|
|
|
|
status_id = cursor.getColumnIndex(Statuses.STATUS_ID);
|
|
|
|
status_timestamp = cursor.getColumnIndex(Statuses.STATUS_TIMESTAMP);
|
|
|
|
user_name = cursor.getColumnIndex(Statuses.USER_NAME);
|
|
|
|
user_screen_name = cursor.getColumnIndex(Statuses.USER_SCREEN_NAME);
|
|
|
|
text_html = cursor.getColumnIndex(Statuses.TEXT_HTML);
|
|
|
|
text_plain = cursor.getColumnIndex(Statuses.TEXT_PLAIN);
|
|
|
|
text_unescaped = cursor.getColumnIndex(Statuses.TEXT_UNESCAPED);
|
|
|
|
user_profile_image_url = cursor.getColumnIndex(Statuses.USER_PROFILE_IMAGE_URL);
|
|
|
|
is_favorite = cursor.getColumnIndex(Statuses.IS_FAVORITE);
|
|
|
|
is_retweet = cursor.getColumnIndex(Statuses.IS_RETWEET);
|
|
|
|
is_quote = cursor.getColumnIndex(Statuses.IS_QUOTE);
|
|
|
|
is_gap = cursor.getColumnIndex(Statuses.IS_GAP);
|
|
|
|
location = cursor.getColumnIndex(Statuses.LOCATION);
|
|
|
|
is_protected = cursor.getColumnIndex(Statuses.IS_PROTECTED);
|
|
|
|
is_verified = cursor.getColumnIndex(Statuses.IS_VERIFIED);
|
|
|
|
in_reply_to_status_id = cursor.getColumnIndex(Statuses.IN_REPLY_TO_STATUS_ID);
|
|
|
|
in_reply_to_user_id = cursor.getColumnIndex(Statuses.IN_REPLY_TO_USER_ID);
|
|
|
|
in_reply_to_user_name = cursor.getColumnIndex(Statuses.IN_REPLY_TO_USER_NAME);
|
|
|
|
in_reply_to_user_screen_name = cursor.getColumnIndex(Statuses.IN_REPLY_TO_USER_SCREEN_NAME);
|
|
|
|
my_retweet_id = cursor.getColumnIndex(Statuses.MY_RETWEET_ID);
|
|
|
|
retweet_id = cursor.getColumnIndex(Statuses.RETWEET_ID);
|
|
|
|
retweet_timestamp = cursor.getColumnIndex(Statuses.RETWEET_TIMESTAMP);
|
|
|
|
retweeted_by_user_id = cursor.getColumnIndex(Statuses.RETWEETED_BY_USER_ID);
|
|
|
|
retweeted_by_user_name = cursor.getColumnIndex(Statuses.RETWEETED_BY_USER_NAME);
|
|
|
|
retweeted_by_user_screen_name = cursor.getColumnIndex(Statuses.RETWEETED_BY_USER_SCREEN_NAME);
|
|
|
|
retweeted_by_user_profile_image = cursor.getColumnIndex(Statuses.RETWEETED_BY_USER_PROFILE_IMAGE);
|
|
|
|
quote_id = cursor.getColumnIndex(Statuses.QUOTE_ID);
|
|
|
|
quote_text_html = cursor.getColumnIndex(Statuses.QUOTE_TEXT_HTML);
|
|
|
|
quote_text_plain = cursor.getColumnIndex(Statuses.QUOTE_TEXT_PLAIN);
|
|
|
|
quote_text_unescaped = cursor.getColumnIndex(Statuses.QUOTE_TEXT_UNESCAPED);
|
|
|
|
quote_timestamp = cursor.getColumnIndex(Statuses.QUOTE_TIMESTAMP);
|
2015-04-08 08:33:07 +02:00
|
|
|
quote_source = cursor.getColumnIndex(Statuses.QUOTE_SOURCE);
|
2015-06-01 11:35:34 +02:00
|
|
|
quote_retweet_count = cursor.getColumnIndex(Statuses.QUOTE_RETWEET_COUNT);
|
|
|
|
quote_favorite_count = cursor.getColumnIndex(Statuses.QUOTE_FAVORITE_COUNT);
|
|
|
|
quote_reply_count = cursor.getColumnIndex(Statuses.QUOTE_REPLY_COUNT);
|
2015-04-07 17:43:03 +02:00
|
|
|
quoted_by_user_id = cursor.getColumnIndex(Statuses.QUOTED_BY_USER_ID);
|
|
|
|
quoted_by_user_name = cursor.getColumnIndex(Statuses.QUOTED_BY_USER_NAME);
|
|
|
|
quoted_by_user_screen_name = cursor.getColumnIndex(Statuses.QUOTED_BY_USER_SCREEN_NAME);
|
|
|
|
quoted_by_user_profile_image = cursor.getColumnIndex(Statuses.QUOTED_BY_USER_PROFILE_IMAGE);
|
2015-04-08 08:33:07 +02:00
|
|
|
quoted_by_user_is_protected = cursor.getColumnIndex(Statuses.QUOTED_BY_USER_IS_PROTECTED);
|
|
|
|
quoted_by_user_is_verified = cursor.getColumnIndex(Statuses.QUOTED_BY_USER_IS_VERIFIED);
|
2015-04-07 17:43:03 +02:00
|
|
|
user_id = cursor.getColumnIndex(Statuses.USER_ID);
|
|
|
|
source = cursor.getColumnIndex(Statuses.SOURCE);
|
|
|
|
retweet_count = cursor.getColumnIndex(Statuses.RETWEET_COUNT);
|
|
|
|
favorite_count = cursor.getColumnIndex(Statuses.FAVORITE_COUNT);
|
|
|
|
reply_count = cursor.getColumnIndex(Statuses.REPLY_COUNT);
|
|
|
|
is_possibly_sensitive = cursor.getColumnIndex(Statuses.IS_POSSIBLY_SENSITIVE);
|
|
|
|
is_following = cursor.getColumnIndex(Statuses.IS_FOLLOWING);
|
2015-04-23 09:40:11 +02:00
|
|
|
media = cursor.getColumnIndex(Statuses.MEDIA_JSON);
|
|
|
|
mentions = cursor.getColumnIndex(Statuses.MENTIONS_JSON);
|
|
|
|
quote_media = cursor.getColumnIndex(Statuses.QUOTE_MEDIA_JSON);
|
2015-04-07 17:43:03 +02:00
|
|
|
card = cursor.getColumnIndex(Statuses.CARD);
|
|
|
|
card_name = cursor.getColumnIndex(Statuses.CARD_NAME);
|
|
|
|
place_full_name = cursor.getColumnIndex(Statuses.PLACE_FULL_NAME);
|
|
|
|
}
|
2014-11-01 17:57:31 +01:00
|
|
|
|
2014-11-17 14:37:25 +01:00
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "CursorIndices{" +
|
|
|
|
"_id=" + _id +
|
|
|
|
", account_id=" + account_id +
|
|
|
|
", status_id=" + status_id +
|
|
|
|
", status_timestamp=" + status_timestamp +
|
|
|
|
", user_name=" + user_name +
|
|
|
|
", user_screen_name=" + user_screen_name +
|
|
|
|
", text_html=" + text_html +
|
|
|
|
", text_plain=" + text_plain +
|
|
|
|
", text_unescaped=" + text_unescaped +
|
|
|
|
", user_profile_image_url=" + user_profile_image_url +
|
|
|
|
", is_favorite=" + is_favorite +
|
|
|
|
", is_retweet=" + is_retweet +
|
|
|
|
", is_gap=" + is_gap +
|
|
|
|
", location=" + location +
|
|
|
|
", is_protected=" + is_protected +
|
|
|
|
", is_verified=" + is_verified +
|
|
|
|
", in_reply_to_status_id=" + in_reply_to_status_id +
|
|
|
|
", in_reply_to_user_id=" + in_reply_to_user_id +
|
|
|
|
", in_reply_to_user_name=" + in_reply_to_user_name +
|
|
|
|
", in_reply_to_user_screen_name=" + in_reply_to_user_screen_name +
|
|
|
|
", my_retweet_id=" + my_retweet_id +
|
|
|
|
", retweeted_by_user_name=" + retweeted_by_user_name +
|
|
|
|
", retweeted_by_user_screen_name=" + retweeted_by_user_screen_name +
|
2015-02-17 06:49:23 +01:00
|
|
|
", retweeted_by_user_profile_image=" + retweeted_by_user_profile_image +
|
2014-11-17 14:37:25 +01:00
|
|
|
", retweet_id=" + retweet_id +
|
|
|
|
", retweet_timestamp=" + retweet_timestamp +
|
|
|
|
", retweeted_by_user_id=" + retweeted_by_user_id +
|
|
|
|
", user_id=" + user_id +
|
|
|
|
", source=" + source +
|
|
|
|
", retweet_count=" + retweet_count +
|
|
|
|
", favorite_count=" + favorite_count +
|
|
|
|
", reply_count=" + reply_count +
|
|
|
|
", is_possibly_sensitive=" + is_possibly_sensitive +
|
|
|
|
", is_following=" + is_following +
|
|
|
|
", media=" + media +
|
|
|
|
", mentions=" + mentions +
|
2015-04-23 09:40:11 +02:00
|
|
|
", quote_media=" + quote_media +
|
2015-02-17 06:49:23 +01:00
|
|
|
", card_name=" + card_name +
|
|
|
|
", card=" + card +
|
2015-04-03 19:22:00 +02:00
|
|
|
", place_full_name=" + place_full_name +
|
2015-04-23 09:40:11 +02:00
|
|
|
", is_quote=" + is_quote +
|
|
|
|
", quote_id=" + quote_id +
|
|
|
|
", quote_text_html=" + quote_text_html +
|
|
|
|
", quote_text_plain=" + quote_text_plain +
|
|
|
|
", quote_text_unescaped=" + quote_text_unescaped +
|
|
|
|
", quote_timestamp=" + quote_timestamp +
|
|
|
|
", quote_source=" + quote_source +
|
2015-06-01 11:35:34 +02:00
|
|
|
", quote_retweet_count=" + quote_retweet_count +
|
|
|
|
", quote_favorite_count=" + quote_favorite_count +
|
|
|
|
", quote_reply_count=" + quote_reply_count +
|
2015-04-23 09:40:11 +02:00
|
|
|
", quoted_by_user_id=" + quoted_by_user_id +
|
|
|
|
", quoted_by_user_name=" + quoted_by_user_name +
|
|
|
|
", quoted_by_user_screen_name=" + quoted_by_user_screen_name +
|
|
|
|
", quoted_by_user_profile_image=" + quoted_by_user_profile_image +
|
|
|
|
", quoted_by_user_is_protected=" + quoted_by_user_is_protected +
|
|
|
|
", quoted_by_user_is_verified=" + quoted_by_user_is_verified +
|
2014-11-17 14:37:25 +01:00
|
|
|
'}';
|
|
|
|
}
|
|
|
|
|
2015-02-17 06:49:23 +01:00
|
|
|
|
2015-01-23 17:09:03 +01:00
|
|
|
}
|
2015-01-01 11:38:34 +01:00
|
|
|
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonObject
|
|
|
|
public static final class ParcelableCardEntity implements Parcelable {
|
2015-01-01 11:38:34 +01:00
|
|
|
|
|
|
|
public static final Parcelable.Creator<ParcelableCardEntity> CREATOR = new Parcelable.Creator<ParcelableCardEntity>() {
|
|
|
|
@Override
|
|
|
|
public ParcelableCardEntity createFromParcel(final Parcel in) {
|
|
|
|
return new ParcelableCardEntity(in);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ParcelableCardEntity[] newArray(final int size) {
|
|
|
|
return new ParcelableCardEntity[size];
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "name")
|
|
|
|
public String name;
|
|
|
|
|
|
|
|
@JsonField(name = "users")
|
|
|
|
public ParcelableUser[] users;
|
2015-01-01 11:38:34 +01:00
|
|
|
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "values")
|
2015-04-23 18:27:13 +02:00
|
|
|
public Map<String, ParcelableBindingValue> values;
|
2015-01-01 11:38:34 +01:00
|
|
|
|
|
|
|
public ParcelableCardEntity(Parcel src) {
|
|
|
|
name = src.readString();
|
|
|
|
users = src.createTypedArray(ParcelableUser.CREATOR);
|
2015-04-23 18:27:13 +02:00
|
|
|
final Bundle bundle = src.readBundle(ParcelableBindingValue.class.getClassLoader());
|
|
|
|
for (String key : bundle.keySet()) {
|
|
|
|
if (values == null) {
|
|
|
|
values = new HashMap<>();
|
|
|
|
}
|
|
|
|
final ParcelableBindingValue value = bundle.getParcelable(key);
|
|
|
|
values.put(key, value);
|
|
|
|
}
|
2015-01-01 11:38:34 +01:00
|
|
|
}
|
|
|
|
|
2015-04-23 16:59:20 +02:00
|
|
|
public ParcelableCardEntity() {
|
|
|
|
|
2015-01-01 11:38:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public ParcelableCardEntity(CardEntity card, long account_id) {
|
|
|
|
name = card.getName();
|
2015-04-15 09:32:20 +02:00
|
|
|
users = ParcelableUser.fromUsersArray(card.getUsers(), account_id);
|
2015-04-23 18:27:13 +02:00
|
|
|
values = ParcelableBindingValue.from(card.getBindingValues());
|
2015-01-01 11:38:34 +01:00
|
|
|
}
|
|
|
|
|
2015-04-07 17:43:03 +02:00
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "ParcelableCardEntity{" +
|
|
|
|
"name='" + name + '\'' +
|
|
|
|
", users=" + Arrays.toString(users) +
|
2015-04-23 18:27:13 +02:00
|
|
|
", values=" + values +
|
2015-04-07 17:43:03 +02:00
|
|
|
'}';
|
|
|
|
}
|
|
|
|
|
2015-04-23 18:27:13 +02:00
|
|
|
@Override
|
|
|
|
public int describeContents() {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void writeToParcel(Parcel dest, int flags) {
|
|
|
|
dest.writeString(name);
|
|
|
|
dest.writeTypedArray(users, flags);
|
|
|
|
final Bundle bundle = new Bundle();
|
|
|
|
if (values != null) {
|
|
|
|
for (Entry<String, ParcelableBindingValue> entry : values.entrySet()) {
|
|
|
|
bundle.putParcelable(entry.getKey(), entry.getValue());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dest.writeBundle(bundle);
|
|
|
|
}
|
|
|
|
|
2015-01-01 11:38:34 +01:00
|
|
|
public static ParcelableCardEntity fromCardEntity(CardEntity card, long account_id) {
|
|
|
|
if (card == null) return null;
|
|
|
|
return new ParcelableCardEntity(card, account_id);
|
2014-11-01 17:57:31 +01:00
|
|
|
}
|
|
|
|
|
2015-01-01 11:38:34 +01:00
|
|
|
public static ParcelableCardEntity fromJSONString(final String json) {
|
|
|
|
if (TextUtils.isEmpty(json)) return null;
|
|
|
|
try {
|
2015-04-23 16:59:20 +02:00
|
|
|
return LoganSquare.parse(json, ParcelableCardEntity.class);
|
|
|
|
} catch (final IOException e) {
|
2015-01-01 11:38:34 +01:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-04-23 18:27:13 +02:00
|
|
|
public static ParcelableBindingValue getValue(@Nullable ParcelableCardEntity entity, @Nullable String key) {
|
|
|
|
if (entity == null || entity.values == null || key == null) return null;
|
|
|
|
return entity.values.get(key);
|
2015-01-23 17:09:03 +01:00
|
|
|
}
|
2015-01-01 11:38:34 +01:00
|
|
|
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonObject
|
2015-04-23 18:27:13 +02:00
|
|
|
public static final class ParcelableBindingValue implements Parcelable {
|
2015-01-01 11:38:34 +01:00
|
|
|
|
2015-04-23 18:27:13 +02:00
|
|
|
public static final Parcelable.Creator<ParcelableBindingValue> CREATOR = new Parcelable.Creator<ParcelableBindingValue>() {
|
2015-01-01 11:38:34 +01:00
|
|
|
@Override
|
2015-04-23 18:27:13 +02:00
|
|
|
public ParcelableBindingValue createFromParcel(final Parcel in) {
|
|
|
|
return new ParcelableBindingValue(in);
|
2015-01-01 11:38:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2015-04-23 18:27:13 +02:00
|
|
|
public ParcelableBindingValue[] newArray(final int size) {
|
|
|
|
return new ParcelableBindingValue[size];
|
2015-01-01 11:38:34 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2015-04-23 16:59:20 +02:00
|
|
|
@JsonField(name = "type")
|
|
|
|
public String type;
|
|
|
|
@JsonField(name = "value")
|
2015-04-23 18:27:13 +02:00
|
|
|
public String value;
|
2015-01-23 17:09:03 +01:00
|
|
|
|
2015-04-23 18:27:13 +02:00
|
|
|
public ParcelableBindingValue() {
|
2015-01-01 11:38:34 +01:00
|
|
|
}
|
|
|
|
|
2015-04-23 18:27:13 +02:00
|
|
|
public ParcelableBindingValue(Parcel in) {
|
2015-01-23 17:09:03 +01:00
|
|
|
this.type = in.readString();
|
2015-04-23 18:27:13 +02:00
|
|
|
this.value = in.readString();
|
2015-01-01 11:38:34 +01:00
|
|
|
}
|
|
|
|
|
2015-04-23 18:27:13 +02:00
|
|
|
public ParcelableBindingValue(BindingValue value) {
|
2015-05-07 17:40:59 +02:00
|
|
|
if (value instanceof ImageValue) {
|
|
|
|
this.type = BindingValue.TYPE_IMAGE;
|
2015-04-23 18:27:13 +02:00
|
|
|
this.value = ((ImageValue) value).getUrl();
|
2015-05-07 17:40:59 +02:00
|
|
|
} else if (value instanceof StringValue) {
|
|
|
|
this.type = BindingValue.TYPE_STRING;
|
2015-04-23 18:27:13 +02:00
|
|
|
this.value = ((StringValue) value).getValue();
|
2015-05-07 17:40:59 +02:00
|
|
|
} else if (value instanceof BooleanValue) {
|
|
|
|
this.type = BindingValue.TYPE_BOOLEAN;
|
2015-04-23 18:27:13 +02:00
|
|
|
this.value = String.valueOf(((BooleanValue) value).getValue());
|
2015-05-07 17:40:59 +02:00
|
|
|
} else if (value instanceof UserValue) {
|
|
|
|
this.type = BindingValue.TYPE_USER;
|
2015-04-23 18:27:13 +02:00
|
|
|
this.value = String.valueOf(((UserValue) value).getUserId());
|
2015-01-23 17:09:03 +01:00
|
|
|
}
|
2015-01-01 11:38:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int describeContents() {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2015-04-23 18:27:13 +02:00
|
|
|
public static Map<String, ParcelableBindingValue> from(Map<String, BindingValue> bindingValues) {
|
|
|
|
if (bindingValues == null) return null;
|
|
|
|
final Map<String, ParcelableBindingValue> map = new HashMap<>();
|
|
|
|
for (Entry<String, BindingValue> entry : bindingValues.entrySet()) {
|
|
|
|
map.put(entry.getKey(), new ParcelableBindingValue(entry.getValue()));
|
|
|
|
}
|
|
|
|
return map;
|
2015-01-23 17:09:03 +01:00
|
|
|
}
|
|
|
|
|
2015-01-01 11:38:34 +01:00
|
|
|
@Override
|
|
|
|
public void writeToParcel(Parcel dest, int flags) {
|
2015-01-23 17:09:03 +01:00
|
|
|
dest.writeString(type);
|
2015-04-23 18:27:13 +02:00
|
|
|
dest.writeString(value);
|
2015-01-01 11:38:34 +01:00
|
|
|
}
|
|
|
|
|
2015-04-23 18:27:13 +02:00
|
|
|
|
2015-01-01 11:38:34 +01:00
|
|
|
}
|
2015-04-23 18:27:13 +02:00
|
|
|
|
2014-11-01 17:57:31 +01:00
|
|
|
}
|
2015-01-23 17:09:03 +01:00
|
|
|
|
2015-04-07 17:43:03 +02:00
|
|
|
@Override
|
|
|
|
public void writeToParcel(final Parcel out, final int flags) {
|
2015-05-26 13:19:03 +02:00
|
|
|
ParcelableStatusParcelablePlease.writeToParcel(this, out, flags);
|
2015-04-07 17:43:03 +02:00
|
|
|
}
|
|
|
|
|
2014-07-03 07:48:39 +02:00
|
|
|
}
|