blob: 58df2811b0b695f0fcdc68f35744b025e2c9021d [file] [log] [blame]
// Copyright 2019 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.tasks.tab_list_ui;
import static org.chromium.chrome.browser.dependency_injection.ChromeCommonQualifiers.ACTIVITY_CONTEXT;
import android.content.Context;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.init.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.lifecycle.Destroyable;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
import javax.inject.Inject;
import javax.inject.Named;
/**
* A coordinator for BottomTabGrid component. Manages the communication
* with {@link TabListCoordinator} as well as the life-cycle of shared component objects.
*/
@ActivityScope
public class BottomTabGridCoordinator implements Destroyable {
private final BottomTabGridMediator mMediator;
private final TabListCoordinator mTabGridCoordinator;
private BottomTabGridSheetContent mBottomSheetContent;
private final ActivityLifecycleDispatcher mLifecycleDispatcher;
@Inject
BottomTabGridCoordinator(@Named(ACTIVITY_CONTEXT) Context context,
BottomSheetController bottomSheetController, TabModelSelector tabModelSelector,
TabContentManager tabContentManager, ActivityLifecycleDispatcher lifecycleDispatcher) {
mTabGridCoordinator = new TabListCoordinator(TabListCoordinator.TabListMode.GRID, context,
tabModelSelector, tabContentManager, bottomSheetController.getBottomSheet(), false);
mMediator = new BottomTabGridMediator(bottomSheetController, this::resetWithTabModel);
mLifecycleDispatcher = lifecycleDispatcher;
mLifecycleDispatcher.register(this);
}
/**
* Destroy any members that needs clean up.
*/
@Override
public void destroy() {
mTabGridCoordinator.destroy();
mLifecycleDispatcher.unregister(this);
if (mBottomSheetContent != null) {
mBottomSheetContent.destroy();
}
}
/**
* Updates tabs list through {@link TabListCoordinator} with given tab model
* and calls onReset() on {@link BottomTabGridMediator}
*/
void resetWithTabModel(TabModel tabModel) {
mTabGridCoordinator.resetWithTabModel(tabModel);
updateBottomSheetContent(tabModel);
mMediator.onReset(mBottomSheetContent);
}
private void updateBottomSheetContent(TabModel tabModel) {
if (tabModel != null) {
// create and display sheet content
mBottomSheetContent =
new BottomTabGridSheetContent(mTabGridCoordinator.getContainerView());
} else {
if (mBottomSheetContent != null) {
mBottomSheetContent.destroy();
mBottomSheetContent = null;
}
}
}
}