1792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project/* 2792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * 4792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * you may not use this file except in compliance with the License. 6792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * You may obtain a copy of the License at 7792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * 8792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * 10792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * See the License for the specific language governing permissions and 14792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * limitations under the License. 15792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project */ 16792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 17792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectpackage com.android.music; 18792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 19792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.Context; 20792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.util.AttributeSet; 21792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.Checkable; 22792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.RelativeLayout; 23792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 24792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project/** 25792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * A special variation of RelativeLayout that can be used as a checkable object. 26792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * This allows it to be used as the top-level view of a list view item, which 27792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * also supports checking. Otherwise, it works identically to a RelativeLayout. 28792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project */ 29792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectpublic class CheckableRelativeLayout extends RelativeLayout implements Checkable { 30792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private boolean mChecked; 31792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 32792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private static final int[] CHECKED_STATE_SET = { 33792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project android.R.attr.state_checked 34792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 35792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 36792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public CheckableRelativeLayout(Context context, AttributeSet attrs) { 37792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super(context, attrs); 38792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 39792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 40792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 41792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project protected int[] onCreateDrawableState(int extraSpace) { 42792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); 43792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (isChecked()) { 44792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mergeDrawableStates(drawableState, CHECKED_STATE_SET); 45792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 46792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return drawableState; 47792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 48792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 49792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void toggle() { 50792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setChecked(!mChecked); 51792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 52792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 53792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public boolean isChecked() { 54792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return mChecked; 55792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 56792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 57792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void setChecked(boolean checked) { 58792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (mChecked != checked) { 59792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mChecked = checked; 60792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project refreshDrawableState(); 61792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 62792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 63792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project} 64