126b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru/* 226b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * Copyright (C) 2011 The Android Open Source Project 326b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * 426b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * Licensed under the Apache License, Version 2.0 (the "License"); 526b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * you may not use this file except in compliance with the License. 626b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * You may obtain a copy of the License at 726b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * 826b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * http://www.apache.org/licenses/LICENSE-2.0 926b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * 1026b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * Unless required by applicable law or agreed to in writing, software 1126b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * distributed under the License is distributed on an "AS IS" BASIS, 1226b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1326b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * See the License for the specific language governing permissions and 1426b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru * limitations under the License. 1526b9d70ba7ab0dd1f99b3e86acae93444f4ee57dJean-Baptiste Queru */ 1610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 1710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylorpackage com.android.mms.ui; 1810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 1910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylorimport android.content.Context; 2010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylorimport android.content.res.Resources; 2110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylorimport android.graphics.Canvas; 2210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylorimport android.graphics.drawable.Drawable; 2310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylorimport android.util.AttributeSet; 2410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylorimport android.widget.ImageView; 2510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylorimport android.widget.QuickContactBadge; 2610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 2710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylorimport com.android.mms.R; 2810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 2910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylorpublic class QuickContactDivot extends QuickContactBadge implements Divot{ 3010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor private Drawable mDrawable; 3110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor private int mDrawableIntrinsicWidth; 3210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor private int mDrawableIntrinsicHeight; 3310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor private int mPosition; 3410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 3510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor // The screen density. Multiple this by dips to get pixels. 3610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor private float mDensity; 3710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 3810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor public QuickContactDivot(Context context, AttributeSet attrs, int defStyle) { 3910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor super(context, attrs, defStyle); 4010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor initialize(attrs); 4110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 4210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 4310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor public QuickContactDivot(Context context, AttributeSet attrs) { 4410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor super(context, attrs); 4510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor initialize(attrs); 4610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 4710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 4810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor public QuickContactDivot(Context context) { 4910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor super(context); 5010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor initialize(null); 5110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 5210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 5310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor private void initialize(AttributeSet attrs) { 5410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor if (attrs != null) { 5510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor mPosition = attrs.getAttributeListValue(null, "position", sPositionChoices, -1); 5610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 5710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 5810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor Resources r = getContext().getResources(); 5910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor mDensity = r.getDisplayMetrics().density; 6010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 6110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor setDrawable(); 6210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 6310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 6410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor private void setDrawable() { 6510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor Resources r = getContext().getResources(); 6610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 6710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor switch (mPosition) { 6810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor case LEFT_UPPER: 6910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor case LEFT_MIDDLE: 7010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor case LEFT_LOWER: 7110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor mDrawable = r.getDrawable(R.drawable.msg_bubble_right); 7210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor break; 7310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 7410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor case RIGHT_UPPER: 7510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor case RIGHT_MIDDLE: 7610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor case RIGHT_LOWER: 7710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor mDrawable = r.getDrawable(R.drawable.msg_bubble_left); 7810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor break; 7910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 8010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor// case TOP_LEFT: 8110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor// case TOP_MIDDLE: 8210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor// case TOP_RIGHT: 8310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor// mDrawable = r.getDrawable(R.drawable.msg_bubble_bottom); 8410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor// break; 8510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor// 8610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor// case BOTTOM_LEFT: 8710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor// case BOTTOM_MIDDLE: 8810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor// case BOTTOM_RIGHT: 8910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor// mDrawable = r.getDrawable(R.drawable.msg_bubble_top); 9010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor// break; 9110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 9210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor mDrawableIntrinsicWidth = mDrawable.getIntrinsicWidth(); 9310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor mDrawableIntrinsicHeight = mDrawable.getIntrinsicHeight(); 9410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 9510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 9610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor @Override 9710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor public void onDraw(Canvas c) { 9810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor super.onDraw(c); 9910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor c.save(); 10010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor computeBounds(c); 10110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor mDrawable.draw(c); 10210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor c.restore(); 10310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 10410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 10510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor public void setPosition(int position) { 10610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor mPosition = position; 10710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor setDrawable(); 10810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor invalidate(); 10910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 11010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 11110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor public int getPosition() { 11210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor return mPosition; 11310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 11410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 11510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor public float getCloseOffset() { 11610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor return CORNER_OFFSET * mDensity; // multiply by density to get pixels 11710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 11810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 11910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor public ImageView asImageView() { 12010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor return this; 12110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 12210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 12310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor public void assignContactFromEmail(String emailAddress) { 12410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor assignContactFromEmail(emailAddress, true); 12510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 12610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 12710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor public float getFarOffset() { 12810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor return getCloseOffset() + mDrawableIntrinsicHeight; 12910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 13010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 13110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor private void computeBounds(Canvas c) { 13210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor final int left = 0; 13310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor final int top = 0; 13410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor final int right = getWidth(); 13510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor final int middle = right / 2; 13610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor final int bottom = getHeight(); 13710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 13810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor final int cornerOffset = (int) getCloseOffset(); 13910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 14010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor switch (mPosition) { 14110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor case RIGHT_UPPER: 14210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor mDrawable.setBounds( 14310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor right - mDrawableIntrinsicWidth, 14410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor top + cornerOffset, 14510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor right, 14610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor top + cornerOffset + mDrawableIntrinsicHeight); 14710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor break; 14810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 14910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor case LEFT_UPPER: 15010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor mDrawable.setBounds( 15110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor left, 15210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor top + cornerOffset, 15310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor left + mDrawableIntrinsicWidth, 15410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor top + cornerOffset + mDrawableIntrinsicHeight); 15510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor break; 15610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 15710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor case BOTTOM_MIDDLE: 15810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor int halfWidth = mDrawableIntrinsicWidth / 2; 15910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor mDrawable.setBounds( 16010ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor (int)(middle - halfWidth), 16110ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor (int)(bottom - mDrawableIntrinsicHeight), 16210ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor (int)(middle + halfWidth), 16310ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor (int)(bottom)); 16410ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 16510ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor break; 16610ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 16710ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor } 16810ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor 16910ca1d3969305df50fb07a17f5d23b0ed59f7868Tom Taylor} 170