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