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 android.content.Intent;
     19 import android.net.Uri;
     20 import android.os.Bundle;
     21 import android.view.LayoutInflater;
     22 import android.view.View;
     23 import android.view.ViewGroup;
     24 import android.widget.AdapterView;
     25 
     26 import com.android.contacts.R;
     27 import com.android.contacts.ShortcutIntentBuilder;
     28 import com.android.contacts.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
     29 
     30 /**
     31  * Fragment for the contact list used for browsing contacts (as compared to
     32  * picking a contact with one of the PICK or SHORTCUT intents).
     33  */
     34 public class ContactPickerFragment extends ContactEntryListFragment<ContactEntryListAdapter>
     35         implements OnShortcutIntentCreatedListener {
     36 
     37     private static final String KEY_EDIT_MODE = "editMode";
     38     private static final String KEY_CREATE_CONTACT_ENABLED = "createContactEnabled";
     39     private static final String KEY_SHORTCUT_REQUESTED = "shortcutRequested";
     40 
     41     private OnContactPickerActionListener mListener;
     42     private boolean mCreateContactEnabled;
     43     private boolean mEditMode;
     44     private boolean mShortcutRequested;
     45 
     46     public ContactPickerFragment() {
     47         setPhotoLoaderEnabled(true);
     48         setSectionHeaderDisplayEnabled(true);
     49         setVisibleScrollbarEnabled(true);
     50         setQuickContactEnabled(false);
     51         setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_CONTACT_SHORTCUT);
     52     }
     53 
     54     public void setOnContactPickerActionListener(OnContactPickerActionListener listener) {
     55         mListener = listener;
     56     }
     57 
     58     public void setCreateContactEnabled(boolean flag) {
     59         this.mCreateContactEnabled = flag;
     60     }
     61 
     62     public void setEditMode(boolean flag) {
     63         mEditMode = flag;
     64     }
     65 
     66     public void setShortcutRequested(boolean flag) {
     67         mShortcutRequested = flag;
     68     }
     69 
     70     @Override
     71     public void onSaveInstanceState(Bundle outState) {
     72         super.onSaveInstanceState(outState);
     73         outState.putBoolean(KEY_EDIT_MODE, mEditMode);
     74         outState.putBoolean(KEY_CREATE_CONTACT_ENABLED, mCreateContactEnabled);
     75         outState.putBoolean(KEY_SHORTCUT_REQUESTED, mShortcutRequested);
     76     }
     77 
     78     @Override
     79     public void restoreSavedState(Bundle savedState) {
     80         super.restoreSavedState(savedState);
     81 
     82         if (savedState == null) {
     83             return;
     84         }
     85 
     86         mEditMode = savedState.getBoolean(KEY_EDIT_MODE);
     87         mCreateContactEnabled = savedState.getBoolean(KEY_CREATE_CONTACT_ENABLED);
     88         mShortcutRequested = savedState.getBoolean(KEY_SHORTCUT_REQUESTED);
     89     }
     90 
     91     @Override
     92     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
     93         if (position == 0 && mCreateContactEnabled && mListener != null) {
     94             mListener.onCreateNewContactAction();
     95         } else {
     96             super.onItemClick(parent, view, position, id);
     97         }
     98     }
     99 
    100     @Override
    101     protected void onItemClick(int position, long id) {
    102         Uri uri;
    103         if (isLegacyCompatibilityMode()) {
    104             uri = ((LegacyContactListAdapter)getAdapter()).getPersonUri(position);
    105         } else {
    106             uri = ((ContactListAdapter)getAdapter()).getContactUri(position);
    107         }
    108         if (uri == null) {
    109             return;
    110         }
    111         if (mEditMode) {
    112             editContact(uri);
    113         } else  if (mShortcutRequested) {
    114             ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this);
    115             builder.createContactShortcutIntent(uri);
    116         } else {
    117             pickContact(uri);
    118         }
    119     }
    120 
    121     public void editContact(Uri contactUri) {
    122         if (mListener != null) {
    123             mListener.onEditContactAction(contactUri);
    124         }
    125     }
    126 
    127     public void pickContact(Uri uri) {
    128         if (mListener != null) {
    129             mListener.onPickContactAction(uri);
    130         }
    131     }
    132 
    133     @Override
    134     protected ContactEntryListAdapter createListAdapter() {
    135         if (!isLegacyCompatibilityMode()) {
    136             HeaderEntryContactListAdapter adapter
    137                     = new HeaderEntryContactListAdapter(getActivity());
    138             adapter.setFilter(ContactListFilter.createFilterWithType(
    139                     ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS));
    140             adapter.setSectionHeaderDisplayEnabled(true);
    141             adapter.setDisplayPhotos(true);
    142             adapter.setQuickContactEnabled(false);
    143             adapter.setShowCreateContact(mCreateContactEnabled);
    144             return adapter;
    145         } else {
    146             LegacyContactListAdapter adapter = new LegacyContactListAdapter(getActivity());
    147             adapter.setSectionHeaderDisplayEnabled(false);
    148             adapter.setDisplayPhotos(false);
    149             return adapter;
    150         }
    151     }
    152 
    153     @Override
    154     protected View inflateView(LayoutInflater inflater, ViewGroup container) {
    155         return inflater.inflate(R.layout.contact_picker_content, null);
    156     }
    157 
    158     @Override
    159     public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
    160         if (mListener != null) {
    161             mListener.onShortcutIntentCreated(shortcutIntent);
    162         }
    163     }
    164 
    165     @Override
    166     public void onPickerResult(Intent data) {
    167         if (mListener != null) {
    168             mListener.onPickContactAction(data.getData());
    169         }
    170     }
    171 }
    172