| /* |
| * Copyright (C) 2009 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.calendar; |
| |
| import android.app.Activity; |
| import android.app.AlertDialog; |
| import android.content.DialogInterface; |
| import android.content.DialogInterface.OnDismissListener; |
| import android.widget.Button; |
| |
| /** |
| * A helper class for editing the response to an invitation when the invitation |
| * is a repeating event. |
| */ |
| public class EditResponseHelper implements DialogInterface.OnClickListener, OnDismissListener { |
| private final Activity mParent; |
| private int mWhichEvents = -1; |
| private AlertDialog mAlertDialog; |
| private boolean mClickedOk = false; |
| |
| /** |
| * This callback is passed in to this object when this object is created |
| * and is invoked when the "Ok" button is selected. |
| */ |
| private DialogInterface.OnClickListener mDialogListener; |
| |
| public EditResponseHelper(Activity parent) { |
| mParent = parent; |
| } |
| |
| public void setOnClickListener(DialogInterface.OnClickListener listener) { |
| mDialogListener = listener; |
| } |
| |
| /** |
| * @return whichEvents, representing which events were selected on which to |
| * apply the response: |
| * -1 means no choice selected, or the dialog was |
| * canceled. |
| * 0 means just the single event. |
| * 1 means all events. |
| */ |
| public int getWhichEvents() { |
| return mWhichEvents; |
| } |
| |
| public void setWhichEvents(int which) { |
| mWhichEvents = which; |
| } |
| |
| @Override |
| public void onClick(DialogInterface dialog, int which) { |
| setClickedOk(true); |
| } |
| |
| @Override |
| public void onDismiss(DialogInterface dialog) { |
| // If the click was not "OK", clear out whichEvents to represent |
| // that the dialog was canceled. |
| if (!getClickedOk()) { |
| setWhichEvents(-1); |
| } |
| setClickedOk(false); |
| |
| // Call the pre-set dismiss listener too. |
| if (mDismissListener != null) { |
| mDismissListener.onDismiss(dialog); |
| } |
| |
| } |
| |
| private boolean getClickedOk() { |
| return mClickedOk; |
| } |
| |
| private void setClickedOk(boolean clickedOk) { |
| mClickedOk = clickedOk; |
| } |
| |
| /** |
| * This callback is used when a list item is selected |
| */ |
| private DialogInterface.OnClickListener mListListener = |
| new DialogInterface.OnClickListener() { |
| public void onClick(DialogInterface dialog, int which) { |
| mWhichEvents = which; |
| |
| // Enable the "ok" button now that the user has selected which |
| // events in the series to delete. |
| Button ok = mAlertDialog.getButton(DialogInterface.BUTTON_POSITIVE); |
| ok.setEnabled(true); |
| } |
| }; |
| |
| private DialogInterface.OnDismissListener mDismissListener; |
| |
| |
| /** |
| * Set the dismiss listener to be called when the dialog is ended. There, |
| * use getWhichEvents() to see how the dialog was dismissed; if it returns |
| * -1, the dialog was canceled out. If it is not -1, it's the index of |
| * which events the user wants to respond to. |
| * @param onDismissListener |
| */ |
| public void setDismissListener(OnDismissListener onDismissListener) { |
| mDismissListener = onDismissListener; |
| } |
| |
| public void showDialog(int whichEvents) { |
| // We need to have a non-null listener, otherwise we get null when |
| // we try to fetch the "Ok" button. |
| if (mDialogListener == null) { |
| mDialogListener = this; |
| } |
| AlertDialog dialog = new AlertDialog.Builder(mParent).setTitle( |
| R.string.change_response_title).setIconAttribute(android.R.attr.alertDialogIcon) |
| .setSingleChoiceItems(R.array.change_response_labels, whichEvents, mListListener) |
| .setPositiveButton(android.R.string.ok, mDialogListener) |
| .setNegativeButton(android.R.string.cancel, null).show(); |
| // The caller may set a dismiss listener to hear back when the dialog is |
| // finished. Use getWhichEvents() to see how the dialog was dismissed. |
| dialog.setOnDismissListener(this); |
| mAlertDialog = dialog; |
| |
| if (whichEvents == -1) { |
| // Disable the "Ok" button until the user selects which events to |
| // delete. |
| Button ok = dialog.getButton(DialogInterface.BUTTON_POSITIVE); |
| ok.setEnabled(false); |
| } |
| } |
| |
| public void dismissAlertDialog() { |
| if (mAlertDialog != null) { |
| mAlertDialog.dismiss(); |
| } |
| } |
| |
| } |