package edu.mit.mobile.android.widget; /* * Copyright (C) 2012-2013 MIT Mobile Experience Lab * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation version 2 * of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.view.View; import android.widget.Button; import edu.mit.mobile.android.flipr.R; public class MultiLevelButton extends Button { private OnClickListener mWrappedOnClickListener; private OnChangeLevelListener mOnChangeLevelListener; private int mLevel; private int mMaxLevel; private final OnClickListener mOnClickListener = new OnClickListener() { @Override public void onClick(View v) { if (mWrappedOnClickListener != null) { mWrappedOnClickListener.onClick(v); } if (mOnChangeLevelListener != null) { final int curLevel = getLevel(); final int newLevel = mOnChangeLevelListener.onChangeLevel(MultiLevelButton.this, curLevel); if (newLevel != curLevel) { setLevel(newLevel); } } } }; public MultiLevelButton(Context context) { super(context); init(context, null); } public MultiLevelButton(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs); } public MultiLevelButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context, attrs); } private void init(Context context, AttributeSet attrs) { super.setOnClickListener(mOnClickListener); final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MultiLevelButton); final int level = ta.getInteger(R.styleable.MultiLevelButton_level, 0); setLevel(level); } @Override public void setOnClickListener(OnClickListener l) { mWrappedOnClickListener = l; } public int getLevel() { return mLevel; } public void setLevel(int level) { mLevel = level; if (getBackground().setLevel(level)) { getBackground().invalidateSelf(); } } public void setOnChangeLevelListener(OnChangeLevelListener l) { mOnChangeLevelListener = l; } public static interface OnChangeLevelListener { /** * @param b * @param curLevel * @return the desired level */ public int onChangeLevel(MultiLevelButton b, int curLevel); } }