Commit 2fa5ea5c authored by Henrique Nakashima's avatar Henrique Nakashima Committed by Commit Bot

Outer-class DefaultTabModelSelectorFactory, TabModelSelectoryFactory

DefaultTabModelSelectorFactory remains in glue code, binds together
features to create a TabModelSelectorImpl.

TabModelSelectoryFactory is an interface that is moved into the
c/b/tabmodel module.

Bug: 1112922
Change-Id: I03e52fd438da7f7f89a7be012115d053a121c4ff
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2446352
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#815280}
parent f060c46d
......@@ -85,6 +85,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/app/tabmodel/AsyncTabParamsManagerSingleton.java",
"java/src/org/chromium/chrome/browser/app/tabmodel/ChromeNextTabPolicySupplier.java",
"java/src/org/chromium/chrome/browser/app/tabmodel/ChromeTabModelFilterFactory.java",
"java/src/org/chromium/chrome/browser/app/tabmodel/DefaultTabModelSelectorFactory.java",
"java/src/org/chromium/chrome/browser/app/tabmodel/TabWindowManagerSingleton.java",
"java/src/org/chromium/chrome/browser/app/video_tutorials/NewTabPageVideoIPHManager.java",
"java/src/org/chromium/chrome/browser/app/video_tutorials/VideoPlayerActivity.java",
......
// Copyright 2020 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.app.tabmodel;
import android.app.Activity;
import android.os.Build;
import org.chromium.base.annotations.VerifiesOnN;
import org.chromium.chrome.browser.multiwindow.MultiInstanceManager;
import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
import org.chromium.chrome.browser.tabmodel.TabModelFilterFactory;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorFactory;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl;
import org.chromium.chrome.browser.tabmodel.TabPersistencePolicy;
import org.chromium.chrome.browser.tabmodel.TabbedModeTabPersistencePolicy;
/**
* Default {@link TabModelSelectorFactory} for Chrome.
*/
public class DefaultTabModelSelectorFactory implements TabModelSelectorFactory {
// Do not inline since this uses some APIs only available on Android N versions, which cause
// verification errors.
@VerifiesOnN
@Override
public TabModelSelector buildSelector(Activity activity, TabCreatorManager tabCreatorManager,
NextTabPolicySupplier nextTabPolicySupplier, int selectorIndex) {
// Merge tabs if this TabModelSelector is for a ChromeTabbedActivity created in
// fullscreen mode and there are no TabModelSelector's currently alive. This indicates
// that it is a cold start or process restart in fullscreen mode.
boolean mergeTabs = Build.VERSION.SDK_INT > Build.VERSION_CODES.M
&& MultiInstanceManager.isTabModelMergingEnabled()
&& !activity.isInMultiWindowMode();
if (MultiInstanceManager.shouldMergeOnStartup(activity)) {
mergeTabs = mergeTabs
&& (!MultiWindowUtils.getInstance().isInMultiDisplayMode(activity)
|| TabWindowManagerSingleton.getInstance()
.getNumberOfAssignedTabModelSelectors()
== 0);
} else {
mergeTabs = mergeTabs
&& TabWindowManagerSingleton.getInstance()
.getNumberOfAssignedTabModelSelectors()
== 0;
}
if (mergeTabs) {
MultiInstanceManager.mergedOnStartup();
}
TabPersistencePolicy persistencePolicy =
new TabbedModeTabPersistencePolicy(selectorIndex, mergeTabs);
TabModelFilterFactory tabModelFilterFactory = new ChromeTabModelFilterFactory();
return new TabModelSelectorImpl(activity, /*windowAndroidSupplier=*/null, tabCreatorManager,
persistencePolicy, tabModelFilterFactory, nextTabPolicySupplier,
AsyncTabParamsManagerSingleton.getInstance(), true, true, false);
}
}
......@@ -19,7 +19,8 @@ public class TabWindowManagerSingleton {
public static TabWindowManager getInstance() {
ThreadUtils.assertOnUiThread();
if (sInstance == null) {
sInstance = new TabWindowManager(AsyncTabParamsManagerSingleton.getInstance());
sInstance = new TabWindowManager(new DefaultTabModelSelectorFactory(),
AsyncTabParamsManagerSingleton.getInstance());
}
return sInstance;
}
......
......@@ -5,7 +5,6 @@
package org.chromium.chrome.browser.tabmodel;
import android.app.Activity;
import android.os.Build;
import android.util.SparseArray;
import androidx.annotation.VisibleForTesting;
......@@ -13,12 +12,6 @@ import androidx.annotation.VisibleForTesting;
import org.chromium.base.ActivityState;
import org.chromium.base.ApplicationStatus;
import org.chromium.base.ApplicationStatus.ActivityStateListener;
import org.chromium.base.annotations.VerifiesOnN;
import org.chromium.chrome.browser.app.tabmodel.AsyncTabParamsManagerSingleton;
import org.chromium.chrome.browser.app.tabmodel.ChromeTabModelFilterFactory;
import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton;
import org.chromium.chrome.browser.multiwindow.MultiInstanceManager;
import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier;
import org.chromium.ui.base.WindowAndroid;
......@@ -40,27 +33,9 @@ public class TabWindowManager implements ActivityStateListener {
/** The maximum number of simultaneous TabModelSelector instances in this Application. */
public static final int MAX_SIMULTANEOUS_SELECTORS = 3;
/**
* A factory interface for building a {@link TabModelSelector} instance.
*/
public interface TabModelSelectorFactory {
/**
* Builds a {@link TabModelSelector}.
*
* @param activity An {@link Activity} instance.
* @param tabCreatorManager A {@link TabCreatorManager} instance.
* @param nextTabPolicySupplier A {@link NextTabPolicySupplier} instance.
* @param selectorIndex The index of the {@link TabModelSelector}.
* @return A new {@link TabModelSelector} instance.
*/
TabModelSelector buildSelector(Activity activity, TabCreatorManager tabCreatorManager,
NextTabPolicySupplier nextTabPolicySupplier, int selectorIndex);
}
private TabModelSelectorFactory mSelectorFactory;
private final AsyncTabParamsManager mAsyncTabParamsManager;
private TabModelSelectorFactory mSelectorFactory = new DefaultTabModelSelectorFactory();
private List<TabModelSelector> mSelectors = new ArrayList<>();
private Map<Activity, TabModelSelector> mAssignments = new HashMap<>();
......@@ -214,49 +189,12 @@ public class TabWindowManager implements ActivityStateListener {
mSelectorFactory = factory;
}
public TabWindowManager(AsyncTabParamsManager asyncTabParamsManager) {
public TabWindowManager(
TabModelSelectorFactory selectorFactory, AsyncTabParamsManager asyncTabParamsManager) {
mSelectorFactory = selectorFactory;
mAsyncTabParamsManager = asyncTabParamsManager;
ApplicationStatus.registerStateListenerForAllActivities(this);
for (int i = 0; i < MAX_SIMULTANEOUS_SELECTORS; i++) mSelectors.add(null);
}
private static class DefaultTabModelSelectorFactory implements TabModelSelectorFactory {
// Do not inline since this uses some APIs only available on Android N versions, which cause
// verification errors.
@VerifiesOnN
@Override
public TabModelSelector buildSelector(Activity activity,
TabCreatorManager tabCreatorManager, NextTabPolicySupplier nextTabPolicySupplier,
int selectorIndex) {
// Merge tabs if this TabModelSelector is for a ChromeTabbedActivity created in
// fullscreen mode and there are no TabModelSelector's currently alive. This indicates
// that it is a cold start or process restart in fullscreen mode.
boolean mergeTabs = Build.VERSION.SDK_INT > Build.VERSION_CODES.M
&& MultiInstanceManager.isTabModelMergingEnabled()
&& !activity.isInMultiWindowMode();
if (MultiInstanceManager.shouldMergeOnStartup(activity)) {
mergeTabs = mergeTabs
&& (!MultiWindowUtils.getInstance().isInMultiDisplayMode(activity)
|| TabWindowManagerSingleton.getInstance()
.getNumberOfAssignedTabModelSelectors()
== 0);
} else {
mergeTabs = mergeTabs
&& TabWindowManagerSingleton.getInstance()
.getNumberOfAssignedTabModelSelectors()
== 0;
}
if (mergeTabs) {
MultiInstanceManager.mergedOnStartup();
}
TabPersistencePolicy persistencePolicy = new TabbedModeTabPersistencePolicy(
selectorIndex, mergeTabs);
TabModelFilterFactory tabModelFilterFactory = new ChromeTabModelFilterFactory();
return new TabModelSelectorImpl(activity, /*windowAndroidSupplier=*/null,
tabCreatorManager, persistencePolicy, tabModelFilterFactory,
nextTabPolicySupplier, AsyncTabParamsManagerSingleton.getInstance(), true, true,
false);
}
}
}
......@@ -27,7 +27,6 @@ import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier;
import org.chromium.chrome.browser.tabmodel.TabWindowManager.TabModelSelectorFactory;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.browser.contextmenu.RevampedContextMenuUtils;
......
......@@ -201,8 +201,8 @@ public class TabPersistentStoreTest {
}
}
private final TabWindowManager.TabModelSelectorFactory mMockTabModelSelectorFactory =
new TabWindowManager.TabModelSelectorFactory() {
private final TabModelSelectorFactory mMockTabModelSelectorFactory =
new TabModelSelectorFactory() {
@Override
public TabModelSelector buildSelector(Activity activity,
TabCreatorManager tabCreatorManager,
......
......@@ -24,7 +24,6 @@ import org.chromium.chrome.browser.customtabs.CustomTabActivity;
import org.chromium.chrome.browser.tab.MockTab;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier;
import org.chromium.chrome.browser.tabmodel.TabWindowManager.TabModelSelectorFactory;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.browser.tabmodel.MockTabModelSelector;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
......
......@@ -29,6 +29,7 @@ android_library("java") {
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModelFilterProvider.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModelObserver.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelector.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorFactory.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorObserver.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorTabModelObserver.java",
"android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorTabObserver.java",
......
// Copyright 2020 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 android.app.Activity;
import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier;
/**
* A factory interface for building a {@link TabModelSelector} instance.
*/
public interface TabModelSelectorFactory {
/**
* Builds a {@link TabModelSelector}.
*
* @param activity An {@link Activity} instance.
* @param tabCreatorManager A {@link TabCreatorManager} instance.
* @param nextTabPolicySupplier A {@link NextTabPolicySupplier} instance.
* @param selectorIndex The index of the {@link TabModelSelector}.
* @return A new {@link TabModelSelector} instance.
*/
TabModelSelector buildSelector(Activity activity, TabCreatorManager tabCreatorManager,
NextTabPolicySupplier nextTabPolicySupplier, int selectorIndex);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment