Package com.rim.samples.device.blackberry.pim

Source Code of com.rim.samples.device.blackberry.pim.ContactListScreen$SelectContactAction

/**
* ContactListScreen.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.pim;

import java.util.Enumeration;
import java.util.Vector;

import javax.microedition.pim.Contact;
import javax.microedition.pim.ContactList;
import javax.microedition.pim.PIM;
import javax.microedition.pim.PIMException;
import javax.microedition.pim.PIMItem;

import net.rim.device.api.command.Command;
import net.rim.device.api.command.CommandHandler;
import net.rim.device.api.command.ReadOnlyCommandMetadata;
import net.rim.device.api.system.Display;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.Screen;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.ListField;
import net.rim.device.api.ui.component.ListFieldCallback;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.util.StringProvider;

public final class ContactListScreen extends MainScreen implements
        ListFieldCallback {
    private final ListField _listField;
    private ContactList _contactList;
    private Contact _contact;
    private Vector _contacts;
    private final AddContactAction _addContactAction;
    private final SelectContactAction _selectContactAction;

    /**
     * This class is responsible for selecting a contact from the list
     */
    private final class SelectContactAction extends MenuItem {
        /**
         * Creates a new SelectContactAction object
         */
        private SelectContactAction() {
            super(new StringProvider("Select Contact"), 0x230010, 0);
            this.setCommand(new Command(new CommandHandler() {
                /**
                 * @see net.rim.device.api.command.CommandHandler#execute(ReadOnlyCommandMetadata,
                 *      Object)
                 */
                public void execute(final ReadOnlyCommandMetadata metadata,
                        final Object context) {

                    final int index = _listField.getSelectedIndex();

                    if (index != -1 && !_contacts.isEmpty()) {
                        _contact =
                                (Contact) _contacts.elementAt(_listField
                                        .getSelectedIndex());
                    } else {
                        _contact = null;
                    }

                    final UiApplication uiapp =
                            UiApplication.getUiApplication();
                    uiapp.popScreen(uiapp.getActiveScreen());
                }
            }));
        }
    }

    /**
     * This class is responsible for adding an invite field to the create screen
     */
    private final class AddContactAction extends MenuItem {
        private Screen _screen;

        /**
         * Creates a new AddContactAction object
         */
        private AddContactAction() {
            super(new StringProvider("Add New Contact"), 0x230020, 1);
            this.setCommand(new Command(new CommandHandler() {
                /**
                 * @see net.rim.device.api.command.CommandHandler#execute(ReadOnlyCommandMetadata,
                 *      Object)
                 */
                public void execute(final ReadOnlyCommandMetadata metadata,
                        final Object context) {
                    if (_screen == null) {
                        throw new IllegalStateException(
                                "PIMDemo: No screen set for AddContactAction!");
                    }

                    UiApplication.getUiApplication().pushModalScreen(
                            new ContactScreen());
                    reloadContactList();
                }
            }));
        }

        private void setScreen(final Screen s) {
            _screen = s;
        }
    }

    /**
     * Creates a new ContactListScreen object
     */
    public ContactListScreen() {
        _addContactAction = new AddContactAction();
        _addContactAction.setScreen(this);
        _selectContactAction = new SelectContactAction();
        setTitle("Contact List");

        _listField = new ListField();
        _listField.setCallback(this);
        add(_listField);
        addMenuItem(_addContactAction);

        reloadContactList();
    }

    /**
     * @see net.rim.device.api.ui.Screen#makeMenu(Menu,int)
     */
    protected void makeMenu(final Menu menu, final int instance) {
        if (!_contacts.isEmpty()) {
            menu.add(_selectContactAction);
        }
        super.makeMenu(menu, instance);
    }

    public Contact getSelectedContact() {
        return _contact;
    }

    private boolean reloadContactList() {
        try {
            _contactList =
                    (ContactList) PIM.getInstance().openPIMList(
                            PIM.CONTACT_LIST, PIM.READ_ONLY);

            final Contact hasEmail = _contactList.createContact();
            hasEmail.addString(Contact.ORG, PIMItem.ATTR_NONE, "");
            hasEmail.addString(Contact.EMAIL, Contact.ATTR_HOME, "");

            final Enumeration contactsWithEmail = _contactList.items();
            _contacts = enumToVector(contactsWithEmail);

            if (!_contacts.isEmpty()) {
                _listField.setSize(_contacts.size());
            }

            return true;
        } catch (final PIMException e) {
            PIMDemo.errorDialog(e.toString());

            return false;
        }
    }

    private Vector enumToVector(final Enumeration enumeration) {
        final Vector v = new Vector();

        if (enumeration == null) {
            return v;
        }

        while (enumeration.hasMoreElements()) {
            v.addElement(enumeration.nextElement());
        }

        return v;
    }

    // ListFieldCallback methods
    // ------------------------------------------------
    /**
     * @see net.rim.device.api.ui.component.ListFieldCallback#drawListRow(ListField,Graphics,int,int,int)
     */
    public void drawListRow(final ListField listField, final Graphics graphics,
            final int index, final int y, final int width) {
        if (listField == _listField && index < _contacts.size()) {
            final Contact item = (Contact) _contacts.elementAt(index);
            final String displayName = PIMDemo.getDisplayName(item);
            graphics.drawText(displayName, 0, y, 0, width);
        }
    }

    /**
     * @see net.rim.device.api.ui.component.ListFieldCallback#get(ListField,
     *      int)
     */
    public Object get(final ListField listField, final int index) {
        if (listField == _listField) {
            // If index is out of bounds an exception will be thrown, but that's
            // the behaviour
            // we want in that case.
            return _contacts.elementAt(index);
        }
        return null;
    }

    /**
     * @see net.rim.device.api.ui.component.ListFieldCallback#getPreferredWidth(ListField)
     */
    public int getPreferredWidth(final ListField listField) {
        // Use all the width of the current LCD.
        return Display.getWidth();
    }

    /**
     * @see net.rim.device.api.ui.component.ListFieldCallback#indexOfList(ListField,
     *      String , int)
     */
    public int indexOfList(final ListField listField, final String prefix,
            final int start) {
        return -1; // Not implemented
    }
}
TOP

Related Classes of com.rim.samples.device.blackberry.pim.ContactListScreen$SelectContactAction

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.