From 6e765f9a71b450809c4916a5d5562cdc1372a39a Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Wed, 21 May 2014 18:05:56 -0700 Subject: Tidy up call log shadow/touch interactions. - Constrain the recents list footer ripple to its dimensions. - Eliminate bottom margin on the call log list items. - Changed translationZ on expand to apply to the call log list item instead of just its primary action view. - Adjust the outline clipping so that a shadow doesn't appear under the day group header, now that the translation is applied to the entire list item. - Instantiated a number of fixed property values in onCreate() in the CallLogFragment, instead of whenever they're needed. Bug: 15165669 Change-Id: I5ed81ae49fb0c3f6eed360f247c1fd67278a628c --- res/drawable/call_log_background.xml | 4 +- res/drawable/recent_lists_footer_background.xml | 23 +++++++++ res/layout/call_log_fragment.xml | 1 - res/layout/call_log_list_item.xml | 23 ++++----- res/layout/recents_list_footer.xml | 2 +- res/values/dimens.xml | 6 +-- src/com/android/dialer/calllog/CallLogAdapter.java | 4 +- .../android/dialer/calllog/CallLogFragment.java | 55 ++++++++++++++-------- 8 files changed, 76 insertions(+), 42 deletions(-) create mode 100644 res/drawable/recent_lists_footer_background.xml diff --git a/res/drawable/call_log_background.xml b/res/drawable/call_log_background.xml index c0c488902..4857fb54a 100644 --- a/res/drawable/call_log_background.xml +++ b/res/drawable/call_log_background.xml @@ -15,5 +15,5 @@ limitations under the License. --> + android:tint="?android:attr/colorControlHighlight" + android:pinned="false" /> \ No newline at end of file diff --git a/res/drawable/recent_lists_footer_background.xml b/res/drawable/recent_lists_footer_background.xml new file mode 100644 index 000000000..fccce7b7d --- /dev/null +++ b/res/drawable/recent_lists_footer_background.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/res/layout/call_log_fragment.xml b/res/layout/call_log_fragment.xml index 7b6aa28bc..fb7ed2a16 100644 --- a/res/layout/call_log_fragment.xml +++ b/res/layout/call_log_fragment.xml @@ -71,7 +71,6 @@ android:background="@color/background_dialer_list_items" android:divider="@null" android:nestedScrollingEnabled="true" - android:clipChildren="false" /> - + android:background="@color/background_dialer_list_items" > + + + android:gravity="center_vertical" > + android:nextFocusLeft="@+id/quick_contact_photo" > + android:background="@drawable/recent_lists_footer_background" /> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 6d7aa84fb..f399e368e 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -30,7 +30,7 @@ 54dp 4dip 8dip - 8dip + 8dp 24dip 56dip 40dip @@ -130,8 +130,8 @@ 14sp 48dp - - 4dp + + 4dp 16dp diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java index 66c4d03f3..12d5531fd 100644 --- a/src/com/android/dialer/calllog/CallLogAdapter.java +++ b/src/com/android/dialer/calllog/CallLogAdapter.java @@ -865,8 +865,8 @@ public class CallLogAdapter extends GroupingListAdapter views.actionsView.setAlpha(1.0f); views.callLogEntryView.setBackgroundColor( callLogItem.getResources().getColor(R.color.background_dialer_light)); - views.callLogEntryView.setElevation( - callLogItem.getResources().getDimension(R.dimen.call_log_expanded_elevation)); + views.callLogEntryView.setTranslationZ(callLogItem.getResources().getDimension( + R.dimen.call_log_expanded_translation_z)); // Attempt to give accessibility focus to one of the action buttons. // This ensures that a user realizes the expansion occurred. diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java index 232aa3992..240de8531 100644 --- a/src/com/android/dialer/calllog/CallLogFragment.java +++ b/src/com/android/dialer/calllog/CallLogFragment.java @@ -26,6 +26,7 @@ import android.content.Context; import android.content.Intent; import android.database.ContentObserver; import android.database.Cursor; +import android.graphics.Outline; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -94,7 +95,11 @@ public class CallLogFragment extends ListFragment private boolean mCallLogFetched; private boolean mVoicemailStatusFetched; - private float mExpandedItemElevation; + private float mExpandedItemTranslationZ; + private int mFadeInDuration; + private int mFadeInStartDelay; + private int mFadeOutDuration; + private int mExpandCollapseDuration; private final Handler mHandler = new Handler(); @@ -195,7 +200,13 @@ public class CallLogFragment extends ListFragment setHasOptionsMenu(true); updateCallList(mCallTypeFilter, mDateLimit); - mExpandedItemElevation = getResources().getDimension(R.dimen.call_log_expanded_elevation); + mExpandedItemTranslationZ = + getResources().getDimension(R.dimen.call_log_expanded_translation_z); + mFadeInDuration = getResources().getInteger(R.integer.call_log_actions_fade_in_duration); + mFadeInStartDelay = getResources().getInteger(R.integer.call_log_actions_fade_start); + mFadeOutDuration = getResources().getInteger(R.integer.call_log_actions_fade_out_duration); + mExpandCollapseDuration = getResources().getInteger( + R.integer.call_log_expand_collapse_duration); } /** Called by the CallLogQueryHandler when the list of calls has been fetched or updated. */ @@ -578,27 +589,36 @@ public class CallLogFragment extends ListFragment viewHolder.actionsView.setVisibility(View.VISIBLE); } + // If the day group header is shown, subtract the header from the outline of the + // view. The outline is used for generating the shadow of the view, but we only want + // a shadow on the call log list item and not the header. This is a slight hack, but + // the hierarchy of the call log list items makes it hard to achieve the desired + // shadow behavior otherwise. + if (viewHolder.dayGroupHeader.isShown()) { + Outline outline = new Outline(); + outline.setRect( + 0 /* left */, + viewHolder.dayGroupHeader.getHeight() /* top */, + view.getWidth() /* right */, + view.getHeight() /* bottom */); + view.setOutline(outline); + } + // Set up the fade effect for the action buttons. if (isExpand) { - int fadeDuration = getResources().getInteger( - R.integer.call_log_actions_fade_in_duration); - int startDelay = getResources().getInteger( - R.integer.call_log_actions_fade_start); // Start the fade in after the expansion has partly completed, otherwise it // will be mostly over before the expansion completes. viewHolder.actionsView.setAlpha(0f); viewHolder.actionsView.animate() .alpha(1f) - .setStartDelay(startDelay) - .setDuration(fadeDuration) + .setStartDelay(mFadeInStartDelay) + .setDuration(mFadeInDuration) .start(); } else { - int fadeDuration = getResources().getInteger( - R.integer.call_log_actions_fade_out_duration); viewHolder.actionsView.setAlpha(1f); viewHolder.actionsView.animate() .alpha(0f) - .setDuration(fadeDuration) + .setDuration(mFadeOutDuration) .start(); } view.requestLayout(); @@ -613,10 +633,8 @@ public class CallLogFragment extends ListFragment Float value = (Float) animator.getAnimatedValue(); // For each value from 0 to 1, animate the various parts of the layout. - view.getLayoutParams().height = - (int) (value * distance + baseHeight); - viewHolder.callLogEntryView - .setElevation(mExpandedItemElevation * value); + view.getLayoutParams().height = (int) (value * distance + baseHeight); + view.setTranslationZ(mExpandedItemTranslationZ * value); view.requestLayout(); } }); @@ -632,17 +650,14 @@ public class CallLogFragment extends ListFragment } @Override - public void onAnimationCancel(Animator animation) {} + public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } @Override public void onAnimationStart(Animator animation) { } }); - final int expandCollapseDuration = getResources().getInteger( - R.integer.call_log_expand_collapse_duration); - - animator.setDuration(expandCollapseDuration); + animator.setDuration(mExpandCollapseDuration); animator.start(); // Return false so this draw does not occur to prevent the final frame from -- cgit v1.2.3