// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.tabmodel;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
import org.chromium.content.browser.ContentViewCore;
/**
* A set of convenience methods used for interacting with {@link TabList}s and {@link TabModel}s.
*/
public class TabModelUtils {
private TabModelUtils() { }
/**
* @param model The {@link TabModel} to act on.
* @param index The index of the {@link Tab} to close.
* @return {@code true} if the {@link Tab} was found.
*/
public static boolean closeTabByIndex(TabModel model, int index) {
Tab tab = model.getTabAt(index);
if (tab == null) return false;
return model.closeTab(tab);
}
/**
* @param model The {@link TabModel} to act on.
* @param tabId The id of the {@link Tab} to close.
* @return {@code true} if the {@link Tab} was found.
*/
public static boolean closeTabById(TabModel model, int tabId) {
return closeTabById(model, tabId, false);
}
/**
* @param model The {@link TabModel} to act on.
* @param tabId The id of the {@link Tab} to close.
* @param canUndo Whether or not this closure can be undone.
* @return {@code true} if the {@link Tab} was found.
*/
public static boolean closeTabById(TabModel model, int tabId, boolean canUndo) {
Tab tab = TabModelUtils.getTabById(model, tabId);
if (tab == null) return false;
return model.closeTab(tab, true, false, canUndo);
}
/**
* @param model The {@link TabModel} to act on.
* @return {@code true} if the {@link Tab} was found.
*/
public static boolean closeCurrentTab(TabModel model) {
Tab tab = TabModelUtils.getCurrentTab(model);
if (tab == null) return false;
return model.closeTab(tab);
}
/**
* Find the index of the {@link Tab} with the specified id.
* @param model The {@link TabModel} to act on.
* @param tabId The id of the {@link Tab} to find.
* @return Specified {@link Tab} index or {@link TabList#INVALID_TAB_INDEX} if the
* {@link Tab} is not found
*/
public static int getTabIndexById(TabList model, int tabId) {
int count = model.getCount();
for (int i = 0; i < count; i++) {
Tab tab = model.getTabAt(i);
if (tab.getId() == tabId) return i;
}
return TabModel.INVALID_TAB_INDEX;
}
/**
* Find the {@link Tab} with the specified id.
* @param model The {@link TabModel} to act on.
* @param tabId The id of the {@link Tab} to find.
* @return Specified {@link Tab} or {@code null} if the {@link Tab} is not found
*/
public static Tab getTabById(TabList model, int tabId) {
int index = getTabIndexById(model, tabId);
if (index == TabModel.INVALID_TAB_INDEX) return null;
return model.getTabAt(index);
}
/**
* Find the {@link Tab} index whose URL matches the specified URL.
* @param model The {@link TabModel} to act on.
* @param url The URL to search for.
* @return Specified {@link Tab} or {@code null} if the {@link Tab} is not found
*/
public static int getTabIndexByUrl(TabList model, String url) {
int count = model.getCount();
for (int i = 0; i < count; i++) {
if (model.getTabAt(i).getUrl().contentEquals(url)) return i;
}
return TabModel.INVALID_TAB_INDEX;
}
/**
* Get the currently selected {@link Tab} id.
* @param model The {@link TabModel} to act on.
* @return The id of the currently selected {@link Tab}.
*/
public static int getCurrentTabId(TabList model) {
Tab tab = getCurrentTab(model);
if (tab == null) return Tab.INVALID_TAB_ID;
return tab.getId();
}
/**
* Get the currently selected {@link Tab}.
* @param model The {@link TabModel} to act on.
* @returns The current {@link Tab} or {@code null} if no {@link Tab} is selected
*/
public static Tab getCurrentTab(TabList model) {
int index = model.index();
if (index == TabModel.INVALID_TAB_INDEX) return null;
return model.getTabAt(index);
}
/**
* @param model The {@link TabModel} to act on.
* @return The currently active {@link ContentViewCore}, or {@code null} if no {@link Tab}
* is selected or the selected {@link Tab} has no current {@link ContentViewCore}.
*/
public static ContentViewCore getCurrentContentViewCore(TabList model) {
Tab tab = getCurrentTab(model);
if (tab == null) return null;
return tab.getContentViewCore();
}
/**
* A helper method that automatically passes {@link TabSelectionType#FROM_USER} as the selection
* type to {@link TabModel#setIndex(int, TabSelectionType)}.
* @param model The {@link TabModel} to act on.
* @param index The index of the {@link Tab} to select.
*/
public static void setIndex(TabModel model, int index) {
model.setIndex(index, TabSelectionType.FROM_USER);
}
}