diff options
author | Andrew Lee <anwlee@google.com> | 2014-05-21 18:05:56 -0700 |
---|---|---|
committer | Andrew Lee <anwlee@google.com> | 2014-05-22 12:53:53 -0700 |
commit | 6e765f9a71b450809c4916a5d5562cdc1372a39a (patch) | |
tree | 13e32bdd2f53ed169164af230112d9c063a4411b | |
parent | 4aecf0f557a805bb3f2715cade0ab15f6b99ad39 (diff) |
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
-rw-r--r-- | res/drawable/call_log_background.xml | 4 | ||||
-rw-r--r-- | res/drawable/recent_lists_footer_background.xml | 23 | ||||
-rw-r--r-- | res/layout/call_log_fragment.xml | 1 | ||||
-rw-r--r-- | res/layout/call_log_list_item.xml | 23 | ||||
-rw-r--r-- | res/layout/recents_list_footer.xml | 2 | ||||
-rw-r--r-- | res/values/dimens.xml | 6 | ||||
-rw-r--r-- | src/com/android/dialer/calllog/CallLogAdapter.java | 4 | ||||
-rw-r--r-- | src/com/android/dialer/calllog/CallLogFragment.java | 55 |
8 files changed, 76 insertions, 42 deletions
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. --> <ripple xmlns:android="http://schemas.android.com/apk/res/android" - android:tint="?android:attr/colorControlHighlight" - android:pinned="false" /> + 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 @@ +<?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 + --> +<ripple xmlns:android="http://schemas.android.com/apk/res/android" + android:tint="?android:attr/colorButtonPressed" + android:pinned="false"> + <!-- Mask to constrain the ripple to the bounds of the view. --> + <item android:drawable="@android:color/transparent" /> +</ripple> 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" /> <TextView android:id="@android:id/empty" android:layout_width="match_parent" diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml index 9182bd758..bdf14774e 100644 --- a/res/layout/call_log_list_item.xml +++ b/res/layout/call_log_list_item.xml @@ -14,16 +14,14 @@ limitations under the License. --> -<view - xmlns:android="http://schemas.android.com/apk/res/android" +<view xmlns:android="http://schemas.android.com/apk/res/android" class="com.android.dialer.calllog.CallLogListItemView" + android:id="@+id/call_log_list_item" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingBottom="@dimen/call_log_outer_margin" - android:id="@+id/call_log_list_item" android:orientation="vertical" - android:clipChildren="false" -> + android:background="@color/background_dialer_list_items" > + <!-- Day group heading. Used to show a "today", "yesterday", "last week" or "other" heading above a group of call log entries. --> <TextView @@ -37,17 +35,16 @@ android:paddingTop="@dimen/call_log_day_group_padding" android:paddingBottom="0dp" /> + <!-- Linear layout to separate the primary area containing the contact badge and caller information and the secondary action (call details / play voicemail). --> <LinearLayout android:id="@+id/call_log_row" - android:background="@color/background_dialer_list_items" android:layout_width="match_parent" android:layout_height="wrap_content" android:baselineAligned="false" android:orientation="vertical" - android:gravity="center_vertical" - > + android:gravity="center_vertical" > <!-- Primary area containing the contact badge and caller information --> <LinearLayout @@ -55,15 +52,15 @@ android:background="@drawable/call_log_background" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingLeft="@dimen/call_log_outer_margin" - android:paddingRight="@dimen/call_log_outer_margin" + android:paddingStart="@dimen/call_log_outer_margin" + android:paddingEnd="@dimen/call_log_outer_margin" android:paddingTop="@dimen/call_log_outer_margin" + android:paddingBottom="@dimen/call_log_outer_margin" android:orientation="horizontal" android:gravity="center_vertical" android:focusable="true" android:nextFocusRight="@+id/call_back_action" - android:nextFocusLeft="@+id/quick_contact_photo" - > + android:nextFocusLeft="@+id/quick_contact_photo" > <QuickContactBadge android:id="@+id/quick_contact_photo" android:layout_width="@dimen/call_log_list_contact_photo_size" diff --git a/res/layout/recents_list_footer.xml b/res/layout/recents_list_footer.xml index 6156456d5..7670d81bb 100644 --- a/res/layout/recents_list_footer.xml +++ b/res/layout/recents_list_footer.xml @@ -30,4 +30,4 @@ android:textColor="@color/view_full_call_history_color" android:textSize="14sp" android:text="@string/recents_footer_text" - android:background="?android:attr/selectableItemBackground" /> + 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 @@ <dimen name="call_log_call_action_width">54dp</dimen> <dimen name="call_log_icon_margin">4dip</dimen> <dimen name="call_log_inner_margin">8dip</dimen> - <dimen name="call_log_outer_margin">8dip</dimen> + <dimen name="call_log_outer_margin">8dp</dimen> <dimen name="call_log_indent_margin">24dip</dimen> <dimen name="call_log_list_item_height">56dip</dimen> <dimen name="call_log_list_contact_photo_size">40dip</dimen> @@ -130,8 +130,8 @@ <dimen name="call_log_secondary_text_size">14sp</dimen> <!-- Height of the call log actions section for each call log entry --> <dimen name="call_log_action_height">48dp</dimen> - <!-- Elevation of expanded call log items. --> - <dimen name="call_log_expanded_elevation">4dp</dimen> + <!-- Z Translation of expanded call log items. --> + <dimen name="call_log_expanded_translation_z">4dp</dimen> <!-- Padding above call log day group headers. --> <dimen name="call_log_day_group_padding">16dp</dimen> </resources> 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 |