Home | History | Annotate | Download | only in list
      1 /*
      2  * Copyright (C) 2010 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package com.android.contacts.list;
     17 
     18 import com.android.contacts.R;
     19 
     20 import android.app.Activity;
     21 import android.app.LoaderManager.LoaderCallbacks;
     22 import android.content.ContentUris;
     23 import android.content.CursorLoader;
     24 import android.content.Intent;
     25 import android.content.Loader;
     26 import android.database.Cursor;
     27 import android.os.Bundle;
     28 import android.provider.ContactsContract.Contacts;
     29 import android.view.LayoutInflater;
     30 import android.view.View;
     31 import android.view.ViewGroup;
     32 import android.widget.TextView;
     33 
     34 /**
     35  * Fragment for the Join Contact list.
     36  */
     37 public class JoinContactListFragment extends ContactEntryListFragment<JoinContactListAdapter> {
     38 
     39     private static final int DISPLAY_NAME_LOADER = -2;
     40 
     41     private static final String KEY_TARGET_CONTACT_ID = "targetContactId";
     42 
     43     private OnContactPickerActionListener mListener;
     44     private long mTargetContactId;
     45 
     46     private final LoaderCallbacks<Cursor> mLoaderCallbacks = new LoaderCallbacks<Cursor>() {
     47 
     48         @Override
     49         public Loader<Cursor> onCreateLoader(int id, Bundle args) {
     50             switch (id) {
     51                 case DISPLAY_NAME_LOADER: {
     52                     // Loader for the display name of the target contact
     53                     return new CursorLoader(getActivity(),
     54                             ContentUris.withAppendedId(Contacts.CONTENT_URI, mTargetContactId),
     55                             new String[] { Contacts.DISPLAY_NAME }, null, null, null);
     56                 }
     57                 case JoinContactListAdapter.PARTITION_ALL_CONTACTS: {
     58                     JoinContactLoader loader = new JoinContactLoader(getActivity());
     59                     JoinContactListAdapter adapter = getAdapter();
     60                     if (adapter != null) {
     61                         adapter.configureLoader(loader, 0);
     62                     }
     63                     return loader;
     64                 }
     65             }
     66             throw new IllegalArgumentException("No loader for ID=" + id);
     67         }
     68 
     69         @Override
     70         public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
     71             switch (loader.getId()) {
     72                 case DISPLAY_NAME_LOADER: {
     73                     if (data != null && data.moveToFirst()) {
     74                         showTargetContactName(data.getString(0));
     75                     }
     76                     break;
     77                 }
     78                 case JoinContactListAdapter.PARTITION_ALL_CONTACTS: {
     79                     Cursor suggestionsCursor = ((JoinContactLoader) loader).getSuggestionsCursor();
     80                     onContactListLoaded(suggestionsCursor, data);
     81                     break;
     82                 }
     83             }
     84         }
     85 
     86         public void onLoaderReset(Loader<Cursor> loader) {
     87         }
     88     };
     89 
     90     public JoinContactListFragment() {
     91         setPhotoLoaderEnabled(true);
     92         setSectionHeaderDisplayEnabled(true);
     93         setVisibleScrollbarEnabled(false);
     94         setQuickContactEnabled(false);
     95     }
     96 
     97     public void setOnContactPickerActionListener(OnContactPickerActionListener listener) {
     98         mListener = listener;
     99     }
    100 
    101     @Override
    102     protected void startLoading() {
    103         configureAdapter();
    104 
    105         getLoaderManager().initLoader(DISPLAY_NAME_LOADER, null, mLoaderCallbacks);
    106         getLoaderManager().initLoader(JoinContactListAdapter.PARTITION_ALL_CONTACTS,
    107                 null, mLoaderCallbacks);
    108     }
    109 
    110     private void onContactListLoaded(Cursor suggestionsCursor, Cursor allContactsCursor) {
    111         JoinContactListAdapter adapter = getAdapter();
    112         adapter.setSuggestionsCursor(suggestionsCursor);
    113         setVisibleScrollbarEnabled(true);
    114         onPartitionLoaded(JoinContactListAdapter.PARTITION_ALL_CONTACTS, allContactsCursor);
    115     }
    116 
    117     private void showTargetContactName(String displayName) {
    118         Activity activity = getActivity();
    119         TextView blurbView = (TextView) activity.findViewById(R.id.join_contact_blurb);
    120         String blurb = activity.getString(R.string.blurbJoinContactDataWith, displayName);
    121         blurbView.setText(blurb);
    122     }
    123 
    124     public void setTargetContactId(long targetContactId) {
    125         mTargetContactId = targetContactId;
    126     }
    127 
    128     @Override
    129     public JoinContactListAdapter createListAdapter() {
    130         return new JoinContactListAdapter(getActivity());
    131     }
    132 
    133     @Override
    134     protected void configureAdapter() {
    135         super.configureAdapter();
    136         JoinContactListAdapter adapter = getAdapter();
    137         adapter.setTargetContactId(mTargetContactId);
    138     }
    139 
    140     @Override
    141     protected View inflateView(LayoutInflater inflater, ViewGroup container) {
    142         return inflater.inflate(R.layout.join_contact_picker_list_content, null);
    143     }
    144 
    145     @Override
    146     protected void onItemClick(int position, long id) {
    147         JoinContactListAdapter adapter = getAdapter();
    148         int partition = adapter.getPartitionForPosition(position);
    149         mListener.onPickContactAction(adapter.getContactUri(position));
    150     }
    151 
    152     @Override
    153     public void onPickerResult(Intent data) {
    154         mListener.onPickContactAction(data.getData());
    155     }
    156 
    157     @Override
    158     public void onSaveInstanceState(Bundle outState) {
    159         super.onSaveInstanceState(outState);
    160         outState.putLong(KEY_TARGET_CONTACT_ID, mTargetContactId);
    161     }
    162 
    163     @Override
    164     public void restoreSavedState(Bundle savedState) {
    165         super.restoreSavedState(savedState);
    166         if (savedState != null) {
    167             mTargetContactId = savedState.getLong(KEY_TARGET_CONTACT_ID);
    168         }
    169     }
    170 }
    171