/****************************************************************************
* Copyright (C) 2013 HS Coburg.
* All rights reserved.
* Contact: ecsec GmbH (info@ecsec.de)
*
* This file is part of the Open eCard App.
*
* GNU General Public License Usage
* This file may be used under the terms of the GNU General Public
* License version 3.0 as published by the Free Software Foundation
* and appearing in the file LICENSE.GPL included in the packaging of
* this file. Please review the following information to ensure the
* GNU General Public License version 3.0 requirements will be met:
* http://www.gnu.org/copyleft/gpl.html.
*
* Other Usage
* Alternatively, this file may be used in accordance with the terms
* and conditions contained in a signed written agreement between
* you and ecsec GmbH.
*
***************************************************************************/
package org.openecard.gui.android;
import android.app.Activity;
import android.content.Intent;
import org.openecard.gui.MessageDialog;
import org.openecard.gui.message.DialogType;
import org.openecard.gui.message.MessageDialogResult;
import org.openecard.gui.message.OptionType;
import org.openecard.gui.message.ReturnType;
/**
* Android based MessageDialog implementation.
* This implementation uses an Activity to show the MessageDialogs.
* It returns a dummy OK result immediately. The real result is available in the onActivityResult callback of the
* calling Activity.
*
* @author Dirk Petrautzki <petrautzki@hs-coburg.de>
*/
public class AndroidMessageDialog implements MessageDialog {
public static final int REQUEST_CODE = 0;
public static final String OPTIONS = "Options";
public static final String OPTION_TYPE = "OptionType";
public static final String SELECTION_VALUES = "selectionValues";
public static final String SELECTION_INDEX = "selectionIndex";
public static final String INITIAL_VALUE = "initialValue";
public static final String ICON = "Icon";
public static final String DIALOG_TYPE = "DialogType";
public static final String TITLE = "Title";
public static final String MESSAGE = "Message";
public static final String RETURN_VALUE = "returnValue";
public static final String USER_INPUT = "userInput";
private final Activity activityContext;
private Intent intent;
/**
* Creates a new AndroidMessageDialog using the given Context.
*
* @param activityContext current ActivityContext
*/
public AndroidMessageDialog(Activity activityContext) {
this.activityContext = activityContext;
}
private MessageDialogResult getOKResult() {
return new MessageDialogResult(ReturnType.OK);
}
@Override
public MessageDialogResult showMessageDialog(String message, String title) {
return showMessageDialog(message, title, null, null);
}
@Override
public MessageDialogResult showMessageDialog(String message, String title, DialogType messageType) {
return showMessageDialog(message, title, messageType, null);
}
@Override
public MessageDialogResult showMessageDialog(String message, String title, DialogType messageType, byte[] iconData) {
createBasicMessageDialogIntent(message, title);
intent.putExtra(DIALOG_TYPE, messageType);
intent.putExtra(ICON, iconData);
activityContext.startActivityForResult(intent, REQUEST_CODE);
return getOKResult();
}
@Override
public MessageDialogResult showConfirmDialog(String message, String title) {
return showConfirmDialog(message, title, OptionType.YES_NO_CANCEL_OPTION, null, null);
}
@Override
public MessageDialogResult showConfirmDialog(String message, String title, OptionType optionType) {
return showConfirmDialog(message, title, optionType, null, null);
}
@Override
public MessageDialogResult showConfirmDialog(String message, String title, OptionType optionType,
DialogType messageType) {
return showConfirmDialog(message, title, optionType, messageType, null);
}
@Override
public MessageDialogResult showConfirmDialog(String message, String title, OptionType optionType,
DialogType messageType, byte[] iconData) {
createBasicMessageDialogIntent(message, title);
intent.putExtra(OPTION_TYPE, optionType);
intent.putExtra(DIALOG_TYPE, messageType);
intent.putExtra(ICON, iconData);
activityContext.startActivityForResult(intent, REQUEST_CODE);
return getOKResult();
}
@Override
public MessageDialogResult showInputDialog(String message, String title) {
return showInputDialog(message, title, null, "");
}
@Override
public MessageDialogResult showInputDialog(String message, String title, String initialValue) {
return showInputDialog(message, title, null, initialValue);
}
@Override
public MessageDialogResult showInputDialog(String message, String title, DialogType messageType, String initialValue) {
createBasicMessageDialogIntent(message, title);
intent.putExtra(INITIAL_VALUE, initialValue);
intent.putExtra(DIALOG_TYPE, messageType);
activityContext.startActivityForResult(intent, REQUEST_CODE);
return getOKResult();
}
@Override
public MessageDialogResult showInputDialog(String message, String title, DialogType messageType, byte[] iconData,
int initialSelectionIndex, String... selectionValues) {
createBasicMessageDialogIntent(message, title);
intent.putExtra(ICON, iconData);
intent.putExtra(SELECTION_INDEX, initialSelectionIndex);
intent.putExtra(SELECTION_VALUES, selectionValues);
intent.putExtra(DIALOG_TYPE, messageType);
activityContext.startActivityForResult(intent, REQUEST_CODE);
return getOKResult();
}
@Override
public MessageDialogResult showOptionDialog(String message, String title, OptionType optionType,
DialogType messageType, byte[] iconData, String... options) {
createBasicMessageDialogIntent(message, title);
intent.putExtra(ICON, iconData);
intent.putExtra(OPTIONS, options);
intent.putExtra(OPTION_TYPE, optionType);
intent.putExtra(DIALOG_TYPE, messageType);
activityContext.startActivityForResult(intent, REQUEST_CODE);
return getOKResult();
}
private void createBasicMessageDialogIntent(String message, String title) {
intent = new Intent(activityContext, MessageDialogActivity.class);
intent.putExtra(MESSAGE, message);
intent.putExtra(TITLE, title);
}
}