⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 funcanvascontactlist.java

📁 The Funambol J2ME Mail Client aims to be a light, easy to use, free email client for J2ME devices.
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
    boolean isVisible(int elementId) {
        //return true if item is a recipient
        
        
        // FIXME (ugly code section ahead)
        if (contactItems==null) //avoid a nullpointer exception, do not remove!
            return false;
        if (elementId >= contactItems.length || elementId < 0)  //avoid outofbound
            return false;
        if (contactItems[elementId] == null)
            return false;
        // end ugly code
        
        if (searchString == null || contactItems[elementId].getAddress() != null) {
            return true;
        }
        Contact c= contactItems[elementId].getContact();
        
        for (int i=0; i<searchString.length; i++) {
            
            if ( smartStartsWith( c.getVisibleName(), searchString[i] ) ||
                    smartStartsWith( c.getFirstName(), searchString[i] ) ||
                    smartStartsWith( c.getLastName(), searchString[i] )) {
                return true;
            }
            
        }
        return false;
    }
    
    
    /**
     * return true if tocheck starts with start (case insensitive)
     */
    boolean smartStartsWith(String toCheck, String start) {
        
        if (StringUtil.isNullOrEmpty(toCheck)) {
            return false;
        }
        return toCheck.toLowerCase().startsWith(start.toLowerCase());
        
    }
    
    /**
     * sync the contacts
     */
    public void run() {
        
        UIController.synchContacts();
        initializeContactList();
        this.setTitle(this.getDefaultTitle());
        
    }
    
    public void commandAction(Command command, Displayable displayable) {
        
        //   Log.debug(this, "command pressed: "+command.getLabel());
        if (command == UIController.cancelCommand) {
            
            //if this is not null, we reset the title
            if (UIController.composeMessageScreen!=null) {
                UIController.getComposeMessageScreen().setDefaultTitle();
            }
            UIController.showBackScreen();
        } else if (command == searchCommand) {
            UIController.display.setCurrent(new SearchAddressForm(this));
        } else if (command == okCommand) {
            updateMessageRecipients();
            UIController.updateComposeMessageScreen(message);
            UIController.showComposeMessageScreen(
                    null, UIController.getComposeMessageScreen().subject);
        } else if (command == addContactCommand) {
            if (UIController.checkContactListFull()) {
                UIController.showErrorAlert(
                        Localization.getMessages().AB_LIMIT_ERROR_MSG);
                return;
            }
            updateMessageRecipients();
            UIController.showAddContactScreen(UIController.display.getCurrent(), this);
        } else if (command == syncCommand ) {
            this.setTitle(Localization.getMessages().FAL_SYNC_IN_PROGRESS);
            UIController.getThreadPool().startThread(this);
        }
        
        //item command
        else if (command == selectCommand) {
            contactItems[getActiveElement()].toNextState();
        } else if (command == editContactCommand) {
            UIController.showEditContactScreen(this,  contactItems[getActiveElement()].getContact() , this, false);
        } else if (command == deleteContactCommand) {
            UIController.deleteContact(contactItems[getActiveElement()].getContact());
          
            removeContactItem(getActiveElement());
            //setContactCount(getRmsCount());
            
            Contact[] contacts = new Contact[contactItems.length];
            int lim = Cache.CONTACT_SNAPSHOT_SIZE < contactItems.length ? 
                Cache.CONTACT_SNAPSHOT_SIZE : contactItems.length;
            for(int i=0; i < lim; i++){
                contacts[i] = contactItems[i].getContact();
            }
            try{
                Cache.saveContactSnapShot(Cache.VCARD, contacts);
            } catch (ContactManagerException ex) {
                Log.error(this, "Error loading contacts from rms");
                ex.printStackTrace();
            }  catch (RecordStoreException ex) {
                Log.error(this, "Error saving contact snapshot to rms");
                ex.printStackTrace();
            }  catch (IOException ex) {
                Log.error(this, "Error saving contact snapshot to rms");
                ex.printStackTrace();
            }
            
            initializeContactList();
      
        } else if (command == resetContactsCommand) {
            
            FunModalPopup popup =
                    new FunModalPopup(Localization.getMessages().RESET_REQUEST,
                    Localization.getMessages().RESETCONTACTS_MESSAGE,
                    new ResetContactsPopupAction());
            UIController.showModalPopup(popup, this);
            
            
        }
        
    }
    
    private void updateMessageRecipients() {
        message.removeAllRecipients(Address.TO);
        message.removeAllRecipients(Address.CC);
        message.removeAllRecipients(Address.BCC);
        
        Address address;
        
        for (int i=0; i< elements.length; i++) {
            ContactItem item = (ContactItem)elements[i];
            address=item.getAddress();
            if (address != null) {
                //    Log.debug("Address: " + address.getEmail());
                try {
                    message.addRecipient(address);
                    
                } catch (MailException me) {
                    Log.error(this , "mail exception updateMessageRecipients:" + me.toString());
                    me.printStackTrace();
                }
            }
        }
    }
    
    protected void initializeContactList() {
        Enumeration e;
        Vector contactsFromMemory= new Vector();
        setTitle(Localization.getMessages().LOADING_CONTACTS);
        Address[] messageAddresses = getMessageAddresses();
        
        //this will store the contactItems from the message
        ContactItem[] contactItemsFromMessage =
                new ContactItem[messageAddresses.length];
        
        if (messageAddresses.length == 0) {
            //we can use the cache!
            //Log.debug(this,"using cache");
            try {
                // Log.debug("Calling cache.getContactSnapshot");
                Contact [] cList = Cache.getContactSnapShot(Cache.VCARD);
                ContactItem[] cItemList =  new ContactItem[cList.length];
                for (int i = 0; i<cList.length; i++) {
                    cItemList[i] = new ContactItem(cList[i],i);
                    setContactItemList(cItemList);
                }
            } catch (Exception ex) {
                Log.error("Error getting contact list from cache");
                ex.printStackTrace();
            }
            UIController.getThreadPool().startThread(getRMSContactLoader());
            
        } else {
            Log.debug(this,"not using cache");
            int found=0;
            
            try {
                if(contactItems != null){
                    boolean add = false;
                    for (int i=0; i< contactItems.length; i++) {
                        add = true;

                        for (int y=0; y< messageAddresses.length; y++){
                            if((contactItems[i]).getContact().getDefaultEmail().equals(messageAddresses[y].getEmail()) &&
                                (contactItems[i]).getContact().getVisibleName().equals(messageAddresses[y].getVisibleName())){
                                add = false;
                            }
                        }
                        if(add){
                            contactsFromMemory.addElement((contactItems[i]).getContact());
                        }
                    }
                }else{
                    e = UIController.getContactManager().getContactList();
                    while (e.hasMoreElements()) {
                        Contact c = (Contact) e.nextElement();
                        if (found < messageAddresses.length) {

                            AddressPointer addressPointer =
                                    searchAddress(c, messageAddresses);
                            if (addressPointer.index >= 0) {
                                found++;
                                contactItemsFromMessage[found-1] =
                                        new ContactItem(c,found-1, addressPointer.addressType,
                                        addressPointer.emailType);
                                messageAddresses[addressPointer.index] = null;
                            } else {
                                contactsFromMemory.addElement(c);
                            }
                        } else {
                            contactsFromMemory.addElement(c);
                        }
                    }
                }
                
                for (int i=0; i< messageAddresses.length; i++) {
                    if (messageAddresses[i]!= null) {
                        
                        Address address = messageAddresses[i];
                        Contact contact = new Contact(address.getVisibleName(), address.getEmail());
                        ContactItem cItem = new ContactItem(contact, found, address.getType(), Contact.DEFAULT_EMAIL);
                        contactItemsFromMessage[found] =cItem;
                        found++;
                    }
                }
                //ContactItem[]contactItemsFromMemory = new ContactItem[contactsFromMemory.size()];
                e = contactsFromMemory.elements();
                
                ContactItem[] contactItemList = new ContactItem[contactItemsFromMessage.length + contactsFromMemory.size()];
                System.arraycopy(contactItemsFromMessage,0,contactItemList,0, contactItemsFromMessage.length);
                int i=0;
                while (e.hasMoreElements()) {
                    contactItemList[found+i] = new ContactItem((Contact)e.nextElement(),found+i);
                    i++;
                }
                
                // contactList = new Contact[found + contactsFromMemory.size()];
                // Contact[] contactsFromMemory = new Contact[contactsFromMemory.size()];
                // contactsFromMemory.copyInto(contactsFromMemory);
                // contactItemsFromMessage
                // contactsFromMemory.copyInto(contactList);
                setContactItemList(contactItemList);
                enableDisableOKCommand();
                } catch (ContactManagerException ex) {
                Log.error(this, "Error getting contact list");
                ex.printStackTrace();
            } finally {
                setTitle(getDefaultTitle());
            }
            
            
        } //end of cache block
        
    }
    
    protected  Address[] getMessageAddresses() {
        Address[] toAddressList ;
        Address[] ccAddressList ;
        Address[] bccAddressList ;
        
        try {
            toAddressList=message.getTo();
            ccAddressList=message.getCc();
            bccAddressList=message.getBcc();
        } catch (MailException ex) {
            ex.printStackTrace();
            Log.error("getMessageAddresses: "+ex.toString());
            return new Address[0];
        }
        
        int size = toAddressList.length
                + ccAddressList.length
                + bccAddressList.length;
        
        Address[] messageAddresses=new Address[size];
        
        //     Log.debug(this,"created message Addressess vector with lenght "
        //           + messageAddresses.length);
        
        for (int i=0; i < toAddressList.length; i++) {
            messageAddresses[i]=toAddressList[i];
        }
        for (int i=0; i<ccAddressList.length; i++) {
            messageAddresses[toAddressList.length + i] =
                    ccAddressList[i];
        }
        for (int i=0; i<bccAddressList.length; i++) {
            messageAddresses[toAddressList.length
                    +ccAddressList.length + i] =
                    bccAddressList[i];
        }
        return messageAddresses;
    }
    
    private AddressPointer searchAddress(Contact contact, Address[] messageAddresses) {
        Log.trace(this, "searchAddress" + contact.getVisibleName());
        AddressPointer pointer = new AddressPointer(-1,0,0);
        Address a;
        for (int i=0; i<messageAddresses.length; i++) {
            a=messageAddresses[i];
            if (a!=null) {
                String mail = a.getEmail().toLowerCase().trim();
                if ( mail.equals( contact.getDefaultEmail().toLowerCase().trim() ) )  {
                    pointer = new AddressPointer(i,a.getType(),Contact.DEFAULT_EMAIL);
                } else if ( a.getEmail().equals( safeTrimLowercase(contact.getEmail_2()) ) ) {
                    pointer = new AddressPointer(i,a.getType(),Contact.SECONDARY_EMAIL);
                } else if ( a.getEmail().equals( safeTrimLowercase(contact.getEmail_3()) ) ) {
                    pointer = new AddressPointer(i,a.getType(),Contact.TERTIARY_EMAIL);
                }
            }
        }
        return pointer;
    }
    
    
    private String safeTrimLowercase(String in) {
        
        if (StringUtil.isNullOrEmpty(in)) {
            return "";
        } else {
            return in.toLowerCase().trim();
        }
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -