Home | History | Annotate | Download | only in setup
      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 
     17 package com.android.email.activity.setup;
     18 
     19 import com.android.email.R;
     20 import com.android.emailcommon.provider.QuickResponse;
     21 import com.android.emailcommon.provider.EmailContent.QuickResponseColumns;
     22 import com.android.emailcommon.utility.EmailAsyncTask;
     23 
     24 import android.app.AlertDialog;
     25 import android.app.Dialog;
     26 import android.app.DialogFragment;
     27 import android.content.ContentValues;
     28 import android.content.Context;
     29 import android.content.DialogInterface;
     30 import android.os.Bundle;
     31 import android.text.Editable;
     32 import android.text.TextWatcher;
     33 import android.view.WindowManager;
     34 import android.widget.EditText;
     35 
     36 /**
     37  * Dialog to edit the text of a given or new quick response
     38  */
     39 public 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