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