From 2300e86b64dd3ca5328230dea861f1e6e7d960b3 Mon Sep 17 00:00:00 2001 From: Ezerous Date: Thu, 22 Nov 2018 14:00:09 +0200 Subject: [PATCH] UnreadFragment possible fixes --- .../mthmmy/activities/main/MainActivity.java | 24 +++--- .../main/recent/RecentFragment.java | 8 +- .../main/unread/UnreadFragment.java | 76 ++++++++++--------- .../thmmy/mthmmy/utils/ExternalAsyncTask.java | 4 + 4 files changed, 61 insertions(+), 51 deletions(-) diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/main/MainActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/main/MainActivity.java index efd323ef..a9842f9c 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/main/MainActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/main/MainActivity.java @@ -100,12 +100,11 @@ public class MainActivity extends BaseActivity implements RecentFragment.RecentF sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); int preferredTab = Integer.parseInt(sharedPrefs.getString(SettingsActivity.DEFAULT_HOME_TAB, "0")); - if ((preferredTab != 3 && preferredTab != 4) || sessionManager.isLoggedIn()) { + if ((preferredTab != 3 && preferredTab != 4) || sessionManager.isLoggedIn()) tabLayout.getTabAt(preferredTab).select(); - } - for (int i = 0; i < tabLayout.getTabCount(); i++) { + + for (int i = 0; i < tabLayout.getTabCount(); i++) updateTabIcon(i); - } setMainActivity(this); } @@ -196,6 +195,7 @@ public class MainActivity extends BaseActivity implements RecentFragment.RecentF } void removeFragment(int position) { + getSupportFragmentManager().beginTransaction().remove(fragmentList.get(position)).commit(); fragmentList.remove(position); fragmentTitleList.remove(position); notifyDataSetChanged(); @@ -228,25 +228,23 @@ public class MainActivity extends BaseActivity implements RecentFragment.RecentF public void updateTabIcon(int position) { if (position >= tabLayout.getTabCount()) return; - if (position == 0) { + if (position == 0) tabLayout.getTabAt(0).setIcon(getResources().getDrawable(R.drawable.ic_access_time_white_24dp)); - } else if (position == 1) { + else if (position == 1) tabLayout.getTabAt(1).setIcon(getResources().getDrawable(R.drawable.ic_forum_white_24dp)); - } else if (position == 2) { + else if (position == 2) tabLayout.getTabAt(2).setIcon(getResources().getDrawable(R.drawable.ic_fiber_new_white_24dp)); - } } public void updateTabs() { - if (!sessionManager.isLoggedIn() && sectionsPagerAdapter.getCount() == 3) { + if (!sessionManager.isLoggedIn() && sectionsPagerAdapter.getCount() == 3) sectionsPagerAdapter.removeFragment(2); - } else if (sessionManager.isLoggedIn() && sectionsPagerAdapter.getCount() == 2) { + else if (sessionManager.isLoggedIn() && sectionsPagerAdapter.getCount() == 2) sectionsPagerAdapter.addFragment(UnreadFragment.newInstance(3), "UNREAD"); - } - for (int i = 0; i < tabLayout.getTabCount(); i++) { + + for (int i = 0; i < tabLayout.getTabCount(); i++) updateTabIcon(i); - } } //-------------------------------FragmentPagerAdapter END------------------------------------------- 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 c344213b..1ecbd360 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 @@ -114,7 +114,7 @@ public class RecentFragment extends BaseFragment { swipeRefreshLayout.setProgressBackgroundColorSchemeResource(R.color.primary); swipeRefreshLayout.setColorSchemeResources(R.color.accent); swipeRefreshLayout.setOnRefreshListener(() -> { - if (recentTask != null && recentTask.getStatus() != AsyncTask.Status.RUNNING) { + if (!recentTask.isRunning()) { recentTask = new RecentTask(this::onRecentTaskStarted, this::onRecentTaskFinished); recentTask.execute(SessionManager.indexUrl.toString()); } @@ -128,7 +128,7 @@ public class RecentFragment extends BaseFragment { @Override public void onDestroy() { super.onDestroy(); - if (recentTask != null && recentTask.getStatus() != AsyncTask.Status.RUNNING) + if (recentTask.isRunning()) recentTask.cancel(true); } @@ -160,8 +160,8 @@ public class RecentFragment extends BaseFragment { //---------------------------------------ASYNC TASK----------------------------------- private class RecentTask extends NewParseTask> { - public RecentTask(OnTaskStartedListener onTaskStartedListener, - OnNetworkTaskFinishedListener> onParseTaskFinishedListener) { + RecentTask(OnTaskStartedListener onTaskStartedListener, + OnNetworkTaskFinishedListener> onParseTaskFinishedListener) { super(onTaskStartedListener, onParseTaskFinishedListener); } diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/main/unread/UnreadFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/main/unread/UnreadFragment.java index 7f5ed74a..6f0cc15d 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/main/unread/UnreadFragment.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/main/unread/UnreadFragment.java @@ -1,3 +1,4 @@ + package gr.thmmy.mthmmy.activities.main.unread; import android.os.AsyncTask; @@ -59,8 +60,7 @@ public class UnreadFragment extends BaseFragment { private MarkReadTask markReadTask; // Required empty public constructor - public UnreadFragment() { - } + public UnreadFragment() {} /** * Use ONLY this factory method to create a new instance of @@ -107,11 +107,11 @@ public class UnreadFragment extends BaseFragment { progressBar = rootView.findViewById(R.id.progressBar); unreadAdapter = new UnreadAdapter(topicSummaries, fragmentInteractionListener, markReadLinkUrl -> { - if (markReadTask != null && markReadTask.getStatus() != AsyncTask.Status.RUNNING) { - markReadTask = new MarkReadTask(); - markReadTask.execute(markReadLinkUrl); - } - }); + if (!markReadTask.isRunning() && !unreadTask.isRunning()) { + markReadTask = new MarkReadTask(); + markReadTask.execute(markReadLinkUrl); + } + }); CustomRecyclerView recyclerView = rootView.findViewById(R.id.list); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(recyclerView.getContext()); @@ -126,8 +126,7 @@ public class UnreadFragment extends BaseFragment { swipeRefreshLayout.setColorSchemeResources(R.color.accent); swipeRefreshLayout.setOnRefreshListener( () -> { - if (unreadTask != null && unreadTask.getStatus() != AsyncTask.Status.RUNNING) { - topicSummaries.clear(); + if (!unreadTask.isRunning()) { numberOfPages = 0; loadedPages = 0; unreadTask = new UnreadTask(this::onUnreadTaskStarted, this::onUnreadTaskFinished); @@ -144,10 +143,11 @@ public class UnreadFragment extends BaseFragment { @Override public void onDestroy() { super.onDestroy(); - if (unreadTask != null && unreadTask.getStatus() != AsyncTask.Status.RUNNING) + if (unreadTask.isRunning()) unreadTask.cancel(true); - if (markReadTask != null && markReadTask.getStatus() != AsyncTask.Status.RUNNING) + if (markReadTask.isRunning()) markReadTask.cancel(true); + topicSummaries.clear(); } public interface UnreadFragmentInteractionListener extends FragmentInteractionListener { @@ -160,11 +160,15 @@ public class UnreadFragment extends BaseFragment { progressBar.setVisibility(ProgressBar.VISIBLE); } - private void onUnreadTaskFinished(int resultCode, Void data) { + private void onUnreadTaskFinished(int resultCode, ArrayList fetchedUnread) { if (resultCode == NetworkResultCodes.SUCCESSFUL) { - unreadAdapter.notifyDataSetChanged(); - - ++loadedPages; + if(fetchedUnread!=null && !fetchedUnread.isEmpty()){ + if(loadedPages==0) + topicSummaries.clear(); + topicSummaries.addAll(fetchedUnread); + unreadAdapter.notifyDataSetChanged(); + } + loadedPages++; if (loadedPages < numberOfPages) { unreadTask = new UnreadTask(this::onUnreadTaskStarted, this::onUnreadTaskFinished); assert SessionManager.unreadUrl != null; @@ -186,15 +190,16 @@ public class UnreadFragment extends BaseFragment { } } - private class UnreadTask extends NewParseTask { + private class UnreadTask extends NewParseTask> { - UnreadTask(OnTaskStartedListener onTaskStartedListener, OnNetworkTaskFinishedListener onParseTaskFinishedListener) { + UnreadTask(OnTaskStartedListener onTaskStartedListener, OnNetworkTaskFinishedListener> onParseTaskFinishedListener) { super(onTaskStartedListener, onParseTaskFinishedListener); } @Override - protected Void parse(Document document, Response response) throws ParseException { + protected ArrayList parse(Document document, Response response) throws ParseException { Elements unread = document.select("table.bordercolor[cellspacing=1] tr:not(.titlebg)"); + ArrayList fetchedTopicSummaries = new ArrayList<>(); if (!unread.isEmpty()) { //topicSummaries.clear(); for (Element row : unread) { @@ -210,16 +215,14 @@ public class UnreadFragment extends BaseFragment { dateTime = dateTime.replace("", ""); dateTime = dateTime.replace("", ""); if (dateTime.contains(" am") || dateTime.contains(" pm") || - dateTime.contains(" πμ") || dateTime.contains(" μμ")) { + dateTime.contains(" πμ") || dateTime.contains(" μμ")) dateTime = dateTime.replaceAll(":[0-5][0-9] ", " "); - } else { + else dateTime = dateTime.substring(0, dateTime.lastIndexOf(":")); - } - if (!dateTime.contains(",")) { + if (!dateTime.contains(",")) dateTime = dateTime.replaceAll(".+? ([0-9])", "$1"); - } - topicSummaries.add(new TopicSummary(link, title, lastUser, dateTime)); + fetchedTopicSummaries.add(new TopicSummary(link, title, lastUser, dateTime)); } Element topBar = document.select("table:not(.bordercolor):not(#bodyarea):has(td.middletext)").first(); @@ -233,31 +236,29 @@ public class UnreadFragment extends BaseFragment { if (numberOfPages == 0 && pagesElement != null) { Elements pages = pagesElement.select("a"); - if (!pages.isEmpty()) { + if (!pages.isEmpty()) numberOfPages = Integer.parseInt(pages.last().text()); - } else { + else numberOfPages = 1; - } } if (markRead != null && loadedPages == numberOfPages - 1) - topicSummaries.add(new TopicSummary(markRead.attr("href"), markRead.text(), null, + fetchedTopicSummaries.add(new TopicSummary(markRead.attr("href"), markRead.text(), null, null)); } else { - topicSummaries.clear(); String message = document.select("table.bordercolor[cellspacing=1]").first().text(); if (message.contains("No messages")) { //It's english message = "No unread posts!"; } else { //It's greek - message = "Δεν υπάρχουν μη διαβασμένα μηνύματα!"; + message = "Δεν υπάρχουν μη αναγνωσμένα μηνύματα!"; } - topicSummaries.add(new TopicSummary(null, null, null, message)); + fetchedTopicSummaries.add(new TopicSummary(null, null, null, message)); } - return null; + return fetchedTopicSummaries; } @Override - protected int getResultCode(Response response, Void data) { + protected int getResultCode(Response response, ArrayList data) { return NetworkResultCodes.SUCCESSFUL; } } @@ -301,12 +302,19 @@ public class UnreadFragment extends BaseFragment { Toast.makeText(getContext() , "Fatal error!\n Task aborted...", Toast.LENGTH_LONG).show(); } else { - if (unreadTask != null && unreadTask.getStatus() != AsyncTask.Status.RUNNING) { + if (!unreadTask.isRunning()) { + numberOfPages = 0; + loadedPages = 0; unreadTask = new UnreadTask(UnreadFragment.this::onUnreadTaskStarted, UnreadFragment.this::onUnreadTaskFinished); assert SessionManager.unreadUrl != null; unreadTask.execute(SessionManager.unreadUrl.toString()); } } } + + //TODO: Maybe extend this task and use isRunning() from ExternalAsyncTask instead (?) + public boolean isRunning(){ + return getStatus() == AsyncTask.Status.RUNNING; + } } } diff --git a/app/src/main/java/gr/thmmy/mthmmy/utils/ExternalAsyncTask.java b/app/src/main/java/gr/thmmy/mthmmy/utils/ExternalAsyncTask.java index d20d29dc..88621314 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/utils/ExternalAsyncTask.java +++ b/app/src/main/java/gr/thmmy/mthmmy/utils/ExternalAsyncTask.java @@ -77,4 +77,8 @@ public abstract class ExternalAsyncTask extends AsyncTask { public interface OnTaskFinishedListener { void onTaskFinished(V result); } + + public boolean isRunning(){ + return getStatus() == AsyncTask.Status.RUNNING; + } }