/****************************************************************************
* 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 java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import org.openecard.gui.FileDialog;
import org.openecard.gui.file.FileDialogResult;
import org.openecard.gui.file.FileFilter;
/**
* Android based FileDialog implementation.
* This implementation uses an Activity to show the FileDialogs.
* It returns an emtpy dummy result immediately. The real result is available in the onActivityResult callback of the
* calling Activity.
*
* @author Dirk Petrautzki <petrautzki@hs-coburg.de>
*/
public class AndroidFileDialog implements FileDialog {
public static final String FILE_DIALOG_TYPE = "fileDialogType";
public static final String APPROVE_BUTTON_TEXT = "approveButtonText";
public static final String FILE_FILTERS = "fileFilters";
public static final String SELECTED_FILES = "selectedFiles";
public static final String FOLDER_SELECTABLE = "folderSelectable";
public static final String MULTI_SELECTION_ENABLED = "multiSelectionEnabled";
public static final String SHOW_HIDDEN_FILES = "showHiddenFiles";
public static final int REQUEST_CODE = 0;
public static final String TITLE = "Title";
public static final String CURRENT_DIR = "currentDir";
private final Activity activityContext;
private Intent intent;
private String title;
private ArrayList<File> selectedFiles = new ArrayList<File>();
private ArrayList<FileFilter> fileFilters = new ArrayList<FileFilter>();
private File currentDir;
private boolean showHiddenFiles;
private boolean multiSelectionEnabled;
private boolean folderSelectable;
private String approveButtonText;
/**
* Creates a new AndroidMessageDialog using the given Context.
*
* @param activityContext current ActivityContext
*/
public AndroidFileDialog(Activity activityContext) {
this.activityContext = activityContext;
intent = new Intent(activityContext, FileDialogActivity.class);
}
@Override
public void setTitle(String title) {
this.title = title;
}
@Override
public void setCurrentDirectory(File currentDir) {
this.currentDir = currentDir;
}
@Override
public void setSelectedFiles(File... files) {
selectedFiles.clear();
Collections.addAll(selectedFiles, files);
}
@Override
public void setSelectedFiles(List<File> files) {
selectedFiles.clear();
selectedFiles.addAll(files);
}
@Override
public void clearSelectedFiles() {
selectedFiles.clear();
}
@Override
public void addFileFilter(FileFilter filter) {
fileFilters.add(filter);
}
@Override
public void clearFileFilters() {
fileFilters.clear();
}
@Override
public void setShowHiddenFiles(boolean showHiddenFiles) {
this.showHiddenFiles = showHiddenFiles;
}
@Override
public void setMultiSelectionEnabled(boolean multiSelectionEnabled) {
this.multiSelectionEnabled = multiSelectionEnabled;
}
@Override
public void setFolderSelectable(boolean folderSelectable) {
this.folderSelectable = folderSelectable;
}
@Override
public FileDialogResult showOpen() {
intent.putExtra(FILE_DIALOG_TYPE, FileDialogType.OPEN);
startFileDialogActivity();
return new FileDialogResult();
}
@Override
public FileDialogResult showSave() {
intent.putExtra(FILE_DIALOG_TYPE, FileDialogType.SAVE);
startFileDialogActivity();
return new FileDialogResult();
}
@Override
public FileDialogResult show(String approveButtonText) {
this.approveButtonText = approveButtonText;
if (title == null) {
// set title the same as approveButtonText (like JFileChooser does)
this.title = approveButtonText;
}
intent.putExtra(FILE_DIALOG_TYPE, FileDialogType.OTHER);
startFileDialogActivity();
return new FileDialogResult();
}
private void startFileDialogActivity() {
intent.putExtra(TITLE, title);
intent.putExtra(CURRENT_DIR, currentDir);
intent.putExtra(FILE_FILTERS, fileFilters);
intent.putExtra(SHOW_HIDDEN_FILES, showHiddenFiles);
intent.putExtra(FOLDER_SELECTABLE, folderSelectable);
intent.putExtra(MULTI_SELECTION_ENABLED, multiSelectionEnabled);
intent.putExtra(SELECTED_FILES, selectedFiles);
intent.putExtra(APPROVE_BUTTON_TEXT, approveButtonText);
activityContext.startActivityForResult(intent, REQUEST_CODE);
}
}