Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 013a97e3 authored by Daisuke Miyakawa's avatar Daisuke Miyakawa Committed by Android (Google) Code Review
Browse files

Merge "Show separate pressed effect for primary/secondary actions"

parents a993b81a 54eb1ea7
Loading
Loading
Loading
Loading
+91 −96
Original line number Diff line number Diff line
@@ -17,56 +17,25 @@
 */
-->

<!-- Note: padding might be controlled programatically -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center_vertical"
        android:orientation="vertical"
    android:minHeight="@dimen/detail_min_line_item_height">

        <LinearLayout
            android:layout_width="match_parent"
    <!-- Note: padding might be controlled programatically -->
    <com.android.contacts.detail.PrimaryActionViewContainer
        android:id="@+id/primary_action_view_container"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
            android:layout_gravity="center_vertical">

            <FrameLayout
                android:layout_width="@dimen/detail_item_type_width"
                android:layout_height="@dimen/detail_min_line_item_height"
                android:paddingLeft="@dimen/detail_item_side_margin">

                <TextView
                    android:id="@+id/kind"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:visibility="gone" />

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/type"
                        style="@style/ContactDetailItemType" />

                    <View
                        android:id="@+id/primary_indicator"
                        android:layout_width="16dip"
                        android:layout_height="16dip"
                        android:visibility="gone"
        android:layout_gravity="center_vertical"
                        android:background="@drawable/ic_menu_mark" />

                </LinearLayout>

            </FrameLayout>
        android:focusable="true"
        android:background="?android:attr/selectableItemBackground">

        <LinearLayout
            android:layout_width="wrap_content"
@@ -99,26 +68,57 @@
            android:gravity="center"
            android:scaleType="centerInside" />

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="@dimen/detail_min_line_item_height"
            android:paddingLeft="@dimen/detail_item_side_margin"
            android:paddingRight="@dimen/detail_item_side_margin">

            <TextView
                android:id="@+id/kind"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:visibility="gone" />

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/type"
                    style="@style/ContactDetailItemType" />

                <View
                    android:id="@+id/primary_indicator"
                    android:layout_width="16dip"
                    android:layout_height="16dip"
                    android:visibility="gone"
                    android:layout_gravity="center_vertical"
                    android:background="@drawable/ic_menu_mark" />

            </LinearLayout>
        </FrameLayout>
    </com.android.contacts.detail.PrimaryActionViewContainer>

    <View
        android:id="@+id/vertical_divider"
        android:layout_width="1px"
        android:layout_height="match_parent"
                android:layout_marginTop="5dip"
                android:layout_marginBottom="5dip"
                android:layout_marginLeft="14dip"
                android:layout_marginRight="14dip"
        android:layout_marginTop="@dimen/detail_vertical_divider_vertical_margin"
        android:layout_marginBottom="@dimen/detail_vertical_divider_vertical_margin"
        android:background="?android:attr/dividerVertical" />

    <!-- Note: padding might be controlled programatically -->
    <FrameLayout
                android:id="@+id/secondary_action_button_container"
        android:id="@+id/secondary_action_view_container"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
                android:layout_marginTop="10dip"
        android:paddingLeft="@dimen/detail_item_icon_margin"
        android:paddingRight="@dimen/detail_item_icon_margin"
        android:duplicateParentState="false"
        android:focusable="true"
        android:background="?android:attr/selectableItemBackground">

        <ImageView
            android:id="@+id/secondary_action_button"
            android:layout_width="32dip"
@@ -127,10 +127,5 @@
            android:gravity="center"
            android:scaleType="center"
            android:duplicateParentState="false" />

    </FrameLayout>
</LinearLayout>

    </LinearLayout>

</LinearLayout>
+63 −49
Original line number Diff line number Diff line
@@ -17,12 +17,24 @@
 */
-->

<!-- Note: padding might be controlled programatically -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center_vertical">
    android:gravity="center_vertical"
    android:minHeight="@dimen/detail_min_line_item_height">

    <!-- Note: padding might be controlled programatically -->
    <com.android.contacts.detail.PrimaryActionViewContainer
        android:id="@+id/primary_action_view_container"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:focusable="true"
        android:background="?android:attr/selectableItemBackground">

        <LinearLayout
            android:layout_width="0dip"
@@ -81,22 +93,24 @@
            android:layout_marginLeft="5dip"
            android:gravity="center"
            android:scaleType="centerInside" />
    </com.android.contacts.detail.PrimaryActionViewContainer>

    <View
        android:id="@+id/vertical_divider"
        android:layout_width="1dip"
        android:layout_height="match_parent"
        android:layout_marginTop="4dip"
        android:layout_marginBottom="4dip"
        android:layout_marginTop="@dimen/detail_vertical_divider_vertical_margin"
        android:layout_marginBottom="@dimen/detail_vertical_divider_vertical_margin"
        android:background="?android:attr/dividerVertical" />

    <!-- Note: padding might be controlled programatically -->
    <FrameLayout
        android:id="@+id/secondary_action_button_container"
        android:id="@+id/secondary_action_view_container"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/detail_item_icon_margin"
        android:paddingRight="@dimen/detail_item_icon_margin"
        android:duplicateParentState="false"
        android:focusable="true"
        android:background="?android:attr/selectableItemBackground">
        <ImageView
            android:id="@+id/secondary_action_button"
