Reland #2: Android: Replace ConcurrentHashMap usage with manual lock.

ConcurrentHashMap has a bug on L.
* Also adds a checkstyle check to prevent future uses.
* Also adds @AnyThread / @MainThread to all public methods

Previously reverted in ab41c2866ed57abc1f778496440e84a7023a787c.

Reason for reland: Fixed toolchain issue (crbug.com/693079)

Change since previous land:
* Optimizations so that we're now removing some methods rather than
adding some (which the previous land did).

Change-Id: I00afd74394964c62b6cc5358a8546048aa215e8d
Bug: 905903
Reviewed-on: https://chromium-review.googlesource.com/c/1412233
Reviewed-by: Paul Jensen <pauljensen@chromium.org>
Reviewed-by: Tibor Goldschwendt <tiborg@chromium.org>
Commit-Queue: agrieve <agrieve@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#624190}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: d69c7a37d711183e6c215115ccaa29ffc6b59a76
diff --git a/checkstyle/chromium-style-5.0.xml b/checkstyle/chromium-style-5.0.xml
index 03d7bcf..cd32e9d 100644
--- a/checkstyle/chromium-style-5.0.xml
+++ b/checkstyle/chromium-style-5.0.xml
@@ -126,5 +126,12 @@
       <property name="ignoreComments" value="true"/>
       <property name="message" value="Use ContextUtils.getAppSharedPreferences() instead to access app-wide SharedPreferences."/>
     </module>
+    <module name="RegexpSinglelineJava">
+      <property name="id" value="ConcurrentHashMapCheck"/>
+      <property name="severity" value="error"/>
+      <property name="format" value="ConcurrentHashMap"/>
+      <property name="ignoreComments" value="true"/>
+      <property name="message" value="ConcurrentHashMap has a bug on some Android versions. Use Collections.synchronizedMap() instead (crbug.com/905903)."/>
+    </module>
   </module>
 </module>