/* * Copyright (C) 2015 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.messaging.datamodel.media; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.Typeface; import android.graphics.drawable.BitmapDrawable; import android.media.ExifInterface; import android.text.TextUtils; import com.android.messaging.R; import com.android.messaging.util.Assert; import com.android.messaging.util.AvatarUriUtil; import java.io.IOException; import java.util.List; public class SimSelectorAvatarRequest extends AvatarRequest { private static Bitmap sRegularSimIcon; public SimSelectorAvatarRequest(final Context context, final AvatarRequestDescriptor descriptor) { super(context, descriptor); } /** * {@inheritDoc} */ @Override protected ImageResource loadMediaInternal(List> chainedTasks) throws IOException { Assert.isNotMainThread(); final String avatarType = AvatarUriUtil.getAvatarType(mDescriptor.uri); if (AvatarUriUtil.TYPE_SIM_SELECTOR_URI.equals(avatarType)){ final int width = mDescriptor.desiredWidth; final int height = mDescriptor.desiredHeight; final String identifier = AvatarUriUtil.getIdentifier(mDescriptor.uri); final boolean simSelected = AvatarUriUtil.getSimSelected(mDescriptor.uri); final int simColor = AvatarUriUtil.getSimColor(mDescriptor.uri); final boolean incoming = AvatarUriUtil.getSimIncoming(mDescriptor.uri); return renderSimAvatarInternal(identifier, width, height, simColor, simSelected, incoming); } return super.loadMediaInternal(chainedTasks); } private ImageResource renderSimAvatarInternal(final String identifier, final int width, final int height, final int subColor, final boolean selected, final boolean incoming) { final Resources resources = mContext.getResources(); final float halfWidth = width / 2; final float halfHeight = height / 2; final int minOfWidthAndHeight = Math.min(width, height); final int backgroundColor = selected ? subColor : Color.WHITE; final int textColor = selected ? subColor : Color.WHITE; final int simColor = selected ? Color.WHITE : subColor; final Bitmap bitmap = getBitmapPool().createOrReuseBitmap(width, height, backgroundColor); final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); final Canvas canvas = new Canvas(bitmap); if (sRegularSimIcon == null) { final BitmapDrawable regularSim = (BitmapDrawable) mContext.getResources() .getDrawable(R.drawable.ic_sim_card_send); sRegularSimIcon = regularSim.getBitmap(); } paint.setColorFilter(new PorterDuffColorFilter(simColor, PorterDuff.Mode.SRC_ATOP)); paint.setAlpha(0xff); canvas.drawBitmap(sRegularSimIcon, halfWidth - sRegularSimIcon.getWidth() / 2, halfHeight - sRegularSimIcon.getHeight() / 2, paint); paint.setColorFilter(null); paint.setAlpha(0xff); if (!TextUtils.isEmpty(identifier)) { paint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL)); paint.setColor(textColor); final float letterToTileRatio = resources.getFraction(R.dimen.sim_identifier_to_tile_ratio, 1, 1); paint.setTextSize(letterToTileRatio * minOfWidthAndHeight); final String firstCharString = identifier.substring(0, 1).toUpperCase(); final Rect textBound = new Rect(); paint.getTextBounds(firstCharString, 0, 1, textBound); final float xOffset = halfWidth - textBound.centerX(); final float yOffset = halfHeight - textBound.centerY(); canvas.drawText(firstCharString, xOffset, yOffset, paint); } return new DecodedImageResource(getKey(), bitmap, ExifInterface.ORIENTATION_NORMAL); } @Override public int getCacheId() { return BugleMediaCacheManager.AVATAR_IMAGE_CACHE; } }