Niedzielski has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/366740 )

Change subject: Hygiene: add themed color helper to ResourceUtil
......................................................................

Hygiene: add themed color helper to ResourceUtil

- Add themed color attribute helper, ResourceUtil.getThemedColor().
- Replace all calls to
  ContextCompat.getColor(ResourceUtil.getThemedAttributeId(...)) with
  new helper.

Change-Id: I03e4e6e440273cd29e1d1b42177222981d69bddb
---
M app/src/main/java/org/wikipedia/edit/richtext/SyntaxRuleStyle.java
M app/src/main/java/org/wikipedia/offline/DiskUsageView.java
M app/src/main/java/org/wikipedia/page/PageFragment.java
M app/src/main/java/org/wikipedia/page/ToCHandler.java
M app/src/main/java/org/wikipedia/page/leadimages/PageHeaderView.java
M app/src/main/java/org/wikipedia/readinglist/ReadingListItemActionsDialog.java
M app/src/main/java/org/wikipedia/tooltip/ToolTipUtil.java
M app/src/main/java/org/wikipedia/util/ResourceUtil.java
M app/src/main/java/org/wikipedia/views/PageItemView.java
M app/src/main/java/org/wikipedia/views/SwipeableItemTouchHelperCallback.java
10 files changed, 48 insertions(+), 38 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/40/366740/1

diff --git a/app/src/main/java/org/wikipedia/edit/richtext/SyntaxRuleStyle.java 
b/app/src/main/java/org/wikipedia/edit/richtext/SyntaxRuleStyle.java
index 5bae5fd..4f353ab 100644
--- a/app/src/main/java/org/wikipedia/edit/richtext/SyntaxRuleStyle.java
+++ b/app/src/main/java/org/wikipedia/edit/richtext/SyntaxRuleStyle.java
@@ -3,32 +3,33 @@
 import android.content.Context;
 import android.graphics.Color;
 import android.graphics.Typeface;
+import android.support.annotation.ColorInt;
 import android.support.annotation.NonNull;
 
 import org.wikipedia.R;
 
 import static android.support.v4.content.ContextCompat.getColor;
