moved the deleting logic to TabsManager
This commit is contained in:
parent
9a9a06fe7b
commit
006eb5e191
@ -816,8 +816,14 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
|
|||||||
*/
|
*/
|
||||||
private synchronized void showTab(final int position) {
|
private synchronized void showTab(final int position) {
|
||||||
final LightningView currentView = mTabsManager.getCurrentTab();
|
final LightningView currentView = mTabsManager.getCurrentTab();
|
||||||
final WebView currentWebView = currentView != null ? currentView.getWebView() : null;
|
|
||||||
final LightningView newView = mTabsManager.switchToTab(position);
|
final LightningView newView = mTabsManager.switchToTab(position);
|
||||||
|
switchTabs(currentView, newView);
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is commodity to breack the flow between regular tab management and the CLIQZ's search
|
||||||
|
// interface.
|
||||||
|
private void switchTabs(final LightningView currentView, final LightningView newView) {
|
||||||
|
final WebView currentWebView = currentView != null ? currentView.getWebView() : null;
|
||||||
final WebView newWebView = newView != null ? newView.getWebView() : null;
|
final WebView newWebView = newView != null ? newView.getWebView() : null;
|
||||||
if (newView == null || newWebView == null) {
|
if (newView == null || newWebView == null) {
|
||||||
return;
|
return;
|
||||||
@ -1000,14 +1006,11 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
|
|||||||
|
|
||||||
private synchronized void deleteTab(int position) {
|
private synchronized void deleteTab(int position) {
|
||||||
final LightningView tabToDelete = mTabsManager.getTabAtPosition(position);
|
final LightningView tabToDelete = mTabsManager.getTabAtPosition(position);
|
||||||
final LightningView currentTab = mTabsManager.getCurrentTab();
|
|
||||||
|
|
||||||
if (tabToDelete == null) {
|
if (tabToDelete == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int current = mTabsManager.positionOf(currentTab);
|
|
||||||
|
|
||||||
if (!UrlUtils.isSpecialUrl(tabToDelete.getUrl()) && !isIncognito()) {
|
if (!UrlUtils.isSpecialUrl(tabToDelete.getUrl()) && !isIncognito()) {
|
||||||
mPreferences.setSavedUrl(tabToDelete.getUrl());
|
mPreferences.setSavedUrl(tabToDelete.getUrl());
|
||||||
}
|
}
|
||||||
@ -1016,37 +1019,22 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
|
|||||||
if (isShown) {
|
if (isShown) {
|
||||||
mBrowserFrame.setBackgroundColor(mBackgroundColor);
|
mBrowserFrame.setBackgroundColor(mBackgroundColor);
|
||||||
}
|
}
|
||||||
if (current > position) {
|
final LightningView currentTab = mTabsManager.getCurrentTab();
|
||||||
mTabsManager.deleteTab(position);
|
mTabsManager.deleteTab(position);
|
||||||
mEventBus.post(new BrowserEvents.TabsChanged());
|
final LightningView afterTab = mTabsManager.getCurrentTab();
|
||||||
} else if (mTabsManager.size() > position + 1) {
|
if (afterTab == null) {
|
||||||
if (current == position) {
|
// if (currentTab != null && (UrlUtils.isSpecialUrl(currentTab.getUrl())
|
||||||
showTab(position + 1);
|
// || currentTab.getUrl().equals(mPreferenceManager.getHomepage()))) {
|
||||||
mTabsManager.deleteTab(position);
|
// closeActivity();
|
||||||
mEventBus.post(new BrowserEvents.TabsChanged());
|
// } else {
|
||||||
} else {
|
performExitCleanUp();
|
||||||
mTabsManager.deleteTab(position);
|
finish();
|
||||||
}
|
// }
|
||||||
} else if (mTabsManager.size() > 1) {
|
} else if (afterTab != currentTab) {
|
||||||
if (current == position) {
|
switchTabs(currentTab, afterTab);
|
||||||
showTab(position - 1);
|
currentTab.pauseTimers();
|
||||||
mTabsManager.deleteTab(position);
|
|
||||||
mEventBus.post(new BrowserEvents.TabsChanged());
|
|
||||||
} else {
|
|
||||||
mTabsManager.deleteTab(position);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (currentTab != null && (UrlUtils.isSpecialUrl(currentTab.getUrl())
|
|
||||||
|| currentTab.getUrl().equals(mHomepage))) {
|
|
||||||
closeActivity();
|
|
||||||
} else {
|
|
||||||
mTabsManager.deleteTab(position);
|
|
||||||
performExitCleanUp();
|
|
||||||
tabToDelete.pauseTimers();
|
|
||||||
mEventBus.post(new BrowserEvents.TabsChanged());
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mEventBus.post(new BrowserEvents.TabsChanged());
|
mEventBus.post(new BrowserEvents.TabsChanged());
|
||||||
|
|
||||||
if (shouldClose) {
|
if (shouldClose) {
|
||||||
|
@ -9,6 +9,8 @@ import android.support.v7.app.AlertDialog;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
|
|
||||||
|
import com.squareup.otto.Bus;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -16,8 +18,10 @@ import javax.inject.Inject;
|
|||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import acr.browser.lightning.R;
|
import acr.browser.lightning.R;
|
||||||
|
import acr.browser.lightning.bus.BrowserEvents;
|
||||||
import acr.browser.lightning.constant.Constants;
|
import acr.browser.lightning.constant.Constants;
|
||||||
import acr.browser.lightning.preference.PreferenceManager;
|
import acr.browser.lightning.preference.PreferenceManager;
|
||||||
|
import acr.browser.lightning.utils.UrlUtils;
|
||||||
import acr.browser.lightning.utils.Utils;
|
import acr.browser.lightning.utils.Utils;
|
||||||
import acr.browser.lightning.view.LightningView;
|
import acr.browser.lightning.view.LightningView;
|
||||||
|
|
||||||
@ -35,6 +39,9 @@ public class TabsManager {
|
|||||||
@Inject
|
@Inject
|
||||||
PreferenceManager mPreferenceManager;
|
PreferenceManager mPreferenceManager;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
Bus mEventBus;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public TabsManager() {}
|
public TabsManager() {}
|
||||||
|
|
||||||
@ -182,7 +189,7 @@ public class TabsManager {
|
|||||||
* @return The removed tab reference or null
|
* @return The removed tab reference or null
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public synchronized LightningView deleteTab(final int position) {
|
public synchronized LightningView removeTab(final int position) {
|
||||||
if (position >= mWebViewList.size()) {
|
if (position >= mWebViewList.size()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -191,9 +198,29 @@ public class TabsManager {
|
|||||||
mCurrentTab = null;
|
mCurrentTab = null;
|
||||||
}
|
}
|
||||||
tab.onDestroy();
|
tab.onDestroy();
|
||||||
|
Log.d(Constants.TAG, tab.toString());
|
||||||
return tab;
|
return tab;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void deleteTab(int position) {
|
||||||
|
final LightningView currentTab = getCurrentTab();
|
||||||
|
int current = positionOf(currentTab);
|
||||||
|
|
||||||
|
if (current == position) {
|
||||||
|
if (size() == 1) {
|
||||||
|
mCurrentTab = null;
|
||||||
|
} else if (current < size() - 1 ) {
|
||||||
|
// There is another tab after this one
|
||||||
|
mCurrentTab = getTabAtPosition(current + 1);
|
||||||
|
} else {
|
||||||
|
mCurrentTab = getTabAtPosition(current - 1);
|
||||||
|
}
|
||||||
|
removeTab(current);
|
||||||
|
} else {
|
||||||
|
removeTab(position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the position of the given tab.
|
* Return the position of the given tab.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user