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