diff --git a/samples/ApiDemos/AndroidManifest.xml b/samples/ApiDemos/AndroidManifest.xml index 01361ddb3..aba330a68 100644 --- a/samples/ApiDemos/AndroidManifest.xml +++ b/samples/ApiDemos/AndroidManifest.xml @@ -82,6 +82,14 @@ + + + + + + + diff --git a/samples/ApiDemos/res/drawable-hdpi/ic_contact_picture.png b/samples/ApiDemos/res/drawable-hdpi/ic_contact_picture.png new file mode 100755 index 000000000..7c34f5c94 Binary files /dev/null and b/samples/ApiDemos/res/drawable-hdpi/ic_contact_picture.png differ diff --git a/samples/ApiDemos/res/drawable-mdpi/ic_contact_picture.png b/samples/ApiDemos/res/drawable-mdpi/ic_contact_picture.png new file mode 100644 index 000000000..3a338e8e2 Binary files /dev/null and b/samples/ApiDemos/res/drawable-mdpi/ic_contact_picture.png differ diff --git a/samples/ApiDemos/res/layout/quick_contacts.xml b/samples/ApiDemos/res/layout/quick_contacts.xml new file mode 100644 index 000000000..ffb19ed83 --- /dev/null +++ b/samples/ApiDemos/res/layout/quick_contacts.xml @@ -0,0 +1,47 @@ + + + + + + + + + + diff --git a/samples/ApiDemos/res/values/strings.xml b/samples/ApiDemos/res/values/strings.xml index f4e895e4d..6f91b3476 100644 --- a/samples/ApiDemos/res/values/strings.xml +++ b/samples/ApiDemos/res/values/strings.xml @@ -32,12 +32,13 @@ Example of how you can use the Theme.Dialog theme to make an activity that looks like a dialog. - App/Activity/Custom Dialog Example of how you can use a custom Theme.Dialog theme to make an activity that looks like a customized dialog, here with an ugly frame. + App/Activity/QuickContactsDemo + App/Activity/Wallpaper App/Activity/SetWallpaper Set Wallpaper diff --git a/samples/ApiDemos/src/com/example/android/apis/app/QuickContactsDemo.java b/samples/ApiDemos/src/com/example/android/apis/app/QuickContactsDemo.java new file mode 100644 index 000000000..1ee574299 --- /dev/null +++ b/samples/ApiDemos/src/com/example/android/apis/app/QuickContactsDemo.java @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.apis.app; + +import com.example.android.apis.R; + +import android.app.ListActivity; +import android.content.Context; +import android.database.CharArrayBuffer; +import android.database.Cursor; +import android.os.Bundle; +import android.provider.ContactsContract.Contacts; +import android.view.View; +import android.view.ViewGroup; +import android.widget.QuickContactBadge; +import android.widget.ResourceCursorAdapter; +import android.widget.TextView; + +public class QuickContactsDemo extends ListActivity { + static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { + Contacts._ID, // 0 + Contacts.DISPLAY_NAME, // 1 + Contacts.STARRED, // 2 + Contacts.TIMES_CONTACTED, // 3 + Contacts.CONTACT_PRESENCE, // 4 + Contacts.PHOTO_ID, // 5 + Contacts.LOOKUP_KEY, // 6 + Contacts.HAS_PHONE_NUMBER, // 7 + }; + + static final int SUMMARY_ID_COLUMN_INDEX = 0; + static final int SUMMARY_NAME_COLUMN_INDEX = 1; + static final int SUMMARY_STARRED_COLUMN_INDEX = 2; + static final int SUMMARY_TIMES_CONTACTED_COLUMN_INDEX = 3; + static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 4; + static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 5; + static final int SUMMARY_LOOKUP_KEY = 6; + static final int SUMMARY_HAS_PHONE_COLUMN_INDEX = 7; + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND (" + + Contacts.HAS_PHONE_NUMBER + "=1) AND (" + + Contacts.DISPLAY_NAME + " != '' ))"; + Cursor c = + getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select, + null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); + startManagingCursor(c); + ContactListItemAdapter adapter = new ContactListItemAdapter(this, R.layout.quick_contacts, c); + setListAdapter(adapter); + + } + + private final class ContactListItemAdapter extends ResourceCursorAdapter { + public ContactListItemAdapter(Context context, int layout, Cursor c) { + super(context, layout, c); + } + + @Override + public void bindView(View view, Context context, Cursor cursor) { + final ContactListItemCache cache = (ContactListItemCache) view.getTag(); + TextView nameView = cache.nameView; + QuickContactBadge photoView = cache.photoView; + // Set the name + cursor.copyStringToBuffer(SUMMARY_NAME_COLUMN_INDEX, cache.nameBuffer); + int size = cache.nameBuffer.sizeCopied; + cache.nameView.setText(cache.nameBuffer.data, 0, size); + final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX); + final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY); + cache.photoView.assignContactUri(Contacts.getLookupUri(contactId, lookupKey)); + } + + @Override + public View newView(Context context, Cursor cursor, ViewGroup parent) { + View view = super.newView(context, cursor, parent); + ContactListItemCache cache = new ContactListItemCache(); + cache.nameView = (TextView) view.findViewById(R.id.name); + cache.photoView = (QuickContactBadge) view.findViewById(R.id.badge); + view.setTag(cache); + + return view; + } + } + + final static class ContactListItemCache { + public TextView nameView; + public QuickContactBadge photoView; + public CharArrayBuffer nameBuffer = new CharArrayBuffer(128); + } +}