From 7754c7c7c42669dcb388a6e3b06dfeb7108dadac Mon Sep 17 00:00:00 2001 From: Mikel Date: Mon, 7 Aug 2017 20:44:35 +0100 Subject: [PATCH] Fix vectors for drawableStart in API 17 --- .../commons/media/MediaDetailFragment.java | 10 +-- .../nrw/commons/ui/widget/CompatTextView.java | 69 +++++++++++++++++++ .../main/res/layout/detail_category_item.xml | 14 ++-- .../main/res/layout/fragment_media_detail.xml | 14 ++-- app/src/main/res/values/attrs.xml | 8 +++ 5 files changed, 94 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/fr/free/nrw/commons/ui/widget/CompatTextView.java diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index eeb778df6..a17c130fb 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -32,6 +32,7 @@ import fr.free.nrw.commons.MediaWikiImageView; import fr.free.nrw.commons.PageTitle; import fr.free.nrw.commons.R; import fr.free.nrw.commons.location.LatLng; +import fr.free.nrw.commons.ui.widget.CompatTextView; import fr.free.nrw.commons.utils.UiUtils; import timber.log.Timber; @@ -285,17 +286,10 @@ public class MediaDetailFragment extends Fragment { private View buildCatLabel(final String catName) { final View item = getLayoutInflater(null).inflate(R.layout.detail_category_item, null, false); - final TextView textView = (TextView)item.findViewById(R.id.mediaDetailCategoryItemText); + final CompatTextView textView = (CompatTextView)item.findViewById(R.id.mediaDetailCategoryItemText); textView.setText(catName); if (categoriesLoaded && categoriesPresent) { - textView.setCompoundDrawablesWithIntrinsicBounds( - AppCompatResources.getDrawable( - getContext(), - R.drawable.ic_info_outline_white_24dp), - null, null, null); - textView.setCompoundDrawablePadding((int) UiUtils.convertDpToPixel(6, getContext())); - textView.setGravity(Gravity.CENTER_VERTICAL); textView.setOnClickListener(view -> { String selectedCategoryTitle = "Category:" + catName; Intent viewIntent = new Intent(); diff --git a/app/src/main/java/fr/free/nrw/commons/ui/widget/CompatTextView.java b/app/src/main/java/fr/free/nrw/commons/ui/widget/CompatTextView.java new file mode 100644 index 000000000..f6cb2ac9e --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/ui/widget/CompatTextView.java @@ -0,0 +1,69 @@ +package fr.free.nrw.commons.ui.widget; + +/** + * Created by mikel on 07/08/2017. + */ + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.support.annotation.Nullable; +import android.support.v4.view.ViewCompat; +import android.support.v7.widget.AppCompatDrawableManager; +import android.support.v7.widget.AppCompatTextView; +import android.util.AttributeSet; + +import fr.free.nrw.commons.R; +import fr.free.nrw.commons.utils.UiUtils; + +public class CompatTextView extends AppCompatTextView { + public CompatTextView(Context context) { + super(context); + init(null); + } + + public CompatTextView(Context context, AttributeSet attrs) { + super(context, attrs); + init(attrs); + } + + public CompatTextView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(attrs); + } + + private void init(@Nullable AttributeSet attrs) { + if (attrs != null) { + Context context = getContext(); + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CompatTextView); + + // Obtain DrawableManager used to pull Drawables safely, and check if we're in RTL + AppCompatDrawableManager dm = AppCompatDrawableManager.get(); + boolean rtl = ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL; + + // Grab the compat drawable padding from the XML + float drawablePadding = a.getDimension(R.styleable.CompatTextView_drawablePadding, 0); + + // Grab the compat drawable resources from the XML + int startDrawableRes = a.getResourceId(R.styleable.CompatTextView_drawableStart, 0); + int topDrawableRes = a.getResourceId(R.styleable.CompatTextView_drawableTop, 0); + int endDrawableRes = a.getResourceId(R.styleable.CompatTextView_drawableEnd, 0); + int bottomDrawableRes = a.getResourceId(R.styleable.CompatTextView_drawableBottom, 0); + + // Load the used drawables, falling back to whatever may be set in an "android:" namespace attribute + Drawable[] currentDrawables = getCompoundDrawables(); + Drawable left = startDrawableRes != 0 ? dm.getDrawable(context, startDrawableRes) : currentDrawables[0]; + Drawable right = endDrawableRes != 0 ? dm.getDrawable(context, endDrawableRes) : currentDrawables[1]; + Drawable top = topDrawableRes != 0 ? dm.getDrawable(context, topDrawableRes) : currentDrawables[2]; + Drawable bottom = bottomDrawableRes != 0 ? dm.getDrawable(context, bottomDrawableRes) : currentDrawables[3]; + + // Account for RTL and apply the compound Drawables + Drawable start = rtl ? right : left; + Drawable end = rtl ? left : right; + setCompoundDrawablesWithIntrinsicBounds(start, top, end, bottom); + setCompoundDrawablePadding((int) UiUtils.convertDpToPixel(drawablePadding, getContext())); + + a.recycle(); + } + } +} diff --git a/app/src/main/res/layout/detail_category_item.xml b/app/src/main/res/layout/detail_category_item.xml index 3b74af4d4..89197db5d 100644 --- a/app/src/main/res/layout/detail_category_item.xml +++ b/app/src/main/res/layout/detail_category_item.xml @@ -1,20 +1,24 @@ - - @@ -166,21 +165,20 @@ android:textSize="16sp" android:textStyle="bold" /> - diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index e56bddc85..22da8c207 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -13,4 +13,12 @@ + + + + + + + + \ No newline at end of file