1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
15 */
16
17package com.android.email.activity.setup;
18
19import com.android.email.R;
20import com.android.mail.providers.UIProvider;
21
22import android.app.AlertDialog;
23import android.app.Dialog;
24import android.app.DialogFragment;
25import android.content.ContentValues;
26import android.content.DialogInterface;
27import android.net.Uri;
28import android.os.Bundle;
29import android.text.Editable;
30import android.text.TextWatcher;
31import android.view.LayoutInflater;
32import android.view.View;
33import android.widget.EditText;
34
35/**
36 * Dialog to edit the text of a given or new quick response
37 */
38public class EditQuickResponseDialog extends DialogFragment {
39    private EditText mQuickResponseEditText;
40    private AlertDialog mDialog;
41
42    private static final String QUICK_RESPONSE_STRING = "quick_response_edited_string";
43    private static final String QUICK_RESPONSE_CONTENT_URI = "quick_response_content_uri";
44    private static final String QUICK_RESPONSE_CREATE = "quick_response_create";
45
46    // Public no-args constructor needed for fragment re-instantiation
47    public EditQuickResponseDialog() {}
48
49    /**
50     * Creates a new dialog to edit an existing QuickResponse or create a new
51     * one.
52     *
53     * @param baseUri - The content Uri QuickResponse which the user is editing
54     *                or the content Uri for creating a new QuickResponse
55     * @param create - True if this is a new QuickResponse
56     */
57    public static EditQuickResponseDialog newInstance(String text,
58            Uri baseUri, boolean create) {
59        final EditQuickResponseDialog dialog = new EditQuickResponseDialog();
60
61        Bundle args = new Bundle(4);
62        args.putString(QUICK_RESPONSE_STRING, text);
63        args.putParcelable(QUICK_RESPONSE_CONTENT_URI, baseUri);
64        args.putBoolean(QUICK_RESPONSE_CREATE, create);
65
66        dialog.setArguments(args);
67        return dialog;
68    }
69
70    @Override
71    public Dialog onCreateDialog(Bundle savedInstanceState) {
72        final Uri uri = getArguments().getParcelable(QUICK_RESPONSE_CONTENT_URI);
73        final boolean create = getArguments().getBoolean(QUICK_RESPONSE_CREATE);
74
75        String quickResponseSavedString = null;
76        if (savedInstanceState != null) {
77            quickResponseSavedString =
78                    savedInstanceState.getString(QUICK_RESPONSE_STRING);
79        }
80        if (quickResponseSavedString == null) {
81            quickResponseSavedString = getArguments().getString(QUICK_RESPONSE_STRING);
82        }
83
84        final View wrapper = LayoutInflater.from(getActivity())
85                .inflate(R.layout.quick_response_edit_dialog, null);
86        mQuickResponseEditText = (EditText) wrapper.findViewById(R.id.quick_response_text);
87
88        if (quickResponseSavedString != null) {
89            mQuickResponseEditText.setText(quickResponseSavedString);
90        }
91
92        mQuickResponseEditText.setSelection(mQuickResponseEditText.length());
93        mQuickResponseEditText.addTextChangedListener(new TextWatcher() {
94            @Override
95            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
96
97            @Override
98            public void onTextChanged(CharSequence s, int start, int before, int count) {}
99
100            @Override
101            public void afterTextChanged(Editable s) {
102                mDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(s.length() > 0);
103            }
104        });
105
106        DialogInterface.OnClickListener saveClickListener =
107                new DialogInterface.OnClickListener() {
108                    @Override
109                    public void onClick(DialogInterface dialog, int which) {
110                        final String text = mQuickResponseEditText.getText().toString();
111                        final ContentValues values = new ContentValues(1);
112                        values.put(UIProvider.QuickResponseColumns.TEXT, text);
113
114                        if (create) {
115                            getActivity().getContentResolver().insert(uri, values);
116                        } else {
117                            getActivity().getContentResolver().update(uri, values, null, null);
118                        }
119                    }
120                };
121        DialogInterface.OnClickListener deleteClickListener =
122                new DialogInterface.OnClickListener() {
123                    @Override
124                    public void onClick(DialogInterface dialog, int which) {
125                        getActivity().getContentResolver().delete(uri, null, null);
126                    }
127                };
128
129        final AlertDialog.Builder b = new AlertDialog.Builder(getActivity());
130        b.setTitle(getResources().getString(R.string.edit_quick_response_dialog))
131                .setView(wrapper)
132                .setNegativeButton(android.R.string.cancel, null)
133                .setPositiveButton(R.string.save_action, saveClickListener);
134        if (!create) {
135            b.setNeutralButton(R.string.delete, deleteClickListener);
136        }
137        mDialog = b.create();
138        return mDialog;
139    }
140
141    @Override
142    public void onResume() {
143        super.onResume();
144        if (mQuickResponseEditText.length() == 0) {
145            mDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
146        }
147    }
148
149    // Saves contents during orientation change
150    @Override
151    public void onSaveInstanceState(Bundle outState) {
152        super.onSaveInstanceState(outState);
153        outState.putString(
154                QUICK_RESPONSE_STRING, mQuickResponseEditText.getText().toString());
155    }
156}
157