diff options
author | jdduke@chromium.org <jdduke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-18 22:36:09 +0000 |
---|---|---|
committer | jdduke@chromium.org <jdduke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-18 22:36:09 +0000 |
commit | 5d1c7ec48e18be993e400c28f1d3237ac4ad745c (patch) | |
tree | 5ff38461939ddc99683217c2e39fdbfa2b1ba4fb | |
parent | dee015734e35b3caa90d1123e958b102b419bd01 (diff) | |
download | chromium_src-5d1c7ec48e18be993e400c28f1d3237ac4ad745c.zip chromium_src-5d1c7ec48e18be993e400c28f1d3237ac4ad745c.tar.gz chromium_src-5d1c7ec48e18be993e400c28f1d3237ac4ad745c.tar.bz2 |
[Android] Catch NotFoundExceptions when querying gesture constants
Certain Sony/Japanese devices are throwing Resources.NotFoundExceptions when
looking up scale-related gesture constants. It's not yet clear why the lookup
is failing, but in any case such lookup failure should not crash the app. Use
a constant fallback in these cases, scaled to the current display configuration.
BUG=363484
Review URL: https://codereview.chromium.org/243503003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264878 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java b/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java index ae007b4..e8fc5b9 100644 --- a/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java +++ b/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java @@ -8,6 +8,7 @@ import android.content.ComponentCallbacks; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; +import android.util.TypedValue; import android.view.ViewConfiguration; import org.chromium.base.CalledByNative; @@ -21,6 +22,12 @@ import org.chromium.ui.R; */ @JNINamespace("gfx") public class ViewConfigurationHelper { + + // Fallback constants when resource lookup fails, see + // ui/android/java/res/values/dimens.xml. + private static final float MIN_SCALING_SPAN_MM = 27.0f; + private static final float MIN_SCALING_TOUCH_MAJOR_DIP = 48.0f; + private final Context mAppContext; private ViewConfiguration mViewConfiguration; @@ -104,8 +111,13 @@ public class ViewConfigurationHelper { int id = res.getIdentifier("config_minScalingSpan", "dimen", "android"); // Fall back to a sensible default if the internal identifier does not exist. if (id == 0) id = R.dimen.config_min_scaling_span; - return res.getDimensionPixelSize(id); - + try { + return res.getDimensionPixelSize(id); + } catch (Resources.NotFoundException e) { + assert false : "MinScalingSpan resource lookup failed."; + return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, MIN_SCALING_SPAN_MM, + res.getDisplayMetrics()); + } } @CalledByNative @@ -114,7 +126,13 @@ public class ViewConfigurationHelper { int id = res.getIdentifier("config_minScalingTouchMajor", "dimen", "android"); // Fall back to a sensible default if the internal identifier does not exist. if (id == 0) id = R.dimen.config_min_scaling_touch_major; - return res.getDimensionPixelSize(id); + try { + return res.getDimensionPixelSize(id); + } catch (Resources.NotFoundException e) { + assert false : "MinScalingTouchMajor resource lookup failed."; + return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, + MIN_SCALING_TOUCH_MAJOR_DIP, res.getDisplayMetrics()); + } } @CalledByNative |