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

Commit 54ea4b14 authored by Wenyi Wang's avatar Wenyi Wang
Browse files

Backport setter methods

The following methids were added in API level 21 and we have to ignore
them on older SDKs:
1. setOutlineProvider
2. setTranslationZ
3. setElegantTextHeight
4. setOverlay

View.setTranslationZ could be replaced with ViewCompat.setTranslationZ,
but that method basically ignores the attribute on older SDKs, which is
equivalent to our approach here.

In addition, we backport setImageTintList by applying tint to a drawable
and setting the drawble to ImageView.

Bug: 25629359
Change-Id: I3c5f7fe972cc0a5f7c8ab67581b0e68c3cdad35b
parent 49344cd7
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -122,4 +122,15 @@ public final class CompatUtils {
            return false;
        }
    }

    /**
     * Determines if this version is compatible with Lollipop-specific APIs. Can also force the
     * version to be lower through SdkVersionOverride.
     *
     * @return {@code true} if call subject is a feature on this device, {@code false} otherwise.
     */
    public static boolean isLollipopCompatible() {
        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
                >= Build.VERSION_CODES.LOLLIPOP;
    }
}
+4 −1
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import android.widget.TextView;
import com.android.contacts.common.CallUtil;
import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.common.R;
import com.android.contacts.common.compat.CompatUtils;
import com.android.contacts.common.util.UriUtils;
import com.android.phone.common.animation.AnimUtils;

