package com.rafali.flickruploader.ui.widget; /******************************************************************************* * Copyright 2013 Chris Banes. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.Checkable; import android.widget.TextView; import com.rafali.flickruploader2.R; public class CheckableTextView extends TextView implements Checkable, View.OnClickListener { /** * Interface definition for a callback to be invoked when the checked state * of this View is changed. */ public static interface OnCheckedChangeListener { /** * Called when the checked state of a compound button has changed. * * @param checkableView * The view whose state has changed. * @param isChecked * The new checked state of checkableView. */ void onCheckedChanged(View checkableView, boolean isChecked); } private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked }; private boolean mChecked = false; private OnCheckedChangeListener mOnCheckedChangeListener; private OnClickListener onClickListener; public CheckableTextView(Context context, AttributeSet attrs) { super(context, attrs); super.setOnClickListener(this); setCompoundDrawablesWithIntrinsicBounds(R.drawable.checkbox_off, 0, 0, 0); } public boolean isChecked() { return mChecked; } public void setChecked(boolean b) { if (b != mChecked) { mChecked = b; setCompoundDrawablesWithIntrinsicBounds(b ? R.drawable.checkbox_on : R.drawable.checkbox_off, 0, 0, 0); refreshDrawableState(); if (mOnCheckedChangeListener != null) { mOnCheckedChangeListener.onCheckedChanged(this, mChecked); } } } @Override public void setOnClickListener(OnClickListener onClickListener) { this.onClickListener = onClickListener; } public void toggle() { setChecked(!mChecked); } @Override public int[] onCreateDrawableState(int extraSpace) { final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); if (isChecked()) { mergeDrawableStates(drawableState, CHECKED_STATE_SET); } return drawableState; } /** * Register a callback to be invoked when the checked state of this view * changes. * * @param listener * the callback to call on checked state change */ public void setOnCheckedChangeListener(OnCheckedChangeListener listener) { mOnCheckedChangeListener = listener; } @Override public void onClick(View v) { toggle(); if (onClickListener != null) { onClickListener.onClick(v); } } }