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