@@ -386,7 +387,9 @@ public class CallSubjectDialog extends Activity {
    private void setPhoto(long photoId, Uri photoUri, Uri contactUri, String displayName,
            boolean isBusiness) {
        mContactPhoto.assignContactUri(contactUri);
        if (CompatUtils.isLollipopCompatible()) {
            mContactPhoto.setOverlay(null);
        }

        int contactType;
        if (isBusiness) {
+22 −6
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.support.v4.content.ContextCompat;
import android.support.v4.graphics.drawable.DrawableCompat;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
@@ -50,6 +51,7 @@ import android.widget.TextView;
import com.android.contacts.common.ContactPresenceIconUtil;
import com.android.contacts.common.ContactStatusUtil;
import com.android.contacts.common.R;
import com.android.contacts.common.compat.CompatUtils;
import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
import com.android.contacts.common.format.TextHighlighter;
import com.android.contacts.common.util.ContactDisplayUtils;
@@ -804,7 +806,9 @@ public class ContactListItemView extends ViewGroup
        }
        if (mQuickContact == null) {
            mQuickContact = new QuickContactBadge(getContext());
            if (CompatUtils.isLollipopCompatible()) {
                mQuickContact.setOverlay(null);
            }
            mQuickContact.setLayoutParams(getDefaultPhotoLayoutParams());
            if (mNameTextView != null) {
                mQuickContact.setContentDescription(getContext().getString(
@@ -915,7 +919,9 @@ public class ContactListItemView extends ViewGroup
            mNameTextView.setGravity(Gravity.CENTER_VERTICAL);
            mNameTextView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
            mNameTextView.setId(R.id.cliv_name_textview);
            if (CompatUtils.isLollipopCompatible()) {
                mNameTextView.setElegantTextHeight(false);
            }
            addView(mNameTextView);
        }
        return mNameTextView;
@@ -1087,7 +1093,9 @@ public class ContactListItemView extends ViewGroup
            mDataView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
            mDataView.setActivated(isActivated());
            mDataView.setId(R.id.cliv_data_view);
            if (CompatUtils.isLollipopCompatible()) {
                mDataView.setElegantTextHeight(false);
            }
            addView(mDataView);
        }
        return mDataView;
@@ -1518,9 +1526,17 @@ public class ContactListItemView extends ViewGroup
    public void setDrawableResource(int drawableId) {
        ImageView photo = getPhotoView();
        photo.setScaleType(ImageView.ScaleType.CENTER);
        photo.setImageDrawable(ContextCompat.getDrawable(getContext(), drawableId));
        photo.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(
                getContext(), R.color.search_shortcut_icon_color)));
        final Drawable drawable = ContextCompat.getDrawable(getContext(), drawableId);
        final int iconColor =
                ContextCompat.getColor(getContext(), R.color.search_shortcut_icon_color);
        if (CompatUtils.isLollipopCompatible()) {
            photo.setImageDrawable(drawable);
            photo.setImageTintList(ColorStateList.valueOf(iconColor));
        } else {
            final Drawable drawableWrapper = DrawableCompat.wrap(drawable).mutate();
            DrawableCompat.setTint(drawableWrapper, iconColor);
            photo.setImageDrawable(drawableWrapper);
        }
    }

    @Override
+17 −8
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.widget.TextView;
import android.widget.Toast;

import com.android.contacts.common.R;
import com.android.contacts.common.compat.CompatUtils;

/**
 * Lightweight implementation of ViewPager tabs. This looks similar to traditional actionBar tabs,
@@ -61,13 +62,19 @@ public class ViewPagerTabs extends HorizontalScrollView implements ViewPager.OnP
    // For displaying the unread count next to the tab icon.
    private int[] mUnreadCounts;

    private static final ViewOutlineProvider VIEW_BOUNDS_OUTLINE_PROVIDER =
            new ViewOutlineProvider() {
    private static final ViewOutlineProvider VIEW_BOUNDS_OUTLINE_PROVIDER;
    static {
        if (CompatUtils.isLollipopCompatible()) {
            VIEW_BOUNDS_OUTLINE_PROVIDER = new ViewOutlineProvider() {
                @Override
                public void getOutline(View view, Outline outline) {
                    outline.setRect(0, 0, view.getWidth(), view.getHeight());
                }
            };
        } else {
            VIEW_BOUNDS_OUTLINE_PROVIDER = null;
        }
    }

    private static final int TAB_SIDE_PADDING_IN_DPS = 10;

@@ -136,9 +143,11 @@ public class ViewPagerTabs extends HorizontalScrollView implements ViewPager.OnP
                new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
        a.recycle();

        if (CompatUtils.isLollipopCompatible()) {
            // enable shadow casting from view bounds
            setOutlineProvider(VIEW_BOUNDS_OUTLINE_PROVIDER);
        }
    }

    public void setViewPager(ViewPager viewPager) {
        mPager = viewPager;
+33 −14
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.view.ViewOutlineProvider;
import android.widget.ListView;

import com.android.contacts.common.R;
import com.android.contacts.common.compat.CompatUtils;

/**
 * Provides static functions to work with views
@@ -56,19 +57,33 @@ public class ViewUtil {
        return view.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
    }

    private static final ViewOutlineProvider OVAL_OUTLINE_PROVIDER = new ViewOutlineProvider() {
    private static final ViewOutlineProvider OVAL_OUTLINE_PROVIDER;
    static {
        if (CompatUtils.isLollipopCompatible()) {
            OVAL_OUTLINE_PROVIDER = new ViewOutlineProvider() {
                @Override
                public void getOutline(View view, Outline outline) {
                    outline.setOval(0, 0, view.getWidth(), view.getHeight());
                }
            };
        } else {
            OVAL_OUTLINE_PROVIDER = null;
        }
    }

    private static final ViewOutlineProvider RECT_OUTLINE_PROVIDER = new ViewOutlineProvider() {
    private static final ViewOutlineProvider RECT_OUTLINE_PROVIDER;
    static {
        if (CompatUtils.isLollipopCompatible()) {
            RECT_OUTLINE_PROVIDER = new ViewOutlineProvider() {
                @Override
                public void getOutline(View view, Outline outline) {
                    outline.setRect(0, 0, view.getWidth(), view.getHeight());
                }
            };
        } else {
            RECT_OUTLINE_PROVIDER = null;
        }
    }

    /**
     * Adds a rectangular outline to a view. This can be useful when you want to add a shadow
@@ -77,8 +92,10 @@ public class ViewUtil {
     * @param res The resources file.
     */
    public static void addRectangularOutlineProvider(View view, Resources res) {
        if (CompatUtils.isLollipopCompatible()) {
            view.setOutlineProvider(RECT_OUTLINE_PROVIDER);
        }
    }

    /**
     * Configures the floating action button, clipping it to a circle and setting its translation z.
@@ -86,10 +103,12 @@ public class ViewUtil {
     * @param res The resources file.
     */
    public static void setupFloatingActionButton(View view, Resources res) {
        if (CompatUtils.isLollipopCompatible()) {
            view.setOutlineProvider(OVAL_OUTLINE_PROVIDER);
            view.setTranslationZ(
                    res.getDimensionPixelSize(R.dimen.floating_action_button_translation_z));
        }
    }

    /**
     * Adds padding to the bottom of the given {@link ListView} so that the floating action button