/** * Copyright (c) 2013 Nokia Corporation. All rights reserved. * Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation. * Oracle and Java are trademarks or registered trademarks of Oracle and/or its * affiliates. Other product and company names mentioned herein may be trademarks * or trade names of their respective owners. * See LICENSE.TXT for license information. */ package com.nokia.example.fileselectexample; import com.nokia.mid.ui.FileSelect; import com.nokia.mid.ui.FileSelectDetail; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.StringItem; /** * A form for launching the file selector and dislaying the details of the * selected files. */ public class FileView extends Form implements FileItem.Listener { // Members private Listener listener; private FileItem selectedFileItem; /** * Constructor. * @param listener The listener for file selection events. */ public FileView(Listener listener){ super("Selected files"); this.listener = listener; } /** * @see FileItem.Listener#onPressed(FileItem) */ public void onPressed(FileItem fileItem) { if (selectedFileItem != null) { selectedFileItem.setIsSelected(false); } if (fileItem != null) { selectedFileItem = fileItem; selectedFileItem.setIsSelected(true); } } /** * @see FileItem.Listener#onReleased(FileItem) */ public void onReleased(FileItem fileItem) { } /** * @return The details of the selected file or null if no file is selected. */ public FileSelectDetail getSelectedFileDetails() { if (selectedFileItem != null) { return selectedFileItem.getFileDetails(); } return null; } /** * Runs a new thread for launching the file selector. The selected files * are added to this form. * * @param startUrl Indicates the initial location to show in the file * selector. Possible arguments are: FILE_SYSTEM_ALL, FILE_SYSTEM_INTERNAL * and FILE_SYSTEM_EXTERNAL. * * @param mediaType Indicates what kind of files to show. Possible * possible arguments are: MEDIA_TYPE_ALL, MEDIA_TYPE_APPLICATION, * MEDIA_TYPE_AUDIO, MEDIA_TYPE_PICTURE and MEDIA_TYPE_VIDEO. * * @param multipleSelection If true, the user can select multiple files. If * false, only one file can be selected. */ public void getSelectedFiles(final String startUrl, final int mediaType, final boolean multipleSelection) { final FileView fileView = this; // Clear the form deleteAll(); setTitle("No files selected"); new Thread(new Runnable() { public void run() { FileSelectDetail selectedFiles[] = null; try { selectedFiles = FileSelect.launch(startUrl, mediaType, multipleSelection); } catch (Exception e) { setTitle("Error"); String errorMessage = new String("Failed to launch the file selector: " + e.toString()); StringItem errorMessageItem = new StringItem(null, errorMessage); append(errorMessageItem); if (listener != null) { listener.onError(errorMessage); } } int numberOfSelectedFiles = 0; if (selectedFiles != null) { numberOfSelectedFiles = selectedFiles.length; } if (numberOfSelectedFiles != 0) { if (numberOfSelectedFiles > 1) { setTitle(numberOfSelectedFiles + " files selected"); if (listener != null) { listener.onMultipleFilesSelected(numberOfSelectedFiles); } } else { setTitle("One file selected"); if (listener != null) { listener.onFileSelected(selectedFiles[0]); } } for (int i = 0; i < numberOfSelectedFiles; ++i) { append(new FileItem(selectedFiles[i], fileView)); } } else { System.out.println("FileView::getSelectedFiles(): No files selected."); } } }).start(); } /** * An interface for listener listening to file selection events. */ public interface Listener { void onMultipleFilesSelected(int count); void onFileSelected(FileSelectDetail fileDetails); void onError(String errorMessage); } }