/**
* OptionsProviderDemo.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.blackberry.options;
import net.rim.blackberry.api.options.OptionsManager;
import net.rim.blackberry.api.options.OptionsProvider;
import net.rim.device.api.system.PersistentObject;
import net.rim.device.api.system.PersistentStore;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.XYEdges;
import net.rim.device.api.ui.component.CheckboxField;
import net.rim.device.api.ui.component.EditField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.ObjectChoiceField;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.component.TextField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.decor.BackgroundFactory;
import net.rim.device.api.ui.decor.Border;
import net.rim.device.api.ui.decor.BorderFactory;
import net.rim.device.api.util.Persistable;
/**
* A simple library class to demonstrate the use of the options facilities
*/
public final class OptionsProviderDemo implements OptionsProvider {
private ObjectChoiceField _objectChoiceField;
private CheckboxField _checkboxField;
private EditField _editField;
private final OptionsDemoData _data;
private final String _title;
private final int MAX_CHARS = 100;
private static OptionsProviderDemo _instance;
/**
* Creates a new OptionsProviderDemo object
*
* @param title
* Title for the options screen
*/
private OptionsProviderDemo(final String title) {
_title = title;
_data = OptionsDemoData.load();
}
/**
* Only allow one instance of this class
*/
public static OptionsProviderDemo getInstance() {
if (_instance == null) {
_instance = new OptionsProviderDemo("Options Demo");
}
return _instance;
}
/**
* On start-up, create the instance and register it
*/
public static void libMain(final String[] args) {
// Runs on startup - create the instance and register it
OptionsManager.registerOptionsProvider(getInstance());
}
/**
* Get the title for the option screen
*
* @see net.rim.blackberry.api.options.OptionsProvider#getTitle()
*/
public String getTitle() {
return _title;
}
/**
* Add our fields to the screen
*
* @see net.rim.blackberry.api.options.OptionsProvider#populateMainScreen(MainScreen)
*
*/
public void populateMainScreen(final MainScreen screen) {
final int index = _data.getSelected();
final boolean checked = _data.getChecked();
final String oldText = _data.getOldText();
final XYEdges xyEdges = new XYEdges(2, 2, 2, 2);
final FieldSet fieldSetOne =
new FieldSet("Field Set 1", BorderFactory
.createBevelBorder(xyEdges), BorderFactory
.createSimpleBorder(xyEdges), Border.STYLE_SOLID);
_objectChoiceField =
new ObjectChoiceField("Choices: ", new String[] { "RIM",
"Options", "Demo" }, index);
_checkboxField =
new CheckboxField("Checkbox: ", checked, Field.FIELD_TRAILING
| Field.USE_ALL_WIDTH);
fieldSetOne.add(_objectChoiceField);
fieldSetOne.add(_checkboxField);
fieldSetOne.setMargin(2, 5, 5, 5);
fieldSetOne.setBackground(BackgroundFactory
.createSolidBackground(0x00FFFFFF));
final FieldSet fieldSetTwo =
new FieldSet("Field Set 2", BorderFactory
.createBevelBorder(xyEdges), BorderFactory
.createRoundedBorder(xyEdges), Border.STYLE_SOLID);
_editField =
new EditField("", oldText, MAX_CHARS, Field.EDITABLE
| TextField.NO_NEWLINE);
_editField.setBackground(BackgroundFactory
.createSolidBackground(0xf6f6f6));
_editField.setBorder(BorderFactory.createRoundedBorder(new XYEdges(4,
4, 4, 4), 0xc6c6c6, Border.STYLE_SOLID));
fieldSetTwo.add(new LabelField("Input: "));
fieldSetTwo.add(_editField);
fieldSetTwo
.add(new RichTextField(
"This is the OptionsProviderDemo implemented using the FieldSet class"));
fieldSetTwo.setMargin(2, 5, 5, 5);
fieldSetTwo.setBackground(BackgroundFactory
.createSolidBackground(0x00FFFFFF));
screen.add(fieldSetOne);
screen.add(fieldSetTwo);
}
/**
* Save our data
*
* @see net.rim.blackberry.api.options.OptionsProvider#save()
*/
public void save() {
_data.setSelected(_objectChoiceField.getSelectedIndex());
_data.setChecked(_checkboxField.getChecked());
_data.setOldText(_editField.getText());
_data.commit();
}
/**
* Retrieve the data. Used by other applications to access the options data
* for this provider.
*/
public OptionsDemoData getData() {
return _data;
}
/**
* Assists OptionsProviderDemo in loading and saving the data to/from the
* fields
*/
public static final class OptionsDemoData implements Persistable {
private static final long ID = 0x6af0b5eb44dc5164L; // "net.rim.device.bb.samples.options.OptionsDemoData"
private int _selectedOption;
private boolean _checkedBox;
private String _textEntered;
/**
* Retreives the saved text from the AutoTextEditField
*
* @return The text that was saved in the AutoTextEditField
*/
public String getOldText() {
return _textEntered;
}
/**
* Sets the text to save from the AutoTextEditField to be saved
*
* @param text
* The text that was entered in the AutoTextEditField
*/
public void setOldText(final String text) {
_textEntered = text;
}
/**
* Retreives the saved state of the CheckboxField
*
* @return <code>true</code> if the Checkbox was checked,
* <code>false</code> if the Checkbox was not checked
*/
public boolean getChecked() {
return _checkedBox;
}
/**
* Sets the state of the CheckboxField
*
* @param checked
* <code>true</code> if the CheckboxField was checked,
* <code>false</code> if the CheckboxField was not checked
*/
public void setChecked(final boolean checked) {
_checkedBox = checked;
}
/**
* Retreives the saved choice index of the ObjectChoiceField
*
* @return The saved index choice of the ObjectChoiceField
*/
public int getSelected() {
return _selectedOption;
}
/**
* Sets the user's ObjectChoiceField choice to save
*
* @param index
* The index of the choice the user made
*/
public void setSelected(final int index) {
_selectedOption = index;
}
/**
* Commits all the data that was saved
*/
public void commit() {
PersistentObject.commit(this);
}
/**
* Loads the data that was saved to the fields
*
* @return An OptionsDemoData instance with all the saved field vales.
* If there is no data that has been saved, it returns an empty
* instance
*/
private static OptionsDemoData load() {
final PersistentObject persist =
PersistentStore.getPersistentObject(OptionsDemoData.ID);
synchronized (persist) {
if (persist.getContents() == null) {
persist.setContents(new OptionsDemoData());
persist.commit();
}
}
return (OptionsDemoData) persist.getContents();
}
}
}