chromium/chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/ChromeNextTabPolicySupplier.java

// Copyright 2020 The Chromium Authors
// 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 androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;

import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.chrome.browser.layouts.LayoutStateProvider;
import org.chromium.chrome.browser.layouts.LayoutType;
import org.chromium.chrome.browser.tabmodel.NextTabPolicy;
import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier;

/** Decides to show a next tab by location if overview is open, or by hierarchy otherwise. */
public class ChromeNextTabPolicySupplier implements NextTabPolicySupplier {
    private LayoutStateProvider mLayoutStateProvider;

    public ChromeNextTabPolicySupplier(
            OneshotSupplier<LayoutStateProvider> layoutStateProviderSupplier) {
        layoutStateProviderSupplier.onAvailable(this::setLayoutStateProvider);
    }

    private void setLayoutStateProvider(@NonNull LayoutStateProvider layoutStateProvider) {
        mLayoutStateProvider = layoutStateProvider;
    }

    @Override
    public @NextTabPolicy Integer get() {
        if (mLayoutStateProvider != null
                && mLayoutStateProvider.isLayoutVisible(LayoutType.TAB_SWITCHER)) {
            return NextTabPolicy.LOCATIONAL;
        } else {
            return NextTabPolicy.HIERARCHICAL;
        }
    }

    @VisibleForTesting
    LayoutStateProvider getLayoutStateProvider() {
        return mLayoutStateProvider;
    }
}