From 486078a7d1513a11d7f3d9e31a95ed26b119657a Mon Sep 17 00:00:00 2001 From: Anthony Restaino Date: Wed, 24 Feb 2016 19:15:01 -0500 Subject: [PATCH] Fixed bug where new intents wouldn't open in the browser if it had been killed by the OS --- .../lightning/activity/BrowserActivity.java | 1 - .../lightning/activity/TabsManager.java | 27 +++++++++- .../lightning/browser/BrowserPresenter.java | 51 ++++++++++--------- 3 files changed, 53 insertions(+), 26 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 478d464..a4e6d6d 100644 --- a/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java @@ -549,7 +549,6 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements private void initializePreferences() { final LightningView currentView = mTabsManager.getCurrentTab(); - final WebView currentWebView = mTabsManager.getCurrentWebView(); mFullScreen = mPreferences.getFullScreenEnabled(); boolean colorMode = mPreferences.getColorModeEnabled(); colorMode &= !mDarkTheme; diff --git a/app/src/main/java/acr/browser/lightning/activity/TabsManager.java b/app/src/main/java/acr/browser/lightning/activity/TabsManager.java index 0a86122..5a602b6 100644 --- a/app/src/main/java/acr/browser/lightning/activity/TabsManager.java +++ b/app/src/main/java/acr/browser/lightning/activity/TabsManager.java @@ -64,6 +64,24 @@ public class TabsManager { mTabNumberListener = listener; } + private boolean mIsInitialized = false; + private List mPostInitializationWorkList = new ArrayList<>(); + + public void doAfterInitialization(@NonNull Runnable runnable) { + if (mIsInitialized) { + runnable.run(); + } else { + mPostInitializationWorkList.add(runnable); + } + } + + private void finishInitialization() { + mIsInitialized = true; + for (Runnable runnable : mPostInitializationWorkList) { + runnable.run(); + } + } + /** * Restores old tabs that were open before the browser * was closed. Handles the intent used to open the browser. @@ -79,10 +97,12 @@ public class TabsManager { @Override public void onSubscribe(@NonNull final Subscriber subscriber) { + // Make sure we start with a clean tab list + shutdown(); // If incognito, only create one tab, do not handle intent // in order to protect user privacy - if (incognito && mTabList.isEmpty()) { + if (incognito) { newTab(activity, null, true); subscriber.onComplete(); return; @@ -93,10 +113,12 @@ public class TabsManager { dataString = intent.getDataString(); } final String url = dataString; - mTabList.clear(); mCurrentTab = null; if (mPreferenceManager.getRestoreLostTabsEnabled()) { restoreLostTabs(url, activity, subscriber); + } else { + newTab(activity, null, false); + finishInitialization(); } } @@ -138,6 +160,7 @@ public class TabsManager { if (mTabList.size() == 0) { newTab(activity, null, false); } + finishInitialization(); subscriber.onComplete(); } }); diff --git a/app/src/main/java/acr/browser/lightning/browser/BrowserPresenter.java b/app/src/main/java/acr/browser/lightning/browser/BrowserPresenter.java index 89018d0..17f9f74 100644 --- a/app/src/main/java/acr/browser/lightning/browser/BrowserPresenter.java +++ b/app/src/main/java/acr/browser/lightning/browser/BrowserPresenter.java @@ -169,33 +169,38 @@ public class BrowserPresenter { Log.d(Constants.TAG, "deleted tab"); } - public void onNewIntent(Intent intent) { - final String url; - if (intent != null) { - url = intent.getDataString(); - } else { - url = null; - } - int num = 0; - if (intent != null && intent.getExtras() != null) { - num = intent.getExtras().getInt(Constants.INTENT_ORIGIN); - } + public void onNewIntent(final Intent intent) { + mTabsModel.doAfterInitialization(new Runnable() { + @Override + public void run() { + final String url; + if (intent != null) { + url = intent.getDataString(); + } else { + url = null; + } + int num = 0; + if (intent != null && intent.getExtras() != null) { + num = intent.getExtras().getInt(Constants.INTENT_ORIGIN); + } - if (num == 1) { - loadUrlInCurrentView(url); - } else if (url != null) { - if (url.startsWith(Constants.FILE)) { - mView.showBlockedLocalFileDialog(new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { + if (num == 1) { + loadUrlInCurrentView(url); + } else if (url != null) { + if (url.startsWith(Constants.FILE)) { + mView.showBlockedLocalFileDialog(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + newTab(url, true); + } + }); + } else { newTab(url, true); } - }); - } else { - newTab(url, true); + mIsNewIntent = true; + } } - mIsNewIntent = true; - } + }); } public void loadUrlInCurrentView(final String url) {