/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.contacts.list;
import com.android.contacts.ContactPhotoManager;
import com.android.contacts.R;
import com.android.contacts.list.ContactTileAdapter.ContactEntry;
import android.content.Context;
import android.net.Uri;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.QuickContactBadge;
import android.widget.TextView;
/**
* A ContactTile displays the contact's picture overlayed with their name
*/
public class ContactTileView extends FrameLayout {
private final static String TAG = ContactTileView.class.getSimpleName();
private Uri mLookupUri;
private ImageView mPhoto;
private QuickContactBadge mQuickContact;
private TextView mName;
private TextView mStatus;
private TextView mPhoneLabel;
private TextView mPhoneNumber;
private ContactPhotoManager mPhotoManager = null;
private View mPushState;
private View mHorizontalDivider;
private Listener mListener;
public ContactTileView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mName = (TextView) findViewById(R.id.contact_tile_name);
mQuickContact = (QuickContactBadge) findViewById(R.id.contact_tile_quick);
mPhoto = (ImageView) findViewById(R.id.contact_tile_image);
mStatus = (TextView) findViewById(R.id.contact_tile_status);
mPhoneLabel = (TextView) findViewById(R.id.contact_tile_phone_type);
mPhoneNumber = (TextView) findViewById(R.id.contact_tile_phone_number);
mPushState = findViewById(R.id.contact_tile_push_state);
mHorizontalDivider = findViewById(R.id.contact_tile_horizontal_divider);
OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
if (mListener != null) {
mListener.onClick(ContactTileView.this);
}
}
};
if(mPushState != null) {
mPushState.setOnClickListener(listener);
} else {
setOnClickListener(listener);
}
}
public void setPhotoManager(ContactPhotoManager photoManager) {
mPhotoManager = photoManager;
}
/**
* Populates the data members to be displayed from the
* fields in {@link ContactEntry}
*/
public void loadFromContact(ContactEntry entry) {
if (entry != null) {
mName.setText(entry.name);
mLookupUri = entry.lookupKey;
if (mStatus != null) {
if (entry.status == null) {
mStatus.setVisibility(View.GONE);
} else {
mStatus.setText(entry.status);
mStatus.setCompoundDrawablesWithIntrinsicBounds(entry.presenceIcon,
null, null, null);
mStatus.setVisibility(View.VISIBLE);
}
}
if (mPhoneLabel != null) {
mPhoneLabel.setText(entry.phoneLabel);
}
if (mPhoneNumber != null) {
// TODO: Format number correctly
mPhoneNumber.setText(entry.phoneNumber);
}
setVisibility(View.VISIBLE);
if (mPhotoManager != null) {
if (mPhoto != null) {
mPhotoManager.loadPhoto(mPhoto, entry.photoUri, isDefaultIconHires(),
isDarkTheme());
if (mQuickContact != null) {
mQuickContact.assignContactUri(mLookupUri);
}
} else if (mQuickContact != null) {
mQuickContact.assignContactUri(mLookupUri);
mPhotoManager.loadPhoto(mQuickContact, entry.photoUri, isDefaultIconHires(),
isDarkTheme());
}
} else {
Log.w(TAG, "contactPhotoManager not set");
}
if (mPushState != null) {
mPushState.setContentDescription(entry.name);
} else if (mQuickContact != null) {
mQuickContact.setContentDescription(entry.name);
}
} else {
setVisibility(View.INVISIBLE);
}
}
public void setListener(Listener listener) {
mListener = listener;
}
public void setHorizontalDividerVisibility(int visibility) {
if (mHorizontalDivider != null) mHorizontalDivider.setVisibility(visibility);
}
public Uri getLookupUri() {
return mLookupUri;
}
protected boolean isDefaultIconHires() {
return false;
}
protected boolean isDarkTheme() {
return false;
}
public interface Listener {
void onClick(ContactTileView contactTileView);
}
}