Package com.rim.samples.device.activetextfieldsdemo

Source Code of com.rim.samples.device.activetextfieldsdemo.ActiveTextFieldsDemo

/*
* ActiveTextFieldsDemo.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.activetextfieldsdemo;

import net.rim.blackberry.api.menuitem.ApplicationMenuItem;
import net.rim.blackberry.api.stringpattern.PatternRepository;
import net.rim.device.api.system.ApplicationDescriptor;
import net.rim.device.api.system.ApplicationManager;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.ActiveAutoTextEditField;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.MainScreen;

/**
* Sample to demonstrate functionality of active text fields and
* PatternRepository API. Upon startup of device a regular expression is
* registered with the String Pattern Repository. If pattern is encountered in
* an active text field in a device application, the text will be underlined and
* specified context menu items will be available. If a menu item is invoked,
* this application will be invoked and a handler screen will display
* information corresponding to the matched pattern. This application also
* provides a GUI demo screen with an ActiveAutoTextEditField.
*/
public final class ActiveTextFieldsDemo extends UiApplication {
    private static ApplicationMenuItem[] _menuItems =
            new ApplicationMenuItem[2];
    private static RichTextField _trackingNumber;
    private static RichTextField _statusLocation;

    /**
     * Entry point for application
     *
     * @param args
     *            Command line arguments
     */
    public static void main(final String[] args) {
        if (args != null && args.length > 0) {
            // When device starts we want to register our regular expression in
            // the PatternRepository.
            if (args[0].equals("autostartup")) {
                // Assign menu items to ApplicationMenuItem array.
                _menuItems[0] = statusItem;
                _menuItems[1] = locationItem;

                /*
                 * First we create an ApplicationDescriptor referencing this
                 * application. Then we register a regular expression and
                 * associate our ApplicationDescriptor along with our menu
                 * items. When a nine digit number is typed in an active text
                 * field the matched pattern will be highlighted and the
                 * additional menu items will be available. The menu items will
                 * launch an instance of this appplication when invoked.
                 */
                final ApplicationDescriptor appDesc =
                        new ApplicationDescriptor(ApplicationDescriptor
                                .currentApplicationDescriptor(),
                                "Active Text Fields",
                                new String[] { "pattern-recognized" });
                PatternRepository.addPattern(appDesc, "[0-9]{9}",
                        PatternRepository.PATTERN_TYPE_REGULAR_EXPRESSION,
                        _menuItems);
            }

            // This block will execute when one of our application menu items
            // is invoked.
            else if (args[0].equals("pattern-recognized")) {
                // We don't want to launch the demo version of this app,
                // we just want to throw up a screen displaying status or
                // location information. Therefore we pass false into
                // the constructor.
                final ActiveTextFieldsDemo app =
                        new ActiveTextFieldsDemo(false);
                app.enterEventDispatcher();
            }
        }

        // This block will execute if the user starts this application from
        // the desktop.
        else {
            // We want to launch the demo version of this application, pass true
            // to constructor.
            final ActiveTextFieldsDemo app = new ActiveTextFieldsDemo(true);
            app.enterEventDispatcher();
        }
    }

    /**
     * Constructs a new ActiveTextFieldsDemo object
     *
     * @param isDemoApp
     *            Flag to indicate whether application was invoked explicitly
     *            from the desktop or by invoking a menu item
     */
    public ActiveTextFieldsDemo(final boolean isDemoApp) {
        // Display a MainScreen that simply allows user to type a 9 digit number
        // into an ActiveAutoTextEditField to demonstrate the pattern
        // recognition
        // functionality.
        if (isDemoApp) {
            final ActiveTextFieldsScreen demoScreen =
                    new ActiveTextFieldsScreen();
            pushScreen(demoScreen);
        }

        // If the user invoked one of our application menu items we want to
        // display a MainScreen providing tracking information.
        else {

            final HandlerScreen handlerScreen = new HandlerScreen();
            pushScreen(handlerScreen);

            // When this application is launched we want to make it visible by
            // bringing it to the foreground.
            ApplicationManager.getApplicationManager().requestForeground(
                    getProcessId());
        }
    }

    // Anonymous inner classes to extend abstract class ApplicationMenuItem.
    // The run() method will execute upon selection of the menu item. In a
    // real world situation the application would send the highlighted
    // transaction number back to a server and retrieve the status and location
    // information.
    private static ApplicationMenuItem statusItem = new ApplicationMenuItem(
            0x230010) {

        /**
         * Sets the label and text in the display fields of the handler screen
         *
         * @param context
         *            The String representation of the context object is
         *            displayed
         */
        public Object run(final Object context) {
            _trackingNumber.setLabel("Status for tracking No: ");
            _trackingNumber.setText(context.toString());
            _statusLocation.setText("< In Progress >");
            return null;
        }

        public String toString() {
            return "Status";
        }
    };

    private static ApplicationMenuItem locationItem = new ApplicationMenuItem(
            0x230020) {
        /**
         * Sets the label and text in the display fields of the handler screen
         *
         * @param context
         *            The String representation of the context object is
         *            displayed
         */
        public Object run(final Object context) {
            _trackingNumber.setLabel("Location for tracking No: ");
            _trackingNumber.setText(context.toString());
            _statusLocation.setText("< 39.3� N 76.6� W >");
            return null;
        }

        public String toString() {
            return "Location";
        }
    };

    /**
     * The screen that is displayed when one of our application menu items is
     * invoked.
     */
    private static final class HandlerScreen extends MainScreen {

        /**
         * Creates a new HandlerScreen object
         */
        private HandlerScreen() {
            // Set the screen title
            setTitle("Active Text Fields Handler");

            // These are the fields that will display the tracking information
            _trackingNumber = new RichTextField();
            add(_trackingNumber);
            _statusLocation = new RichTextField();
            add(_statusLocation);
        }
    }
}

/**
* The screen for the demo version of this application
*/
final class ActiveTextFieldsScreen extends MainScreen {
    /**
     * Creates a new ActiveTextFieldsScreen object
     */
    ActiveTextFieldsScreen() {
        // Set the screen title
        setTitle("Active Text Fields Demo");

        // Add instructions
        add(new RichTextField(
                "Type a nine digit number in the Transaction No. field. Pattern will be hyperlinked and status and location menu items will be available.\n",
                Field.NON_FOCUSABLE));

        // Add an ActiveAutoTextEditField
        final ActiveAutoTextEditField activeField =
                new ActiveAutoTextEditField("Transaction No: ", null);
        add(activeField);
        activeField.setFocus();
    }

    /**
     * Prevents the save dialog from being displayed
     *
     * @see net.rim.device.api.ui.container.MainScreen#onSavePrompt()
     */
    public boolean onSavePrompt() {
        return true;
    }
}
TOP

Related Classes of com.rim.samples.device.activetextfieldsdemo.ActiveTextFieldsDemo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.