/*
* FilePickerDemo.java
*
* Copyright � 1998-2011 Research In Motion Limited
*
* 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.
*
* Note: For the sake of simplicity, this sample application may not leverage
* resource bundles and resource strings. However, it is STRONGLY recommended
* that application developers make use of the localization features available
* within the BlackBerry development platform to ensure a seamless application
* experience across a variety of languages and geographies. For more information
* on localizing your application, please refer to the BlackBerry Java Development
* Environment Development Guide associated with this release.
*/
package com.rim.samples.device.ui.filepickerdemo;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.CheckboxField;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.ObjectChoiceField;
import net.rim.device.api.ui.component.SeparatorField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.picker.FilePicker;
/**
* A sample application to demonstrate the FilePicker class. The application's
* GUI screen contains a button to display a FilePicker control. A check box is
* used to enable or disable a filter which will filter files displayed in by
* file extension as chosen in a choice field. An additional choice field allows
* the end user to specify a view in which to open the FilePicker.
*/
public class FilePickerDemo extends UiApplication {
/**
* Entry point for application
*
* @param args
* Command line arguments (not used)
*/
public static void main(final String[] args) {
// Create a new instance of the application and make the currently
// running thread the application's event dispatch thread.
final FilePickerDemo app = new FilePickerDemo();
app.enterEventDispatcher();
}
/**
* Creates a new FilePickerDemo object
*/
public FilePickerDemo() {
pushScreen(new FilePickerDemoScreen());
}
/**
* MainScreen class for the FilePickerDemo application
*/
static class FilePickerDemoScreen extends MainScreen implements
FilePicker.Listener {
private final LabelField _labelField;
private final FilePicker _filePicker;
private final ButtonField _buttonField;
private final ObjectChoiceField _filterTextChoiceField;
private final ObjectChoiceField _viewChoiceField;
/**
* Creates a new FilePickerDemoScreen object
*/
FilePickerDemoScreen() {
setTitle("File Picker Demo");
// Get the FilePicker instance
_filePicker = FilePicker.getInstance();
_filePicker.setTitle("Choose file");
// Initialize a check box for toggling the file filter
final CheckboxField checkBox =
new CheckboxField("Filter", false, Field.FIELD_HCENTER);
checkBox.setChangeListener(new FieldChangeListener() {
/**
* @see FieldChangeListener#fieldChanged(Field, int)
*/
public void fieldChanged(final Field field, final int context) {
if (checkBox.getChecked()) {
// Set the FilePicker to filter by extension
FilePickerDemoScreen.this.setFilter(true);
_filterTextChoiceField.setEditable(true);
_viewChoiceField.setSelectedIndex(0);
_viewChoiceField.setEditable(false);
} else {
// Disable the filter
FilePickerDemoScreen.this.setFilter(false);
_filterTextChoiceField.setEditable(false);
_viewChoiceField.setEditable(true);
}
}
});
add(checkBox);
// Add a choice field for specifying file filter type
String[] choices = new String[] { "All", "MP3", "JPG", "MPG" };
_filterTextChoiceField =
new ObjectChoiceField("Filter extension: ", choices, 0);
add(_filterTextChoiceField);
_filterTextChoiceField.setChangeListener(new FieldChangeListener() {
/**
* @see FieldChangeListener#fieldChanged(Field, int)
*/
public void fieldChanged(final Field field, final int context) {
FilePickerDemoScreen.this.setFilter(true);
}
});
_filterTextChoiceField.setEditable(false);
// Initialize a choice field for highlight style selection
choices =
new String[] { "Default", "Pictures", "Ring Tones",
"Music", "Videos", "Voice Notes" };
_viewChoiceField =
new ObjectChoiceField("View: ", choices,
FilePicker.VIEW_ALL);
_viewChoiceField.setChangeListener(new FieldChangeListener() {
/**
* @see FieldChangeListener#fieldChanged(Field, int)
*/
public void fieldChanged(final Field field, final int context) {
// Change the view type for the FilePicker
final int index = _viewChoiceField.getSelectedIndex();
switch (index) {
case FilePicker.VIEW_ALL:
_filePicker.setTitle("Choose file");
_filePicker.setView(FilePicker.VIEW_ALL);
break;
case FilePicker.VIEW_PICTURES:
_filePicker.setTitle("Choose picture");
_filePicker.setView(FilePicker.VIEW_PICTURES);
break;
case FilePicker.VIEW_RINGTONES:
_filePicker.setTitle("Choose ringtone");
_filePicker.setView(FilePicker.VIEW_RINGTONES);
break;
case 3:
_filePicker.setTitle("Choose music");
_filePicker.setView(FilePicker.VIEW_MUSIC);
break;
case 4:
_filePicker.setTitle("Choose video");
_filePicker.setView(FilePicker.VIEW_VIDEOS);
break;
case 5:
_filePicker.setTitle("Choose voice note");
_filePicker.setView(FilePicker.VIEW_VOICE_NOTES);
break;
}
}
});
add(_viewChoiceField);
add(new SeparatorField());
// Add a button to display the FilePicker
_buttonField =
new ButtonField("Choose File", Field.FIELD_HCENTER
| ButtonField.CONSUME_CLICK);
_buttonField.setChangeListener(new FieldChangeListener() {
/**
* @see FieldChangeListener#fieldChanged(Field, int)
*/
public void fieldChanged(final Field field, final int context) {
_filePicker.show();
}
});
add(_buttonField);
// Create a label field that displays the file chosen
_labelField = new LabelField();
add(_labelField);
// Make this class a FilePicker listener
_filePicker.setListener(this);
}
/**
* Enables or disables a filter for the FilePicker
*
* @param enabled
* True if displayed files should be filtered by extension.
* False otherwise.
*/
private void setFilter(final boolean enabled) {
if (enabled) {
try {
String path = null;
// Set the filter and default directory for the FilePicker
switch (_filterTextChoiceField.getSelectedIndex()) {
case 0:
_filePicker.setFilter(null);
_filePicker.setPath(null);
break;
case 1:
_filePicker.setFilter(".mp3");
path = System.getProperty("fileconn.dir.music");
break;
case 2:
_filePicker.setFilter(".jpg");
path = System.getProperty("fileconn.dir.photos");
break;
case 3:
_filePicker.setFilter(".mpg");
path = System.getProperty("fileconn.dir.videos");
break;
}
if (path != null) {
// Set the directory to open the FilePicker in if the
// directory exists.
final FileConnection fconn =
(FileConnection) Connector.open(path);
if (fconn.exists()) {
_filePicker.setPath(path);
}
}
} catch (final Exception ioe) {
UiApplication.getUiApplication().invokeLater(
new Runnable() {
public void run() {
Dialog.alert("Connector.open() threw "
+ ioe.toString());
}
});
}
} else {
_filePicker.setFilter(null);
_filePicker.setPath(null);
}
}
/**
* @see FilePicker.Listener#selectionDone(String)
*/
public void selectionDone(final String selection) {
if (selection != null && selection.length() > 0) {
// Display the chosen file on the screen
_labelField.setText("File selected: " + selection);
}
}
/**
* @see MainScreen#onSavePrompt()
*/
public boolean onSavePrompt() {
// Suppress the save dialog
return true;
}
}
}