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