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.
6 class SystemProperties(dict):
8 """A dict interface to interact with device system properties.
10 System properties are key/value pairs as exposed by adb shell getprop/setprop.
12 This implementation minimizes interaction with the physical device. It is
13 valid for the lifetime of a boot.
16 def __init__(self
, android_commands
):
17 super(SystemProperties
, self
).__init
__()
18 self
._adb
= android_commands
19 self
._cached
_static
_properties
= {}
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
)
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)
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.'))
39 def _GetProperty(self
, key
):
40 return self
._adb
.SendShellCommand('getprop %s' % key
, retry_count
=3).strip()