aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/reader/models
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/reader/models')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderBlogIdPostId.java23
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderBlogIdPostIdList.java40
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderImageList.java60
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderRelatedPost.java86
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/reader/models/ReaderRelatedPostList.java18
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));
+ }
+ }
+
+}