ContactListFilterView.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:4k
源码类别:

android开发

开发平台:

C/C++

  1. /*
  2.  * Copyright (C) 2008 Esmertec AG.
  3.  * Copyright (C) 2008 The Android Open Source Project
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package com.android.im.app;
  18. import android.content.Context;
  19. import android.database.Cursor;
  20. import android.database.DatabaseUtils;
  21. import android.net.Uri;
  22. import android.provider.Im;
  23. import android.util.AttributeSet;
  24. import android.view.View;
  25. import android.widget.AdapterView;
  26. import android.widget.Filter;
  27. import android.widget.LinearLayout;
  28. import android.widget.ListView;
  29. import android.widget.ResourceCursorAdapter;
  30. import android.widget.AdapterView.OnItemClickListener;
  31. import com.android.im.R;
  32. public class ContactListFilterView extends LinearLayout {
  33.     private ListView mContactListView;
  34.     private Filter mFilter;
  35.     private ContactAdapter mContactAdapter;
  36.     private Uri mUri;
  37.     public ContactListFilterView(Context context, AttributeSet attrs) {
  38.         super(context, attrs);
  39.     }
  40.     @Override
  41.     protected void onFinishInflate() {
  42.         mContactListView = (ListView) findViewById(R.id.filteredList);
  43.         mContactListView.setTextFilterEnabled(true);
  44.         mContactListView.setOnItemClickListener(new OnItemClickListener() {
  45.             public void onItemClick(AdapterView parent, View view, int position,
  46.                     long id) {
  47.                 if (mContext instanceof ContactListActivity) {
  48.                     ContactListActivity list = (ContactListActivity) mContext;
  49.                     mContactListView.setSelection(position);
  50.                     Cursor c = (Cursor) mContactListView.getSelectedItem();
  51.                     list.mContactListView.startChat(c);
  52.                     list.showContactListView();
  53.                 }
  54.             }
  55.         });
  56.     }
  57.     public ListView getListView() {
  58.         return mContactListView;
  59.     }
  60.     public Cursor getContactAtPosition(int position) {
  61.         return (Cursor) mContactAdapter.getItem(position);
  62.     }
  63.     public void doFilter(Uri uri, String filterString) {
  64.         if (!uri.equals(mUri)) {
  65.             mUri = uri;
  66.             Cursor contactCursor = runQuery(filterString);
  67.             if (mContactAdapter == null) {
  68.                 mContactAdapter = new ContactAdapter(mContext, contactCursor);
  69.                 mFilter = mContactAdapter.getFilter();
  70.                 mContactListView.setAdapter(mContactAdapter);
  71.             } else {
  72.                 mContactAdapter.changeCursor(contactCursor);
  73.             }
  74.         } else {
  75.             mFilter.filter(filterString);
  76.         }
  77.     }
  78.     Cursor runQuery(CharSequence constraint) {
  79.         StringBuilder buf = new StringBuilder();
  80.         // exclude chatting contact
  81.         buf.append(Im.Chats.LAST_MESSAGE_DATE);
  82.         buf.append(" IS NULL");
  83.         if (constraint != null) {
  84.             buf.append(" AND ");
  85.             buf.append(Im.Contacts.NICKNAME);
  86.             buf.append(" LIKE ");
  87.             DatabaseUtils.appendValueToSql(buf, "%" + constraint + "%");
  88.         }
  89.         return mContext.getContentResolver().query(mUri, ContactView.CONTACT_PROJECTION,
  90.                 buf == null ? null : buf.toString(), null, Im.Contacts.DEFAULT_SORT_ORDER);
  91.     }
  92.     private class ContactAdapter extends ResourceCursorAdapter {
  93.         private String mSearchString;
  94.         public ContactAdapter(Context context, Cursor cursor) {
  95.             super(context, R.layout.contact_view, cursor);
  96.         }
  97.         @Override
  98.         public void bindView(View view, Context context, Cursor cursor) {
  99.             ContactView v = (ContactView) view;
  100.             v.setPadding(0, 0, 0, 0);
  101.             v.bind(cursor, mSearchString, false);
  102.         }
  103.         @Override
  104.         public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
  105.             if (constraint != null) {
  106.                 mSearchString = constraint.toString();
  107.             }
  108.             return ContactListFilterView.this.runQuery(constraint);
  109.         }
  110.     }
  111. }