diff --git a/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java b/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java index 5b2e54d..64bf36f 100644 --- a/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java @@ -1400,22 +1400,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements * function that opens the HTML history page in the browser */ private void openHistory() { - // use a thread so that history retrieval doesn't block the UI - BrowserApp.getIOThread().execute(new Runnable() { - - @Override - public void run() { - final String historyPage = HistoryPage.getHistoryPage(BrowserActivity.this); - BrowserActivity.this.runOnUiThread(new Runnable() { - @Override - public void run() { - loadUrlInCurrentView(historyPage); - mSearch.setText(""); - } - }); - } - - }); + new HistoryPage(mTabsManager.getCurrentTab(), getApplication()).load(); } /** @@ -2002,6 +1987,11 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements }, 150); } + @Subscribe + public void loadHistory(final BrowserEvents.OpenHistoryInCurrentTab event) { + new HistoryPage(mTabsManager.getCurrentTab(), getApplication()).load(); + } + /** * Load the given url in a new tab, used by the the * {@link acr.browser.lightning.fragment.BookmarksFragment} and by the diff --git a/app/src/main/java/acr/browser/lightning/constant/BookmarkPage.java b/app/src/main/java/acr/browser/lightning/constant/BookmarkPage.java index ba7f91a..7f75839 100644 --- a/app/src/main/java/acr/browser/lightning/constant/BookmarkPage.java +++ b/app/src/main/java/acr/browser/lightning/constant/BookmarkPage.java @@ -16,6 +16,7 @@ import java.lang.ref.WeakReference; import java.util.List; import acr.browser.lightning.R; +import acr.browser.lightning.app.BrowserApp; import acr.browser.lightning.database.BookmarkManager; import acr.browser.lightning.database.HistoryItem; import acr.browser.lightning.utils.Utils; @@ -65,7 +66,7 @@ public final class BookmarkPage extends AsyncTask { private final Bitmap mFolderIcon; private final String mTitle; - public BookmarkPage(BookmarkManager manager, LightningView tab, Application app, Bitmap folderIcon) { + public BookmarkPage(LightningView tab, Application app, BookmarkManager manager, Bitmap folderIcon) { mFilesDir = app.getFilesDir(); mCacheDir = app.getCacheDir(); mTitle = app.getString(R.string.action_bookmarks); @@ -147,4 +148,8 @@ public final class BookmarkPage extends AsyncTask { } } + public void load() { + executeOnExecutor(BrowserApp.getIOThread()); + } + } diff --git a/app/src/main/java/acr/browser/lightning/constant/HistoryPage.java b/app/src/main/java/acr/browser/lightning/constant/HistoryPage.java index faf4040..9739ea7 100644 --- a/app/src/main/java/acr/browser/lightning/constant/HistoryPage.java +++ b/app/src/main/java/acr/browser/lightning/constant/HistoryPage.java @@ -3,27 +3,31 @@ */ package acr.browser.lightning.constant; +import android.app.Application; +import android.os.AsyncTask; +import android.support.annotation.NonNull; + import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.lang.ref.WeakReference; import java.util.Iterator; import java.util.List; -import android.content.Context; - -import acr.browser.lightning.app.BrowserApp; -import acr.browser.lightning.database.HistoryItem; import acr.browser.lightning.R; +import acr.browser.lightning.app.BrowserApp; import acr.browser.lightning.database.HistoryDatabase; +import acr.browser.lightning.database.HistoryItem; import acr.browser.lightning.utils.Utils; +import acr.browser.lightning.view.LightningView; -public class HistoryPage { +public class HistoryPage extends AsyncTask { public static final String FILENAME = "history.html"; - private static final String HEADING = "" - + BrowserApp.getContext().getString(R.string.action_history) - + "
"; + private static final String HEADING_1 = ""; + + private static final String HEADING_2 = "
"; private static final String PART1 = "
mTabReference; + private final File mFilesDir; + private final String mTitle; + + private String mHistoryUrl = null; + + public HistoryPage(LightningView tab, Application app) { + mTabReference = new WeakReference<>(tab); + mFilesDir = app.getFilesDir(); + mTitle = app.getString(R.string.action_history); + } + + @Override + protected Void doInBackground(Void... params) { + mHistoryUrl = getHistoryPage(); + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + LightningView tab = mTabReference.get(); + if (tab != null && mHistoryUrl != null) { + tab.loadUrl(mHistoryUrl); + } + } + + @NonNull + private String getHistoryPage() { + StringBuilder historyBuilder = new StringBuilder(HEADING_1 + mTitle + HEADING_2); List historyList = getWebHistory(); Iterator it = historyList.iterator(); HistoryItem helper; while (it.hasNext()) { helper = it.next(); - historyBuilder.append(HistoryPage.PART1); + historyBuilder.append(PART1); historyBuilder.append(helper.getUrl()); - historyBuilder.append(HistoryPage.PART2); + historyBuilder.append(PART2); historyBuilder.append(helper.getTitle()); - historyBuilder.append(HistoryPage.PART3); + historyBuilder.append(PART3); historyBuilder.append(helper.getUrl()); - historyBuilder.append(HistoryPage.PART4); + historyBuilder.append(PART4); } - historyBuilder.append(HistoryPage.END); - File historyWebPage = new File(context.getFilesDir(), FILENAME); + historyBuilder.append(END); + File historyWebPage = new File(mFilesDir, FILENAME); FileWriter historyWriter = null; try { //noinspection IOResourceOpenedButNotSafelyClosed @@ -70,4 +102,9 @@ public class HistoryPage { HistoryDatabase databaseHandler = BrowserApp.getHistoryDatabase(); return databaseHandler.getLastHundredItems(); } -} + + public void load() { + executeOnExecutor(BrowserApp.getIOThread()); + } + +} \ No newline at end of file diff --git a/app/src/main/java/acr/browser/lightning/constant/StartPage.java b/app/src/main/java/acr/browser/lightning/constant/StartPage.java index eb5912f..385459c 100644 --- a/app/src/main/java/acr/browser/lightning/constant/StartPage.java +++ b/app/src/main/java/acr/browser/lightning/constant/StartPage.java @@ -181,4 +181,8 @@ public class StartPage extends AsyncTask { return Constants.FILE + homepage; } + public void load() { + executeOnExecutor(BrowserApp.getIOThread()); + } + } diff --git a/app/src/main/java/acr/browser/lightning/view/LightningView.java b/app/src/main/java/acr/browser/lightning/view/LightningView.java index 5f28ca9..383c541 100644 --- a/app/src/main/java/acr/browser/lightning/view/LightningView.java +++ b/app/src/main/java/acr/browser/lightning/view/LightningView.java @@ -34,9 +34,6 @@ import android.webkit.WebView; import com.squareup.otto.Bus; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; import java.lang.ref.WeakReference; import java.util.Map; @@ -177,7 +174,7 @@ public class LightningView { * UI thread. */ private void loadStartpage() { - new StartPage(this, BrowserApp.get(mActivity)).executeOnExecutor(BrowserApp.getIOThread()); + new StartPage(this, BrowserApp.get(mActivity)).load(); } /** @@ -189,7 +186,7 @@ public class LightningView { if (mWebView == null) return; Bitmap folderIcon = ThemeUtils.getThemedBitmap(mActivity, R.drawable.ic_folder, false); - new BookmarkPage(mBookmarkManager, this, BrowserApp.get(mActivity), folderIcon).executeOnExecutor(BrowserApp.getIOThread()); + new BookmarkPage(this, BrowserApp.get(mActivity), mBookmarkManager, folderIcon).load(); } /**