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