Merge change 9513 into eclair-dev
* changes:
Delta parceling, valid types bugfix, INSERT parsing.
diff --git a/res/drawable-finger/contact_picture_bg.9.png b/res/drawable-finger/contact_picture_bg.9.png
deleted file mode 100644
index ae9c709..0000000
--- a/res/drawable-finger/contact_picture_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/contact_header_bg.9.png b/res/drawable/contact_header_bg.9.png
deleted file mode 100644
index 7f9a5a3..0000000
--- a/res/drawable/contact_header_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/layout-finger/contact_card_layout.xml b/res/layout-finger/contact_card_layout.xml
index ee2fcf8..d32ce6f 100644
--- a/res/layout-finger/contact_card_layout.xml
+++ b/res/layout-finger/contact_card_layout.xml
@@ -20,45 +20,10 @@
android:layout_width="fill_parent"
android:layout_height="fill_parent">
- <LinearLayout android:id="@+id/banner"
+ <com.android.internal.widget.ContactHeaderWidget
+ android:id="@+id/contact_header_widget"
android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:background="@drawable/contact_header_bg"
- android:paddingRight="5dip"
- android:gravity="center_vertical">
-
- <ImageView android:id="@+id/photo"
- android:layout_width="64dip"
- android:layout_height="64dip"
- android:layout_marginRight="7dip"
- android:layout_marginLeft="2dip"
- android:scaleType="fitCenter"
- android:background="@drawable/contact_picture_bg"/>
-
- <LinearLayout
- android:layout_width="0dip"
- android:layout_height="fill_parent"
- android:layout_weight="1"
- android:orientation="vertical">
-
- <!-- "Name" field is locale-specific. -->
- <include layout="@layout/view_contact_name"/>
-
- <TextView android:id="@+id/status"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:maxLines="2"/>
-
- </LinearLayout>
-
- <CheckBox android:id="@+id/star"
- style="?android:attr/starStyle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
-
- </LinearLayout>
+ android:layout_height="wrap_content"/>
<com.android.contacts.ScrollingTabWidget android:id="@+id/tab_widget"
android:layout_width="fill_parent"
diff --git a/res/layout-finger/view_contact_name.xml b/res/layout-finger/view_contact_name.xml
deleted file mode 100644
index aec943e..0000000
--- a/res/layout-finger/view_contact_name.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- In the default locale, the "Name" field is a single TextView -->
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/name"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceLargeInverse"
- android:textColor="@android:color/secondary_text_light"
- android:maxLines="2"
- android:ellipsize="end"
- />
diff --git a/res/layout-ja-finger/view_contact_name.xml b/res/layout-ja-finger/view_contact_name.xml
deleted file mode 100644
index 03332b1..0000000
--- a/res/layout-ja-finger/view_contact_name.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- In Japanese-language locales, the "Name" field contains two separate
- TextViews: the name itself, and also the phonetic ("furigana") field. -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="wrap_content">
-
- <TextView android:id="@+id/name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceLargeInverse"
- android:textColor="@android:color/secondary_text_light"
- />
-
- <TextView android:id="@+id/phonetic_name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmallInverse"
- android:textColor="@android:color/secondary_text_light"
- />
-
-</LinearLayout>
diff --git a/src/com/android/contacts/BaseContactCardActivity.java b/src/com/android/contacts/BaseContactCardActivity.java
index d6ed5fd..7d9b880 100644
--- a/src/com/android/contacts/BaseContactCardActivity.java
+++ b/src/com/android/contacts/BaseContactCardActivity.java
@@ -18,6 +18,7 @@
import com.android.contacts.ScrollingTabWidget.OnTabSelectionChangedListener;
import com.android.contacts.NotifyingAsyncQueryHandler.QueryCompleteListener;
+import com.android.internal.widget.ContactHeaderWidget;
import android.app.Activity;
import android.content.ContentUris;
@@ -47,22 +48,15 @@
* The base Activity class for viewing and editing a contact.
*/
public abstract class BaseContactCardActivity extends Activity
- implements QueryCompleteListener, OnTabSelectionChangedListener, View.OnClickListener {
+ implements QueryCompleteListener, OnTabSelectionChangedListener {
private static final String TAG = "BaseContactCardActivity";
private SparseArray<Long> mTabRawContactIdMap;
protected Uri mUri;
- protected long mContactId;
protected ScrollingTabWidget mTabWidget;
+ protected ContactHeaderWidget mContactHeaderWidget;
private NotifyingAsyncQueryHandler mHandler;
- private TextView mDisplayNameView;
- private TextView mPhoneticNameView;
- private CheckBox mStarredView;
- private ImageView mPhotoView;
- private TextView mStatusView;
-
- private int mNoPhotoResource;
protected LayoutInflater mInflater;
@@ -76,29 +70,7 @@
protected static final int TAB_ACCOUNT_NAME_COLUMN_INDEX = 1;
protected static final int TAB_ACCOUNT_TYPE_COLUMN_INDEX = 2;
- //Projection used for the summary info in the header.
- protected static final String[] HEADER_PROJECTION = new String[] {
- Contacts.DISPLAY_NAME,
- Contacts.STARRED,
- Contacts.PHOTO_ID,
- };
- protected static final int HEADER_DISPLAY_NAME_COLUMN_INDEX = 0;
- //TODO: We need to figure out how we're going to get the phonetic name.
- //static final int HEADER_PHONETIC_NAME_COLUMN_INDEX
- protected static final int HEADER_STARRED_COLUMN_INDEX = 1;
- protected static final int HEADER_PHOTO_ID_COLUMN_INDEX = 2;
-
- //Projection used for finding the most recent social status.
- protected static final String[] SOCIAL_PROJECTION = new String[] {
- Activities.TITLE,
- Activities.PUBLISHED,
- };
- protected static final int SOCIAL_TITLE_COLUMN_INDEX = 0;
- protected static final int SOCIAL_PUBLISHED_COLUMN_INDEX = 1;
-
- private static final int TOKEN_HEADER = 0;
- private static final int TOKEN_SOCIAL = 1;
- private static final int TOKEN_TABS = 2;
+ private static final int TOKEN_TABS = 0;
@Override
protected void onCreate(Bundle icicle) {
@@ -108,50 +80,21 @@
final Intent intent = getIntent();
mUri = intent.getData();
- mContactId = ContentUris.parseId(mUri);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.contact_card_layout);
+ mContactHeaderWidget = (ContactHeaderWidget) findViewById(R.id.contact_header_widget);
+ mContactHeaderWidget.showStar(true);
+ mContactHeaderWidget.bindFromContactId(ContentUris.parseId(mUri));
mTabWidget = (ScrollingTabWidget) findViewById(R.id.tab_widget);
- mDisplayNameView = (TextView) findViewById(R.id.name);
- mPhoneticNameView = (TextView) findViewById(R.id.phonetic_name);
- mStarredView = (CheckBox) findViewById(R.id.star);
- mStarredView.setOnClickListener(this);
- mPhotoView = (ImageView) findViewById(R.id.photo);
- mStatusView = (TextView) findViewById(R.id.status);
mTabWidget.setTabSelectionListener(this);
mTabRawContactIdMap = new SparseArray<Long>();
- // Set the photo with a random "no contact" image
- long now = SystemClock.elapsedRealtime();
- int num = (int) now & 0xf;
- if (num < 9) {
- // Leaning in from right, common
- mNoPhotoResource = R.drawable.ic_contact_picture;
- } else if (num < 14) {
- // Leaning in from left uncommon
- mNoPhotoResource = R.drawable.ic_contact_picture_2;
- } else {
- // Coming in from the top, rare
- mNoPhotoResource = R.drawable.ic_contact_picture_3;
- }
-
mHandler = new NotifyingAsyncQueryHandler(this, this);
setupTabs();
- setupHeader();
- }
-
- private void setupHeader() {
- Uri headerUri = Uri.withAppendedPath(mUri, "data");
-
- Uri socialUri = ContentUris.withAppendedId(
- SocialContract.Activities.CONTENT_CONTACT_STATUS_URI, mContactId);
-
- mHandler.startQuery(TOKEN_HEADER, null, headerUri, HEADER_PROJECTION, null, null, null);
- mHandler.startQuery(TOKEN_SOCIAL, null, socialUri, SOCIAL_PROJECTION, null, null, null);
}
private void setupTabs() {
@@ -171,20 +114,15 @@
/** {@inheritDoc} */
public void onQueryComplete(int token, Object cookie, Cursor cursor) {
- if (cursor == null) {
- return;
- }
try{
- if (token == TOKEN_HEADER) {
- bindHeader(cursor);
- } else if (token == TOKEN_SOCIAL) {
- bindSocial(cursor);
- } else if (token == TOKEN_TABS) {
+ if (token == TOKEN_TABS) {
clearCurrentTabs();
bindTabs(cursor);
}
} finally {
- cursor.close();
+ if (cursor != null) {
+ cursor.close();
+ }
}
}
@@ -210,69 +148,6 @@
}
- //TODO: This will be part of the ContactHeaderWidget eventually.
- protected void bindHeader(Cursor c) {
- if (c == null) {
- return;
- }
- if (c.moveToFirst()) {
- //Set name
- String displayName = c.getString(HEADER_DISPLAY_NAME_COLUMN_INDEX);
- Log.i(TAG, displayName);
- mDisplayNameView.setText(displayName);
- //TODO: Bring back phonetic name
- /*if (mPhoneticNameView != null) {
- String phoneticName = c.getString(CONTACT_PHONETIC_NAME_COLUMN);
- mPhoneticNameView.setText(phoneticName);
- }*/
-
- //Set starred
- boolean starred = c.getInt(HEADER_STARRED_COLUMN_INDEX) == 1;
- mStarredView.setChecked(starred);
-
- //Set the photo
- long photoId = c.getLong(HEADER_PHOTO_ID_COLUMN_INDEX);
- Bitmap photoBitmap = ContactsUtils.loadContactPhoto(
- this, photoId, null);
- if (photoBitmap == null) {
- photoBitmap = ContactsUtils.loadPlaceholderPhoto(mNoPhotoResource, this, null);
- }
- mPhotoView.setImageBitmap(photoBitmap);
- }
- }
-
- //TODO: This will be part of the ContactHeaderWidget eventually.
- protected void bindSocial(Cursor c) {
- if (c == null) {
- return;
- }
- if (c.moveToFirst()) {
- String status = c.getString(SOCIAL_TITLE_COLUMN_INDEX);
- mStatusView.setText(status);
- }
- }
-
- //TODO: This will be part of the ContactHeaderWidget eventually.
- public void onClick(View view) {
- switch (view.getId()) {
- case R.id.star: {
- Uri uri = Uri.withAppendedPath(mUri, "data");
- Cursor c = getContentResolver().query(uri, HEADER_PROJECTION, null, null, null);
- try {
- c.moveToFirst();
- int oldStarredState = c.getInt(HEADER_STARRED_COLUMN_INDEX);
- ContentValues values = new ContentValues(1);
- values.put(Contacts.STARRED, oldStarredState == 1 ? 0 : 1);
- getContentResolver().update(mUri, values, null, null);
- } finally {
- c.close();
- }
- setupHeader();
- break;
- }
- }
- }
-
/**
* Add a tab to be displayed in the {@link ScrollingTabWidget}.
*