EditPinPreference.java revision b16363f5fc191b769e88c364243e34b92eb22688
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.AlertDialog; 20b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.Context; 21b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.EditTextPreference; 22b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.text.method.DigitsKeyListener; 23b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.text.method.PasswordTransformationMethod; 24b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.util.AttributeSet; 25b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.View; 26b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.widget.EditText; 27b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 28b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport java.util.Map; 29b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 30b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project/** 31b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Class similar to the com.android.settings.EditPinPreference 32b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * class, with a couple of modifications, including a different layout 33b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * for the dialog. 34b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 35b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectpublic class EditPinPreference extends EditTextPreference { 36b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 37b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private boolean shouldHideButtons; 38b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 39b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project interface OnPinEnteredListener { 40b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project void onPinEntered(EditPinPreference preference, boolean positiveResult); 41b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 42b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 43b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private OnPinEnteredListener mPinListener; 44b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 45b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void setOnPinEnteredListener(OnPinEnteredListener listener) { 46b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPinListener = listener; 47b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 48b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 49b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public EditPinPreference(Context context, AttributeSet attrs) { 50b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super(context, attrs); 51b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 52b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 53b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public EditPinPreference(Context context, AttributeSet attrs, int defStyle) { 54b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super(context, attrs, defStyle); 55b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 56b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 57b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** 58b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Overridden to setup the correct dialog layout, as well as setting up 59b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * other properties for the pin / puk entry field. 60b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 61b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 62b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected View onCreateDialogView() { 63b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // set the dialog layout 64b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project setDialogLayoutResource(R.layout.pref_dialog_editpin); 65b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 66b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project View dialog = super.onCreateDialogView(); 67b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 68b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // set the transformation method and the key listener to ensure 69b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // correct input and presentation of the pin / puk. 70b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project final EditText textfield = getEditText(); 71b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project textfield.setTransformationMethod(PasswordTransformationMethod.getInstance()); 72b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project textfield.setKeyListener(DigitsKeyListener.getInstance()); 73b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 74b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return dialog; 75b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 76b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 77b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 78b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected void onBindDialogView(View view) { 79b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.onBindDialogView(view); 80b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 81b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // If the layout does not contain an edittext, hide the buttons. 82b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project shouldHideButtons = (view.findViewById(android.R.id.edit) == null); 83b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 84b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 85b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 86b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { 87b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.onPrepareDialogBuilder(builder); 88b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 89b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // hide the buttons if we need to. 90b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (shouldHideButtons) { 91b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project builder.setPositiveButton(null, this); 92b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project builder.setNegativeButton(null, this); 93b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 94b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 95b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 96b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 97b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected void onDialogClosed(boolean positiveResult) { 98b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.onDialogClosed(positiveResult); 99b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (mPinListener != null) { 100b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPinListener.onPinEntered(this, positiveResult); 101b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 102b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 103b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 104b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** 105b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Externally visible method to bring up the dialog to 106b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * for multi-step / multi-dialog requests (like changing 107b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * the SIM pin). 108b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 109b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void showPinDialog() { 110b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project showDialog(null); 111b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 112b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project} 113