13a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk/*
23a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk * Copyright (C) 2015 The Android Open Source Project
33a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk *
43a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk * Licensed under the Apache License, Version 2.0 (the "License");
53a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk * you may not use this file except in compliance with the License.
63a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk * You may obtain a copy of the License at
73a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk *
83a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk *      http://www.apache.org/licenses/LICENSE-2.0
93a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk *
103a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk * Unless required by applicable law or agreed to in writing, software
113a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk * distributed under the License is distributed on an "AS IS" BASIS,
123a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk * See the License for the specific language governing permissions and
143a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk * limitations under the License.
153a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk */
163a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monkpackage com.android.settings;
173a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk
183a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monkimport android.content.Context;
193a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monkimport android.util.AttributeSet;
203a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monkimport android.util.TypedValue;
213a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monkimport android.view.View;
223a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monkimport android.widget.Checkable;
233a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monkimport android.widget.LinearLayout;
243a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk
253a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monkpublic class CheckableLinearLayout extends LinearLayout implements Checkable {
263a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk
273a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    private boolean mChecked;
283a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    private float mDisabledAlpha;
293a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk
303a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    public CheckableLinearLayout(Context context, AttributeSet attrs) {
313a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        super(context, attrs);
323a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        TypedValue alpha = new TypedValue();
333a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        context.getTheme().resolveAttribute(android.R.attr.disabledAlpha, alpha, true);
343a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        mDisabledAlpha = alpha.getFloat();
353a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    }
363a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk
373a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    @Override
383a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    public void setEnabled(boolean enabled) {
393a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        super.setEnabled(enabled);
403a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        final int N = getChildCount();
413a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        for (int i = 0; i < N; i++) {
423a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk            getChildAt(i).setAlpha(enabled ? 1 : mDisabledAlpha);
433a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        }
443a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    }
453a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk
463a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    @Override
473a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    public void setChecked(boolean checked) {
483a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        mChecked = checked;
493a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        updateChecked();
503a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    }
513a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk
523a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    @Override
533a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    public boolean isChecked() {
543a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        return mChecked;
553a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    }
563a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk
573a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    @Override
583a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    public void toggle() {
593a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        setChecked(!mChecked);
603a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    }
613a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk
623a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    private void updateChecked() {
633a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        final int N = getChildCount();
643a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        for (int i = 0; i < N; i++) {
653a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk            View child = getChildAt(i);
663a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk            if (child instanceof Checkable) {
673a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk                ((Checkable) child).setChecked(mChecked);
683a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk            }
693a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk        }
703a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk    }
713a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk
723a90d7cc69899f20f82ebe976fa04e19ebf27aaaJason Monk}
73