+4 −2
Original line number Diff line number Diff line
@@ -20,16 +20,18 @@
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/quickcontact_list_item_background"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:gravity="center_vertical">
    <LinearLayout
        android:id="@+id/primary_action_view_container"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:minHeight="?android:attr/listPreferredItemHeight"
        android:layout_weight="1"
        android:orientation="vertical"
        android:paddingLeft="16dip"
        android:paddingRight="16dip"
        android:gravity="center_vertical">
        android:gravity="center_vertical"
        android:background="?android:attr/selectableItemBackground">
        <TextView
            android:id="@android:id/text1"
            android:layout_width="wrap_content"
+4 −3
Original line number Diff line number Diff line
@@ -133,15 +133,16 @@
    <!-- Minimum height of a row in the contact detail -->
    <dimen name="detail_min_line_item_height">48dip</dimen>

    <!-- Width of a contact detail item type (i.e. Nickname or Website). -->
    <dimen name="detail_item_type_width">164dip</dimen>

    <!-- Width of height of an icon from a third-party app in the networks section of the contact card. -->
    <dimen name="detail_network_icon_size">32dip</dimen>

    <!-- Font size for the display name in header of the contact detail page -->
    <dimen name="detail_header_name_text_size">36sp</dimen>

    <!-- Vertical margin for vertical dividers existing between primary data
         (phone number, email, etc.) and a secondary action button -->
    <dimen name="detail_vertical_divider_vertical_margin">16dip</dimen>

    <!-- Padding to be used between a visible scrollbar and the contact list -->
    <dimen name="list_visible_scrollbar_padding">40dip</dimen>

+65 −39
Original line number Diff line number Diff line
@@ -117,7 +117,7 @@ import java.util.List;
import java.util.Map;

