blob: c3e029fb4e408f4ab2a85955ceac87abc3969f76 [file] [log] [blame]
// 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.components.page_info;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.SwitchCompat;
import org.chromium.base.Callback;
/**
* View showing a toggle and a description for third-party cookie blocking for a site.
*/
public class CookieControlsView
extends LinearLayout implements CompoundButton.OnCheckedChangeListener {
private final SwitchCompat mSwitch;
private final TextView mBlockedText;
private boolean mLastSwitchState;
private CookieControlsParams mParams;
/** Parameters to configure the cookie controls view. */
public static class CookieControlsParams {
// Called when the cookie controls UI is closed.
public Runnable onUiClosingCallback;
// Called when the toggle controlling third-party cookie blocking changes.
public Callback<Boolean> onCheckedChangedCallback;
}
public CookieControlsView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
setOrientation(VERTICAL);
setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
LayoutInflater.from(context).inflate(R.layout.cookie_controls_view, this, true);
mBlockedText = findViewById(R.id.cookie_controls_blocked_cookies_text);
mSwitch = findViewById(R.id.cookie_controls_block_cookies_switch);
mSwitch.setOnCheckedChangeListener(this);
}
public void setParams(CookieControlsParams params) {
mParams = params;
}
// FrameLayout:
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mParams.onUiClosingCallback.run();
}
public void setCookieBlockingStatus(@CookieControlsStatus int status, boolean isEnforced) {
mLastSwitchState = status == CookieControlsStatus.ENABLED;
mSwitch.setChecked(mLastSwitchState);
mSwitch.setEnabled(!isEnforced);
}
public void setBlockedCookiesCount(int blockedCookies) {
mBlockedText.setText(getContext().getResources().getQuantityString(
R.plurals.cookie_controls_blocked_cookies, blockedCookies, blockedCookies));
}
// CompoundButton.OnCheckedChangeListener:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked == mLastSwitchState) return;
assert buttonView == mSwitch;
mParams.onCheckedChangedCallback.onResult(isChecked);
}
}