summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlambroslambrou <lambroslambrou@chromium.org>2015-10-21 17:05:06 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-22 00:05:50 +0000
commit52205347b9d084cedb0ee67a69967eac81254413 (patch)
treed2e41bb54170431bb5b2381ea81311567c541fa3
parentc4d3aca797cbd37b299590a3bce6d04327d9350d (diff)
downloadchromium_src-52205347b9d084cedb0ee67a69967eac81254413.zip
chromium_src-52205347b9d084cedb0ee67a69967eac81254413.tar.gz
chromium_src-52205347b9d084cedb0ee67a69967eac81254413.tar.bz2
Android Chromoting: Improve error-handling in tintMenuIcons()
This avoids crashing the app if colorControlNormal is defined as a raw color instead of a resource. TEST=Try adding colorControlNormal attribute to styles.xml Review URL: https://codereview.chromium.org/1418923002 Cr-Commit-Position: refs/heads/master@{#355445}
-rw-r--r--remoting/android/java/src/org/chromium/chromoting/ChromotingUtil.java24
1 files changed, 22 insertions, 2 deletions
diff --git a/remoting/android/java/src/org/chromium/chromoting/ChromotingUtil.java b/remoting/android/java/src/org/chromium/chromoting/ChromotingUtil.java
index f35298c..5224801 100644
--- a/remoting/android/java/src/org/chromium/chromoting/ChromotingUtil.java
+++ b/remoting/android/java/src/org/chromium/chromoting/ChromotingUtil.java
@@ -11,9 +11,12 @@ import android.util.TypedValue;
import android.view.Menu;
import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.base.Log;
/** Utility methods for chromoting code. */
public abstract class ChromotingUtil {
+ private static final String TAG = "Chromoting";
+
/**
* Tints all icons of a toolbar menu so they have the same color as the 'back' navigation icon
* and the three-dots overflow icon.
@@ -22,8 +25,25 @@ public abstract class ChromotingUtil {
*/
public static void tintMenuIcons(Context context, Menu menu) {
TypedValue typedValue = new TypedValue();
- context.getTheme().resolveAttribute(R.attr.colorControlNormal, typedValue, true);
- int color = ApiCompatibilityUtils.getColor(context.getResources(), typedValue.resourceId);
+ if (!context.getTheme().resolveAttribute(R.attr.colorControlNormal, typedValue, true)) {
+ Log.e(TAG, "Failed to resolve colorControlNormal attribute.");
+ return;
+ }
+
+ int color;
+ if (typedValue.resourceId != 0) {
+ // Attribute is a resource.
+ color = ApiCompatibilityUtils.getColor(context.getResources(), typedValue.resourceId);
+ } else if (typedValue.type >= TypedValue.TYPE_FIRST_COLOR_INT
+ && typedValue.type <= TypedValue.TYPE_LAST_COLOR_INT) {
+ // Attribute is a raw color value.
+ color = typedValue.data;
+ } else {
+ // The resource compiler should prevent this from happening.
+ Log.e(TAG, "Invalid colorControlNormal attribute: %s", typedValue);
+ return;
+ }
+
int items = menu.size();
for (int i = 0; i < items; i++) {
Drawable icon = menu.getItem(i).getIcon();