/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.android.email.activity.setup;
import com.android.email.R;
import com.android.emailcommon.provider.QuickResponse;
import com.android.emailcommon.provider.EmailContent.QuickResponseColumns;
import com.android.emailcommon.utility.EmailAsyncTask;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.WindowManager;
import android.widget.EditText;
/**
* Dialog to edit the text of a given or new quick response
*/
public class EditQuickResponseDialog extends DialogFragment
implements DialogInterface.OnClickListener, TextWatcher {
private EditText mQuickResponseEditText;
private QuickResponse mQuickResponse;
private AlertDialog mDialog;
private static final String QUICK_RESPONSE_EDITED_STRING = "quick_response_edited_string";
private static final String QUICK_RESPONSE = "quick_response";
/**
* Creates a new dialog to edit an existing QuickResponse or create a new
* one.
*
* @param quickResponse - The QuickResponse fwhich the user is editing;
* null if user is creating a new QuickResponse.
* @param accountId - The accountId for the account which holds this QuickResponse
*/
public static EditQuickResponseDialog newInstance(
QuickResponse quickResponse, long accountId) {
final EditQuickResponseDialog dialog = new EditQuickResponseDialog();
Bundle args = new Bundle();
args.putLong("accountId", accountId);
if (quickResponse != null) {
args.putParcelable(QUICK_RESPONSE, quickResponse);
}
dialog.setArguments(args);
return dialog;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Context context = getActivity();
mQuickResponse = (QuickResponse) getArguments().getParcelable(QUICK_RESPONSE);
mQuickResponseEditText = new EditText(context);
if (savedInstanceState != null) {
String quickResponseSavedString =
savedInstanceState.getString(QUICK_RESPONSE_EDITED_STRING);
if (quickResponseSavedString != null) {
mQuickResponseEditText.setText(quickResponseSavedString);
}
} else if (mQuickResponse != null) {
mQuickResponseEditText.setText(mQuickResponse.toString());
}
mQuickResponseEditText.setSelection(mQuickResponseEditText.length());
mQuickResponseEditText.addTextChangedListener(this);
final AlertDialog.Builder b = new AlertDialog.Builder(context);
b.setTitle(getResources().getString(R.string.edit_quick_response_dialog))
.setView(mQuickResponseEditText)
.setNegativeButton(R.string.cancel_action, this)
.setPositiveButton(R.string.save_action, this);
mDialog = b.create();
return mDialog;
}
@Override
public void onResume() {
super.onResume();
mDialog.getWindow()
.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
if (mQuickResponseEditText.length() == 0) {
mDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
}
}
// implements TextWatcher
@Override
public void afterTextChanged(Editable s) {
mDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(s.length() > 0);
}
// implements TextWatcher
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
// implements TextWatcher
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
// Saves contents during orientation change
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(
QUICK_RESPONSE_EDITED_STRING, mQuickResponseEditText.getText().toString());
}
/**
* Implements DialogInterface.OnClickListener
*/
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_NEGATIVE:
dialog.cancel();
break;
case DialogInterface.BUTTON_POSITIVE:
final long accountId = getArguments().getLong("accountId");
final String text = mQuickResponseEditText.getText().toString();
final Context context = getActivity();
if (mQuickResponse == null) {
mQuickResponse = new QuickResponse(accountId, text);
}
// Insert the new QuickResponse into the database. Content watchers used to
// update the ListView of QuickResponses upon insertion.
EmailAsyncTask.runAsyncParallel(new Runnable() {
@Override
public void run() {
if (!mQuickResponse.isSaved()) {
mQuickResponse.save(context);
} else {
ContentValues values = new ContentValues();
values.put(QuickResponseColumns.TEXT, text);
mQuickResponse.update(context, values);
}
}
});
break;
}
}
}