diff options
author | lambroslambrou <lambroslambrou@chromium.org> | 2015-10-21 17:05:06 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-22 00:05:50 +0000 |
commit | 52205347b9d084cedb0ee67a69967eac81254413 (patch) | |
tree | d2e41bb54170431bb5b2381ea81311567c541fa3 | |
parent | c4d3aca797cbd37b299590a3bce6d04327d9350d (diff) | |
download | chromium_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.java | 24 |
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(); |