11ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov/* 21ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 31ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * 41ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 51ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * you may not use this file except in compliance with the License. 61ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * You may obtain a copy of the License at 71ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * 81ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 91ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * 101ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 111ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 121ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * See the License for the specific language governing permissions and 141ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * limitations under the License. 151ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov */ 161ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovpackage com.android.contacts.interactions; 171ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov 181ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.app.AlertDialog; 191ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.app.Dialog; 201ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.app.DialogFragment; 211ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.content.DialogInterface; 221ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.content.DialogInterface.OnShowListener; 231ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.os.Bundle; 241ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.text.Editable; 251ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.text.TextUtils; 261ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.text.TextWatcher; 271ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.view.LayoutInflater; 281ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.view.View; 29a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmannimport android.view.WindowManager; 301ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.widget.Button; 311ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikovimport android.widget.EditText; 321ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov 33e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R; 34e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 351ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov/** 361ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov * A common superclass for creating and renaming groups. 371ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov */ 38a3e498a1d189010791f98183c1267d869f0d941bBrian Attwellpublic abstract class GroupNameDialogFragment extends DialogFragment { 391ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov protected abstract int getTitleResourceId(); 401ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov protected abstract void initializeGroupLabelEditText(EditText editText); 411ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov protected abstract void onCompleted(String groupLabel); 421ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov 431ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov @Override 441ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov public Dialog onCreateDialog(Bundle savedInstanceState) { 45d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 46d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann final LayoutInflater layoutInflater = LayoutInflater.from(builder.getContext()); 47d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann final View view = layoutInflater.inflate(R.layout.group_name_dialog, null); 48a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann final EditText editText = (EditText) view.findViewById(R.id.group_label); 49a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann initializeGroupLabelEditText(editText); 501ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov 51d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann builder.setTitle(getTitleResourceId()); 52d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann builder.setView(view); 53a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann editText.requestFocus(); 54d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann builder.setPositiveButton(android.R.string.ok, 55d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann new DialogInterface.OnClickListener() { 56d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann @Override 57d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann public void onClick(DialogInterface dialogInterface, int whichButton) { 58a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann onCompleted(editText.getText().toString().trim()); 591ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov } 60d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann } 61d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann ); 62a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann 63d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann builder.setNegativeButton(android.R.string.cancel, null); 64d91320306dc1054e063e705e08416be0d5b98edbDaniel Lehmann final AlertDialog dialog = builder.create(); 651ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov 66a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann dialog.setOnShowListener(new OnShowListener() { 67a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann @Override 68a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann public void onShow(DialogInterface dialogInterface) { 69a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann updateOkButtonState(dialog, editText); 70a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann } 71a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann }); 72a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann editText.addTextChangedListener(new TextWatcher() { 73a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann @Override 74a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann public void onTextChanged(CharSequence s, int start, int before, int count) { 75a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann } 761ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov 77a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann @Override 78a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann public void beforeTextChanged(CharSequence s, int start, int count, int after) { 79a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann } 801ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov 81a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann @Override 82a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann public void afterTextChanged(Editable s) { 83a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann updateOkButtonState(dialog, editText); 84a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann } 85a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann }); 86a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann dialog.getWindow().setSoftInputMode( 87a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 88a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann return dialog; 891ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov } 901ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov 91a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann /* package */ void updateOkButtonState(AlertDialog dialog, EditText editText) { 92a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann final Button okButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE); 93a04dc9c9ed2812af8f4466c2a5225a37d38d250eDaniel Lehmann okButton.setEnabled(!TextUtils.isEmpty(editText.getText().toString().trim())); 941ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov } 951ac58b6f2a925c5a4f759346e5244dfd174acd08Dmitri Plotnikov} 96