-import static org.wikipedia.util.ResourceUtil.getThemedAttributeId;
+import static org.wikipedia.util.ResourceUtil.getThemedColor;
 
 public enum SyntaxRuleStyle {
     TEMPLATE {
         @NonNull @Override public SpanExtents createSpan(@NonNull Context ctx, 
int spanStart,
                                                          SyntaxRule 
syntaxItem) {
-            int color = getColor(ctx, getThemedAttributeId(ctx, 
R.attr.syntax_highlight_template_color));
+            @ColorInt int color = getThemedColor(ctx, 
R.attr.syntax_highlight_template_color);
             return new ColorSpanEx(color, Color.TRANSPARENT, spanStart, 
syntaxItem);
         }
     },
     INTERNAL_LINK {
         @NonNull @Override public SpanExtents createSpan(@NonNull Context ctx, 
int spanStart,
                                                          SyntaxRule 
syntaxItem) {
-            int color = getColor(ctx, getThemedAttributeId(ctx, 
R.attr.colorAccent));
+            @ColorInt int color = getThemedColor(ctx, R.attr.colorAccent);
             return new ColorSpanEx(color, Color.TRANSPARENT, spanStart, 
syntaxItem);
         }
     },
     EXTERNAL_LINK {
         @NonNull @Override public SpanExtents createSpan(@NonNull Context ctx, 
int spanStart,
                                                          SyntaxRule 
syntaxItem) {
-            int color = getColor(ctx, getThemedAttributeId(ctx, 
R.attr.colorAccent));
+            @ColorInt int color = getThemedColor(ctx, R.attr.colorAccent);
             return new ColorSpanEx(color, Color.TRANSPARENT, spanStart, 
syntaxItem);
         }
     },
diff --git a/app/src/main/java/org/wikipedia/offline/DiskUsageView.java 
b/app/src/main/java/org/wikipedia/offline/DiskUsageView.java
index e20975b..60cd44a 100644
--- a/app/src/main/java/org/wikipedia/offline/DiskUsageView.java
+++ b/app/src/main/java/org/wikipedia/offline/DiskUsageView.java
@@ -7,7 +7,6 @@
 import android.os.Environment;
 import android.support.annotation.AttrRes;
 import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
 import android.support.v4.view.ViewCompat;
 import android.util.AttributeSet;
 import android.view.View;
@@ -92,8 +91,7 @@
 
     private void setDotTint(@NonNull View dotView, @AttrRes int id) {
         ViewCompat.setBackgroundTintList(dotView, new ColorStateList(new 
int[][]{new int[]{}},
-                new int[]{ContextCompat.getColor(getContext(),
-                        ResourceUtil.getThemedAttributeId(getContext(), 
id))}));
+                new int[]{ResourceUtil.getThemedColor(getContext(), id)}));
     }
 
     private float bytesToGB(long bytes) {
diff --git a/app/src/main/java/org/wikipedia/page/PageFragment.java 
b/app/src/main/java/org/wikipedia/page/PageFragment.java
index da01ceb..7b8e822 100755
--- a/app/src/main/java/org/wikipedia/page/PageFragment.java
+++ b/app/src/main/java/org/wikipedia/page/PageFragment.java
@@ -12,7 +12,6 @@
 import android.support.design.widget.BottomSheetDialogFragment;
 import android.support.design.widget.TabLayout;
 import android.support.v4.app.Fragment;
-import android.support.v4.content.ContextCompat;
 import android.support.v4.view.MenuItemCompat;
 import android.support.v4.widget.SwipeRefreshLayout;
 import android.support.v7.app.AlertDialog;
@@ -101,6 +100,7 @@
 import static org.wikipedia.util.DimenUtil.getContentTopOffset;
 import static org.wikipedia.util.DimenUtil.getContentTopOffsetPx;
 import static org.wikipedia.util.ResourceUtil.getThemedAttributeId;
+import static org.wikipedia.util.ResourceUtil.getThemedColor;
 import static org.wikipedia.util.ThrowableUtil.isOffline;
 import static org.wikipedia.util.UriUtil.decodeURL;
 import static org.wikipedia.util.UriUtil.visitInExternalBrowser;
@@ -315,7 +315,7 @@
                 .findViewById(R.id.page_refresh_container);
         int swipeOffset = getContentTopOffsetPx(getActivity()) + 
REFRESH_SPINNER_ADDITIONAL_OFFSET;
         refreshView.setProgressViewOffset(false, -swipeOffset, swipeOffset);
-        
refreshView.setColorSchemeResources(ResourceUtil.getThemedAttributeId(getContext(),
 R.attr.colorAccent));
+        refreshView.setColorSchemeResources(getThemedAttributeId(getContext(), 
R.attr.colorAccent));
         refreshView.setScrollableChild(webView);
         refreshView.setOnRefreshListener(pageRefreshListener);
 
@@ -356,8 +356,7 @@
         // Explicitly set background color of the WebView (independently of 
CSS, because
         // the background may be shown momentarily while the WebView loads 
content,
         // creating a seizure-inducing effect, or at the very least, a 
migraine with aura).
-        webView.setBackgroundColor(ContextCompat.getColor(getContext(),
-                getThemedAttributeId(getActivity(), 
R.attr.page_background_color)));
+        webView.setBackgroundColor(getThemedColor(getActivity(), 
R.attr.page_background_color));
 
         bridge = new CommunicationBridge(webView, 
"file:///android_asset/index.html");
         setupMessageHandlers();
diff --git a/app/src/main/java/org/wikipedia/page/ToCHandler.java 
b/app/src/main/java/org/wikipedia/page/ToCHandler.java
index c0d8f8f..1f38968 100755
--- a/app/src/main/java/org/wikipedia/page/ToCHandler.java
+++ b/app/src/main/java/org/wikipedia/page/ToCHandler.java
@@ -40,7 +40,7 @@
 
 import static org.wikipedia.util.DimenUtil.getContentTopOffsetPx;
 import static org.wikipedia.util.L10nUtil.getStringForArticleLanguage;
-import static org.wikipedia.util.ResourceUtil.getThemedAttributeId;
+import static org.wikipedia.util.ResourceUtil.getThemedColor;
 
 public class ToCHandler {
     private static final int MAX_LEVELS = 3;
@@ -271,10 +271,10 @@
 
             if (section.getLevel() > 1) {
                 sectionHeading.setTextColor(
-                        getColor(getThemedAttributeId(fragment.getContext(), 
R.attr.toc_subsection_text_color)));
+                        getThemedColor(fragment.getContext(), 
R.attr.toc_subsection_text_color));
             } else {
                 sectionHeading.setTextColor(
-                        getColor(getThemedAttributeId(fragment.getContext(), 
R.attr.toc_section_text_color)));
+                        getThemedColor(fragment.getContext(), 
R.attr.toc_section_text_color));
             }
             return convertView;
         }
diff --git 
a/app/src/main/java/org/wikipedia/page/leadimages/PageHeaderView.java 
b/app/src/main/java/org/wikipedia/page/leadimages/PageHeaderView.java
index 264c2a4..ed65c98 100644
--- a/app/src/main/java/org/wikipedia/page/leadimages/PageHeaderView.java
+++ b/app/src/main/java/org/wikipedia/page/leadimages/PageHeaderView.java
@@ -56,7 +56,7 @@
 import static org.apache.commons.lang3.StringUtils.defaultIfEmpty;
 import static org.wikipedia.util.DimenUtil.leadImageHeightForDevice;
 import static org.wikipedia.util.L10nUtil.isLangRTL;
-import static org.wikipedia.util.ResourceUtil.getThemedAttributeId;
+import static org.wikipedia.util.ResourceUtil.getThemedColor;
 
 public class PageHeaderView extends FrameLayout implements 
ObservableWebView.OnScrollChangeListener {
     @BindView(R.id.view_page_header_image) PageHeaderImageView image;
@@ -114,8 +114,7 @@
 
         updateText();
 
-        setTextColor(getColor(getThemedAttributeId(getContext(),
-                R.attr.lead_text_color)));
+        setTextColor(getThemedColor(getContext(), R.attr.lead_text_color));
     }
 
     public void showTextImage() {
@@ -124,8 +123,7 @@
 
         updateText();
 
-        setTextColor(getColor(getThemedAttributeId(getContext(),
-                R.attr.lead_text_color)));
+        setTextColor(getThemedColor(getContext(), R.attr.lead_text_color));
         setImageHeight(leadImageHeightForDevice());
     }
 
@@ -296,8 +294,7 @@
     private Spanned pronunciationSpanned() {
         AudioUrlSpan pronunciationSpan = new AudioUrlSpan(titleText, avPlayer, 
pronunciationUrl,
                 AudioUrlSpan.ALIGN_BASELINE);
-        pronunciationSpan.setTint(getColor(getThemedAttributeId(getContext(),
-                R.attr.window_inverse_color)));
+        pronunciationSpan.setTint(getThemedColor(getContext(), 
R.attr.window_inverse_color));
         return RichTextUtil.setSpans(new SpannableString("  "),
                 0,
                 1,
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/ReadingListItemActionsDialog.java 
b/app/src/main/java/org/wikipedia/readinglist/ReadingListItemActionsDialog.java
index 309bd4e..dd211a7 100644
--- 
a/app/src/main/java/org/wikipedia/readinglist/ReadingListItemActionsDialog.java
+++ 
b/app/src/main/java/org/wikipedia/readinglist/ReadingListItemActionsDialog.java
@@ -3,7 +3,6 @@
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -43,8 +42,7 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
         actionsView = new ReadingListItemActionsView(getContext());
-        actionsView.setBackgroundColor(ContextCompat.getColor(getContext(),
-                ResourceUtil.getThemedAttributeId(getContext(), 
R.attr.bottom_sheet_background_color)));
+        
actionsView.setBackgroundColor(ResourceUtil.getThemedColor(getContext(), 
R.attr.bottom_sheet_background_color));
         actionsView.setCallback(itemActionsCallback);
         pageIndex = getArguments().getInt("pageIndex");
         actionsView.setState(getArguments().getString("pageTitle", ""),
diff --git a/app/src/main/java/org/wikipedia/tooltip/ToolTipUtil.java 
b/app/src/main/java/org/wikipedia/tooltip/ToolTipUtil.java
index 6c84289..7c23fcf 100644
--- a/app/src/main/java/org/wikipedia/tooltip/ToolTipUtil.java
+++ b/app/src/main/java/org/wikipedia/tooltip/ToolTipUtil.java
@@ -5,7 +5,6 @@
 import android.support.annotation.LayoutRes;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
 import android.view.View;
 import android.view.ViewGroup;
 
@@ -15,7 +14,7 @@
 import org.wikipedia.R;
 import org.wikipedia.activity.ActivityUtil;
 
-import static org.wikipedia.util.ResourceUtil.getThemedAttributeId;
+import static org.wikipedia.util.ResourceUtil.getThemedColor;
 
 public final class ToolTipUtil {
     private static final int TOOL_TIP_VIEW_ID = R.id.view_tool_tip_container;
@@ -43,7 +42,7 @@
                                    View targetView,
                                    @LayoutRes int contentLayout,
                                    ToolTip.Position position) {
-        int color = ContextCompat.getColor(activity, 
getThemedAttributeId(activity, R.attr.tool_tip_default_color));
+        @ColorInt int color = getThemedColor(activity, 
R.attr.tool_tip_default_color);
         showToolTip(activity, targetView, contentLayout, color, position);
     }
 
diff --git a/app/src/main/java/org/wikipedia/util/ResourceUtil.java 
b/app/src/main/java/org/wikipedia/util/ResourceUtil.java
index 3aac3f6..69c46da 100644
--- a/app/src/main/java/org/wikipedia/util/ResourceUtil.java
+++ b/app/src/main/java/org/wikipedia/util/ResourceUtil.java
@@ -13,9 +13,12 @@
 import android.os.LocaleList;
 import android.support.annotation.AnyRes;
 import android.support.annotation.ArrayRes;
+import android.support.annotation.AttrRes;
+import android.support.annotation.ColorInt;
 import android.support.annotation.DrawableRes;
 import android.support.annotation.IdRes;
 import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 import android.support.graphics.drawable.VectorDrawableCompat;
 import android.util.TypedValue;
 
@@ -25,6 +28,7 @@
 import java.util.Locale;
 
 public final class ResourceUtil {
+    // See Resources.getIdentifier().
     private static final int NO_ID = 0;
 
     public static int[] getIdArray(Context context, @ArrayRes int id) {
@@ -71,6 +75,14 @@
         return bm;
     }
 
+    @Nullable public static TypedValue getThemedAttribute(@NonNull Context 
context, @AttrRes int id) {
+        TypedValue typedValue = new TypedValue();
+        if (context.getTheme().resolveAttribute(id, typedValue, true)) {
+            return typedValue;
+        }
+        return null;
+    }
+
     /**
      * Resolves the resource ID of a theme-dependent attribute (for example, a 
color value
      * that changes based on the selected theme)
@@ -78,10 +90,20 @@
      * @param id Theme-dependent attribute ID to be resolved.
      * @return The actual resource ID of the requested theme-dependent 
attribute.
      */
-    @AnyRes public static int getThemedAttributeId(Context context, int id) {
-        TypedValue tv = new TypedValue();
-        context.getTheme().resolveAttribute(id, tv, true);
-        return tv.resourceId;
+    @AnyRes public static int getThemedAttributeId(@NonNull Context context, 
@AttrRes int id) {
+        TypedValue typedValue = getThemedAttribute(context, id);
+        if (typedValue == null) {
+            throw new IllegalArgumentException("Attribute not found; ID=" + 
id);
+        }
+        return typedValue.resourceId;
+    }
+
+    @ColorInt public static int getThemedColor(@NonNull Context context, 
@AttrRes int id) {
+        TypedValue typedValue = getThemedAttribute(context, id);
+        if (typedValue == null) {
+            throw new IllegalArgumentException("Attribute not found; ID=" + 
id);
+        }
+        return typedValue.data;
     }
 
     public static Uri uri(@NonNull Context context, @AnyRes int id) throws 
Resources.NotFoundException {
diff --git a/app/src/main/java/org/wikipedia/views/PageItemView.java 
b/app/src/main/java/org/wikipedia/views/PageItemView.java
index 7078be1..1b76a42 100644
--- a/app/src/main/java/org/wikipedia/views/PageItemView.java
+++ b/app/src/main/java/org/wikipedia/views/PageItemView.java
@@ -5,7 +5,6 @@
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.StringRes;
-import android.support.v4.content.ContextCompat;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
@@ -22,7 +21,7 @@
 import butterknife.OnClick;
 import butterknife.OnLongClick;
 
-import static org.wikipedia.util.ResourceUtil.getThemedAttributeId;
+import static org.wikipedia.util.ResourceUtil.getThemedColor;
 
 /*
  * TODO: Use this for future RecyclerView updates where we show a list of pages
@@ -152,8 +151,7 @@
         imageSelectedView.setVisibility(selected ? VISIBLE : GONE);
         // TODO: animate?
         if (selected) {
-            setBackgroundColor(ContextCompat.getColor(getContext(),
-                    getThemedAttributeId(getContext(), 
R.attr.multi_select_background_color)));
+            setBackgroundColor(getThemedColor(getContext(), 
R.attr.multi_select_background_color));
         } else {
             setBackground(null);
         }
diff --git 
a/app/src/main/java/org/wikipedia/views/SwipeableItemTouchHelperCallback.java 
b/app/src/main/java/org/wikipedia/views/SwipeableItemTouchHelperCallback.java
index 41e5d3b..54695aa 100644
--- 
a/app/src/main/java/org/wikipedia/views/SwipeableItemTouchHelperCallback.java
+++ 
b/app/src/main/java/org/wikipedia/views/SwipeableItemTouchHelperCallback.java
@@ -6,7 +6,6 @@
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.helper.ItemTouchHelper;
 
@@ -29,8 +28,7 @@
         deleteBackgroundPaint.setStyle(Paint.Style.FILL);
         deleteBackgroundPaint.setColor(Color.RED);
         itemBackgroundPaint.setStyle(Paint.Style.FILL);
-        itemBackgroundPaint.setColor(ContextCompat.getColor(context,
-                ResourceUtil.getThemedAttributeId(context, 
R.attr.window_background_color)));
+        itemBackgroundPaint.setColor(ResourceUtil.getThemedColor(context, 
R.attr.window_background_color));
         deleteIcon = ResourceUtil.bitmapFromVectorDrawable(context, 
R.drawable.ic_delete_white_24dp);
     }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/366740
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I03e4e6e440273cd29e1d1b42177222981d69bddb
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
Gerrit-Reviewer: Sniedzielski <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to