Home | History | Annotate | Download | only in pylib
      1 # Copyright 2013 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 
      6 class SystemProperties(dict):
      7 
      8   """A dict interface to interact with device system properties.
      9 
     10   System properties are key/value pairs as exposed by adb shell getprop/setprop.
     11 
     12   This implementation minimizes interaction with the physical device. It is
     13   valid for the lifetime of a boot.
     14   """
     15 
     16   def __init__(self, android_commands):
     17     super(SystemProperties, self).__init__()
     18     self._adb = android_commands
     19     self._cached_static_properties = {}
     20 
     21   def __getitem__(self, key):
     22     if self._IsStatic(key):
     23       if key not in self._cached_static_properties:
     24         self._cached_static_properties[key] = self._GetProperty(key)
     25       return self._cached_static_properties[key]
     26     return self._GetProperty(key)
     27 
     28   def __setitem__(self, key, value):
     29     # TODO(tonyg): This can fail with no root. Verify that it succeeds.
     30     self._adb.SendShellCommand('setprop %s "%s"' % (key, value), retry_count=3)
     31 
     32   @staticmethod
     33   def _IsStatic(key):
     34     # TODO(tonyg): This list is conservative and could be expanded as needed.
     35     return (key.startswith('ro.boot.') or
     36             key.startswith('ro.build.') or
     37             key.startswith('ro.product.'))
     38 
     39   def _GetProperty(self, key):
     40     return self._adb.SendShellCommand('getprop %s' % key, retry_count=3).strip()
     41