|  | /* | 
|  | * 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.contactmanager; | 
|  |  | 
|  | import android.app.Activity; | 
|  | import android.content.Intent; | 
|  | import android.database.Cursor; | 
|  | import android.net.Uri; | 
|  | import android.os.Bundle; | 
|  | import android.provider.ContactsContract; | 
|  | import android.util.Log; | 
|  | import android.view.View; | 
|  | import android.widget.Button; | 
|  | import android.widget.CheckBox; | 
|  | import android.widget.CompoundButton; | 
|  | import android.widget.CompoundButton.OnCheckedChangeListener; | 
|  | import android.widget.ListView; | 
|  | import android.widget.SimpleCursorAdapter; | 
|  |  | 
|  | public final class ContactManager extends Activity | 
|  | { | 
|  |  | 
|  | public static final String TAG = "ContactManager"; | 
|  |  | 
|  | private Button mAddAccountButton; | 
|  | private ListView mContactList; | 
|  | private boolean mShowInvisible; | 
|  | private CheckBox mShowInvisibleControl; | 
|  |  | 
|  | /** | 
|  | * Called when the activity is first created. Responsible for initializing the UI. | 
|  | */ | 
|  | @Override | 
|  | public void onCreate(Bundle savedInstanceState) | 
|  | { | 
|  | Log.v(TAG, "Activity State: onCreate()"); | 
|  | super.onCreate(savedInstanceState); | 
|  | setContentView(R.layout.contact_manager); | 
|  |  | 
|  | // Obtain handles to UI objects | 
|  | mAddAccountButton = (Button) findViewById(R.id.addContactButton); | 
|  | mContactList = (ListView) findViewById(R.id.contactList); | 
|  | mShowInvisibleControl = (CheckBox) findViewById(R.id.showInvisible); | 
|  |  | 
|  | // Initialize class properties | 
|  | mShowInvisible = false; | 
|  | mShowInvisibleControl.setChecked(mShowInvisible); | 
|  |  | 
|  | // Register handler for UI elements | 
|  | mAddAccountButton.setOnClickListener(new View.OnClickListener() { | 
|  | public void onClick(View v) { | 
|  | Log.d(TAG, "mAddAccountButton clicked"); | 
|  | launchContactAdder(); | 
|  | } | 
|  | }); | 
|  | mShowInvisibleControl.setOnCheckedChangeListener(new OnCheckedChangeListener() { | 
|  | public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { | 
|  | Log.d(TAG, "mShowInvisibleControl changed: " + isChecked); | 
|  | mShowInvisible = isChecked; | 
|  | populateContactList(); | 
|  | } | 
|  | }); | 
|  |  | 
|  | // Populate the contact list | 
|  | populateContactList(); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Populate the contact list based on account currently selected in the account spinner. | 
|  | */ | 
|  | private void populateContactList() { | 
|  | // Build adapter with contact entries | 
|  | Cursor cursor = getContacts(); | 
|  | String[] fields = new String[] { | 
|  | ContactsContract.Data.DISPLAY_NAME | 
|  | }; | 
|  | SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contact_entry, cursor, | 
|  | fields, new int[] {R.id.contactEntryText}); | 
|  | mContactList.setAdapter(adapter); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Obtains the contact list for the currently selected account. | 
|  | * | 
|  | * @return A cursor for for accessing the contact list. | 
|  | */ | 
|  | private Cursor getContacts() | 
|  | { | 
|  | // Run query | 
|  | Uri uri = ContactsContract.Contacts.CONTENT_URI; | 
|  | String[] projection = new String[] { | 
|  | ContactsContract.Contacts._ID, | 
|  | ContactsContract.Contacts.DISPLAY_NAME | 
|  | }; | 
|  | String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + | 
|  | (mShowInvisible ? "0" : "1") + "'"; | 
|  | String[] selectionArgs = null; | 
|  | String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; | 
|  |  | 
|  | return managedQuery(uri, projection, selection, selectionArgs, sortOrder); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Launches the ContactAdder activity to add a new contact to the selected accont. | 
|  | */ | 
|  | protected void launchContactAdder() { | 
|  | Intent i = new Intent(this, ContactAdder.class); | 
|  | startActivity(i); | 
|  | } | 
|  | } |