RecipientAlternatesAdapter.java revision 156467329e276c9bc90945bea916ce3ac4849574
15f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira/* 25f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * Copyright (C) 2011 The Android Open Source Project 35f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * 45f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * Licensed under the Apache License, Version 2.0 (the "License"); 55f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * you may not use this file except in compliance with the License. 65f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * You may obtain a copy of the License at 75f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * 85f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * http://www.apache.org/licenses/LICENSE-2.0 95f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * 105f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * Unless required by applicable law or agreed to in writing, software 115f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * distributed under the License is distributed on an "AS IS" BASIS, 125f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * See the License for the specific language governing permissions and 145f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira * limitations under the License. 155f2cc770801133c2db389ebe108063427d1cf6aaMindy Pereira */ 16699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 17699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereirapackage com.android.ex.chips; 18699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 19699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereiraimport com.android.ex.chips.BaseRecipientAdapter.EmailQuery; 20699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 21699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereiraimport android.content.Context; 22699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereiraimport android.database.Cursor; 23699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereiraimport android.provider.ContactsContract.CommonDataKinds.Email; 24699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereiraimport android.view.LayoutInflater; 25699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereiraimport android.view.View; 26699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereiraimport android.view.ViewGroup; 27699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereiraimport android.widget.CursorAdapter; 2855bb2833b29945c08b809408ff94ddf7703e911aMindy Pereiraimport android.widget.ImageView; 29699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereiraimport android.widget.TextView; 30699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 31699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereirapublic class RecipientAlternatesAdapter extends CursorAdapter { 32699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira private final LayoutInflater mLayoutInflater; 33699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 34699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira private final int mLayoutId; 35699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 36699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira private final long mCurrentId; 37699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 38156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira private int mCheckedItemPosition = -1; 39156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira 40156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira public RecipientAlternatesAdapter(Context context, long contactId, long currentId, int viewId) { 41699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira super(context, context.getContentResolver().query(Email.CONTENT_URI, EmailQuery.PROJECTION, 42699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira Email.CONTACT_ID + " =?", new String[] { 43699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira String.valueOf(contactId) 44699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira }, null), 0); 45699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira mLayoutInflater = LayoutInflater.from(context); 46699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira mLayoutId = viewId; 47699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira mCurrentId = currentId; 48699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira } 49699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 50699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira @Override 51699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira public long getItemId(int position) { 52699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira Cursor c = getCursor(); 53699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira c.moveToPosition(position); 54699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira return c.getLong(EmailQuery.DATA_ID); 55699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira } 56699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 57699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira public RecipientEntry getRecipientEntry(int position) { 58699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira Cursor c = getCursor(); 59699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira c.moveToPosition(position); 60699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira return RecipientEntry.constructTopLevelEntry(c.getString(EmailQuery.NAME), c 61699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira .getString(EmailQuery.ADDRESS), c.getLong(EmailQuery.CONTACT_ID), c 62699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira .getLong(EmailQuery.DATA_ID), c.getString(EmailQuery.PHOTO_THUMBNAIL_URI)); 63699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira } 64699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 65699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira @Override 66699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira public View getView(int position, View convertView, ViewGroup parent) { 6755bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira Cursor cursor = getCursor(); 6855bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira cursor.moveToPosition(position); 69699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira if (convertView == null) { 70156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira convertView = newView(); 71156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira } 72156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira if (cursor.getLong(EmailQuery.DATA_ID) == mCurrentId) { 73156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira mCheckedItemPosition = position; 74699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira } 7555bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira bindView(convertView, convertView.getContext(), cursor); 76699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira return convertView; 77699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira } 78699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 7955bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira // TODO: this is VERY similar to the BaseRecipientAdapter. Can we combine 8055bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira // somehow? 81699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira @Override 82699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira public void bindView(View view, Context context, Cursor cursor) { 8355bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira int position = cursor.getPosition(); 8455bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira 8555bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira TextView display = (TextView) view.findViewById(android.R.id.text1); 8655bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira ImageView imageView = (ImageView) view.findViewById(android.R.id.icon); 8755bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira RecipientEntry entry = getRecipientEntry(position); 8855bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira if (position == 0) { 8955bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira display.setText(cursor.getString(EmailQuery.NAME)); 9055bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira display.setVisibility(View.VISIBLE); 9155bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira // TODO: see if this needs to be done outside the main thread 9255bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira // as it may be too slow to get immediately. 9355bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira imageView.setImageURI(entry.getPhotoThumbnailUri()); 9455bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira imageView.setVisibility(View.VISIBLE); 9555bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira } else { 9655bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira display.setVisibility(View.GONE); 9755bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira imageView.setVisibility(View.GONE); 9855bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira } 9955bb2833b29945c08b809408ff94ddf7703e911aMindy Pereira TextView destination = (TextView) view.findViewById(android.R.id.text2); 100699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira destination.setText(cursor.getString(EmailQuery.ADDRESS)); 101699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira } 102699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 103699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira @Override 104699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira public View newView(Context context, Cursor cursor, ViewGroup parent) { 105156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira return newView(); 106156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira } 107156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira 108156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira private View newView() { 109156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira return mLayoutInflater.inflate(mLayoutId, null); 110699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira } 111699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira 112156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira /** 113156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira * Get the position of the item that should be checked. 114156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira */ 115156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira public int getCheckedItemPosition() { 116156467329e276c9bc90945bea916ce3ac4849574Mindy Pereira return mCheckedItemPosition; 117699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira } 118699c1e37a1bf26daab34f2117a14c6e883636077Mindy Pereira} 119