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 200001d..3da0cfb 100644 --- a/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java @@ -750,7 +750,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements public boolean dispatchKeyEvent(KeyEvent event) { // Keyboard shortcuts if (event.isCtrlPressed() && event.getAction() == KeyEvent.ACTION_DOWN) { - switch(event.getKeyCode()) { + switch (event.getKeyCode()) { case KeyEvent.KEYCODE_T: // Open new tab newTab(null, true); @@ -765,23 +765,32 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements return true; case KeyEvent.KEYCODE_R: // Refresh current tab - mTabsManager.getCurrentTab().reload(); + LightningView currentTab = mTabsManager.getCurrentTab(); + if (currentTab != null) { + currentTab.reload(); + } return true; case KeyEvent.KEYCODE_TAB: int nextIndex = 0; - if(event.isShiftPressed()) { + if (event.isShiftPressed()) { // Go back one tab - if(mTabsManager.indexOfCurrentTab() > 0) nextIndex = mTabsManager.indexOfCurrentTab() - 1; - else nextIndex = mTabsManager.last(); + if (mTabsManager.indexOfCurrentTab() > 0) { + nextIndex = mTabsManager.indexOfCurrentTab() - 1; + } else { + nextIndex = mTabsManager.last(); + } } else { // Go forward one tab - if(mTabsManager.indexOfCurrentTab() < mTabsManager.last()) nextIndex = mTabsManager.indexOfCurrentTab() + 1; - else nextIndex = 0; + if (mTabsManager.indexOfCurrentTab() < mTabsManager.last()) { + nextIndex = mTabsManager.indexOfCurrentTab() + 1; + } else { + nextIndex = 0; + } } mPresenter.tabChanged(nextIndex); return true; } - } else if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_SEARCH) { + } else if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_SEARCH) { // Highlight search field mSearch.requestFocus(); mSearch.selectAll(); @@ -1648,18 +1657,18 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements private void openDownloads() { new DownloadsPage().getDownloadsPage() - .subscribeOn(Schedulers.io()) - .observeOn(Schedulers.main()) - .subscribe(new SingleOnSubscribe() { - @Override - public void onItem(@Nullable String item) { - Preconditions.checkNonNull(item); - LightningView view = mTabsManager.getCurrentTab(); - if (view != null) { - view.loadUrl(item); - } + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.main()) + .subscribe(new SingleOnSubscribe() { + @Override + public void onItem(@Nullable String item) { + Preconditions.checkNonNull(item); + LightningView view = mTabsManager.getCurrentTab(); + if (view != null) { + view.loadUrl(item); } - }); + } + }); } private View getBookmarkDrawer() { @@ -2178,7 +2187,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements public void handleDownloadDeleted() { final LightningView currentTab = mTabsManager.getCurrentTab(); if (currentTab != null && currentTab.getUrl().startsWith(Constants.FILE) - && currentTab.getUrl().endsWith(DownloadsPage.FILENAME)) { + && currentTab.getUrl().endsWith(DownloadsPage.FILENAME)) { currentTab.loadDownloadspage(); } if (currentTab != null) { diff --git a/app/src/main/java/acr/browser/lightning/dialog/LightningDialogBuilder.java b/app/src/main/java/acr/browser/lightning/dialog/LightningDialogBuilder.java index 9763383..f5b0a29 100644 --- a/app/src/main/java/acr/browser/lightning/dialog/LightningDialogBuilder.java +++ b/app/src/main/java/acr/browser/lightning/dialog/LightningDialogBuilder.java @@ -16,7 +16,6 @@ import android.widget.AutoCompleteTextView; import android.widget.EditText; import com.anthonycr.bonsai.CompletableOnSubscribe; -import com.anthonycr.bonsai.CompletableSubscriber; import com.anthonycr.bonsai.Schedulers; import com.anthonycr.bonsai.SingleOnSubscribe; diff --git a/app/src/main/java/acr/browser/lightning/favicon/ImageFetcher.java b/app/src/main/java/acr/browser/lightning/favicon/ImageFetcher.java index cbef07b..337e408 100644 --- a/app/src/main/java/acr/browser/lightning/favicon/ImageFetcher.java +++ b/app/src/main/java/acr/browser/lightning/favicon/ImageFetcher.java @@ -8,12 +8,14 @@ import android.support.annotation.Nullable; import android.util.Log; import java.io.File; +import java.io.IOException; import java.io.InputStream; import acr.browser.lightning.utils.Utils; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; +import okhttp3.ResponseBody; /** * An image fetcher that creates image @@ -65,11 +67,17 @@ class ImageFetcher { Request imageRequest = new Request.Builder().url(url).build(); Response boundsResponse = mHttpClient.newCall(imageRequest).execute(); - boundsStream = boundsResponse.body().byteStream(); + ResponseBody boundsBody = boundsResponse.body(); + + if (boundsBody == null) { + return null; + } + + boundsStream = boundsBody.byteStream(); BitmapFactory.decodeStream(boundsStream, null, mLoaderOptions); - boundsResponse.body().close(); + boundsBody.close(); int size = Utils.dpToPx(24); @@ -77,12 +85,19 @@ class ImageFetcher { mLoaderOptions.inJustDecodeBounds = false; Response imageResponse = mHttpClient.newCall(imageRequest).execute(); - iconStream = imageResponse.body().byteStream(); + + ResponseBody imageBody = imageResponse.body(); + + if (imageBody == null) { + return null; + } + + iconStream = imageBody.byteStream(); icon = BitmapFactory.decodeStream(iconStream, null, mLoaderOptions); - imageResponse.body().close(); - } catch (Exception e) { + imageBody.close(); + } catch (IOException exception) { Log.d(TAG, "Unable to download icon: " + url); } finally { Utils.close(boundsStream); diff --git a/app/src/main/java/acr/browser/lightning/search/BaseSuggestionsModel.java b/app/src/main/java/acr/browser/lightning/search/BaseSuggestionsModel.java index 05e1b93..7dfcf47 100644 --- a/app/src/main/java/acr/browser/lightning/search/BaseSuggestionsModel.java +++ b/app/src/main/java/acr/browser/lightning/search/BaseSuggestionsModel.java @@ -26,6 +26,7 @@ import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; +import okhttp3.ResponseBody; abstract class BaseSuggestionsModel { @@ -112,9 +113,10 @@ abstract class BaseSuggestionsModel { Response suggestionsResponse = mHttpClient.newCall(suggestionsRequest).execute(); - return suggestionsResponse.body().byteStream(); - } catch (Exception e) { - Log.e(TAG, "Problem getting search suggestions", e); + ResponseBody responseBody = suggestionsResponse.body(); + return responseBody != null ? responseBody.byteStream() : null; + } catch (IOException exception) { + Log.e(TAG, "Problem getting search suggestions", exception); } return null;