Refactor SetFirmwareBitmapLocale from gooftool.py.

BUG=None
TEST=manual on dut

Change-Id: I8647caafc4f61f85d93b56cfa61fae5fc3cee6b2
Reviewed-on: https://gerrit.chromium.org/gerrit/39179
Commit-Ready: Andy Cheng <andycheng@chromium.org>
Reviewed-by: Andy Cheng <andycheng@chromium.org>
Tested-by: Andy Cheng <andycheng@chromium.org>
diff --git a/py/gooftool/gooftool.py b/py/gooftool/gooftool.py
index 93b3c9c..cece5e9 100755
--- a/py/gooftool/gooftool.py
+++ b/py/gooftool/gooftool.py
@@ -19,7 +19,7 @@
 import sys
 import time
 
-from tempfile import gettempdir, NamedTemporaryFile
+from tempfile import gettempdir
 
 import factory_common  # pylint: disable=W0611
 
@@ -28,7 +28,6 @@
 from cros.factory.gooftool import crosfw
 from cros.factory.gooftool import Gooftool
 from cros.factory.gooftool import report_upload
-from cros.factory.gooftool.bmpblk import unpack_bmpblock
 from cros.factory.gooftool.probe import Probe, PROBEABLE_COMPONENT_CLASSES
 from cros.factory.gooftool.probe import ReadRoVpd, ReadRwVpd
 from cros.factory.gooftool.vpd_data import KNOWN_VPD_FIELD_DATA, FilterVPD
@@ -450,27 +449,9 @@
 def SetFirmwareBitmapLocale(options):  # pylint: disable=W0613
   """Use VPD locale value to set firmware bitmap default language."""
 
-  image_file = crosfw.LoadMainFirmware().GetFileName()
-  locale = ReadRoVpd(image_file).get('initial_locale', None)
-  if locale is None:
-    raise Error, 'Missing initial_locale VPD.'
-  bitmap_locales = []
-  with NamedTemporaryFile() as f:
-    Shell('gbb_utility -g --bmpfv=%s %s' % (f.name, image_file))
-    bmpblk_data = unpack_bmpblock(f.read())
-    bitmap_locales = bmpblk_data.get('locales', bitmap_locales)
-  # Some locale values are just a language code and others are a
-  # hyphen-separated language code and country code pair.  We care
-  # only about the language code part.
-  language_code = locale.partition('-')[0]
-  if language_code not in bitmap_locales:
-    raise Error, ('Firmware bitmaps do not contain support for the specified '
-                  'initial locale language %r' % language_code)
-  else:
-    locale_index = bitmap_locales.index(language_code)
-    logging.info('Firmware bitmap initial locale set to %d (%s).',
-                 locale_index, bitmap_locales[locale_index])
-    Shell('crossystem loc_idx=%d' % locale_index)
+  (index, locale) = Gooftool().SetFirmwareBitmapLocale()
+  logging.info('Firmware bitmap initial locale set to %d (%s).',
+               index, locale)
 
 
 @Command('verify_system_time')