diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/Posting.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/Posting.java index cc08f17d..88c2f8a3 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/Posting.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/Posting.java @@ -11,11 +11,11 @@ import timber.log.Timber; /** * This is a utility class containing a collection of static methods to help with topic replying. */ -class Posting { +public class Posting { /** * {@link REPLY_STATUS} enum defines the different possible outcomes of a topic reply request. */ - enum REPLY_STATUS { + public enum REPLY_STATUS { /** * The request was successful */ @@ -54,7 +54,7 @@ class Posting { * @return a {@link REPLY_STATUS} that describes the response status * @throws IOException method relies to {@link org.jsoup.Jsoup#parse(String)} */ - static REPLY_STATUS replyStatus(Response response) throws IOException { + public static REPLY_STATUS replyStatus(Response response) throws IOException { if (response.code() == 404) return REPLY_STATUS.NOT_FOUND; if (response.code() < 200 || response.code() >= 400) return REPLY_STATUS.OTHER_ERROR; String finalUrl = response.request().url().toString(); diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java index e053e809..8aad5027 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java @@ -31,6 +31,12 @@ import java.util.ArrayList; import java.util.Objects; import gr.thmmy.mthmmy.R; +import gr.thmmy.mthmmy.activities.topic.tasks.DeleteTask; +import gr.thmmy.mthmmy.activities.topic.tasks.EditTask; +import gr.thmmy.mthmmy.activities.topic.tasks.PrepareForEditTask; +import gr.thmmy.mthmmy.activities.topic.tasks.PrepareForReply; +import gr.thmmy.mthmmy.activities.topic.tasks.ReplyTask; +import gr.thmmy.mthmmy.activities.topic.tasks.TopicTask; import gr.thmmy.mthmmy.base.BaseActivity; import gr.thmmy.mthmmy.model.Bookmark; import gr.thmmy.mthmmy.model.Post; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicParser.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicParser.java index a753fc8c..dd354bf7 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicParser.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicParser.java @@ -28,7 +28,7 @@ import timber.log.Timber; *
  • {@link #parseTopicNumberOfPages(Document, int, ParseHelpers.Language)}
  • *
  • {@link #parseTopic(Document, ParseHelpers.Language)}
  • */ -class TopicParser { +public class TopicParser { //User colors private static final int USER_COLOR_BLACK = Color.parseColor("#000000"); private static final int USER_COLOR_RED = Color.parseColor("#F44336"); @@ -48,7 +48,7 @@ class TopicParser { * @return String containing html with the usernames of users * @see org.jsoup.Jsoup Jsoup */ - static String parseUsersViewingThisTopic(Document topic, ParseHelpers.Language language) { + public static String parseUsersViewingThisTopic(Document topic, ParseHelpers.Language language) { if (language.is(ParseHelpers.Language.GREEK)) return topic.select("td:containsOwn(διαβάζουν αυτό το θέμα)").first().html(); return topic.select("td:containsOwn(are viewing this topic)").first().html(); @@ -64,7 +64,7 @@ class TopicParser { * @return int containing parsed topic's current page * @see org.jsoup.Jsoup Jsoup */ - static int parseCurrentPageIndex(Document topic, ParseHelpers.Language language) { + public static int parseCurrentPageIndex(Document topic, ParseHelpers.Language language) { int parsedPage = 1; if (language.is(ParseHelpers.Language.GREEK)) { @@ -102,7 +102,7 @@ class TopicParser { * @return int containing the number of pages * @see org.jsoup.Jsoup Jsoup */ - static int parseTopicNumberOfPages(Document topic, int currentPage, ParseHelpers.Language language) { + public static int parseTopicNumberOfPages(Document topic, int currentPage, ParseHelpers.Language language) { int returnPages = 1; if (language.is(ParseHelpers.Language.GREEK)) { @@ -140,7 +140,7 @@ class TopicParser { * @return {@link ArrayList} of {@link Post}s * @see org.jsoup.Jsoup Jsoup */ - static ArrayList parseTopic(Document topic, ParseHelpers.Language language) { + public static ArrayList parseTopic(Document topic, ParseHelpers.Language language) { //Method's variables final int NO_INDEX = -1; ArrayList parsedPostsList = new ArrayList<>(); diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/DeleteTask.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/DeleteTask.java similarity index 91% rename from app/src/main/java/gr/thmmy/mthmmy/activities/topic/DeleteTask.java rename to app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/DeleteTask.java index 7c74d17a..5d4a0531 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/DeleteTask.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/DeleteTask.java @@ -1,17 +1,16 @@ -package gr.thmmy.mthmmy.activities.topic; +package gr.thmmy.mthmmy.activities.topic.tasks; import android.os.AsyncTask; import java.io.IOException; +import gr.thmmy.mthmmy.activities.topic.Posting; import gr.thmmy.mthmmy.base.BaseApplication; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import timber.log.Timber; -import static gr.thmmy.mthmmy.activities.topic.Posting.replyStatus; - public class DeleteTask extends AsyncTask { private DeleteTaskCallbacks listener; @@ -37,7 +36,7 @@ public class DeleteTask extends AsyncTask { client.newCall(delete).execute(); Response response = client.newCall(delete).execute(); //Response response = client.newCall(delete).execute(); - switch (replyStatus(response)) { + switch (Posting.replyStatus(response)) { case SUCCESSFUL: return true; default: diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/EditTask.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/EditTask.java similarity index 98% rename from app/src/main/java/gr/thmmy/mthmmy/activities/topic/EditTask.java rename to app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/EditTask.java index 4d4802b3..f9fe5444 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/EditTask.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/EditTask.java @@ -1,4 +1,4 @@ -package gr.thmmy.mthmmy.activities.topic; +package gr.thmmy.mthmmy.activities.topic.tasks; import android.os.AsyncTask; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/PrepareForEditResult.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/PrepareForEditResult.java similarity index 96% rename from app/src/main/java/gr/thmmy/mthmmy/activities/topic/PrepareForEditResult.java rename to app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/PrepareForEditResult.java index 0c3f9dec..a8176072 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/PrepareForEditResult.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/PrepareForEditResult.java @@ -1,4 +1,4 @@ -package gr.thmmy.mthmmy.activities.topic; +package gr.thmmy.mthmmy.activities.topic.tasks; public class PrepareForEditResult { private final String postText, commitEditUrl, numReplies, seqnum, sc, topic; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/PrepareForEditTask.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/PrepareForEditTask.java similarity index 96% rename from app/src/main/java/gr/thmmy/mthmmy/activities/topic/PrepareForEditTask.java rename to app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/PrepareForEditTask.java index f1933cce..7259d580 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/PrepareForEditTask.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/PrepareForEditTask.java @@ -1,4 +1,4 @@ -package gr.thmmy.mthmmy.activities.topic; +package gr.thmmy.mthmmy.activities.topic.tasks; import android.os.AsyncTask; @@ -9,6 +9,7 @@ import org.jsoup.select.Selector; import java.io.IOException; +import gr.thmmy.mthmmy.activities.topic.tasks.PrepareForEditResult; import gr.thmmy.mthmmy.base.BaseApplication; import okhttp3.OkHttpClient; import okhttp3.Request; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/PrepareForReply.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/PrepareForReply.java similarity index 98% rename from app/src/main/java/gr/thmmy/mthmmy/activities/topic/PrepareForReply.java rename to app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/PrepareForReply.java index 87d8f4ab..a6ea37a1 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/PrepareForReply.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/PrepareForReply.java @@ -1,4 +1,4 @@ -package gr.thmmy.mthmmy.activities.topic; +package gr.thmmy.mthmmy.activities.topic.tasks; import android.os.AsyncTask; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/PrepareForReplyResult.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/PrepareForReplyResult.java similarity index 93% rename from app/src/main/java/gr/thmmy/mthmmy/activities/topic/PrepareForReplyResult.java rename to app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/PrepareForReplyResult.java index 24364d49..b15f77a0 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/PrepareForReplyResult.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/PrepareForReplyResult.java @@ -1,4 +1,4 @@ -package gr.thmmy.mthmmy.activities.topic; +package gr.thmmy.mthmmy.activities.topic.tasks; public class PrepareForReplyResult { private final String numReplies, seqnum, sc, topic, buildedQuotes; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/ReplyTask.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/ReplyTask.java similarity index 98% rename from app/src/main/java/gr/thmmy/mthmmy/activities/topic/ReplyTask.java rename to app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/ReplyTask.java index 08e6f748..69bd0035 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/ReplyTask.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/ReplyTask.java @@ -1,4 +1,4 @@ -package gr.thmmy.mthmmy.activities.topic; +package gr.thmmy.mthmmy.activities.topic.tasks; import android.os.AsyncTask; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicTask.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/TopicTask.java similarity index 99% rename from app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicTask.java rename to app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/TopicTask.java index 74f2c23a..c262a326 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicTask.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/TopicTask.java @@ -1,4 +1,4 @@ -package gr.thmmy.mthmmy.activities.topic; +package gr.thmmy.mthmmy.activities.topic.tasks; import android.os.AsyncTask; import android.util.SparseArray; @@ -11,6 +11,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Objects; +import gr.thmmy.mthmmy.activities.topic.TopicParser; import gr.thmmy.mthmmy.base.BaseApplication; import gr.thmmy.mthmmy.model.Post; import gr.thmmy.mthmmy.model.ThmmyPage; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicTaskResult.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/TopicTaskResult.java similarity index 96% rename from app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicTaskResult.java rename to app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/TopicTaskResult.java index 4756c7e0..65b1d996 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicTaskResult.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/tasks/TopicTaskResult.java @@ -1,9 +1,10 @@ -package gr.thmmy.mthmmy.activities.topic; +package gr.thmmy.mthmmy.activities.topic.tasks; import android.util.SparseArray; import java.util.ArrayList; +import gr.thmmy.mthmmy.activities.topic.tasks.TopicTask; import gr.thmmy.mthmmy.model.Post; public class TopicTaskResult { diff --git a/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java b/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java index 7f0c805e..740dd1d2 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java +++ b/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java @@ -9,22 +9,24 @@ import android.preference.PreferenceManager; import java.util.ArrayList; import gr.thmmy.mthmmy.activities.settings.SettingsActivity; -import gr.thmmy.mthmmy.activities.topic.DeleteTask; -import gr.thmmy.mthmmy.activities.topic.EditTask; -import gr.thmmy.mthmmy.activities.topic.PrepareForReply; -import gr.thmmy.mthmmy.activities.topic.PrepareForReplyResult; -import gr.thmmy.mthmmy.activities.topic.PrepareForEditResult; -import gr.thmmy.mthmmy.activities.topic.PrepareForEditTask; -import gr.thmmy.mthmmy.activities.topic.ReplyTask; -import gr.thmmy.mthmmy.activities.topic.TopicTask; -import gr.thmmy.mthmmy.activities.topic.TopicTaskResult; +import gr.thmmy.mthmmy.activities.topic.tasks.DeleteTask; +import gr.thmmy.mthmmy.activities.topic.tasks.EditTask; +import gr.thmmy.mthmmy.activities.topic.tasks.PrepareForReply; +import gr.thmmy.mthmmy.activities.topic.tasks.PrepareForReplyResult; +import gr.thmmy.mthmmy.activities.topic.tasks.PrepareForEditResult; +import gr.thmmy.mthmmy.activities.topic.tasks.PrepareForEditTask; +import gr.thmmy.mthmmy.activities.topic.tasks.ReplyTask; +import gr.thmmy.mthmmy.activities.topic.tasks.TopicTask; +import gr.thmmy.mthmmy.activities.topic.tasks.TopicTaskResult; import gr.thmmy.mthmmy.base.BaseActivity; import gr.thmmy.mthmmy.model.Post; import gr.thmmy.mthmmy.session.SessionManager; public class TopicViewModel extends BaseViewModel implements TopicTask.OnTopicTaskCompleted, PrepareForReply.OnPrepareForReplyFinished, PrepareForEditTask.OnPrepareEditFinished { - + /** + * topic state + */ private boolean editingPost = false; private boolean writingReply = false; /** @@ -36,6 +38,7 @@ public class TopicViewModel extends BaseViewModel implements TopicTask.OnTopicTa private PrepareForEditTask currentPrepareForEditTask; private PrepareForReply currentPrepareForReplyTask; + //callbacks for topic activity private TopicTask.TopicTaskObserver topicTaskObserver; private DeleteTask.DeleteTaskCallbacks deleteTaskCallbacks; private ReplyTask.ReplyTaskCallbacks replyFinishListener; @@ -49,116 +52,6 @@ public class TopicViewModel extends BaseViewModel implements TopicTask.OnTopicTa private String firstTopicUrl; - public void setTopicTaskObserver(TopicTask.TopicTaskObserver topicTaskObserver) { - this.topicTaskObserver = topicTaskObserver; - } - - public void setDeleteTaskCallbacks(DeleteTask.DeleteTaskCallbacks deleteTaskCallbacks) { - this.deleteTaskCallbacks = deleteTaskCallbacks; - } - - public void setReplyFinishListener(ReplyTask.ReplyTaskCallbacks replyFinishListener) { - this.replyFinishListener = replyFinishListener; - } - - public void setPrepareForEditCallbacks(PrepareForEditTask.PrepareForEditCallbacks prepareForEditCallbacks) { - this.prepareForEditCallbacks = prepareForEditCallbacks; - } - - public void setEditTaskCallbacks(EditTask.EditTaskCallbacks editTaskCallbacks) { - this.editTaskCallbacks = editTaskCallbacks; - } - - public void setPrepareForReplyCallbacks(PrepareForReply.PrepareForReplyCallbacks prepareForReplyCallbacks) { - this.prepareForReplyCallbacks = prepareForReplyCallbacks; - } - - public MutableLiveData getTopicTaskResult() { - return topicTaskResult; - } - - public MutableLiveData getPrepareForReplyResult() { - return prepareForReplyResult; - } - - public MutableLiveData getPrepareForEditResult() { - return prepareForEditResult; - } - - public void setEditingPost(boolean editingPost) { - this.editingPost = editingPost; - } - - public boolean isEditingPost() { - return editingPost; - } - - public int getPostBeingEditedPosition() { - return postBeingEditedPosition; - } - - public boolean canReply() { - return topicTaskResult.getValue() != null && topicTaskResult.getValue().getReplyPageUrl() != null; - } - - public boolean isWritingReply() { - return writingReply; - } - - public void setWritingReply(boolean writingReply) { - this.writingReply = writingReply; - } - - public String getBaseUrl() { - if (topicTaskResult.getValue() != null) { - return topicTaskResult.getValue().getBaseUrl(); - } else { - return ""; - } - } - - public String getTopicUrl() { - if (topicTaskResult.getValue() != null) { - return topicTaskResult.getValue().getLastPageLoadAttemptedUrl(); - } else { - // topic task has not finished yet (log? disable menu button until load is finished?) - return firstTopicUrl; - } - } - - public String getTopicTitle() { - if (topicTaskResult.getValue() == null) - throw new NullPointerException("Topic task has not finished yet!"); - return topicTaskResult.getValue().getTopicTitle(); - } - - public int getCurrentPageIndex() { - if (topicTaskResult.getValue() == null) - throw new NullPointerException("No page has been loaded yet!"); - return topicTaskResult.getValue().getCurrentPageIndex(); - } - - public int getPageCount() { - if (topicTaskResult.getValue() == null) - throw new NullPointerException("No page has been loaded yet!"); - - return topicTaskResult.getValue().getPageCount(); - } - - public String getPostBeingEditedText() { - if (prepareForEditResult.getValue() == null) - throw new NullPointerException("Edit preparation was not found!"); - return prepareForEditResult.getValue().getPostText(); - } - - public String getBuildedQuotes() { - if (prepareForReplyResult.getValue() != null) { - return prepareForReplyResult.getValue().getBuildedQuotes(); - } else { - return ""; - } - } - public void initialLoad(String pageUrl) { firstTopicUrl = pageUrl; currentTopicTask = new TopicTask(topicTaskObserver, this); @@ -257,6 +150,7 @@ public class TopicViewModel extends BaseViewModel implements TopicTask.OnTopicTa // after he is done posting, editing or deleting } + // callbacks for viewmodel @Override public void onTopicTaskCompleted(TopicTaskResult result) { topicTaskResult.setValue(result); @@ -274,4 +168,116 @@ public class TopicViewModel extends BaseViewModel implements TopicTask.OnTopicTa postBeingEditedPosition = position; prepareForEditResult.setValue(result); } + + // <-------------Just getters, setters and helper methods below here----------------> + + public void setTopicTaskObserver(TopicTask.TopicTaskObserver topicTaskObserver) { + this.topicTaskObserver = topicTaskObserver; + } + + public void setDeleteTaskCallbacks(DeleteTask.DeleteTaskCallbacks deleteTaskCallbacks) { + this.deleteTaskCallbacks = deleteTaskCallbacks; + } + + public void setReplyFinishListener(ReplyTask.ReplyTaskCallbacks replyFinishListener) { + this.replyFinishListener = replyFinishListener; + } + + public void setPrepareForEditCallbacks(PrepareForEditTask.PrepareForEditCallbacks prepareForEditCallbacks) { + this.prepareForEditCallbacks = prepareForEditCallbacks; + } + + public void setEditTaskCallbacks(EditTask.EditTaskCallbacks editTaskCallbacks) { + this.editTaskCallbacks = editTaskCallbacks; + } + + public void setPrepareForReplyCallbacks(PrepareForReply.PrepareForReplyCallbacks prepareForReplyCallbacks) { + this.prepareForReplyCallbacks = prepareForReplyCallbacks; + } + + public MutableLiveData getTopicTaskResult() { + return topicTaskResult; + } + + public MutableLiveData getPrepareForReplyResult() { + return prepareForReplyResult; + } + + public MutableLiveData getPrepareForEditResult() { + return prepareForEditResult; + } + + public void setEditingPost(boolean editingPost) { + this.editingPost = editingPost; + } + + public boolean isEditingPost() { + return editingPost; + } + + public int getPostBeingEditedPosition() { + return postBeingEditedPosition; + } + + public boolean canReply() { + return topicTaskResult.getValue() != null && topicTaskResult.getValue().getReplyPageUrl() != null; + } + + public boolean isWritingReply() { + return writingReply; + } + + public void setWritingReply(boolean writingReply) { + this.writingReply = writingReply; + } + + public String getBaseUrl() { + if (topicTaskResult.getValue() != null) { + return topicTaskResult.getValue().getBaseUrl(); + } else { + return ""; + } + } + + public String getTopicUrl() { + if (topicTaskResult.getValue() != null) { + return topicTaskResult.getValue().getLastPageLoadAttemptedUrl(); + } else { + // topic task has not finished yet (log? disable menu button until load is finished?) + return firstTopicUrl; + } + } + + public String getTopicTitle() { + if (topicTaskResult.getValue() == null) + throw new NullPointerException("Topic task has not finished yet!"); + return topicTaskResult.getValue().getTopicTitle(); + } + + public int getCurrentPageIndex() { + if (topicTaskResult.getValue() == null) + throw new NullPointerException("No page has been loaded yet!"); + return topicTaskResult.getValue().getCurrentPageIndex(); + } + + public int getPageCount() { + if (topicTaskResult.getValue() == null) + throw new NullPointerException("No page has been loaded yet!"); + + return topicTaskResult.getValue().getPageCount(); + } + + public String getPostBeingEditedText() { + if (prepareForEditResult.getValue() == null) + throw new NullPointerException("Edit preparation was not found!"); + return prepareForEditResult.getValue().getPostText(); + } + + public String getBuildedQuotes() { + if (prepareForReplyResult.getValue() != null) { + return prepareForReplyResult.getValue().getBuildedQuotes(); + } else { + return ""; + } + } }