blob: 3fe8097110605acddf9c62bc6caf80f25735830b [file] [log] [blame]
// Copyright 2018 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.toolbar.bottom;
import android.content.Context;
import android.content.res.ColorStateList;
import android.support.annotation.StringRes;
import android.util.AttributeSet;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.toolbar.IncognitoStateProvider;
import org.chromium.chrome.browser.toolbar.IncognitoStateProvider.IncognitoStateObserver;
import org.chromium.chrome.browser.toolbar.TabCountProvider;
import org.chromium.chrome.browser.toolbar.TabCountProvider.TabCountObserver;
import org.chromium.chrome.browser.toolbar.ThemeColorProvider;
import org.chromium.chrome.browser.toolbar.ThemeColorProvider.ThemeColorObserver;
import org.chromium.ui.widget.ChromeImageButton;
/**
* The close all tabs button.
*/
class CloseAllTabsButton extends ChromeImageButton
implements ThemeColorObserver, IncognitoStateObserver, TabCountObserver {
/** A provider that notifies when the theme color changes.*/
private ThemeColorProvider mThemeColorProvider;
/** A provider that notifies when incognito mode is entered or exited. */
private IncognitoStateProvider mIncognitoStateProvider;
/** A provider that notifies when the number of tabs changes. */
private TabCountProvider mTabCountProvider;
/** Whether the close all tabs button should be enabled. */
private boolean mIsEnabled = true;
public CloseAllTabsButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
void destroy() {
if (mThemeColorProvider != null) {
mThemeColorProvider.removeObserver(this);
mThemeColorProvider = null;
}
if (mIncognitoStateProvider != null) {
mIncognitoStateProvider.removeObserver((IncognitoStateObserver) this);
mIncognitoStateProvider = null;
}
if (mTabCountProvider != null) {
mTabCountProvider.removeObserver(this);
mTabCountProvider = null;
}
}
void setThemeColorProvider(ThemeColorProvider themeColorProvider) {
mThemeColorProvider = themeColorProvider;
mThemeColorProvider.addObserver(this);
}
@Override
public void onThemeColorChanged(ColorStateList tint, int primaryColor) {
ApiCompatibilityUtils.setImageTintList(this, tint);
}
void setIncognitoStateProvider(IncognitoStateProvider incognitoStateProvider) {
mIncognitoStateProvider = incognitoStateProvider;
mIncognitoStateProvider.addObserver((IncognitoStateObserver) this);
}
@Override
public void onIncognitoStateChanged(boolean isIncognito) {
@StringRes
int resId;
if (ChromeFeatureList.isEnabled(ChromeFeatureList.INCOGNITO_STRINGS)) {
resId = isIncognito ? R.string.accessibility_toolbar_btn_close_all_private_tabs
: R.string.accessibility_toolbar_btn_close_all_tabs;
} else {
resId = isIncognito ? R.string.accessibility_toolbar_btn_close_all_incognito_tabs
: R.string.accessibility_toolbar_btn_close_all_tabs;
}
setContentDescription(getResources().getText(resId));
}
void setTabCountProvider(TabCountProvider provider) {
mTabCountProvider = provider;
mTabCountProvider.addObserver(this);
}
@Override
public void onTabCountChanged(int tabCount, boolean isIncognito) {
final boolean shouldBeEnabled = tabCount > 0;
if (shouldBeEnabled == mIsEnabled) return;
mIsEnabled = shouldBeEnabled;
setEnabled(mIsEnabled);
}
}