📄 funcanvascontactlist.java
字号:
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 + -