1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)package org.chromium.chrome.browser.tabmodel; 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import org.chromium.chrome.browser.Tab; 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import org.chromium.chrome.browser.profiles.Profile; 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/** 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * TabModel organizes all the open tabs and allows you to create new ones. There are two TabModels 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * in the app at this time: normal and incognito. More could be added to allow for windows or 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * something. 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)public interface TabModel extends TabList { 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * A list of the various ways tabs can be launched. 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public enum TabLaunchType { 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_LINK, // Opened from a link. 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_EXTERNAL_APP, // Opened by and external app. 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_MENU_OR_OVERVIEW, // Opened from the options menu or the tab stack overview. 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_RESTORE, // Opened after restoring state from storage. 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Opened from the long press menu. Like FROM_MENU but also sets up a parent/child 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // relationship like FROM_LINK. FOREGROUND and BACKGROUND indicates whether the current tab 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // should be automatically switched to the new tab or not. 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_LONGPRESS_FOREGROUND, 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_LONGPRESS_BACKGROUND, 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_INSTANT, // Tab was created by instant. 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_KEYBOARD // Opened from a physical keyboard via shortcut. 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * A list of the various ways tabs can eb selected. 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public enum TabSelectionType { 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_CLOSE, // Selection of adjacent tab when the active tab is closed in foreground. 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_EXIT, // Selection of adjacent tab when the active tab is closed upon app exit. 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_NEW, // Selection of newly created tab (e.g. for a url intent or NTP). 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FROM_USER // User-originated switch to existing tab or selection of main tab on app 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // startup. 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return The profile associated with the current model. 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public Profile getProfile(); 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Unregisters and destroys the specified tab, and then switches to the previous tab. 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param tab The non-null tab to close 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return true if the tab was found 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public boolean closeTab(Tab tab); 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Unregisters and destroys the specified tab, and then switches to the previous tab. 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param tab The non-null tab to close 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param animate true iff the closing animation should be displayed 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param uponExit true iff the tab is being closed upon application exit (after user presses 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * the system back button) 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param canUndo Whether or not this action can be undone. If this is {@code true} and 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * {@link #supportsPendingClosures()} is {@code true}, this {@link Tab} 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * will not actually be closed until {@link #commitTabClosure(int)} or 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * {@link #commitAllTabClosures()} is called, but it will be effectively removed 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * from this list. To get a comprehensive list of all tabs, including ones that 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * have been partially closed, use the {@link TabList} from 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * {@link #getComprehensiveModel()}. 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return true if the tab was found 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public boolean closeTab(Tab tab, boolean animate, boolean uponExit, boolean canUndo); 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Returns which tab would be selected if the specified tab {@code id} were closed. 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param id The ID of tab which would be closed. 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return The id of the next tab that would be visible. 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public Tab getNextTabIfClosed(int id); 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Close all the tabs on this model. 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public void closeAllTabs(); 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return Whether or not this model supports pending closures. 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public boolean supportsPendingClosures(); 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Commits all pending closures, closing all tabs that had a chance to be undone. 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public void commitAllTabClosures(); 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Commits a pending closure specified by {@code tabId}. 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param tabId The id of the {@link Tab} to commit the pending closure. 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public void commitTabClosure(int tabId); 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Cancels a pending {@link Tab} closure, bringing the tab back into this model. Note that this 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * will select the rewound {@link Tab}. 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param tabId The id of the {@link Tab} to undo. 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public void cancelTabClosure(int tabId); 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @return The complete {@link TabList} this {@link TabModel} represents. Note that this may 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * be different than this actual {@link TabModel} if it supports pending closures 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * {@link #supportsPendingClosures()}, as this will include all pending closure tabs. 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public TabList getComprehensiveModel(); 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Selects a tab by its index. 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param i The index of the tab to select. 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param type The type of selection. 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public void setIndex(int i, final TabSelectionType type); 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Moves a tab to a new index. 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param id The id of the tab to move. 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param newIndex The new place to put the tab. 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public void moveTab(int id, int newIndex); 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * To be called when this model should be destroyed. The model should no longer be used after 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * this. 133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public void destroy(); 135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Adds a newly created tab to this model. 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param tab The tab to be added. 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param index The index where the tab should be inserted. The model may override the index. 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param type How the tab was opened. 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void addTab(Tab tab, int index, TabLaunchType type); 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Subscribes a {@link TabModelObserver} to be notified about changes to this model. 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param observer The observer to be subscribed. 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void addObserver(TabModelObserver observer); 149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Unsubscribes a previously subscribed {@link TabModelObserver}. 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param observer The observer to be unsubscribed. 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void removeObserver(TabModelObserver observer); 155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 156