Twidere-App-Android-Twitter.../twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/MediaEntity.java

566 lines
15 KiB
Java

/*
* Twidere - Twitter client for Android
*
* Copyright 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mariotaku.microblog.library.twitter.model;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.IntDef;
import androidx.annotation.StringDef;
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
import com.hannesdorfmann.parcelableplease.annotation.Bagger;
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
import org.mariotaku.microblog.library.twitter.model.util.ParcelMapBagger;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Arrays;
import java.util.Map;
/**
* Created by mariotaku on 15/3/31.
*/
@ParcelablePlease
@JsonObject
public class MediaEntity extends UrlEntity implements Parcelable {
@JsonField(name = "id")
long id;
@JsonField(name = "indices", typeConverter = IndicesConverter.class)
Indices indices;
@JsonField(name = "media_url")
String mediaUrl;
@JsonField(name = "media_url_https")
String mediaUrlHttps;
@JsonField(name = "url")
String url;
@JsonField(name = "display_url")
String displayUrl;
@JsonField(name = "expanded_url")
String expandedUrl;
@JsonField(name = "type")
@Type
String type;
@JsonField(name = "sizes")
@Bagger(SizeMapBagger.class)
Map<String, Size> sizes;
@JsonField(name = "source_status_id")
long sourceStatusId;
@JsonField(name = "source_user_id")
long sourceUserId;
@JsonField(name = "video_info")
VideoInfo videoInfo;
@JsonField(name = "features")
@Bagger(FeaturesMapBagger.class)
Map<String, Feature> features;
@JsonField(name = "ext_alt_text")
String altText;
@JsonField(name = "ext")
ExtInfo extInfo;
public Map<String, Feature> getFeatures() {
return features;
}
public String getMediaUrl() {
return mediaUrl;
}
public VideoInfo getVideoInfo() {
return videoInfo;
}
public String getMediaUrlHttps() {
return mediaUrlHttps;
}
@Override
public String getExpandedUrl() {
return expandedUrl;
}
@Override
public String getDisplayUrl() {
return displayUrl;
}
@Override
public String getUrl() {
return url;
}
@Type
public String getType() {
return type;
}
public Map<String, Size> getSizes() {
return sizes;
}
@Override
public int getEnd() {
return indices.getEnd();
}
@Override
public int getStart() {
return indices.getStart();
}
public long getId() {
return id;
}
public String getAltText() {
return altText;
}
public ExtInfo getExtInfo() {
return extInfo;
}
@Override
public String toString() {
return "MediaEntity{" +
"id=" + id +
", indices=" + indices +
", mediaUrl='" + mediaUrl + '\'' +
", mediaUrlHttps='" + mediaUrlHttps + '\'' +
", url='" + url + '\'' +
", displayUrl='" + displayUrl + '\'' +
", expandedUrl='" + expandedUrl + '\'' +
", type=" + type +
", sizes=" + sizes +
", sourceStatusId=" + sourceStatusId +
", sourceUserId=" + sourceUserId +
", videoInfo=" + videoInfo +
", features=" + features +
'}';
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
MediaEntityParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<MediaEntity> CREATOR = new Creator<MediaEntity>() {
@Override
public MediaEntity createFromParcel(Parcel source) {
MediaEntity target = new MediaEntity();
MediaEntityParcelablePlease.readFromParcel(target, source);
return target;
}
@Override
public MediaEntity[] newArray(int size) {
return new MediaEntity[size];
}
};
public @interface Type {
String PHOTO = "photo";
String VIDEO = "video";
String ANIMATED_GIF = "animated_gif";
}
@ParcelablePlease
@JsonObject
public static class Feature implements Parcelable {
@JsonField(name = "faces")
Face[] faces;
@Override
public String toString() {
return "Feature{" +
"faces=" + Arrays.toString(faces) +
'}';
}
@ParcelablePlease
@JsonObject
public static class Face implements Parcelable {
@JsonField(name = "x")
int x;
@JsonField(name = "y")
int y;
@JsonField(name = "h")
int height;
@JsonField(name = "w")
int width;
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public String toString() {
return "Face{" +
"x=" + x +
", y=" + y +
", height=" + height +
", width=" + width +
'}';
}
public int getHeight() {
return height;
}
public int getWidth() {
return width;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
MediaEntity$Feature$FaceParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<Face> CREATOR = new Creator<Face>() {
@Override
public Face createFromParcel(Parcel source) {
Face target = new Face();
MediaEntity$Feature$FaceParcelablePlease.readFromParcel(target, source);
return target;
}
@Override
public Face[] newArray(int size) {
return new Face[size];
}
};
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
MediaEntity$FeatureParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<Feature> CREATOR = new Creator<Feature>() {
@Override
public Feature createFromParcel(Parcel source) {
Feature target = new Feature();
MediaEntity$FeatureParcelablePlease.readFromParcel(target, source);
return target;
}
@Override
public Feature[] newArray(int size) {
return new Feature[size];
}
};
}
@ParcelablePlease
@JsonObject
public static class VideoInfo implements Parcelable {
@JsonField(name = "duration")
long duration;
@JsonField(name = "variants")
Variant[] variants;
@JsonField(name = "aspect_ratio")
long[] aspectRatio;
public Variant[] getVariants() {
return variants;
}
public long[] getAspectRatio() {
return aspectRatio;
}
@Override
public String toString() {
return "VideoInfo{" +
"duration=" + duration +
", variants=" + Arrays.toString(variants) +
", aspectRatio=" + Arrays.toString(aspectRatio) +
'}';
}
public long getDuration() {
return duration;
}
@ParcelablePlease
@JsonObject
public static class Variant implements Parcelable {
@JsonField(name = "bitrate")
long bitrate;
@JsonField(name = "content_type")
String contentType;
@JsonField(name = "url")
String url;
@Override
public String toString() {
return "Variant{" +
"bitrate=" + bitrate +
", contentType='" + contentType + '\'' +
", url='" + url + '\'' +
'}';
}
public String getContentType() {
return contentType;
}
public String getUrl() {
return url;
}
public long getBitrate() {
return bitrate;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
MediaEntity$VideoInfo$VariantParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<Variant> CREATOR = new Creator<Variant>() {
@Override
public Variant createFromParcel(Parcel source) {
Variant target = new Variant();
MediaEntity$VideoInfo$VariantParcelablePlease.readFromParcel(target, source);
return target;
}
@Override
public Variant[] newArray(int size) {
return new Variant[size];
}
};
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
MediaEntity$VideoInfoParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<VideoInfo> CREATOR = new Creator<VideoInfo>() {
@Override
public VideoInfo createFromParcel(Parcel source) {
VideoInfo target = new VideoInfo();
MediaEntity$VideoInfoParcelablePlease.readFromParcel(target, source);
return target;
}
@Override
public VideoInfo[] newArray(int size) {
return new VideoInfo[size];
}
};
}
@StringDef({ScaleType.THUMB, ScaleType.SMALL, ScaleType.MEDIUM, ScaleType.LARGE})
@Retention(RetentionPolicy.SOURCE)
public @interface SizeType {
}
@IntDef({ScaleType.FIT, ScaleType.CROP})
@Retention(RetentionPolicy.SOURCE)
public @interface ScaleType {
int CROP = 101;
int FIT = 100;
String THUMB = "thumb";
String SMALL = "small";
String MEDIUM = "medium";
String LARGE = "large";
}
@ParcelablePlease
@JsonObject
public static class ExtInfo implements Parcelable {
@JsonField(name = "stickerInfo")
Item stickerInfo;
@JsonField(name = "altText")
Item altText;
public Item getStickerInfo() {
return stickerInfo;
}
public Item getAltText() {
return altText;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
MediaEntity$ExtInfoParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<ExtInfo> CREATOR = new Creator<ExtInfo>() {
public ExtInfo createFromParcel(Parcel source) {
ExtInfo target = new ExtInfo();
MediaEntity$ExtInfoParcelablePlease.readFromParcel(target, source);
return target;
}
public ExtInfo[] newArray(int size) {
return new ExtInfo[size];
}
};
@ParcelablePlease
@JsonObject
public static class Item implements Parcelable {
@JsonField(name = "ttl")
long ttl;
public long getTtl() {
return ttl;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
MediaEntity$ExtInfo$ItemParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<Item> CREATOR = new Creator<Item>() {
public Item createFromParcel(Parcel source) {
Item target = new Item();
MediaEntity$ExtInfo$ItemParcelablePlease.readFromParcel(target, source);
return target;
}
public Item[] newArray(int size) {
return new Item[size];
}
};
}
}
@ParcelablePlease
@JsonObject
public static class Size implements Parcelable {
@JsonField(name = "w")
int width;
@JsonField(name = "h")
int height;
@JsonField(name = "resize")
String resize;
public int getHeight() {
return height;
}
public String getResize() {
return resize;
}
public int getWidth() {
return width;
}
@Override
public String toString() {
return "Size{" +
"width=" + width +
", height=" + height +
", resize='" + resize + '\'' +
'}';
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
MediaEntity$SizeParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<Size> CREATOR = new Creator<Size>() {
@Override
public Size createFromParcel(Parcel source) {
Size target = new Size();
MediaEntity$SizeParcelablePlease.readFromParcel(target, source);
return target;
}
@Override
public Size[] newArray(int size) {
return new Size[size];
}
};
}
public static class SizeMapBagger extends ParcelMapBagger<Size> {
public SizeMapBagger() {
super(Size.class);
}
}
public static class FeaturesMapBagger extends ParcelMapBagger<Feature> {
public FeaturesMapBagger() {
super(Feature.class);
}
}
}