// Copyright 2016 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.widget.selection;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Checkable;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.chrome.R;
/**
* Highlight overlay view for selectable items.
*/
public class SelectableItemHighlightView extends View implements Checkable {
public static final int ANIMATION_DURATION_MS = 150;
private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked};
private boolean mIsChecked;
/**
* Constructor for inflating from XML.
*/
public SelectableItemHighlightView(Context context, AttributeSet attrs) {
super(context, attrs);
Drawable clickDrawable = context.obtainStyledAttributes(new int[] {
android.R.attr.selectableItemBackground }).getDrawable(0);
Drawable longClickDrawable = ApiCompatibilityUtils.getDrawable(context.getResources(),
R.drawable.selectable_item_highlight);
LayerDrawable ld = new LayerDrawable(new Drawable[] {clickDrawable, longClickDrawable});
setBackground(ld);
}
@Override
public boolean isChecked() {
return mIsChecked;
}
@Override
public void toggle() {
setChecked(!mIsChecked);
}
@Override
public void setChecked(boolean checked) {
if (checked == mIsChecked) return;
mIsChecked = checked;
refreshDrawableState();
}
@Override
public int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (mIsChecked) {
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
}
return drawableState;
}
}