1b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro/* 2b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * Copyright (C) 2011 The Android Open Source Project 3b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * 4b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * Licensed under the Apache License, Version 2.0 (the "License"); 5b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * you may not use this file except in compliance with the License. 6b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * You may obtain a copy of the License at 7b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * 8b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * http://www.apache.org/licenses/LICENSE-2.0 9b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * 10b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * Unless required by applicable law or agreed to in writing, software 11b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * distributed under the License is distributed on an "AS IS" BASIS, 12b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * See the License for the specific language governing permissions and 14b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * limitations under the License. 15b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro */ 16b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaropackage com.android.contacts.list; 17b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro 18b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaroimport com.android.contacts.ContactPhotoManager; 19b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaroimport com.android.contacts.R; 20c569acf64701828c84271a81836dfd1a404dba03Frank Sposaroimport com.android.contacts.list.ContactTileAdapter.ContactEntry; 21b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro 22b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaroimport android.content.Context; 23b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaroimport android.net.Uri; 24b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaroimport android.util.AttributeSet; 25b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaroimport android.util.Log; 26c569acf64701828c84271a81836dfd1a404dba03Frank Sposaroimport android.view.View; 27c56a413e08d907858f848ebbdd8f57290a20f44eFrank Sposaroimport android.widget.FrameLayout; 28b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaroimport android.widget.ImageView; 299e095d2ffc4a94d2fb925d19df6db12bc2b1e124Frank Sposaroimport android.widget.QuickContactBadge; 30b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaroimport android.widget.TextView; 31b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro 32c56a413e08d907858f848ebbdd8f57290a20f44eFrank Sposaro/** 33b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro * A ContactTile displays the contact's picture overlayed with their name 34b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro */ 35c56a413e08d907858f848ebbdd8f57290a20f44eFrank Sposaropublic class ContactTileView extends FrameLayout { 36eec538e5a1cacb96b7cd4309efaa5ddb0baac6faFrank Sposaro private final static String TAG = ContactTileView.class.getSimpleName(); 37b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro 38b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro private Uri mLookupUri; 39b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro private ImageView mPhoto; 409e095d2ffc4a94d2fb925d19df6db12bc2b1e124Frank Sposaro private QuickContactBadge mQuickContact; 41b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro private TextView mName; 42595d6ea70e5d557b78b5e9f13019f2c4cef99f0eFrank Sposaro private TextView mStatus; 4392cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro private TextView mPhoneLabel; 4492cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro private TextView mPhoneNumber; 45c569acf64701828c84271a81836dfd1a404dba03Frank Sposaro private ContactPhotoManager mPhotoManager = null; 46afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro private View mPushState; 47257cec1e445c338eb86f82cb9be5a2fb37edbb8dFrank Sposaro private View mHorizontalDivider; 48afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro private Listener mListener; 49b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro 50b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro public ContactTileView(Context context, AttributeSet attrs) { 51b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro super(context, attrs); 52b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro } 53b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro 54b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro @Override 55b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro protected void onFinishInflate() { 56b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro super.onFinishInflate(); 57b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro mName = (TextView) findViewById(R.id.contact_tile_name); 589e095d2ffc4a94d2fb925d19df6db12bc2b1e124Frank Sposaro 599e095d2ffc4a94d2fb925d19df6db12bc2b1e124Frank Sposaro mQuickContact = (QuickContactBadge) findViewById(R.id.contact_tile_quick); 60b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro mPhoto = (ImageView) findViewById(R.id.contact_tile_image); 61595d6ea70e5d557b78b5e9f13019f2c4cef99f0eFrank Sposaro mStatus = (TextView) findViewById(R.id.contact_tile_status); 6292cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro mPhoneLabel = (TextView) findViewById(R.id.contact_tile_phone_type); 6392cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro mPhoneNumber = (TextView) findViewById(R.id.contact_tile_phone_number); 64afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro mPushState = findViewById(R.id.contact_tile_push_state); 65257cec1e445c338eb86f82cb9be5a2fb37edbb8dFrank Sposaro mHorizontalDivider = findViewById(R.id.contact_tile_horizontal_divider); 669994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro 679994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro OnClickListener listener = new OnClickListener() { 689994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro @Override 699994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro public void onClick(View v) { 709994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro if (mListener != null) { 719994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro mListener.onClick(ContactTileView.this); 729994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro } 739994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro } 749994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro }; 759994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro 769994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro if(mPushState != null) { 779994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro mPushState.setOnClickListener(listener); 789994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro } else { 799994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro setOnClickListener(listener); 809994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro } 81b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro } 82b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro 83c569acf64701828c84271a81836dfd1a404dba03Frank Sposaro public void setPhotoManager(ContactPhotoManager photoManager) { 84c569acf64701828c84271a81836dfd1a404dba03Frank Sposaro mPhotoManager = photoManager; 85c569acf64701828c84271a81836dfd1a404dba03Frank Sposaro } 86c569acf64701828c84271a81836dfd1a404dba03Frank Sposaro 87eec538e5a1cacb96b7cd4309efaa5ddb0baac6faFrank Sposaro /** 88eec538e5a1cacb96b7cd4309efaa5ddb0baac6faFrank Sposaro * Populates the data members to be displayed from the 89eec538e5a1cacb96b7cd4309efaa5ddb0baac6faFrank Sposaro * fields in {@link ContactEntry} 90eec538e5a1cacb96b7cd4309efaa5ddb0baac6faFrank Sposaro */ 91c569acf64701828c84271a81836dfd1a404dba03Frank Sposaro public void loadFromContact(ContactEntry entry) { 923d5c5de0b376aa9c4e5c60eeb0b81118217eb361Frank Sposaro 93b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro if (entry != null) { 94b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro mName.setText(entry.name); 95b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro mLookupUri = entry.lookupKey; 969e095d2ffc4a94d2fb925d19df6db12bc2b1e124Frank Sposaro 97595d6ea70e5d557b78b5e9f13019f2c4cef99f0eFrank Sposaro if (mStatus != null) { 98f443194c03dd9ecfeecd3e6ef1fabb0945ada645Frank Sposaro if (entry.status == null) { 99afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro mStatus.setVisibility(View.GONE); 100595d6ea70e5d557b78b5e9f13019f2c4cef99f0eFrank Sposaro } else { 101f443194c03dd9ecfeecd3e6ef1fabb0945ada645Frank Sposaro mStatus.setText(entry.status); 102f443194c03dd9ecfeecd3e6ef1fabb0945ada645Frank Sposaro mStatus.setCompoundDrawablesWithIntrinsicBounds(entry.presenceIcon, 103f443194c03dd9ecfeecd3e6ef1fabb0945ada645Frank Sposaro null, null, null); 104afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro mStatus.setVisibility(View.VISIBLE); 105595d6ea70e5d557b78b5e9f13019f2c4cef99f0eFrank Sposaro } 106595d6ea70e5d557b78b5e9f13019f2c4cef99f0eFrank Sposaro } 107595d6ea70e5d557b78b5e9f13019f2c4cef99f0eFrank Sposaro 10892cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro if (mPhoneLabel != null) { 10992cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro mPhoneLabel.setText(entry.phoneLabel); 11092cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro } 11192cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro 11292cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro if (mPhoneNumber != null) { 11392cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro // TODO: Format number correctly 11492cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro mPhoneNumber.setText(entry.phoneNumber); 11592cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro } 11692cb150070f90dfe3c0d39abee9e9c1692a034e5Frank Sposaro 117c569acf64701828c84271a81836dfd1a404dba03Frank Sposaro setVisibility(View.VISIBLE); 118b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro 119c569acf64701828c84271a81836dfd1a404dba03Frank Sposaro if (mPhotoManager != null) { 120afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro if (mPhoto != null) { 121ecfc26c3f9495f1a4efed69a1582ff2b0deb2c71Daniel Lehmann mPhotoManager.loadPhoto(mPhoto, entry.photoUri, isDefaultIconHires(), 122ecfc26c3f9495f1a4efed69a1582ff2b0deb2c71Daniel Lehmann isDarkTheme()); 123afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro 124afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro if (mQuickContact != null) { 125afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro mQuickContact.assignContactUri(mLookupUri); 126afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro } 127afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro } else if (mQuickContact != null) { 1285909aabfcf7bfba11e8c7c455295aee9696b5bcbDaniel Lehmann mQuickContact.assignContactUri(mLookupUri); 129ecfc26c3f9495f1a4efed69a1582ff2b0deb2c71Daniel Lehmann mPhotoManager.loadPhoto(mQuickContact, entry.photoUri, isDefaultIconHires(), 130ecfc26c3f9495f1a4efed69a1582ff2b0deb2c71Daniel Lehmann isDarkTheme()); 1315909aabfcf7bfba11e8c7c455295aee9696b5bcbDaniel Lehmann } 1329e095d2ffc4a94d2fb925d19df6db12bc2b1e124Frank Sposaro 133c569acf64701828c84271a81836dfd1a404dba03Frank Sposaro } else { 134c569acf64701828c84271a81836dfd1a404dba03Frank Sposaro Log.w(TAG, "contactPhotoManager not set"); 135c569acf64701828c84271a81836dfd1a404dba03Frank Sposaro } 136f75534bc07689443f9a9253242a473df64ecc2c3Daisuke Miyakawa 137f75534bc07689443f9a9253242a473df64ecc2c3Daisuke Miyakawa if (mPushState != null) { 138f75534bc07689443f9a9253242a473df64ecc2c3Daisuke Miyakawa mPushState.setContentDescription(entry.name); 139f75534bc07689443f9a9253242a473df64ecc2c3Daisuke Miyakawa } else if (mQuickContact != null) { 140f75534bc07689443f9a9253242a473df64ecc2c3Daisuke Miyakawa mQuickContact.setContentDescription(entry.name); 141f75534bc07689443f9a9253242a473df64ecc2c3Daisuke Miyakawa } 142b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro } else { 143c569acf64701828c84271a81836dfd1a404dba03Frank Sposaro setVisibility(View.INVISIBLE); 144b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro } 145b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro } 146b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro 147afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro public void setListener(Listener listener) { 148afc2891b0b07ad1f3d7fa7a272aec5c21bcd8c8bFrank Sposaro mListener = listener; 149257cec1e445c338eb86f82cb9be5a2fb37edbb8dFrank Sposaro } 150257cec1e445c338eb86f82cb9be5a2fb37edbb8dFrank Sposaro 151257cec1e445c338eb86f82cb9be5a2fb37edbb8dFrank Sposaro public void setHorizontalDividerVisibility(int visibility) { 152257cec1e445c338eb86f82cb9be5a2fb37edbb8dFrank Sposaro if (mHorizontalDivider != null) mHorizontalDivider.setVisibility(visibility); 153257cec1e445c338eb86f82cb9be5a2fb37edbb8dFrank Sposaro } 154257cec1e445c338eb86f82cb9be5a2fb37edbb8dFrank Sposaro 155b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro public Uri getLookupUri() { 156b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro return mLookupUri; 157b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro } 1589994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro 159ecfc26c3f9495f1a4efed69a1582ff2b0deb2c71Daniel Lehmann protected boolean isDefaultIconHires() { 160ecfc26c3f9495f1a4efed69a1582ff2b0deb2c71Daniel Lehmann return false; 161ecfc26c3f9495f1a4efed69a1582ff2b0deb2c71Daniel Lehmann } 162ecfc26c3f9495f1a4efed69a1582ff2b0deb2c71Daniel Lehmann 163ecfc26c3f9495f1a4efed69a1582ff2b0deb2c71Daniel Lehmann protected boolean isDarkTheme() { 164ecfc26c3f9495f1a4efed69a1582ff2b0deb2c71Daniel Lehmann return false; 165ecfc26c3f9495f1a4efed69a1582ff2b0deb2c71Daniel Lehmann } 166ecfc26c3f9495f1a4efed69a1582ff2b0deb2c71Daniel Lehmann 1679994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro public interface Listener { 1689994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro void onClick(ContactTileView contactTileView); 1699994f6634f3e13991b8cbf2021d7bf9099c12cd7Frank Sposaro } 170b961b3b6dae6e3f1b6096631f130c38bfa33267cFrank Sposaro} 171