Merge "Place phonetic name under display name in QuickContact."
diff --git a/res/layout-sw720dp/quickcontact_activity.xml b/res/layout-sw720dp/quickcontact_activity.xml
index efbb4d1..0499b8e 100644
--- a/res/layout-sw720dp/quickcontact_activity.xml
+++ b/res/layout-sw720dp/quickcontact_activity.xml
@@ -71,5 +71,5 @@
<!-- This title's maximum height must be less than the minimum size of its
parent ViewGroup because of an oddity in the way View#setScaleY() works. As a result,
this title can not be inside @style/quickcontact_header. -->
- <include layout="@layout/quickcontact_title" />
+ <include layout="@layout/quickcontact_title_and_phoneticname" />
</com.android.contacts.widget.MultiShrinkScroller>
\ No newline at end of file
diff --git a/res/layout/quickcontact_activity.xml b/res/layout/quickcontact_activity.xml
index 6d94fcc..c3b035d 100644
--- a/res/layout/quickcontact_activity.xml
+++ b/res/layout/quickcontact_activity.xml
@@ -49,6 +49,6 @@
<!-- This title's maximum height must be less than the minimum size of its
parent ViewGroup because of an oddity in the way View#setScaleY() works. As a result,
this title can not be inside @style/quickcontact_header. -->
- <include layout="@layout/quickcontact_title" />
+ <include layout="@layout/quickcontact_title_and_phoneticname" />
</com.android.contacts.widget.MultiShrinkScroller>
\ No newline at end of file
diff --git a/res/layout/quickcontact_activity_landscape.xml b/res/layout/quickcontact_activity_landscape.xml
index 1130ff8..5f3bbc4 100644
--- a/res/layout/quickcontact_activity_landscape.xml
+++ b/res/layout/quickcontact_activity_landscape.xml
@@ -51,7 +51,7 @@
<include layout="@layout/quickcontact_header" />
- <include layout="@layout/quickcontact_title" />
+ <include layout="@layout/quickcontact_title_and_phoneticname" />
</FrameLayout>
diff --git a/res/layout/quickcontact_title.xml b/res/layout/quickcontact_title.xml
deleted file mode 100644
index 3f4886d..0000000
--- a/res/layout/quickcontact_title.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 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.
--->
-
-<!-- The importantForAccessibility is set to "no" since we want the ViewGroup that pretends to be
- this View's parent (contact photo overlay) to provide the content description for Talkback. -->
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="@dimen/quickcontact_title_initial_margin"
- android:layout_marginEnd="@dimen/quickcontact_title_initial_margin"
- android:layout_marginBottom="@dimen/quickcontact_title_initial_margin"
- android:layout_gravity="top|start"
- android:textColor="@color/actionbar_text_color"
- android:maxLines="@integer/quickcontact_title_lines"
- android:textSize="@dimen/quickcontact_maximum_title_size"
- android:textAlignment="viewStart"
- android:ellipsize="end"
- android:importantForAccessibility="no"
- android:id="@+id/large_title"/>
\ No newline at end of file
diff --git a/res/layout/quickcontact_title_and_phoneticname.xml b/res/layout/quickcontact_title_and_phoneticname.xml
new file mode 100644
index 0000000..350c5e9
--- /dev/null
+++ b/res/layout/quickcontact_title_and_phoneticname.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/title_and_phonetic_name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_marginStart="@dimen/quickcontact_title_initial_margin"
+ android:layout_marginEnd="@dimen/quickcontact_title_initial_margin"
+ android:layout_marginBottom="@dimen/quickcontact_title_initial_bottom_margin">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="top|start"
+ android:textColor="@color/actionbar_text_color"
+ android:maxLines="@integer/quickcontact_title_lines"
+ android:textSize="@dimen/quickcontact_maximum_title_size"
+ android:textAlignment="viewStart"
+ android:ellipsize="end"
+ android:importantForAccessibility="no"
+ android:id="@+id/large_title"/>
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/large_title"
+ android:textColor="@color/actionbar_text_color"
+ android:maxLines="@integer/quickcontact_title_lines"
+ android:textSize="@dimen/quickcontact_maximum_phonetic_name_size"
+ android:textAlignment="viewStart"
+ android:ellipsize="end"
+ android:importantForAccessibility="no"
+ android:id="@+id/phonetic_name"/>
+</LinearLayout>
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
index 67b2514..6e87e97 100644
--- a/res/values-sw720dp/dimens.xml
+++ b/res/values-sw720dp/dimens.xml
@@ -22,10 +22,14 @@
<dimen name="contact_picker_contact_list_min_height">650dip</dimen>
<dimen name="list_visible_scrollbar_padding">48dip</dimen>
- <!-- When QC is uncollapsed, the title has this much margin on its left, right and bottom -->
+ <!-- When QC is uncollapsed, the title has this much margin on its left and right -->
<dimen name="quickcontact_title_initial_margin">32dp</dimen>
+ <!-- When QC is uncollapsed, the title has this much margin on its bottom -->
+ <dimen name="quickcontact_title_initial_bottom_margin">0dp</dimen>
<!-- Initial size of QuickContact's title size -->
- <dimen name="quickcontact_maximum_title_size">64dp</dimen>
+ <dimen name="quickcontact_maximum_title_size">56dp</dimen>
+ <!-- Initial size of QuickContact's phonetic name size -->
+ <dimen name="quickcontact_maximum_phonetic_name_size">50dp</dimen>
<!-- Right margin of the floating action button -->
<dimen name="floating_action_button_margin_right">100dp</dimen>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 8b0a07e..c57127f 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -19,9 +19,13 @@
<!-- Initial height of transparent space above QuickContacts -->
<dimen name="quickcontact_starting_empty_height">150dp</dimen>
<!-- Initial size of QuickContact's title size -->
- <dimen name="quickcontact_maximum_title_size">30dp</dimen>
- <!-- When QC is uncollapsed, the title has this much margin on its left, right and bottom -->
+ <dimen name="quickcontact_maximum_title_size">32dp</dimen>
+ <!-- Initial size of QuickContact's phonetic name size -->
+ <dimen name="quickcontact_maximum_phonetic_name_size">28dp</dimen>
+ <!-- When QC is uncollapsed, the title has this much margin on its left and right. -->
<dimen name="quickcontact_title_initial_margin">16dp</dimen>
+ <!-- When QC is uncollapsed, the title has this much margin on its bottom -->
+ <dimen name="quickcontact_title_initial_bottom_margin">8dp</dimen>
<!-- The ratio of width:height for the contact's photo in landscape -->
<item name="quickcontact_landscape_photo_ratio" type="dimen" format="float">0.7</item>
<!-- How far QuickContacts can be dragged and released from the top of the window before we dismiss it. -->
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 26f84a8..64d8aec 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -942,15 +942,16 @@
mPhotoView.setIsBusiness(mContactData.isDisplayNameFromOrganization());
mPhotoSetter.setupContactPhoto(data, mPhotoView);
extractAndApplyTintFromPhotoViewAsynchronously();
- String phoneticName = ContactDisplayUtils.getPhoneticName(this, data);
- String displayName = ContactDisplayUtils.getDisplayName(this, data).toString();
- if (mContactData.getDisplayNameSource() != DisplayNameSources.STRUCTURED_PHONETIC_NAME
- && !TextUtils.isEmpty(phoneticName)) {
- displayName = getResources().getString(
- R.string.quick_contact_display_name_with_phonetic, displayName, phoneticName);
- setHeaderNameText(displayName);
- } else {
- setHeaderNameText(displayName);
+ final String displayName = ContactDisplayUtils.getDisplayName(this, data).toString();
+ setHeaderNameText(displayName);
+ final String phoneticName = ContactDisplayUtils.getPhoneticName(this, data);
+ if (mScroller != null) {
+ if (mContactData.getDisplayNameSource() != DisplayNameSources.STRUCTURED_PHONETIC_NAME
+ && !TextUtils.isEmpty(phoneticName)) {
+ mScroller.setPhoneticName(phoneticName);
+ } else {
+ mScroller.setPhoneticNameGone();
+ }
}
Trace.endSection();
diff --git a/src/com/android/contacts/widget/MultiShrinkScroller.java b/src/com/android/contacts/widget/MultiShrinkScroller.java
index 7c46a86..95f277c 100644
--- a/src/com/android/contacts/widget/MultiShrinkScroller.java
+++ b/src/com/android/contacts/widget/MultiShrinkScroller.java
@@ -108,6 +108,8 @@
private View mTransparentView;
private MultiShrinkScrollerListener mListener;
private TextView mLargeTextView;
+ private TextView mPhoneticNameView;
+ private View mTitleAndPhoneticNameView;
private View mPhotoTouchInterceptOverlay;
/** Contains desired size & vertical offset of the title, once the header is fully compressed */
private TextView mInvisiblePlaceholderTextView;
@@ -289,6 +291,8 @@
mPhotoViewContainer = findViewById(R.id.toolbar_parent);
mTransparentView = findViewById(R.id.transparent_view);
mLargeTextView = (TextView) findViewById(R.id.large_title);
+ mPhoneticNameView = (TextView) findViewById(R.id.phonetic_name);
+ mTitleAndPhoneticNameView = findViewById(R.id.title_and_phonetic_name);
mInvisiblePlaceholderTextView = (TextView) findViewById(R.id.placeholder_textview);
mStartColumn = findViewById(R.id.empty_start_column);
// Touching the empty space should close the card
@@ -339,7 +343,7 @@
mMaximumPortraitHeaderHeight = mIsTwoPanel ? getHeight()
: mPhotoViewContainer.getWidth();
setHeaderHeight(getMaximumScrollableHeaderHeight());
- mMaximumHeaderTextSize = mLargeTextView.getHeight();
+ mMaximumHeaderTextSize = mTitleAndPhoneticNameView.getHeight();
if (mIsTwoPanel) {
mMaximumHeaderHeight = getHeight();
mMinimumHeaderHeight = mMaximumHeaderHeight;
@@ -354,16 +358,19 @@
// Permanently set title width and margin.
final FrameLayout.LayoutParams largeTextLayoutParams
- = (FrameLayout.LayoutParams) mLargeTextView.getLayoutParams();
+ = (FrameLayout.LayoutParams) mTitleAndPhoneticNameView
+ .getLayoutParams();
largeTextLayoutParams.width = photoLayoutParams.width -
largeTextLayoutParams.leftMargin - largeTextLayoutParams.rightMargin;
largeTextLayoutParams.gravity = Gravity.BOTTOM | Gravity.START;
- mLargeTextView.setLayoutParams(largeTextLayoutParams);
+ mTitleAndPhoneticNameView.setLayoutParams(largeTextLayoutParams);
} else {
// Set the width of mLargeTextView as if it was nested inside
// mPhotoViewContainer.
mLargeTextView.setWidth(mPhotoViewContainer.getWidth()
- 2 * mMaximumTitleMargin);
+ mPhoneticNameView.setWidth(mPhotoViewContainer.getWidth()
+ - 2 * mMaximumTitleMargin);
}
calculateCollapsedLargeTitlePadding();
@@ -382,8 +389,8 @@
= (FrameLayout.LayoutParams) mTitleGradientView.getLayoutParams();
final float TITLE_GRADIENT_SIZE_COEFFICIENT = 1.25f;
final FrameLayout.LayoutParams largeTextLayoutParms
- = (FrameLayout.LayoutParams) mLargeTextView.getLayoutParams();
- titleGradientLayoutParams.height = (int) ((mLargeTextView.getHeight()
+ = (FrameLayout.LayoutParams) mTitleAndPhoneticNameView.getLayoutParams();
+ titleGradientLayoutParams.height = (int) ((mTitleAndPhoneticNameView.getHeight()
+ largeTextLayoutParms.bottomMargin) * TITLE_GRADIENT_SIZE_COEFFICIENT);
mTitleGradientView.setLayoutParams(titleGradientLayoutParams);
}
@@ -393,6 +400,20 @@
mPhotoTouchInterceptOverlay.setContentDescription(title);
}
+ public void setPhoneticName(String phoneticName) {
+ mPhoneticNameView.setText(phoneticName);
+ // Every time the phonetic name is changed, set mPhoneticNameView as visible,
+ // in case it just changed from Visibility=GONE.
+ mPhoneticNameView.setVisibility(View.VISIBLE);
+ initialize(mListener, mIsOpenContactSquare);
+ }
+
+ public void setPhoneticNameGone() {
+ mPhoneticNameView.setVisibility(View.GONE);
+ // Initialize to make Visibility work.
+ initialize(mListener, mIsOpenContactSquare);
+ }
+
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (mVelocityTracker == null) {
@@ -993,19 +1014,19 @@
// The pivot point for scaling should be middle of the starting side.
if (getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
- mLargeTextView.setPivotX(mLargeTextView.getWidth());
+ mTitleAndPhoneticNameView.setPivotX(mTitleAndPhoneticNameView.getWidth());
} else {
- mLargeTextView.setPivotX(0);
+ mTitleAndPhoneticNameView.setPivotX(0);
}
- mLargeTextView.setPivotY(mLargeTextView.getHeight() / 2);
+ mTitleAndPhoneticNameView.setPivotY(mTitleAndPhoneticNameView.getHeight() / 2);
final int toolbarHeight = mToolbar.getLayoutParams().height;
mPhotoTouchInterceptOverlay.setClickable(toolbarHeight != mMaximumHeaderHeight);
if (toolbarHeight >= mMaximumHeaderHeight) {
// Everything is full size when the header is fully expanded.
- mLargeTextView.setScaleX(1);
- mLargeTextView.setScaleY(1);
+ mTitleAndPhoneticNameView.setScaleX(1);
+ mTitleAndPhoneticNameView.setScaleY(1);
setInterpolatedTitleMargins(1);
return;
}
@@ -1022,13 +1043,13 @@
bezierOutput = (float) Math.min(bezierOutput, 1.0f);
scale = (float) Math.min(scale, 1.0f);
- mLargeTextView.setScaleX(scale);
- mLargeTextView.setScaleY(scale);
+ mTitleAndPhoneticNameView.setScaleX(scale);
+ mTitleAndPhoneticNameView.setScaleY(scale);
setInterpolatedTitleMargins(bezierOutput);
}
/**
- * Calculate the padding around mLargeTextView so that it will look appropriate once it
+ * Calculate the padding around mTitleAndPhoneticNameView so that it will look appropriate once it
* finishes moving into its target location/size.
*/
private void calculateCollapsedLargeTitlePadding() {
@@ -1040,9 +1061,10 @@
final int desiredTopToCenter = invisiblePlaceHolderLocation[1]
+ mInvisiblePlaceholderTextView.getHeight() / 2
- largeTextViewRectLocation[1];
- // Padding needed on the mLargeTextView so that it has the same amount of
+ // Padding needed on the mTitleAndPhoneticNameView so that it has the same amount of
// padding as the target rectangle.
- mCollapsedTitleBottomMargin = desiredTopToCenter - mLargeTextView.getHeight() / 2;
+ mCollapsedTitleBottomMargin =
+ desiredTopToCenter - mTitleAndPhoneticNameView.getHeight() / 2;
}
/**
@@ -1051,7 +1073,7 @@
*/
private void setInterpolatedTitleMargins(float x) {
final FrameLayout.LayoutParams titleLayoutParams
- = (FrameLayout.LayoutParams) mLargeTextView.getLayoutParams();
+ = (FrameLayout.LayoutParams) mTitleAndPhoneticNameView.getLayoutParams();
final LinearLayout.LayoutParams toolbarLayoutParams
= (LinearLayout.LayoutParams) mToolbar.getLayoutParams();
@@ -1064,14 +1086,14 @@
final int pretendBottomMargin = (int) (mCollapsedTitleBottomMargin * (1 - x)
+ mMaximumTitleMargin * x) ;
// Calculate how offset the title should be from the top of the screen. Instead of
- // calling mLargeTextView.getHeight() use the mMaximumHeaderTextSize for this calculation.
- // The getHeight() value acts unexpectedly when mLargeTextView is partially clipped by
- // its parent.
+ // calling mTitleAndPhoneticNameView.getHeight() use the mMaximumHeaderTextSize for this
+ // calculation. The getHeight() value acts unexpectedly when mTitleAndPhoneticNameView is
+ // partially clipped by its parent.
titleLayoutParams.topMargin = getTransparentViewHeight()
+ toolbarLayoutParams.height - pretendBottomMargin
- mMaximumHeaderTextSize;
titleLayoutParams.bottomMargin = 0;
- mLargeTextView.setLayoutParams(titleLayoutParams);
+ mTitleAndPhoneticNameView.setLayoutParams(titleLayoutParams);
}
private void updatePhotoTintAndDropShadow() {