2
* ContactsContactAccessor.java
4
* Copyright (C) 2011 to 2012 Tim Marston <tim@ed.am>
6
* This file is part of the Export Contacts program (hereafter referred
7
* to as "this program"). For more information, see
8
* http://ed.am/dev/android/export-contacts
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.
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.
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/>.
24
package am.ed.exportcontacts;
26
import am.ed.exportcontacts.Exporter.ContactData;
27
import android.app.Activity;
28
import android.database.Cursor;
29
import android.provider.Contacts;
31
@SuppressWarnings( "deprecation" )
32
public class ContactsBackend implements Backend
34
Activity _activity = null;
35
Exporter _exporter = null;
38
public ContactsBackend( Activity activity, Exporter exporter )
45
public int getNumContacts()
47
Cursor cursor = _activity.managedQuery(
48
Contacts.People.CONTENT_URI,
51
}, null, null, null );
52
return cursor.getCount();
55
private int convertBackendTypeToType( Class< ? > cls, int type )
57
if( cls == Contacts.Phones.class )
61
case Contacts.PhonesColumns.TYPE_MOBILE:
62
return ContactData.TYPE_MOBILE;
63
case Contacts.PhonesColumns.TYPE_FAX_HOME:
64
return ContactData.TYPE_FAX_HOME;
65
case Contacts.PhonesColumns.TYPE_FAX_WORK:
66
return ContactData.TYPE_FAX_WORK;
67
case Contacts.PhonesColumns.TYPE_PAGER:
68
return ContactData.TYPE_PAGER;
69
case Contacts.PhonesColumns.TYPE_WORK:
70
return ContactData.TYPE_WORK;
72
return ContactData.TYPE_HOME;
75
else if( cls == Contacts.ContactMethods.class )
79
case Contacts.ContactMethodsColumns.TYPE_WORK:
80
return ContactData.TYPE_WORK;
82
return ContactData.TYPE_HOME;
86
return ContactData.TYPE_HOME;
90
public boolean getNextContact( Exporter.ContactData contact )
96
_cur = _activity.getContentResolver().query(
97
Contacts.People.CONTENT_URI,
100
Contacts.People.NAME,
101
Contacts.People.NOTES,
102
}, null, null, null );
105
// if there are no more contacts, abort
106
if( _cur == null ) return false;
107
if( !_cur.moveToNext() ) {
113
// get this contact's id
114
Long id = _cur.getLong( _cur.getColumnIndex( Contacts.People._ID ) );
118
_cur.getString( _cur.getColumnIndex( Contacts.People.NAME ) ) );
121
String note = _cur.getString(
122
_cur.getColumnIndex( Contacts.People.NOTES ) );
123
if( note != null && note.length() > 0 )
124
contact.addNote( note );
126
// add the organisations
127
Cursor cur = _activity.getContentResolver().query(
128
Contacts.Organizations.CONTENT_URI,
130
Contacts.Organizations.COMPANY,
131
Contacts.Organizations.TITLE,
132
}, Contacts.Organizations.PERSON_ID + " = ?",
133
new String[] { id.toString() },
134
Contacts.Organizations.ISPRIMARY + " DESC, " +
135
Contacts.Organizations.PERSON_ID + " ASC" );
136
while( cur.moveToNext() )
137
contact.addOrganisation( contact.new OrganisationDetail(
138
cur.getString( cur.getColumnIndex(
139
Contacts.Organizations.COMPANY ) ),
140
cur.getString( cur.getColumnIndex(
141
Contacts.Organizations.TITLE ) ) ) );
144
// add the phone numbers
145
cur = _activity.getContentResolver().query(
146
Contacts.Phones.CONTENT_URI,
148
Contacts.Phones.NUMBER,
149
Contacts.Phones.TYPE,
150
}, Contacts.Phones.PERSON_ID + " = ?",
151
new String[] { id.toString() },
152
Contacts.Phones.ISPRIMARY + " DESC," +
153
Contacts.Phones.PERSON_ID + " ASC" );
154
while( cur.moveToNext() )
155
contact.addNumber( contact.new NumberDetail(
156
convertBackendTypeToType( Contacts.Phones.class,
157
cur.getInt( cur.getColumnIndex( Contacts.Phones.TYPE ) ) ),
158
cur.getString( cur.getColumnIndex(
159
Contacts.Phones.NUMBER ) ) ) );
162
// add the email and postal addresses
163
cur = _activity.getContentResolver().query(
164
Contacts.ContactMethods.CONTENT_URI,
166
Contacts.ContactMethods.KIND,
167
Contacts.ContactMethods.TYPE,
168
Contacts.ContactMethods.DATA,
170
Contacts.ContactMethods.PERSON_ID + " = ? AND " +
171
Contacts.ContactMethods.KIND + " IN( ?, ? )",
174
"" + Contacts.KIND_EMAIL,
175
"" + Contacts.KIND_POSTAL,
177
Contacts.ContactMethods.ISPRIMARY + " DESC," +
178
Contacts.ContactMethods.PERSON_ID + " ASC" );
179
while( cur.moveToNext() ) {
180
int kind = cur.getInt( cur.getColumnIndex(
181
Contacts.ContactMethods.KIND ) );
182
if( kind == Contacts.KIND_EMAIL )
183
contact.addEmail( contact.new EmailDetail(
184
convertBackendTypeToType( Contacts.ContactMethods.class,
185
cur.getInt( cur.getColumnIndex(
186
Contacts.ContactMethods.TYPE ) ) ),
187
cur.getString( cur.getColumnIndex(
188
Contacts.ContactMethods.DATA ) ) ) );
190
contact.addAddress( contact.new AddressDetail(
191
convertBackendTypeToType( Contacts.ContactMethods.class,
192
cur.getInt( cur.getColumnIndex(
193
Contacts.ContactMethods.TYPE ) ) ),
194
cur.getString( cur.getColumnIndex(
195
Contacts.ContactMethods.DATA ) ) ) );