/* * Copyright 2015. Appsi Mobile * * 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.appsimobile.appsii.module; import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.TransitionDrawable; import android.net.Uri; import android.util.AttributeSet; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import com.appsimobile.appsii.R; import com.appsimobile.appsii.RoundedImageDrawable; import com.appsimobile.appsii.module.avatar.AvatarBuilder; /** * Created by nick on 29/05/14. */ public abstract class AbstractContactView extends FrameLayout { protected BaseContactInfo mContactInfo; // private Drawable mNoImageDrawable; PeopleCache mPeopleCache; boolean mShowAsTiles; private ImageView mImageView; private TextView mPrimaryText; private String mDisplayName; private Drawable mDefaultDrawable; private ContactBitmapLoader mImageLoader; public AbstractContactView(Context context) { this(context, null); } public AbstractContactView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public AbstractContactView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void setShowAsTiles(boolean showAsTiles) { mShowAsTiles = showAsTiles; } @Override protected void onFinishInflate() { super.onFinishInflate(); mImageView = (ImageView) findViewById(R.id.contact_image); mPrimaryText = (TextView) findViewById(R.id.primary_text); mPeopleCache = PeopleCache.getInstance(); } public void bindToData(BaseContactInfo baseContactInfo) { bindToData(baseContactInfo, baseContactInfo.mDisplayName); } public void bindToData(BaseContactInfo baseContactInfo, String displayName) { long id = baseContactInfo == null ? 0 : baseContactInfo.mContactId; Uri contactLookupUri = baseContactInfo == null ? null : baseContactInfo.mContactLookupUri; String photoUri = baseContactInfo == null ? null : baseContactInfo.mPhotoUri; String name = baseContactInfo == null ? displayName : baseContactInfo.mDisplayName; mContactInfo = baseContactInfo; mDisplayName = displayName; if (mImageLoader != null) { mImageLoader.cancel(true); } boolean dontLoad = contactLookupUri == null || mPeopleCache.isKnownNoBitmap(contactLookupUri); mDefaultDrawable = loadDefaultDrawable(); mImageView.setImageDrawable(mDefaultDrawable); if (!dontLoad) { loadBitmap(contactLookupUri, id, photoUri); } // mImageView.assignContactUri(contactLookupUri); mPrimaryText.setText(name); } private Drawable loadDefaultDrawable() { AvatarBuilder.DefaultImageRequest req = getDefaultImageRequest(mContactInfo, mDisplayName); return AvatarBuilder.getDefaultAvatarDrawableForContact(getResources(), true /* hi-res */, req, mShowAsTiles); } private void loadBitmap(Uri contactLookupUri, long id, String photoUri) { Bitmap bitmap = mPeopleCache.getBitmap(contactLookupUri); applyBitmap(bitmap, false); if (bitmap == null) { int minDimen = (int) (40 * getResources().getDisplayMetrics().density); mImageLoader = new ContactBitmapLoader(getContext(), id, contactLookupUri, photoUri, minDimen) { @Override protected void onPostExecute(Bitmap bitmap) { if (!isCancelled()) { applyBitmap(bitmap, true); } } }; mImageLoader.enqueue(); } } private AvatarBuilder.DefaultImageRequest getDefaultImageRequest(BaseContactInfo info, String displayName) { if (info != null) { return info.getDefaultImageRequest(); } return AvatarBuilder.createDefaultImageRequest(false, null, displayName); } void applyBitmap(Bitmap bitmap, boolean loaded) { BaseContactInfo info = mContactInfo; if (mDefaultDrawable == null) { mDefaultDrawable = loadDefaultDrawable(); } if (bitmap != null) { Drawable from = mDefaultDrawable; Drawable to; if (mShowAsTiles) { to = new BitmapDrawable(getResources(), bitmap); } else { to = new RoundedImageDrawable(getResources(), bitmap); } TransitionDrawable drawable = new TransitionDrawable( new Drawable[]{ from, to } ); mImageView.setImageDrawable(drawable); drawable.startTransition(150); } else { mImageView.setImageDrawable(mDefaultDrawable); } } public BaseContactInfo getContactInfo() { return mContactInfo; } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (mImageLoader != null) { mImageLoader.cancel(true); } } }