1b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project/*
2b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project *
4b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * you may not use this file except in compliance with the License.
6b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * You may obtain a copy of the License at
7b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project *
8b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project *
10b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * See the License for the specific language governing permissions and
14b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * limitations under the License.
15b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */
16b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
17b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectpackage com.android.phone;
18b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
19b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.app.Activity;
20b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.app.AlertDialog;
21b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.Context;
22b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.DialogInterface;
23b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.Intent;
24b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.res.TypedArray;
25b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.EditTextPreference;
26153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Phone;
27b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.telephony.PhoneNumberUtils;
28b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.text.TextUtils;
29b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.text.method.ArrowKeyMovementMethod;
30b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.text.method.DialerKeyListener;
31b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.util.AttributeSet;
32b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.View;
33b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.ViewGroup;
34b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.widget.EditText;
35b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.widget.ImageButton;
36b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.widget.TextView;
37b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
38b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectpublic class EditPhoneNumberPreference extends EditTextPreference {
39153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
40b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //allowed modes for this preference.
41b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /** simple confirmation (OK / CANCEL) */
42b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private static final int CM_CONFIRM = 0;
43b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /** toggle [(ENABLE / CANCEL) or (DISABLE / CANCEL)], use isToggled() to see requested state.*/
44153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov    private static final int CM_ACTIVATION = 1;
45b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
46b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private int mConfirmationMode;
47b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
48b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //String constants used in storing the value of the preference
49b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    // The preference is backed by a string that holds the encoded value, which reads:
50b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //  <VALUE_ON | VALUE_OFF><VALUE_SEPARATOR><mPhoneNumber>
51b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    // for example, an enabled preference with a number of 6502345678 would read:
52b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //  "1:6502345678"
53b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private static final String VALUE_SEPARATOR = ":";
54b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private static final String VALUE_OFF = "0";
55b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private static final String VALUE_ON = "1";
56153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
57b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //UI layout
58b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private ImageButton mContactPickButton;
59153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
60b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //Listeners
61b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /** Called when focus is changed between fields */
62b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private View.OnFocusChangeListener mDialogFocusChangeListener;
63b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /** Called when the Dialog is closed. */
64b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private OnDialogClosedListener mDialogOnClosedListener;
65b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /**
66153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov     * Used to indicate that we are going to request for a
67153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov     * default number. for the dialog.
68b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
69b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private GetDefaultNumberListener mGetDefaultNumberListener;
70153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
71b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //Activity values
72b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private Activity mParentActivity;
73b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private Intent mContactListIntent;
74b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /** Arbitrary activity-assigned preference id value */
75b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private int mPrefId;
76153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
77b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //similar to toggle preference
78b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private CharSequence mEnableText;
79b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private CharSequence mDisableText;
80b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private CharSequence mChangeNumberText;
81b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private CharSequence mSummaryOn;
82b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private CharSequence mSummaryOff;
83153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
84b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    // button that was clicked on dialog close.
85b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private int mButtonClicked;
86b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
87b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //relevant (parsed) value of the mText
88b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private String mPhoneNumber;
89b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private boolean mChecked;
90153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
91153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
92b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /**
93153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov     * Interface for the dialog closed listener, related to
94153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov     * DialogPreference.onDialogClosed(), except we also pass in a buttonClicked
95b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * value indicating which of the three possible buttons were pressed.
96b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
97b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    interface OnDialogClosedListener {
98b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        void onDialogClosed(EditPhoneNumberPreference preference, int buttonClicked);
99b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
100153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
101b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /**
102153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov     * Interface for the default number setting listener.  Handles requests for
103b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * the default display number for the dialog.
104b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
105b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    interface GetDefaultNumberListener {
106153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov        /**
107b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project         * Notify that we are looking for a default display value.
108b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project         * @return null if there is no contribution from this interface,
109153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov         *  indicating that the orignal value of mPhoneNumber should be
110153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov         *  displayed unchanged.
111b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project         */
112b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        String onGetDefaultNumber(EditPhoneNumberPreference preference);
113b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
114b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
115b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /*
116b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Constructors
117b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
118b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public EditPhoneNumberPreference(Context context, AttributeSet attrs) {
119b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        super(context, attrs);
120153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
121b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        setDialogLayoutResource(R.layout.pref_dialog_editphonenumber);
122153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
123b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        //create intent to bring up contact list
124b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mContactListIntent = new Intent(Intent.ACTION_GET_CONTENT);
125153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov        mContactListIntent.setType(Phone.CONTENT_ITEM_TYPE);
126153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
127b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        //get the edit phone number default settings
128b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        TypedArray a = context.obtainStyledAttributes(attrs,
129b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                R.styleable.EditPhoneNumberPreference, 0, R.style.EditPhoneNumberPreference);
130b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mEnableText = a.getString(R.styleable.EditPhoneNumberPreference_enableButtonText);
131b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mDisableText = a.getString(R.styleable.EditPhoneNumberPreference_disableButtonText);
132b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mChangeNumberText = a.getString(R.styleable.EditPhoneNumberPreference_changeNumButtonText);
133b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mConfirmationMode = a.getInt(R.styleable.EditPhoneNumberPreference_confirmMode, 0);
134b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        a.recycle();
135b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
136b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        //get the summary settings, use CheckBoxPreference as the standard.
137b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        a = context.obtainStyledAttributes(attrs, android.R.styleable.CheckBoxPreference, 0, 0);
138b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mSummaryOn = a.getString(android.R.styleable.CheckBoxPreference_summaryOn);
139b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mSummaryOff = a.getString(android.R.styleable.CheckBoxPreference_summaryOff);
140b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        a.recycle();
141b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
142153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
143b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public EditPhoneNumberPreference(Context context) {
144b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        this(context, null);
145b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
146153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
147153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
148b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /*
149b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Methods called on UI bindings
150b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
151b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    @Override
152b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //called when we're binding the view to the preference.
153b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    protected void onBindView(View view) {
154b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        super.onBindView(view);
155153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
156b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // Sync the summary view
157b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
158b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if (summaryView != null) {
159b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            CharSequence sum;
160b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            int vis;
161b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
162b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            //set summary depending upon mode
163b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            if (mConfirmationMode == CM_ACTIVATION) {
164b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                if (mChecked) {
165b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                    sum = (mSummaryOn == null) ? getSummary() : mSummaryOn;
166b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                } else {
167b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                    sum = (mSummaryOff == null) ? getSummary() : mSummaryOff;
168b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                }
169b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            } else {
170b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                sum = getSummary();
171b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            }
172153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
173b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            if (sum != null) {
174b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                summaryView.setText(sum);
175b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                vis = View.VISIBLE;
176b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            } else {
177b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                vis = View.GONE;
178b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            }
179153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
180b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            if (vis != summaryView.getVisibility()) {
181b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                summaryView.setVisibility(vis);
182b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            }
183b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
184b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
185b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
186b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //called when we're binding the dialog to the preference's view.
187153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov    @Override
188b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    protected void onBindDialogView(View view) {
189b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // default the button clicked to be the cancel button.
190edbbd998abc6d1d1d2c2f3b54c939779c91a2708Christian Mehlmauer        mButtonClicked = DialogInterface.BUTTON_NEGATIVE;
191153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
192b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        super.onBindDialogView(view);
193153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
194b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        //get the edittext component within the number field
195b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        EditText editText = getEditText();
196b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        //get the contact pick button within the number field
197b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mContactPickButton = (ImageButton) view.findViewById(R.id.select_contact);
198153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
199b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        //setup number entry
200b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if (editText != null) {
201b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            // see if there is a means to get a default number,
202b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            // and set it accordingly.
203b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            if (mGetDefaultNumberListener != null) {
204b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                String defaultNumber = mGetDefaultNumberListener.onGetDefaultNumber(this);
205b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                if (defaultNumber != null) {
206b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                    mPhoneNumber = defaultNumber;
207b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                }
208b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            }
209b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            editText.setText(mPhoneNumber);
210b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            editText.setMovementMethod(ArrowKeyMovementMethod.getInstance());
211b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            editText.setKeyListener(DialerKeyListener.getInstance());
212b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            editText.setOnFocusChangeListener(mDialogFocusChangeListener);
213b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
214153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
215b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        //set contact picker
216b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if (mContactPickButton != null) {
217b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            mContactPickButton.setOnClickListener(new View.OnClickListener() {
218b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                public void onClick(View v) {
219b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                    if (mParentActivity != null) {
220b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                        mParentActivity.startActivityForResult(mContactListIntent, mPrefId);
221b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                    }
222b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                }
223b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            });
224b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
225b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
226153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
227b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /**
228b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Overriding EditTextPreference's onAddEditTextToDialogView.
229b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     *
230b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * This method attaches the EditText to the container specific to this
231b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * preference's dialog layout.
232b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
233b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    @Override
234b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    protected void onAddEditTextToDialogView(View dialogView, EditText editText) {
235153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
236b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // look for the container object
237b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        ViewGroup container = (ViewGroup) dialogView
238b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                .findViewById(R.id.edit_container);
239153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
240b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // add the edittext to the container.
241b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if (container != null) {
242a101c0d93c5225ebf9f3e79854c0fa9b27865e6fRomain Guy            container.addView(editText, ViewGroup.LayoutParams.MATCH_PARENT,
243b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                    ViewGroup.LayoutParams.WRAP_CONTENT);
244b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
245b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
246153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
247b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //control the appearance of the dialog depending upon the mode.
248153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov    @Override
249b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
250b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // modified so that we just worry about the buttons being
251153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov        // displayed, since there is no need to hide the edittext
252b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // field anymore.
253b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if (mConfirmationMode == CM_ACTIVATION) {
254b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            if (mChecked) {
255b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                builder.setPositiveButton(mChangeNumberText, this);
256b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                builder.setNeutralButton(mDisableText, this);
257b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            } else {
258b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                builder.setPositiveButton(null, null);
259b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                builder.setNeutralButton(mEnableText, this);
260b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            }
261b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
262b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // set the call icon on the title.
26304ff1374ad0ff0589779d1abc72c7b12a0ac6594Daisuke Miyakawa        builder.setIcon(R.drawable.ic_launcher_phone);
264b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
265b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
266153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
267b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /*
268b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Listeners and other state setting methods
269b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
270b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //set the on focus change listener to be assigned to the Dialog's edittext field.
271b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public void setDialogOnFocusChangeListener(View.OnFocusChangeListener l) {
272b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mDialogFocusChangeListener = l;
273b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
274b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
275b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //set the listener to be called wht the dialog is closed.
276b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public void setDialogOnClosedListener(OnDialogClosedListener l) {
277b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mDialogOnClosedListener = l;
278b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
279b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
280b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //set the link back to the parent activity, so that we may run the contact picker.
281b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public void setParentActivity(Activity parent, int identifier) {
282b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mParentActivity = parent;
283b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mPrefId = identifier;
284b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mGetDefaultNumberListener = null;
285b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
286b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
287b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //set the link back to the parent activity, so that we may run the contact picker.
288153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov    //also set the default number listener.
289b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public void setParentActivity(Activity parent, int identifier, GetDefaultNumberListener l) {
290b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mParentActivity = parent;
291b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mPrefId = identifier;
292b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mGetDefaultNumberListener = l;
293b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
294153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
295b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /*
296b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Notification handlers
297b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
298b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //Notify the preference that the pick activity is complete.
299b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public void onPickActivityResult(String pickedValue) {
300b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        EditText editText = getEditText();
301b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if (editText != null) {
302b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            editText.setText(pickedValue);
303b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
304b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
305153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
306153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov    //called when the dialog is clicked.
307153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov    @Override
308b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public void onClick(DialogInterface dialog, int which) {
309b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // The neutral button (button3) is always the toggle.
310edbbd998abc6d1d1d2c2f3b54c939779c91a2708Christian Mehlmauer        if ((mConfirmationMode == CM_ACTIVATION) && (which == DialogInterface.BUTTON_NEUTRAL)) {
311b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            //flip the toggle if we are in the correct mode.
312b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            setToggled(!isToggled());
313b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
314b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // record the button that was clicked.
315b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mButtonClicked = which;
316b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        super.onClick(dialog, which);
317b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
318153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
319b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    @Override
320b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //When the dialog is closed, perform the relevant actions, including setting
321b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    // phone numbers and calling the close action listener.
322b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    protected void onDialogClosed(boolean positiveResult) {
323b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // A positive result is technically either button1 or button3.
324edbbd998abc6d1d1d2c2f3b54c939779c91a2708Christian Mehlmauer        if ((mButtonClicked == DialogInterface.BUTTON_POSITIVE) ||
325edbbd998abc6d1d1d2c2f3b54c939779c91a2708Christian Mehlmauer                (mButtonClicked == DialogInterface.BUTTON_NEUTRAL)){
326b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            setPhoneNumber(getEditText().getText().toString());
327b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            super.onDialogClosed(positiveResult);
328b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            setText(getStringValue());
329b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        } else {
330b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            super.onDialogClosed(positiveResult);
331b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
332153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
333153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov        // send the clicked button over to the listener.
334b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if (mDialogOnClosedListener != null) {
335b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            mDialogOnClosedListener.onDialogClosed(this, mButtonClicked);
336b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
337b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
338153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
339b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
340b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /*
341b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Toggle handling code.
342b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
343b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //return the toggle value.
344b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public boolean isToggled() {
345b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return mChecked;
346b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
347b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
348b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //set the toggle value.
349b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    // return the current preference to allow for chaining preferences.
350b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public EditPhoneNumberPreference setToggled(boolean checked) {
351b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mChecked = checked;
352b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        setText(getStringValue());
353b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        notifyChanged();
354153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
355b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return this;
356b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
357153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
358b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
359b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /**
360b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Phone number handling code
361b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
362b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public String getPhoneNumber() {
363153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov        // return the phone number, after it has been stripped of all
364b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // irrelevant text.
365b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return PhoneNumberUtils.stripSeparators(mPhoneNumber);
366b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
367b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
368762f2724aa5a8f69c87ae2f3dd93dd8a6d92927eVirgil King    /** The phone number including any formatting characters */
369762f2724aa5a8f69c87ae2f3dd93dd8a6d92927eVirgil King    protected String getRawPhoneNumber() {
370762f2724aa5a8f69c87ae2f3dd93dd8a6d92927eVirgil King        return mPhoneNumber;
371762f2724aa5a8f69c87ae2f3dd93dd8a6d92927eVirgil King    }
372762f2724aa5a8f69c87ae2f3dd93dd8a6d92927eVirgil King
373b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //set the phone number value.
374b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    // return the current preference to allow for chaining preferences.
375b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public EditPhoneNumberPreference setPhoneNumber(String number) {
376b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mPhoneNumber = number;
377b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        setText(getStringValue());
378b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        notifyChanged();
379153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
380b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return this;
381b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
382b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
383153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
384b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /*
385b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Other code relevant to preference framework
386b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
387b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //when setting default / initial values, make sure we're setting things correctly.
388153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov    @Override
389b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
390b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        setValueFromString(restoreValue ? getPersistedString(getStringValue())
391b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project                : (String) defaultValue);
392b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
393b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
394b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /**
395b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Decides how to disable dependents.
396b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
397153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov    @Override
398b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public boolean shouldDisableDependents() {
399b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // There is really only one case we care about, but for consistency
400b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // we fill out the dependency tree for all of the cases.  If this
401b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // is in activation mode (CF), we look for the encoded toggle value
402153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov        // in the string.  If this in confirm mode (VM), then we just
403b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // examine the number field.
404153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov        // Note: The toggle value is stored in the string in an encoded
405b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        // manner (refer to setValueFromString and getStringValue below).
406b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        boolean shouldDisable = false;
407b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if ((mConfirmationMode == CM_ACTIVATION) && (mEncodedText != null)) {
408b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            String[] inValues = mEncodedText.split(":", 2);
409b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            shouldDisable = inValues[0].equals(VALUE_ON);
410b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        } else {
411b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            shouldDisable = (TextUtils.isEmpty(mPhoneNumber) && (mConfirmationMode == CM_CONFIRM));
412b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
413b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return shouldDisable;
414b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
415153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
416b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /**
417b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Override persistString so that we can get a hold of the EditTextPreference's
418b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * text field.
419153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov     */
420b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    private String mEncodedText = null;
421b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    @Override
422b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    protected boolean persistString(String value) {
423b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mEncodedText = value;
424b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return super.persistString(value);
425b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
426b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
427b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
428b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /*
429b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Summary On handling code
430b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
431b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //set the Summary for the on state (relevant only in CM_ACTIVATION mode)
432b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public EditPhoneNumberPreference setSummaryOn(CharSequence summary) {
433b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mSummaryOn = summary;
434b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if (isToggled()) {
435b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            notifyChanged();
436b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
437b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return this;
438b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
439153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
440b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //set the Summary for the on state, given a string resource id
441b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    // (relevant only in CM_ACTIVATION mode)
442b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public EditPhoneNumberPreference setSummaryOn(int summaryResId) {
443b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return setSummaryOn(getContext().getString(summaryResId));
444b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
445b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
446b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //get the summary string for the on state
447b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public CharSequence getSummaryOn() {
448b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return mSummaryOn;
449b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
450b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
451b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
452b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /*
453b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Summary Off handling code
454b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
455b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //set the Summary for the off state (relevant only in CM_ACTIVATION mode)
456b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public EditPhoneNumberPreference setSummaryOff(CharSequence summary) {
457b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        mSummaryOff = summary;
458b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        if (!isToggled()) {
459b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project            notifyChanged();
460b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        }
461b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return this;
462b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
463153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
464b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //set the Summary for the off state, given a string resource id
465b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    // (relevant only in CM_ACTIVATION mode)
466b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public EditPhoneNumberPreference setSummaryOff(int summaryResId) {
467b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return setSummaryOff(getContext().getString(summaryResId));
468b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
469153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
470b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //get the summary string for the off state
471b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public CharSequence getSummaryOff() {
472b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return mSummaryOff;
473b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
474b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
475153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
476b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /*
477b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Methods to get and set from encoded strings.
478b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
479b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //set the values given an encoded string.
480b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    protected void setValueFromString(String value) {
481b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        String[] inValues = value.split(":", 2);
482b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        setToggled(inValues[0].equals(VALUE_ON));
483b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        setPhoneNumber(inValues[1]);
484b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
485b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project
486b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    //retrieve the state of this preference in the form of an encoded string
487b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    protected String getStringValue() {
488b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        return ((isToggled() ? VALUE_ON : VALUE_OFF) + VALUE_SEPARATOR + getPhoneNumber());
489b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
490153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov
491b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    /**
492b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Externally visible method to bring up the dialog.
493153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov     *
494b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     * Generally used when we are navigating the user to this preference.
495b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project     */
496b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    public void showPhoneNumberDialog() {
497b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project        showDialog(null);
498b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project    }
499b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project}
500