diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/reader/models')
5 files changed, 227 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderBlogIdPostId.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderBlogIdPostId.java new file mode 100644 index 000000000..a058ff20a --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderBlogIdPostId.java @@ -0,0 +1,23 @@ +package org.wordpress.android.ui.reader.models; + +import java.io.Serializable; + +public class ReaderBlogIdPostId implements Serializable { + private static final long serialVersionUID = 0L; + + private final long blogId; + private final long postId; + + public ReaderBlogIdPostId(long blogId, long postId) { + this.blogId = blogId; + this.postId = postId; + } + + public long getBlogId() { + return blogId; + } + + public long getPostId() { + return postId; + } +} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderBlogIdPostIdList.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderBlogIdPostIdList.java new file mode 100644 index 000000000..a19eec5be --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderBlogIdPostIdList.java @@ -0,0 +1,40 @@ +package org.wordpress.android.ui.reader.models; + +import java.io.Serializable; +import java.util.ArrayList; + +public class ReaderBlogIdPostIdList extends ArrayList<ReaderBlogIdPostId> + implements Serializable { + + private static final long serialVersionUID = 0L; + + public ReaderBlogIdPostIdList() { + super(); + } + + /* + * when Android serializes any ArrayList descendant, it does so as an ArrayList + * rather than its actual class - use this to convert the serialized list back + * into a ReaderBlogIdPostIdList + */ + @SuppressWarnings("unused") + public ReaderBlogIdPostIdList(Serializable serializedList) { + super(); + if (serializedList != null && serializedList instanceof ArrayList) { + //noinspection unchecked + ArrayList<ReaderBlogIdPostId> list = (ArrayList<ReaderBlogIdPostId>) serializedList; + for (ReaderBlogIdPostId idPair: list) { + this.add(idPair); + } + } + } + + public int indexOf(long blogId, long postId) { + for (int i = 0; i < this.size(); i++) { + if (this.get(i).getBlogId() == blogId && this.get(i).getPostId() == postId) { + return i; + } + } + return -1; + } +} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderImageList.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderImageList.java new file mode 100644 index 000000000..0fdbe14a4 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderImageList.java @@ -0,0 +1,60 @@ +package org.wordpress.android.ui.reader.models; + +import org.wordpress.android.util.UrlUtils; + +import java.util.ArrayList; + +/* + * used by ReaderImageScanner to compile a list of images in a specific post + */ + +public class ReaderImageList extends ArrayList<String> { + private final boolean mIsPrivate; + + public ReaderImageList(boolean isPrivate) { + mIsPrivate = isPrivate; + } + + // image urls are always added normalized and without query params for easier matching, and + // to ensure there are no hard-coded sizes in the query + private static String fixImageUrl(final String imageUrl) { + if (imageUrl == null) { + return null; + } + return UrlUtils.normalizeUrl(UrlUtils.removeQuery(imageUrl)); + } + + public int indexOfImageUrl(final String imageUrl) { + if (imageUrl == null || this.isEmpty()) { + return -1; + } + String fixedUrl = fixImageUrl(imageUrl); + for (int i = 0; i < this.size(); i++) { + if (fixedUrl.equals(this.get(i))) { + return i; + } + } + return -1; + } + + public boolean hasImageUrl(final String imageUrl) { + return (indexOfImageUrl(imageUrl) > -1); + } + + public void addImageUrl(String imageUrl) { + if (imageUrl != null && imageUrl.startsWith("http")) { + this.add(fixImageUrl(imageUrl)); + } + } + + public void addImageUrl(@SuppressWarnings("SameParameterValue") int index, + String imageUrl) { + if (imageUrl != null && imageUrl.startsWith("http")) { + this.add(index, fixImageUrl(imageUrl)); + } + } + + public boolean isPrivate() { + return mIsPrivate; + } +} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderRelatedPost.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderRelatedPost.java new file mode 100644 index 000000000..e95968908 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderRelatedPost.java @@ -0,0 +1,86 @@ +package org.wordpress.android.ui.reader.models; + +import android.support.annotation.NonNull; +import android.text.TextUtils; + +import org.wordpress.android.models.ReaderPost; +import org.wordpress.android.util.UrlUtils; + +/** + * simplified version of a reader post that contains only the fields necessary for a related post + */ +public class ReaderRelatedPost { + private final long mPostId; + private final long mBlogId; + private final String mTitle; + private final String mByline; + private final String mFeaturedImage; + + public ReaderRelatedPost(@NonNull ReaderPost post) { + mPostId = post.postId; + mBlogId = post.blogId; + + mTitle = post.getTitle(); + mFeaturedImage = post.getFeaturedImage(); + + /* + * we want to include the blog name in the byline when it's available, and most sites + * will have a name, but in rare cases there isn't one so we show the domain instead + */ + String blogNameOrDomain; + boolean hasBlogNameOrDomain; + if (post.hasBlogName()) { + blogNameOrDomain = post.getBlogName(); + hasBlogNameOrDomain = true; + } else if (post.hasBlogUrl()) { + blogNameOrDomain = UrlUtils.getHost(post.getBlogUrl()); + hasBlogNameOrDomain = true; + } else { + blogNameOrDomain = null; + hasBlogNameOrDomain = false; + } + + /* + * The byline should show the author name and blog name if both are available, but if + * they're the same (which happens frequently) we only need to show the blog name. + * Otherwise, show either the blog name or author name depending on which is available. + */ + if (post.hasAuthorName() && hasBlogNameOrDomain) { + if (post.getAuthorName().equalsIgnoreCase(blogNameOrDomain)) { + mByline = blogNameOrDomain; + } else { + mByline = post.getAuthorName() + ", " + blogNameOrDomain; + } + } else if (post.hasAuthorName()) { + mByline = post.getAuthorName(); + } else if (hasBlogNameOrDomain) { + mByline = blogNameOrDomain; + } else { + mByline = ""; + } + } + + public long getPostId() { + return mPostId; + } + + public long getBlogId() { + return mBlogId; + } + + public String getTitle() { + return mTitle; + } + + public String getByline() { + return mByline; + } + + public String getFeaturedImage() { + return mFeaturedImage; + } + + public boolean hasFeaturedImage() { + return !TextUtils.isEmpty(mFeaturedImage); + } +} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderRelatedPostList.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderRelatedPostList.java new file mode 100644 index 000000000..94c1d5b5a --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderRelatedPostList.java @@ -0,0 +1,18 @@ +package org.wordpress.android.ui.reader.models; + +import android.support.annotation.NonNull; + +import org.wordpress.android.models.ReaderPost; +import org.wordpress.android.models.ReaderPostList; + +import java.util.ArrayList; + +public class ReaderRelatedPostList extends ArrayList<ReaderRelatedPost> { + + public ReaderRelatedPostList(@NonNull ReaderPostList posts) { + for (ReaderPost post: posts) { + add(new ReaderRelatedPost(post)); + } + } + +} |