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