/android/import-contacts

To get this branch, use:
bzr branch http://bzr.ed.am/android/import-contacts

« back to all changes in this revision

Viewing changes to src/org/waxworlds/importcontacts/Importer.java

  • Committer: edam
  • Date: 2009-10-03 16:58:29 UTC
  • Revision ID: edam@waxworlds.org-20091003165829-vxhwdodf3400ugs3
Tags: 0.9
- converted project to use Android 1.5 SDK
- cleaned-up some whitespace/newlines in source

Show diffs side-by-side

added added

removed removed

 
1
/*
 
2
 * Importer.java
 
3
 *
 
4
 * Copyright (C) 2009 Tim Marston <edam@waxworlds.org>
 
5
 *
 
6
 * This file is part of the Import Contacts program (hereafter referred
 
7
 * to as "this program"). For more information, see
 
8
 * http://www.waxworlds.org/edam/software/android/import-contacts
 
9
 *
 
10
 * This program is free software: you can redistribute it and/or modify
 
11
 * it under the terms of the GNU General Public License as published by
 
12
 * the Free Software Foundation, either version 3 of the License, or
 
13
 * (at your option) any later version.
 
14
 *
 
15
 * This program is distributed in the hope that it will be useful,
 
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
18
 * GNU General Public License for more details.
 
19
 *
 
20
 * You should have received a copy of the GNU General Public License
 
21
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
22
 */
 
23
 
1
24
package org.waxworlds.importcontacts;
2
25
 
3
26
import java.util.HashMap;
127
150
                _doit = doit;
128
151
 
129
152
                SharedPreferences prefs = getSharedPreferences();
130
 
                _mergeSetting = prefs.getInt( "merge_setting", 0 );
 
153
                _mergeSetting = prefs.getInt( "merge_setting", Doit.ACTION_PROMPT );
131
154
        }
132
155
 
133
156
        @Override
323
346
                // handle special cases
324
347
                switch( mergeSetting )
325
348
                {
326
 
                case R.id.merge_keep:
 
349
                case Doit.ACTION_KEEP:
327
350
                        // if we keep contacts on duplicate, we better check for one
328
351
                        return !_contacts.containsKey( name );
329
352
 
330
 
                case R.id.merge_prompt:
 
353
                case Doit.ACTION_PROMPT:
331
354
                        // if we are prompting on duplicate, we better check for one
332
355
                        if( !_contacts.containsKey( name ) )
333
356
                                return true;
379
402
                if( ( id = (Long)_contacts.get( contact._name ) ) != null )
380
403
                {
381
404
                        // should we skip this import altogether?
382
 
                        if( _lastMergeDecision == R.id.merge_keep ) return;
 
405
                        if( _lastMergeDecision == Doit.ACTION_KEEP ) return;
383
406
 
384
407
                        // get contact's URI
385
408
                        contactUri = ContentUris.withAppendedId(
386
409
                                        Contacts.People.CONTENT_URI, id );
387
410
 
388
411
                        // should we destroy the existing contact before importing?
389
 
                        if( _lastMergeDecision == R.id.merge_overwrite ) {
 
412
                        if( _lastMergeDecision == Doit.ACTION_OVERWRITE ) {
390
413
                                _doit.getContentResolver().delete( contactUri, null, null );
391
414
                                contactUri = null;
392
415
 
411
434
                        if( id <= 0 ) return;   // shouldn't happen!
412
435
 
413
436
                        // add them to the "My Contacts" group
414
 
                        Contacts.People.addToGroup(
415
 
                                        _doit.getContentResolver(), id,
416
 
                                        Contacts.Groups.GROUP_MY_CONTACTS );
 
437
                        Contacts.People.addToMyContactsGroup(
 
438
                                        _doit.getContentResolver(), id );
417
439
 
418
440
                        // update cache
419
441
                        _contacts.put( contact._name, id );
442
464
                Long contactId = ContentUris.parseId( contactUri );
443
465
                Uri contactPhonesUri = Uri.withAppendedPath( contactUri,
444
466
                                Contacts.People.Phones.CONTENT_DIRECTORY );
445
 
 
446
 
                // add phone numbers
447
467
                Set phonesKeys = phones.keySet();
 
468
 
 
469
                // add phone numbers
448
470
                Iterator i = phonesKeys.iterator();
449
471
                while( i.hasNext() ) {
450
472
                        ContactData.PhoneData phone = phones.get( i.next() );
468
490
                        if( phone._isPreferred ) values.put( Contacts.Phones.ISPRIMARY, 1 );
469
491
                        _doit.getContentResolver().insert( contactPhonesUri, values );
470
492
                }
 
493
 
 
494
                // now add those phone numbers to the cache to prevent the addition of
 
495
                // duplicate data from another file
 
496
                i = phonesKeys.iterator();
 
497
                while( i.hasNext() ) {
 
498
                        ContactData.PhoneData phone = phones.get( i.next() );
 
499
 
 
500
                        String number = sanitisePhoneNumber( phone._number );
 
501
                        if( number != null ) {
 
502
                                HashSet< String > numbers = _contactNumbers.get( contactId );
 
503
                                if( numbers == null ) {
 
504
                                        _contactNumbers.put( contactId, new HashSet< String >() );
 
505
                                        numbers = _contactNumbers.get( contactId );
 
506
                                }
 
507
                                numbers.add( number );
 
508
                        }
 
509
                }
471
510
        }
472
511
 
473
512
        private void importContactEmails( Uri contactUri,
476
515
                Long contactId = ContentUris.parseId( contactUri );
477
516
                Uri contactContactMethodsUri = Uri.withAppendedPath( contactUri,
478
517
                                Contacts.People.ContactMethods.CONTENT_DIRECTORY );
479
 
 
480
 
                // add phone numbers
481
518
                Set emailsKeys = emails.keySet();
 
519
 
 
520
                // add email addresses
482
521
                Iterator i = emailsKeys.iterator();
483
522
                while( i.hasNext() ) {
484
523
                        ContactData.EmailData email = emails.get( i.next() );
500
539
                        _doit.getContentResolver().insert( contactContactMethodsUri,
501
540
                                        values );
502
541
                }
 
542
 
 
543
                // now add those email addresses to the cache to prevent the addition of
 
544
                // duplicate data from another file
 
545
                i = emailsKeys.iterator();
 
546
                while( i.hasNext() ) {
 
547
                        ContactData.EmailData email = emails.get( i.next() );
 
548
 
 
549
                        String address = sanitiseEmailAddress( email.getAddress() );
 
550
                        if( address != null ) {
 
551
                                HashSet< String > addresses = _contactEmails.get( contactId );
 
552
                                if( addresses == null ) {
 
553
                                        _contactEmails.put( contactId, new HashSet< String >() );
 
554
                                        addresses = _contactEmails.get( contactId );
 
555
                                }
 
556
                                addresses.add( address );
 
557
                        }
 
558
                }
503
559
        }
504
560
 
505
561
        synchronized protected void checkAbort() throws AbortImportException