public class ContactDetailFragment extends Fragment implements FragmentKeyListener, ViewOverlay,
        OnItemClickListener, SelectAccountDialogFragment.Listener {
        SelectAccountDialogFragment.Listener {

    private static final String TAG = "ContactDetailFragment";

@@ -264,8 +264,7 @@ public class ContactDetailFragment extends Fragment implements FragmentKeyListen

        mListView = (ListView) mView.findViewById(android.R.id.list);
        mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
        mListView.setOnItemClickListener(this);
        registerForContextMenu(mListView);
        mListView.setItemsCanFocus(true);
        mListView.setOnScrollListener(mVerticalScrollListener);

        // Don't set it to mListView yet.  We do so later when we bind the adapter.
@@ -1331,29 +1330,37 @@ public class ContactDetailFragment extends Fragment implements FragmentKeyListen
     * {@link DetailViewEntry}
     */
    private static class DetailViewCache {
        public TextView kind;
        public TextView type;
        public TextView data;
        public TextView footer;
        public ImageView presenceIcon;
        public ImageView secondaryActionButton;
        public View secondaryActionButtonContainer;
        public View secondaryActionDivider;
        public View primaryIndicator;

        public DetailViewCache(View view, OnClickListener secondaryActionClickListener) {
        public final TextView kind;
        public final TextView type;
        public final TextView data;
        public final TextView footer;
        public final ImageView presenceIcon;
        public final ImageView secondaryActionButton;
        public final View primaryActionViewContainer;
        public final View secondaryActionViewContainer;
        public final View secondaryActionDivider;
        public final View primaryIndicator;

        public DetailViewCache(View view,
                OnClickListener primaryActionClickListener,
                OnClickListener secondaryActionClickListener) {
            kind = (TextView) view.findViewById(R.id.kind);
            type = (TextView) view.findViewById(R.id.type);
            data = (TextView) view.findViewById(R.id.data);
            footer = (TextView) view.findViewById(R.id.footer);
            primaryIndicator = view.findViewById(R.id.primary_indicator);
            presenceIcon = (ImageView) view.findViewById(R.id.presence_icon);

            primaryActionViewContainer = view.findViewById(R.id.primary_action_view_container);
            primaryActionViewContainer.setOnClickListener(primaryActionClickListener);

            secondaryActionViewContainer = view.findViewById(
                    R.id.secondary_action_view_container);
            secondaryActionViewContainer.setOnClickListener(
                    secondaryActionClickListener);
            secondaryActionButton = (ImageView) view.findViewById(
                    R.id.secondary_action_button);
            secondaryActionButtonContainer = view.findViewById(
                    R.id.secondary_action_button_container);
            secondaryActionButtonContainer.setOnClickListener(
                    secondaryActionClickListener);

            secondaryActionDivider = view.findViewById(R.id.vertical_divider);
        }
    }
@@ -1494,15 +1501,16 @@ public class ContactDetailFragment extends Fragment implements FragmentKeyListen
                v = mInflater.inflate(R.layout.contact_detail_list_item, parent, false);

                // Cache the children
                viewCache = new DetailViewCache(v, mSecondaryActionClickListener);
                viewCache = new DetailViewCache(v,
                        mPrimaryActionClickListener, mSecondaryActionClickListener);
                v.setTag(viewCache);
            }

            bindDetailView(v, entry);
            bindDetailView(position, v, entry);
            return v;
        }

        private void bindDetailView(View view, DetailViewEntry entry) {
        private void bindDetailView(int position, View view, DetailViewEntry entry) {
            final Resources resources = mContext.getResources();
            DetailViewCache views = (DetailViewCache) view.getTag();

@@ -1538,6 +1546,12 @@ public class ContactDetailFragment extends Fragment implements FragmentKeyListen
                presenceIconView.setVisibility(View.GONE);
            }

            final PrimaryActionViewContainer primaryActionButtonContainer =
                    (PrimaryActionViewContainer) views.primaryActionViewContainer;
            primaryActionButtonContainer.setTag(entry);
            primaryActionButtonContainer.setPosition(position);
            registerForContextMenu(primaryActionButtonContainer);

            // Set the secondary action button
            final ImageView secondaryActionView = views.secondaryActionButton;
            Drawable secondaryActionIcon = null;
@@ -1551,20 +1565,30 @@ public class ContactDetailFragment extends Fragment implements FragmentKeyListen
                        resources.getDrawable(R.drawable.sym_action_audiochat_holo_light);
            }

            final View secondaryActionViewContainer = views.secondaryActionViewContainer;
            if (entry.secondaryIntent != null && secondaryActionIcon != null) {
                secondaryActionView.setImageDrawable(secondaryActionIcon);
                views.secondaryActionButtonContainer.setTag(entry);
                views.secondaryActionButtonContainer.setVisibility(View.VISIBLE);
                secondaryActionViewContainer.setTag(entry);
                secondaryActionViewContainer.setVisibility(View.VISIBLE);
                views.secondaryActionDivider.setVisibility(View.VISIBLE);
            } else {
                views.secondaryActionButtonContainer.setVisibility(View.GONE);
                secondaryActionViewContainer.setVisibility(View.GONE);
                views.secondaryActionDivider.setVisibility(View.GONE);
            }

            view.setPadding(entry.isInSubSection() ? mViewEntryDimensions.getWidePaddingLeft() :
            // Right padding should not have "pressed" effect.
            view.setPadding(0, 0, mViewEntryDimensions.getPaddingRight(), 0);
            // Top, left, and bottom paddings should have "pressed" effect.
            primaryActionButtonContainer.setPadding(entry.isInSubSection() ?
                    mViewEntryDimensions.getWidePaddingLeft() :
                            mViewEntryDimensions.getPaddingLeft(),
                    mViewEntryDimensions.getPaddingTop(),
                    mViewEntryDimensions.getPaddingRight(),
                    0,
                    mViewEntryDimensions.getPaddingBottom());
            secondaryActionViewContainer.setPadding(
                    secondaryActionViewContainer.getPaddingLeft(),
                    mViewEntryDimensions.getPaddingTop(),
                    secondaryActionViewContainer.getPaddingRight(),
                    mViewEntryDimensions.getPaddingBottom());
        }

@@ -1579,12 +1603,22 @@ public class ContactDetailFragment extends Fragment implements FragmentKeyListen
            }
        }

        private OnClickListener mSecondaryActionClickListener = new OnClickListener() {
        private final OnClickListener mPrimaryActionClickListener = new OnClickListener() {
            @Override
            public void onClick(View v) {
            public void onClick(View view) {
                if (mListener == null) return;
                final ViewEntry entry = (ViewEntry) view.getTag();
                if (entry == null) return;
                entry.click(view, mListener);
            }
        };

        private final OnClickListener mSecondaryActionClickListener = new OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mListener == null) return;
                if (v == null) return;
                final ViewEntry entry = (ViewEntry) v.getTag();
                if (view == null) return;
                final ViewEntry entry = (ViewEntry) view.getTag();
                if (entry == null || !(entry instanceof DetailViewEntry)) return;
                final DetailViewEntry detailViewEntry = (DetailViewEntry) entry;
                final Intent intent = detailViewEntry.secondaryIntent;
@@ -1649,14 +1683,6 @@ public class ContactDetailFragment extends Fragment implements FragmentKeyListen
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if (mListener == null) return;
        final ViewEntry entry = mAdapter.getItem(position);
        if (entry == null) return;
        entry.click(view, mListener);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, view, menuInfo);
Loading