Skip to content

Commit

Permalink
Close #7 - Prevent UI freeze on refresh
Browse files Browse the repository at this point in the history
  • Loading branch information
vladholubiev committed Feb 14, 2015
1 parent 213477f commit 052ca5e
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 10 deletions.
18 changes: 17 additions & 1 deletion app/src/main/java/ua/samosfator/moduleok/LoadPageAsyncTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,30 @@

import java.io.IOException;

class LoadPageAsyncTask extends AsyncTask<Void, Void, String> {
import de.greenrobot.event.EventBus;
import ua.samosfator.moduleok.event.LoadPageCompleteEvent;

public class LoadPageAsyncTask extends AsyncTask<Void, Void, String> {

private boolean async;

public LoadPageAsyncTask() {

}

public LoadPageAsyncTask(boolean async) {
this.async = async;
}

@Override
protected String doInBackground(Void... params) {
Document mainPage = Jsoup.parse("<div id=\"content\"></div>");
try {
// mainPage = getFromCustomRemoteSource();
mainPage = getFromRemoteSource();
if (async) {
EventBus.getDefault().post(new LoadPageCompleteEvent(mainPage.html()));
}
} catch (IOException e) {
e.printStackTrace();
}
Expand Down
12 changes: 7 additions & 5 deletions app/src/main/java/ua/samosfator/moduleok/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.splunk.mint.MintLogLevel;

import de.greenrobot.event.EventBus;
import ua.samosfator.moduleok.event.LoadPageCompleteEvent;
import ua.samosfator.moduleok.event.LoginEvent;
import ua.samosfator.moduleok.event.LogoutEvent;
import ua.samosfator.moduleok.event.RefreshEndEvent;
Expand Down Expand Up @@ -111,30 +112,31 @@ private void openLoginFragment() {
}

@SuppressLint("CommitTransaction")
@SuppressWarnings("UnusedDeclaration")
public void onEvent(LoginEvent event) {
EventBus.getDefault().post(new RefreshEvent());
initAndSetAccountInfo();
}

@SuppressWarnings("UnusedDeclaration")
public void onEvent(LogoutEvent event) {
eraseAccountInfo();
}

@SuppressWarnings("UnusedDeclaration")
public void onEvent(RefreshEvent event) {
StudentKeeper.refreshStudent();
EventBus.getDefault().post(new RefreshEndEvent());
}

@SuppressWarnings("UnusedDeclaration")
public void onEvent(RefreshEndEvent event) {
if (Auth.isLoggedIn()) {
FacultyRatingSender.sendTotalScoreOnRefresh();
}
}

public void onEvent(LoadPageCompleteEvent event) {
StudentKeeper.initStudent(event.getMainPageHtml());
EventBus.getDefault().post(new RefreshEndEvent());
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
Expand All @@ -150,7 +152,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
if (App.hasInternetConnection()) {
Toast.makeText(this, getString(R.string.action_refresh_toast), Toast.LENGTH_SHORT).show();
Analytics.trackEvent("Click", "Refresh");
EventBus.getDefault().post(new RefreshEvent());
PageLoader.loadMainPageAsync();
} else {
Toast.makeText(this, getString(R.string.no_internet_connection_text), Toast.LENGTH_SHORT).show();
}
Expand Down
14 changes: 11 additions & 3 deletions app/src/main/java/ua/samosfator/moduleok/PageLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,24 @@ public static String getMainPageHtml(boolean forceLoad) {
return loadMainPage(forceLoad);
}

public static void loadMainPageAsync() {
if (!Auth.isLoggedIn()) {
throw new IllegalArgumentException("MUST LOG IN AT FIRST");
}
LoadPageAsyncTask loadPageAsyncTask = new LoadPageAsyncTask(true);
loadPageAsyncTask.execute();
}

private static String loadMainPage(boolean forceLoad) {
if (mainPageIsValid(getSavedMainPage()) && !forceLoad) return getSavedMainPage();

String mainPageHtml = downloadMainPage();
String mainPageHtml = downloadMainPageSync();

if (mainPageIsValid(mainPageHtml)) {
Preferences.save("mainPageHtml", mainPageHtml);
return mainPageHtml;
} else {
mainPageHtml = downloadMainPage();
mainPageHtml = downloadMainPageSync();
if (mainPageIsValid(mainPageHtml)) {
Preferences.save("mainPageHtml", mainPageHtml);
return mainPageHtml;
Expand All @@ -40,7 +48,7 @@ private static String getSavedMainPage() {
return Preferences.read("mainPageHtml", "");
}

private static String downloadMainPage() {
private static String downloadMainPageSync() {
LoadPageAsyncTask loadPageAsyncTask = new LoadPageAsyncTask();
loadPageAsyncTask.execute();
try {
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/ua/samosfator/moduleok/StudentKeeper.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ public static void initStudent() {
student = new Student(PageLoader.getMainPageHtml(false));
}

public static void initStudent(String mainPageHtml) {
student = new Student(mainPageHtml);
}

public static void refreshStudent() {
if (!Auth.isLoggedIn()) return;
student = new Student(PageLoader.getMainPageHtml(true));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ua.samosfator.moduleok.event;

public class LoadPageCompleteEvent {

private String mainPageHtml;

public LoadPageCompleteEvent(String html) {
mainPageHtml = html;
}

public String getMainPageHtml() {
return mainPageHtml;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package ua.samosfator.moduleok.fragment.last_total_fragment;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
Expand Down Expand Up @@ -73,7 +75,7 @@ private void initSubjects() {
}

private void reRenderSubjectsList() {
mSubjectItemAdapter.notifyItemRangeChanged(0, mSubjectItemAdapter.getItemCount());
new Handler(Looper.getMainLooper()).post(() -> mSubjectItemAdapter.notifyItemRangeChanged(0, mSubjectItemAdapter.getItemCount()));
}

private void openLoginFragment() {
Expand Down

0 comments on commit 052ca5e

Please sign in to comment.