diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/downloads/DownloadsActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/downloads/DownloadsActivity.java
index 292c4050..3df917af 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/activities/downloads/DownloadsActivity.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/activities/downloads/DownloadsActivity.java
@@ -11,7 +11,6 @@ import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
-import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
@@ -19,15 +18,13 @@ import org.jsoup.select.Elements;
import java.util.ArrayList;
import java.util.Objects;
-import javax.net.ssl.SSLHandshakeException;
-
import gr.thmmy.mthmmy.R;
import gr.thmmy.mthmmy.base.BaseActivity;
import gr.thmmy.mthmmy.model.Download;
import gr.thmmy.mthmmy.model.ThmmyPage;
+import gr.thmmy.mthmmy.utils.ParseTask;
+import gr.thmmy.mthmmy.utils.exceptions.ParseException;
import me.zhanghai.android.materialprogressbar.MaterialProgressBar;
-import okhttp3.Request;
-import okhttp3.Response;
import timber.log.Timber;
public class DownloadsActivity extends BaseActivity implements DownloadsAdapter.OnLoadMoreListener {
@@ -159,16 +156,14 @@ public class DownloadsActivity extends BaseActivity implements DownloadsAdapter.
}
/**
- * An {@link AsyncTask} that handles asynchronous fetching of a downloads page and parsing it's
- * data. {@link AsyncTask#onPostExecute(Object) OnPostExecute} method calls {@link RecyclerView#swapAdapter}
+ * An {@link ParseTask} that handles asynchronous fetching of a downloads page and parsing it's
+ * data. {@link ParseTask#postParsing(ResultCode) postParsing} method calls {@link RecyclerView#swapAdapter}
* to build graphics.
*
- *
Calling TopicTask's {@link AsyncTask#execute execute} method needs to have profile's url
+ *
Calling TopicTask's {@link ParseTask#execute execute} method needs to have profile's url
* as String parameter!
*/
- class ParseDownloadPageTask extends AsyncTask {
- private String thisPageUrl;
-
+ private class ParseDownloadPageTask extends ParseTask {
@Override
protected void onPreExecute() {
if (!isLoadingMore) progressBar.setVisibility(ProgressBar.VISIBLE);
@@ -176,36 +171,7 @@ public class DownloadsActivity extends BaseActivity implements DownloadsAdapter.
}
@Override
- protected Void doInBackground(String... downloadsUrl) {
- thisPageUrl = downloadsUrl[0];
- Request request = new Request.Builder()
- .url(downloadsUrl[0])
- .build();
- try {
- Response response = client.newCall(request).execute();
- parseDownloads(Jsoup.parse(response.body().string()));
- } catch (SSLHandshakeException e) {
- Timber.w("Certificate problem (please switch to unsafe connection).");
- } catch (Exception e) {
- Timber.e(e, "Exception");
- }
- return null;
- }
-
- @Override
- protected void onPostExecute(Void voids) {
- if (downloadsTitle != null && !Objects.equals(downloadsTitle, "") &&
- toolbar.getTitle() != downloadsTitle)
- toolbar.setTitle(downloadsTitle);
-
- ++pagesLoaded;
- if (uploadFAB.getVisibility() != View.GONE) uploadFAB.setEnabled(true);
- progressBar.setVisibility(ProgressBar.INVISIBLE);
- downloadsAdapter.notifyDataSetChanged();
- isLoadingMore = false;
- }
-
- private void parseDownloads(Document downloadPage) {
+ protected void parse(Document downloadPage) throws ParseException {
if (downloadsTitle == null || Objects.equals(downloadsTitle, ""))
downloadsTitle = downloadPage.select("div.nav>b>a.nav").last().text();
@@ -215,7 +181,7 @@ public class DownloadsActivity extends BaseActivity implements DownloadsAdapter.
}
Download.DownloadItemType type;
- if (ThmmyPage.resolvePageCategory(Uri.parse(thisPageUrl)).is(ThmmyPage.
+ if (ThmmyPage.resolvePageCategory(Uri.parse(url)).is(ThmmyPage.
PageCategory.DOWNLOADS_CATEGORY))
type = Download.DownloadItemType.DOWNLOADS_CATEGORY;
else type = Download.DownloadItemType.DOWNLOADS_FILE;
@@ -265,5 +231,19 @@ public class DownloadsActivity extends BaseActivity implements DownloadsAdapter.
rows.select("span:has(a)").first().text()));
}
}
+
+
+ @Override
+ protected void postParsing(ResultCode result) {
+ if (downloadsTitle != null && !Objects.equals(downloadsTitle, "") &&
+ toolbar.getTitle() != downloadsTitle)
+ toolbar.setTitle(downloadsTitle);
+
+ ++pagesLoaded;
+ if (uploadFAB.getVisibility() != View.GONE) uploadFAB.setEnabled(true);
+ progressBar.setVisibility(ProgressBar.INVISIBLE);
+ downloadsAdapter.notifyDataSetChanged();
+ isLoadingMore = false;
+ }
}
}
diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentFragment.java
index 89aa027b..ce940cd2 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentFragment.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentFragment.java
@@ -138,6 +138,7 @@ public class RecentFragment extends BaseFragment {
//---------------------------------------ASYNC TASK-----------------------------------
private class RecentTask extends ParseTask {
+ @Override
protected void onPreExecute() {
progressBar.setVisibility(ProgressBar.VISIBLE);
}
diff --git a/app/src/main/java/gr/thmmy/mthmmy/receiver/Receiver.java b/app/src/main/java/gr/thmmy/mthmmy/receiver/Receiver.java
index a36916ea..971475ff 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/receiver/Receiver.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/receiver/Receiver.java
@@ -13,7 +13,6 @@ import android.webkit.MimeTypeMap;
import java.io.File;
-import gr.thmmy.mthmmy.R;
import timber.log.Timber;
import static gr.thmmy.mthmmy.services.DownloadService.ACTION_DOWNLOAD;
diff --git a/app/src/main/java/gr/thmmy/mthmmy/utils/ParseTask.java b/app/src/main/java/gr/thmmy/mthmmy/utils/ParseTask.java
index 9ce5a882..ce7df62a 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/utils/ParseTask.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/utils/ParseTask.java
@@ -21,6 +21,7 @@ import timber.log.Timber;
* and modify prepareRequest() as needed.
*/
public abstract class ParseTask extends AsyncTask {
+ protected String url;
protected enum ResultCode {
SUCCESS, PARSING_ERROR, NETWORK_ERROR, OTHER_ERROR
}
@@ -29,8 +30,9 @@ public abstract class ParseTask extends AsyncTask
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout-v21/activity_topic_post_row.xml b/app/src/main/res/layout-v21/activity_topic_post_row.xml
index 2362427d..a4c6ee2d 100644
--- a/app/src/main/res/layout-v21/activity_topic_post_row.xml
+++ b/app/src/main/res/layout-v21/activity_topic_post_row.xml
@@ -189,7 +189,7 @@
diff --git a/app/src/main/res/layout/activity_topic.xml b/app/src/main/res/layout/activity_topic.xml
index e726d372..e7aa2a66 100644
--- a/app/src/main/res/layout/activity_topic.xml
+++ b/app/src/main/res/layout/activity_topic.xml
@@ -39,6 +39,7 @@
android:layout_gravity="top|start"
android:background="@color/background"
android:paddingTop="4dp"
+ android:paddingBottom="4dp"
android:clipToPadding="false"
android:scrollbars="none"
tools:context="gr.thmmy.mthmmy.activities.topic.TopicActivity"
diff --git a/app/src/main/res/layout/activity_topic_post_row.xml b/app/src/main/res/layout/activity_topic_post_row.xml
index 99eeefd6..4581ac89 100644
--- a/app/src/main/res/layout/activity_topic_post_row.xml
+++ b/app/src/main/res/layout/activity_topic_post_row.xml
@@ -188,7 +188,7 @@