RadioButtonPreference.java revision e63142329060fabe105a8fd939cb637d530ae4a3
1fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang/* 2fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * Copyright (C) 2013 The Android Open Source Project 3fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * 4fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * Licensed under the Apache License, Version 2.0 (the "License"); 5fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * you may not use this file except in compliance with the License. 6fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * You may obtain a copy of the License at 7fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * 8fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * http://www.apache.org/licenses/LICENSE-2.0 9fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * 10fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * Unless required by applicable law or agreed to in writing, software 11fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * distributed under the License is distributed on an "AS IS" BASIS, 12fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * See the License for the specific language governing permissions and 14fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * limitations under the License. 15fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang */ 16fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang 17fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tangpackage com.android.settings.location; 18fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang 19fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tangimport android.content.Context; 20fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tangimport android.preference.CheckBoxPreference; 21fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tangimport android.util.AttributeSet; 22fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tangimport android.view.LayoutInflater; 23fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tangimport android.view.View; 24fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tangimport android.view.ViewGroup; 25fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tangimport android.widget.TextView; 26fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang 27fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tangimport com.android.settings.R; 28fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang 29fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang/** 30fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * Check box preference with check box replaced by radio button. 31fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * 32fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * Functionally speaking, it's actually a CheckBoxPreference. We only modified 33fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * the widget to RadioButton to make it "look like" a RadioButtonPreference. 34fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * 35fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * In other words, there's no "RadioButtonPreferenceGroup" in this 36fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * implementation. When you check one RadioButtonPreference, if you want to 37fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang * uncheck all the other preferences, you should do that by code yourself. 38fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang */ 39fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tangpublic class RadioButtonPreference extends CheckBoxPreference { 40e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang private boolean mValidListener; 41e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang 42e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang public interface OnClickListener { 43e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang public abstract void onRadioButtonClicked(RadioButtonPreference emiter); 44e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang } 45e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang 46e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang private OnClickListener mListener = null; 47e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang 48fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang public RadioButtonPreference(Context context, AttributeSet attrs, int defStyle) { 49fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang super(context, attrs, defStyle); 50fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang setWidgetLayoutResource(R.layout.preference_widget_radiobutton); 51e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang mValidListener = false; 52fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang } 53fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang 54fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang public RadioButtonPreference(Context context, AttributeSet attrs) { 55fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang this(context, attrs, com.android.internal.R.attr.checkBoxPreferenceStyle); 56fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang } 57fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang 58fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang public RadioButtonPreference(Context context) { 59fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang this(context, null); 60fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang } 61fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang 62e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang void setOnClickListener(OnClickListener listener) { 63e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang mListener = listener; 64e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang } 65e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang 66e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang public void pause() { 67e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang mValidListener = false; 68e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang } 69e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang 70e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang public void resume() { 71e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang mValidListener = true; 72e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang } 73e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang 74e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang @Override 75e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang public void onClick() { 76e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang if (mListener != null) { 77e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang mListener.onRadioButtonClicked(this); 78e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang } 79e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang } 80e63142329060fabe105a8fd939cb637d530ae4a3Lifu Tang 81fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang @Override 82fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang protected void onBindView(View view) { 83fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang super.onBindView(view); 84fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang 85fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang TextView title = (TextView) view.findViewById(android.R.id.title); 86fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang if (title != null) { 87fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang title.setSingleLine(false); 88fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang title.setMaxLines(3); 89fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang } 90fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang } 91fc86f69d3b7675099de992750bfd10ed07a13ed0Lifu Tang} 92