EditQuickResponseDialog.java revision 7920f5809cdd21744ce628c9520539bd6b1d91e9
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.emailcommon.provider.QuickResponse;
21import com.android.emailcommon.provider.EmailContent.QuickResponseColumns;
22import com.android.emailcommon.utility.EmailAsyncTask;
23
24import android.app.AlertDialog;
25import android.app.Dialog;
26import android.app.DialogFragment;
27import android.content.ContentValues;
28import android.content.Context;
29import android.content.DialogInterface;
30import android.os.Bundle;
31import android.text.Editable;
32import android.text.TextWatcher;
33import android.view.WindowManager;
34import android.widget.EditText;
35
36/**
37 * Dialog to edit the text of a given or new quick response
38 */
39public class EditQuickResponseDialog extends DialogFragment
40        implements DialogInterface.OnClickListener, TextWatcher {
41    private EditText mQuickResponseEditText;
42    private QuickResponse mQuickResponse;
43    private AlertDialog mDialog;
44
45    private static final String QUICK_RESPONSE_EDITED_STRING = "quick_response_edited_string";
46    private static final String QUICK_RESPONSE = "quick_response";
47
48    /**
49     * Creates a new dialog to edit an existing QuickResponse or create a new
50     * one.
51     *
52     * @param quickResponse - The QuickResponse fwhich the user is editing;
53     *        null if user is creating a new QuickResponse.
54     * @param accountId - The accountId for the account which holds this QuickResponse
55     */
56    public static EditQuickResponseDialog newInstance(
57            QuickResponse quickResponse, long accountId) {
58        final EditQuickResponseDialog dialog = new EditQuickResponseDialog();
59
60        Bundle args = new Bundle();
61        args.putLong("accountId", accountId);
62        if (quickResponse != null) {
63            args.putParcelable(QUICK_RESPONSE, quickResponse);
64        }
65
66        dialog.setArguments(args);
67        return dialog;
68    }
69
70    @Override
71    public Dialog onCreateDialog(Bundle savedInstanceState) {
72        final Context context = getActivity();
73        mQuickResponse = (QuickResponse) getArguments().getParcelable(QUICK_RESPONSE);
74
75        mQuickResponseEditText = new EditText(context);
76        if (savedInstanceState != null) {
77            String quickResponseSavedString =
78                    savedInstanceState.getString(QUICK_RESPONSE_EDITED_STRING);
79            if (quickResponseSavedString != null) {
80                mQuickResponseEditText.setText(quickResponseSavedString);
81            }
82        } else if (mQuickResponse != null) {
83            mQuickResponseEditText.setText(mQuickResponse.toString());
84        }
85        mQuickResponseEditText.setSelection(mQuickResponseEditText.length());
86        mQuickResponseEditText.addTextChangedListener(this);
87
88        final AlertDialog.Builder b = new AlertDialog.Builder(context);
89        b.setTitle(getResources().getString(R.string.edit_quick_response_dialog))
90                .setView(mQuickResponseEditText)
91                .setNegativeButton(R.string.cancel_action, this)
92                .setPositiveButton(R.string.save_action, this);
93        mDialog = b.create();
94        return mDialog;
95    }
96
97    @Override
98    public void onResume() {
99        super.onResume();
100        mDialog.getWindow()
101                .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
102        if (mQuickResponseEditText.length() == 0) {
103            mDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
104        }
105    }
106
107    // implements TextWatcher
108    @Override
109    public void afterTextChanged(Editable s) {
110            mDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(s.length() > 0);
111    }
112
113    // implements TextWatcher
114    @Override
115    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
116
117    // implements TextWatcher
118    @Override
119    public void onTextChanged(CharSequence s, int start, int before, int count) {}
120
121    // Saves contents during orientation change
122    @Override
123    public void onSaveInstanceState(Bundle outState) {
124        super.onSaveInstanceState(outState);
125        outState.putString(
126                QUICK_RESPONSE_EDITED_STRING, mQuickResponseEditText.getText().toString());
127    }
128
129    /**
130     * Implements DialogInterface.OnClickListener
131     */
132    @Override
133    public void onClick(DialogInterface dialog, int which) {
134        switch (which) {
135            case DialogInterface.BUTTON_NEGATIVE:
136                dialog.cancel();
137                break;
138            case DialogInterface.BUTTON_POSITIVE:
139                final long accountId = getArguments().getLong("accountId");
140                final String text = mQuickResponseEditText.getText().toString();
141                final Context context = getActivity();
142                if (mQuickResponse == null) {
143                    mQuickResponse = new QuickResponse(accountId, text);
144                }
145
146                // Insert the new QuickResponse into the database. Content watchers used to
147                // update the ListView of QuickResponses upon insertion.
148                EmailAsyncTask.runAsyncParallel(new Runnable() {
149                    @Override
150                    public void run() {
151                        if (!mQuickResponse.isSaved()) {
152                            mQuickResponse.save(context);
153                        } else {
154                            ContentValues values = new ContentValues();
155                            values.put(QuickResponseColumns.TEXT, text);
156                            mQuickResponse.update(context, values);
157                        }
158                    }
159
160                });
161                break;
162        }
163    }
164}
165