4
* Copyright (C) 2011 to 2013 Tim Marston <tim@ed.am>
4
* Copyright (C) 2011 to 2012 Tim Marston <tim@ed.am>
6
6
* This file is part of the Import Contacts program (hereafter referred
7
* to as "this program"). For more information, see
7
* to as "this program"). For more information, see
8
8
* http://ed.am/dev/android/import-contacts
10
10
* This program is free software: you can redistribute it and/or modify
37
37
public static class CacheIdentifier
39
public enum Type { NAME, ORGANISATION, PRIMARY_NUMBER, PRIMARY_EMAIL }
40
NONE, NAME, ORGANISATION, PRIMARY_NUMBER, PRIMARY_EMAIL }
41
42
private Type _type;
42
43
private String _detail;
45
protected CacheIdentifier()
45
51
* Obtain a cache identifier. This routine is designed to be as robust
46
52
* as possible (in terms of bad or null detail values), and to return
47
53
* null when a cache identifier can not be created.
49
54
* @param type the detail type
50
55
* @param detail the detail
51
56
* @return the cache identifier, or null
68
73
* Obtain a cache identifier from contact data. This routine is
69
74
* designed to be as robust as possible and may return null when a cache
70
75
* identifier can not be created.
72
76
* @param contact the contact data
73
77
* @return the cache identifier, or null
75
79
public static CacheIdentifier factory( Importer.ContactData contact )
77
CacheIdentifier identifier = null;
81
CacheIdentifier ret = null;
79
83
if( contact.hasName() )
80
identifier = factory( CacheIdentifier.Type.NAME,
84
ret = factory( CacheIdentifier.Type.NAME,
81
85
contact.getName() );
82
if( identifier != null ) return identifier;
84
if( contact.hasPrimaryOrganisation() )
85
identifier = factory( CacheIdentifier.Type.ORGANISATION,
86
if( ret == null && contact.hasPrimaryOrganisation() )
87
ret = factory( CacheIdentifier.Type.ORGANISATION,
86
88
contact.getPrimaryOrganisation() );
87
if( identifier != null ) return identifier;
89
if( contact.hasPrimaryNumber() )
90
identifier = factory( CacheIdentifier.Type.PRIMARY_NUMBER,
89
if( ret == null && contact.hasPrimaryNumber() )
90
ret = factory( CacheIdentifier.Type.PRIMARY_NUMBER,
91
91
contact.getPrimaryNumber() );
92
if( identifier != null ) return identifier;
94
if( contact.hasPrimaryEmail() )
95
identifier = factory( CacheIdentifier.Type.PRIMARY_EMAIL,
92
if( ret == null && contact.hasPrimaryEmail() )
93
ret = factory( CacheIdentifier.Type.PRIMARY_EMAIL,
96
94
contact.getPrimaryEmail() );
97
if( identifier != null ) return identifier;
102
99
protected CacheIdentifier( Type type, String detail )
137
134
= new HashMap< Long, HashSet< String > >();
138
135
private HashMap< Long, HashSet< String > > _contactNotes
139
136
= new HashMap< Long, HashSet< String > >();
140
private HashMap< Long, String > _contactBirthdays
141
= new HashMap< Long, String >();
143
138
public boolean canLookup( CacheIdentifier identifier )
149
144
* Retrieve the contact id of a contact identified by the specified cache
150
145
* identifier, if it exists.
152
146
* @param identifier the cache identifier
153
147
* @return a contact id, or null
342
public boolean hasAssociatedBirthday( Long id, String birthday )
344
birthday = normaliseBirthday( birthday );
345
if( birthday == null ) return false;
347
String found = _contactBirthdays.get( id );
348
return found != null && found.equalsIgnoreCase( birthday );
351
public void addAssociatedBirthday( Long id, String birthday )
353
birthday = normaliseBirthday( birthday );
354
if( birthday == null ) return;
356
_contactBirthdays.put( id, birthday );
359
333
static public String normaliseName( String name )
361
335
if( name == null ) return null;
373
347
static public String normaliseEmailAddress( String email )
375
349
if( email == null ) return null;
376
email = email.trim().toLowerCase( Locale.ENGLISH );
350
email = email.trim().toLowerCase( Locale.US );
377
351
return email.length() > 0? email : null;
397
371
note = note.trim();
398
372
return note.length() > 0? note : null;
401
static public String normaliseBirthday( String birthday )
403
if( birthday == null ) return null;
404
birthday = birthday.trim();
405
return birthday.length() > 0? birthday : null;