Fix StrictMode violation

Work around bug b/120099466 in Android < Q in which faild reflection
causes disk reads.

BUG=948308

Change-Id: I38ab4c55a9e11f2bb2a5153740894f9f4f6c88d7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1574940
Reviewed-by: Matthew Jones <mdjones@chromium.org>
Commit-Queue: Paul Miller <paulmiller@chromium.org>
Cr-Commit-Position: refs/heads/master@{#652627}
diff --git a/ui/android/java/src/org/chromium/ui/touchless/TouchlessEventHandler.java b/ui/android/java/src/org/chromium/ui/touchless/TouchlessEventHandler.java
index 5720dad1..83e7a82c 100644
--- a/ui/android/java/src/org/chromium/ui/touchless/TouchlessEventHandler.java
+++ b/ui/android/java/src/org/chromium/ui/touchless/TouchlessEventHandler.java
@@ -4,6 +4,10 @@
 
 package org.chromium.ui.touchless;
 
+import android.os.StrictMode;
+
+import org.chromium.base.BuildInfo;
+
 /**
  * org.chromium.ui.touchless.TouchlessEventHandler
  */
@@ -21,11 +25,16 @@
     private static TouchlessEventHandler sInstance;
 
     static {
+        // Work around Android bug b/120099466 in which failed reflection causes disk reads.
+        StrictMode.ThreadPolicy oldPolicy = null;
+        if (!BuildInfo.isAtLeastQ()) oldPolicy = StrictMode.allowThreadDiskReads();
         try {
             sInstance = (TouchlessEventHandler) Class.forName(EVENT_HANDLER_INTERNAL).newInstance();
         } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
                 | IllegalArgumentException e) {
             sInstance = null;
+        } finally {
+            if (oldPolicy != null) StrictMode.setThreadPolicy(oldPolicy);
         }
     }
 
@@ -102,4 +111,4 @@
             boolean left, boolean right, boolean up, boolean down) {}
 
     protected void fallbackCursorModeSetCursorVisibilityInternal(boolean visible) {}
-}
\ No newline at end of file
+}