From 7318a818c43819b123ab9e6b5da847fcdac0cd0b Mon Sep 17 00:00:00 2001 From: Anthony Restaino Date: Sun, 10 Jan 2016 22:34:02 -0500 Subject: [PATCH] Async loading of homepage, delegate IOThread responsibility to BrowserApp class --- .../lightning/activity/BrowserActivity.java | 4 +- .../acr/browser/lightning/app/BrowserApp.java | 8 +++ .../lightning/database/HistoryDatabase.java | 6 -- .../fragment/PrivacySettingsFragment.java | 14 ++-- .../browser/lightning/view/LightningView.java | 72 +++++++++++++------ 5 files changed, 66 insertions(+), 38 deletions(-) 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 8ad41e1..4c298a3 100644 --- a/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java @@ -1342,7 +1342,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements if (UrlUtils.isSpecialUrl(url)) { return; } - BrowserApp.getHistoryDatabase().getIOThread().execute(new Runnable() { + BrowserApp.getIOThread().execute(new Runnable() { @Override public void run() { try { @@ -1406,7 +1406,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements */ private void openHistory() { // use a thread so that history retrieval doesn't block the UI - BrowserApp.getHistoryDatabase().getIOThread().execute(new Runnable() { + BrowserApp.getIOThread().execute(new Runnable() { @Override public void run() { diff --git a/app/src/main/java/acr/browser/lightning/app/BrowserApp.java b/app/src/main/java/acr/browser/lightning/app/BrowserApp.java index 5286d95..7c1020b 100644 --- a/app/src/main/java/acr/browser/lightning/app/BrowserApp.java +++ b/app/src/main/java/acr/browser/lightning/app/BrowserApp.java @@ -6,6 +6,9 @@ import android.content.Context; import com.squareup.leakcanary.LeakCanary; import com.squareup.otto.Bus; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + import acr.browser.lightning.constant.BookmarkPage; import acr.browser.lightning.database.HistoryDatabase; import acr.browser.lightning.preference.PreferenceManager; @@ -14,6 +17,7 @@ public class BrowserApp extends Application { private static BrowserApp sInstance; private static AppComponent appComponent; + private static Executor mIOThread = Executors.newSingleThreadExecutor(); @Override public void onCreate() { @@ -39,6 +43,10 @@ public class BrowserApp extends Application { return appComponent.getHistoryDatabase(); } + public static Executor getIOThread() { + return mIOThread; + } + public static PreferenceManager getPreferenceManager() { return appComponent.getPreferenceManager(); } diff --git a/app/src/main/java/acr/browser/lightning/database/HistoryDatabase.java b/app/src/main/java/acr/browser/lightning/database/HistoryDatabase.java index ce8323b..a8b09c0 100644 --- a/app/src/main/java/acr/browser/lightning/database/HistoryDatabase.java +++ b/app/src/main/java/acr/browser/lightning/database/HistoryDatabase.java @@ -42,8 +42,6 @@ public class HistoryDatabase extends SQLiteOpenHelper { private SQLiteDatabase mDatabase; - private Executor mIOThread = Executors.newSingleThreadExecutor(); - @Inject public HistoryDatabase(Context context) { super(context.getApplicationContext(), DATABASE_NAME, null, DATABASE_VERSION); @@ -78,10 +76,6 @@ public class HistoryDatabase extends SQLiteOpenHelper { return mDatabase == null || !mDatabase.isOpen(); } - public Executor getIOThread() { - return mIOThread; - } - @Override public synchronized void close() { if (mDatabase != null) { diff --git a/app/src/main/java/acr/browser/lightning/fragment/PrivacySettingsFragment.java b/app/src/main/java/acr/browser/lightning/fragment/PrivacySettingsFragment.java index 6cd395c..d75ee71 100644 --- a/app/src/main/java/acr/browser/lightning/fragment/PrivacySettingsFragment.java +++ b/app/src/main/java/acr/browser/lightning/fragment/PrivacySettingsFragment.java @@ -149,14 +149,12 @@ public class PrivacySettingsFragment extends LightningPreferenceFragment impleme new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { - BrowserApp.getHistoryDatabase() - .getIOThread() - .execute(new Runnable() { - @Override - public void run() { - clearHistory(); - } - }); + BrowserApp.getIOThread().execute(new Runnable() { + @Override + public void run() { + clearHistory(); + } + }); } }) .setNegativeButton(getResources().getString(R.string.action_no), null).show(); 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 060485d..495cfc8 100644 --- a/app/src/main/java/acr/browser/lightning/view/LightningView.java +++ b/app/src/main/java/acr/browser/lightning/view/LightningView.java @@ -147,38 +147,66 @@ public class LightningView { if (mWebView == null) { return; } - if (mHomepage.startsWith("about:home")) { - mWebView.loadUrl(StartPage.getHomepage(mActivity), mRequestHeaders); - } else if (mHomepage.startsWith("about:bookmarks")) { - loadBookmarkpage(); - } else { - mWebView.loadUrl(mHomepage, mRequestHeaders); + switch (mHomepage) { + case "about:home": + loadStartpage(); + break; + case "about:bookmarks": + loadBookmarkpage(); + break; + default: + mWebView.loadUrl(mHomepage, mRequestHeaders); + break; } } + private void loadStartpage() { + BrowserApp.getIOThread().execute(new Runnable() { + @Override + public void run() { + final String homepage = StartPage.getHomepage(mActivity); + mActivity.runOnUiThread(new Runnable() { + @Override + public void run() { + mWebView.loadUrl(homepage, mRequestHeaders); + } + }); + } + }); + } + /** * Load the HTML bookmarks page in this view */ public void loadBookmarkpage() { if (mWebView == null) return; - Bitmap folderIcon = ThemeUtils.getThemedBitmap(mActivity, R.drawable.ic_folder, false); - FileOutputStream outputStream = null; - File image = new File(mActivity.getCacheDir(), "folder.png"); - try { - outputStream = new FileOutputStream(image); - folderIcon.compress(Bitmap.CompressFormat.PNG, 100, outputStream); - folderIcon.recycle(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } finally { - Utils.close(outputStream); - } - File bookmarkWebPage = new File(mActivity.getFilesDir(), BookmarkPage.FILENAME); - - BrowserApp.getBookmarkPage().buildBookmarkPage(null); - mWebView.loadUrl(Constants.FILE + bookmarkWebPage, mRequestHeaders); + BrowserApp.getIOThread().execute(new Runnable() { + @Override + public void run() { + Bitmap folderIcon = ThemeUtils.getThemedBitmap(mActivity, R.drawable.ic_folder, false); + FileOutputStream outputStream = null; + File image = new File(mActivity.getCacheDir(), "folder.png"); + try { + outputStream = new FileOutputStream(image); + folderIcon.compress(Bitmap.CompressFormat.PNG, 100, outputStream); + folderIcon.recycle(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } finally { + Utils.close(outputStream); + } + final File bookmarkWebPage = new File(mActivity.getFilesDir(), BookmarkPage.FILENAME); + BrowserApp.getBookmarkPage().buildBookmarkPage(null); + mActivity.runOnUiThread(new Runnable() { + @Override + public void run() { + mWebView.loadUrl(Constants.FILE + bookmarkWebPage, mRequestHeaders); + } + }); + } + }); } /**