Merge "Simplify vCard implementation."
diff --git a/src/com/android/contacts/quickcontact/QuickContactWindow.java b/src/com/android/contacts/quickcontact/QuickContactWindow.java
index 406c914..d7a03c4 100644
--- a/src/com/android/contacts/quickcontact/QuickContactWindow.java
+++ b/src/com/android/contacts/quickcontact/QuickContactWindow.java
@@ -57,7 +57,6 @@
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.QuickContact;
import android.provider.ContactsContract.RawContacts;
-import android.provider.ContactsContract.StatusUpdates;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
@@ -137,9 +136,8 @@
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
mQuickContactWindow.onBackPressed();
return true;
- } else {
- return super.dispatchKeyEventPreIme(event);
}
+ return super.dispatchKeyEventPreIme(event);
}
}
@@ -302,6 +300,7 @@
// Prepare track entrance animation
mTrackAnim = AnimationUtils.loadAnimation(mContext, R.anim.quickcontact);
mTrackAnim.setInterpolator(new Interpolator() {
+ @Override
public float getInterpolation(float t) {
// Pushes past the target area, then snaps back into place.
// Equation for graphing: 1.2-((x*1.6)-1.1)^2
@@ -507,6 +506,7 @@
}
/** {@inheritDoc} */
+ @Override
public void onGlobalLayout() {
layoutInScreen();
}
@@ -614,6 +614,7 @@
}
/** {@inheritDoc} */
+ @Override
public synchronized void onQueryComplete(int token, Object cookie, Cursor cursor) {
// Bail early when query is stale
if (cookie != mLookupUri) return;
@@ -657,32 +658,6 @@
}
}
- /**
- * Find the QuickContact-specific presence icon for showing in chiclets.
- */
- private Drawable getTrackPresenceIcon(int status) {
- int resId;
- switch (status) {
- case StatusUpdates.AVAILABLE:
- resId = R.drawable.quickcontact_slider_presence_active;
- break;
- case StatusUpdates.IDLE:
- case StatusUpdates.AWAY:
- resId = R.drawable.quickcontact_slider_presence_away;
- break;
- case StatusUpdates.DO_NOT_DISTURB:
- resId = R.drawable.quickcontact_slider_presence_busy;
- break;
- case StatusUpdates.INVISIBLE:
- resId = R.drawable.quickcontact_slider_presence_inactive;
- break;
- case StatusUpdates.OFFLINE:
- default:
- resId = R.drawable.quickcontact_slider_presence_inactive;
- }
- return mContext.getResources().getDrawable(resId);
- }
-
/** Read {@link String} from the given {@link Cursor}. */
private static String getAsString(Cursor cursor, String columnName) {
final int index = cursor.getColumnIndex(columnName);
@@ -863,31 +838,37 @@
}
/** {@inheritDoc} */
+ @Override
public CharSequence getHeader() {
return mHeader;
}
/** {@inheritDoc} */
+ @Override
public CharSequence getBody() {
return mBody;
}
/** {@inheritDoc} */
+ @Override
public String getMimeType() {
return mMimeType;
}
/** {@inheritDoc} */
+ @Override
public Uri getDataUri() {
return mDataUri;
}
/** {@inheritDoc} */
+ @Override
public Boolean isPrimary() {
return mIsPrimary;
}
/** {@inheritDoc} */
+ @Override
public Drawable getFallbackIcon() {
// Bail early if no valid resources
final String resPackageName = mKind.resPackageName;
@@ -904,11 +885,13 @@
}
/** {@inheritDoc} */
+ @Override
public Intent getIntent() {
return mIntent;
}
/** {@inheritDoc} */
+ @Override
public boolean collapseWith(Action other) {
if (!shouldCollapseWith(other)) {
return false;
@@ -917,6 +900,7 @@
}
/** {@inheritDoc} */
+ @Override
public boolean shouldCollapseWith(Action t) {
if (t == null) {
return false;
@@ -955,26 +939,31 @@
}
/** {@inheritDoc} */
+ @Override
public CharSequence getHeader() {
return null;
}
/** {@inheritDoc} */
+ @Override
public CharSequence getBody() {
return null;
}
/** {@inheritDoc} */
+ @Override
public String getMimeType() {
return Contacts.CONTENT_ITEM_TYPE;
}
/** {@inheritDoc} */
+ @Override
public Drawable getFallbackIcon() {
return mContext.getResources().getDrawable(R.drawable.ic_contacts_details);
}
/** {@inheritDoc} */
+ @Override
public Intent getIntent() {
final Intent intent = new Intent(Intent.ACTION_VIEW, mLookupUri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
@@ -982,21 +971,25 @@
}
/** {@inheritDoc} */
+ @Override
public Boolean isPrimary() {
return null;
}
/** {@inheritDoc} */
+ @Override
public Uri getDataUri() {
return null;
}
/** {@inheritDoc} */
+ @Override
public boolean collapseWith(Action t) {
return false; // Never dup.
}
/** {@inheritDoc} */
+ @Override
public boolean shouldCollapseWith(Action t) {
return false; // Never dup.
}
@@ -1397,6 +1390,7 @@
}
/** {@inheritDoc} */
+ @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Pass list item clicks along so that Intents are handled uniformly
onClick(view);
@@ -1438,6 +1432,7 @@
}
/** {@inheritDoc} */
+ @Override
public void onClick(View view) {
final boolean isActionView = (view instanceof CheckableImageView);
final CheckableImageView actionView = isActionView ? (CheckableImageView)view : null;
@@ -1475,35 +1470,36 @@
mResolveList.setOnItemClickListener(this);
mResolveList.setAdapter(new BaseAdapter() {
+ @Override
public int getCount() {
return children.size();
}
+ @Override
public Object getItem(int position) {
return children.get(position);
}
+ @Override
public long getItemId(int position) {
return position;
}
+ @Override
public View getView(int position, View convertView, ViewGroup parent) {
- if (convertView == null) {
- convertView = mInflater.inflate(
- R.layout.quickcontact_resolve_item, parent, false);
- }
-
+ final View result = convertView != null ? convertView : mInflater.inflate(
+ R.layout.quickcontact_resolve_item, parent, false);
// Set action title based on summary value
final Action action = (Action)getItem(position);
- TextView text1 = (TextView)convertView.findViewById(android.R.id.text1);
- TextView text2 = (TextView)convertView.findViewById(android.R.id.text2);
+ TextView text1 = (TextView)result.findViewById(android.R.id.text1);
+ TextView text2 = (TextView)result.findViewById(android.R.id.text2);
text1.setText(action.getHeader());
text2.setText(action.getBody());
- convertView.setTag(action);
- return convertView;
+ result.setTag(action);
+ return result;
}
});
@@ -1514,6 +1510,7 @@
}
}
+ @Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mMakePrimary = isChecked;
}
@@ -1531,6 +1528,7 @@
}
/** {@inheritDoc} */
+ @Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (mWindow.superDispatchKeyEvent(event)) {
return true;
@@ -1540,6 +1538,7 @@
}
/** {@inheritDoc} */
+ @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
event.startTracking();
@@ -1550,6 +1549,7 @@
}
/** {@inheritDoc} */
+ @Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
&& !event.isCanceled()) {
@@ -1561,16 +1561,19 @@
}
/** {@inheritDoc} */
+ @Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
return false;
}
/** {@inheritDoc} */
+ @Override
public boolean onKeyMultiple(int keyCode, int count, KeyEvent event) {
return false;
}
/** {@inheritDoc} */
+ @Override
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
// TODO: make this window accessible
return false;
@@ -1595,60 +1598,70 @@
}
/** {@inheritDoc} */
+ @Override
public boolean dispatchTouchEvent(MotionEvent event) {
detectEventOutside(event);
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
dismiss();
return true;
- } else {
- return mWindow.superDispatchTouchEvent(event);
}
+ return mWindow.superDispatchTouchEvent(event);
}
/** {@inheritDoc} */
+ @Override
public boolean dispatchTrackballEvent(MotionEvent event) {
return mWindow.superDispatchTrackballEvent(event);
}
/** {@inheritDoc} */
+ @Override
public void onContentChanged() {
}
/** {@inheritDoc} */
+ @Override
public boolean onCreatePanelMenu(int featureId, Menu menu) {
return false;
}
/** {@inheritDoc} */
+ @Override
public View onCreatePanelView(int featureId) {
return null;
}
/** {@inheritDoc} */
+ @Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
return false;
}
/** {@inheritDoc} */
+ @Override
public boolean onMenuOpened(int featureId, Menu menu) {
return false;
}
/** {@inheritDoc} */
+ @Override
public void onPanelClosed(int featureId, Menu menu) {
}
/** {@inheritDoc} */
+ @Override
public boolean onPreparePanel(int featureId, View view, Menu menu) {
return false;
}
/** {@inheritDoc} */
+ @Override
public boolean onSearchRequested() {
return false;
}
/** {@inheritDoc} */
+ @Override
public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams attrs) {
if (mDecor != null) {
mWindowManager.updateViewLayout(mDecor, attrs);
@@ -1656,27 +1669,33 @@
}
/** {@inheritDoc} */
+ @Override
public void onWindowFocusChanged(boolean hasFocus) {
}
/** {@inheritDoc} */
+ @Override
public void onAttachedToWindow() {
// No actions
}
/** {@inheritDoc} */
+ @Override
public void onDetachedFromWindow() {
// No actions
}
/** {@inheritDoc} */
+ @Override
public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {
return null;
}
+ @Override
public void onActionModeStarted(ActionMode mode) {
}
+ @Override
public void onActionModeFinished(ActionMode mode) {
}
diff --git a/src/com/android/contacts/widget/InterpolatingLayout.java b/src/com/android/contacts/widget/InterpolatingLayout.java
index 012e5a2..5900bf1 100644
--- a/src/com/android/contacts/widget/InterpolatingLayout.java
+++ b/src/com/android/contacts/widget/InterpolatingLayout.java
@@ -20,9 +20,12 @@
import android.content.Context;
import android.content.res.TypedArray;
+import android.graphics.Rect;
import android.util.AttributeSet;
+import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.LinearLayout;
/**
* Layout similar to LinearLayout that allows a child to specify examples of
@@ -35,6 +38,9 @@
*/
public class InterpolatingLayout extends ViewGroup {
+ private Rect mInRect = new Rect();
+ private Rect mOutRect = new Rect();
+
public InterpolatingLayout(Context context) {
super(context);
}
@@ -47,7 +53,7 @@
super(context, attrs, defStyle);
}
- public final static class LayoutParams extends ViewGroup.MarginLayoutParams {
+ public final static class LayoutParams extends LinearLayout.LayoutParams {
public int narrowParentWidth;
public int narrowWidth;
@@ -156,8 +162,8 @@
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- int mode = MeasureSpec.getMode(widthMeasureSpec);
- int parentSize = MeasureSpec.getSize(widthMeasureSpec);
+ int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
+ int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
int width = 0;
int height = 0;
@@ -171,7 +177,6 @@
}
LayoutParams params = (LayoutParams) child.getLayoutParams();
-
if (params.width == LayoutParams.MATCH_PARENT) {
if (fillChild != null) {
throw new RuntimeException(
@@ -180,20 +185,43 @@
}
fillChild = child;
} else {
- int childWidth = params.resolveWidth(parentSize);
- int childMeasureSpec = (childWidth == LayoutParams.WRAP_CONTENT)
- ? MeasureSpec.UNSPECIFIED
- : MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY);
- child.measure(childMeasureSpec, heightMeasureSpec);
+ int childWidth = params.resolveWidth(parentWidth);
+ int childWidthMeasureSpec;
+ switch (childWidth) {
+ case LayoutParams.WRAP_CONTENT:
+ childWidthMeasureSpec = MeasureSpec.UNSPECIFIED;
+ break;
+ default:
+ childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(
+ childWidth, MeasureSpec.EXACTLY);
+ break;
+ }
+
+ int childHeightMeasureSpec;
+ switch (params.height) {
+ case LayoutParams.WRAP_CONTENT:
+ childHeightMeasureSpec = MeasureSpec.UNSPECIFIED;
+ break;
+ case LayoutParams.MATCH_PARENT:
+ childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(
+ parentHeight, MeasureSpec.EXACTLY);
+ break;
+ default:
+ childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(
+ params.height, MeasureSpec.EXACTLY);
+ break;
+ }
+
+ child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
width += child.getMeasuredWidth();
height = Math.max(child.getMeasuredHeight(), height);
}
- width += params.resolveLeftMargin(parentSize) + params.resolveRightMargin(parentSize);
+ width += params.resolveLeftMargin(parentWidth) + params.resolveRightMargin(parentWidth);
}
if (fillChild != null) {
- int remainder = parentSize - width;
+ int remainder = parentWidth - width;
int childMeasureSpec = remainder > 0
? MeasureSpec.makeMeasureSpec(remainder, MeasureSpec.EXACTLY)
: MeasureSpec.UNSPECIFIED;
@@ -210,18 +238,28 @@
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
int offset = 0;
int width = right - left;
- int height = bottom - top;
int count = getChildCount();
for (int i = 0; i < count; i++) {
View child = getChildAt(i);
LayoutParams params = (LayoutParams) child.getLayoutParams();
- offset += params.resolveLeftMargin(width);
- int childWidth = child.getMeasuredWidth();
- int childTop = params.topMargin;
- child.layout(offset, params.topMargin, offset + childWidth,
- params.topMargin + child.getMeasuredHeight());
- offset += childWidth + params.resolveRightMargin(width);
+ int gravity = params.gravity;
+ if (gravity == -1) {
+ gravity = Gravity.LEFT | Gravity.TOP;
+ }
+
+ int leftMargin = params.resolveLeftMargin(width);
+ int rightMargin = params.resolveRightMargin(width);
+
+ mInRect.set(offset + leftMargin, params.topMargin,
+ right - left - offset - rightMargin,
+ bottom - top - params.bottomMargin);
+
+ Gravity.apply(gravity, child.getMeasuredWidth(), child.getMeasuredHeight(),
+ mInRect, mOutRect);
+ child.layout(mOutRect.left, mOutRect.top, mOutRect.right, mOutRect.bottom);
+
+ offset = mOutRect.right + rightMargin;
}
}
}