Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(279)

Side by Side Diff: build/android/pylib/content_settings.py

Issue 2101243005: Add a snapshot of flutter/engine/src/build to our sdk (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: add README.dart Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/android/pylib/constants/keyevent.py ('k') | build/android/pylib/device/OWNERS » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright 2014 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 from pylib import constants
6
7
8 class ContentSettings(dict):
9
10 """A dict interface to interact with device content settings.
11
12 System properties are key/value pairs as exposed by adb shell content.
13 """
14
15 def __init__(self, table, device):
16 super(ContentSettings, self).__init__()
17 self._table = table
18 self._device = device
19
20 @staticmethod
21 def _GetTypeBinding(value):
22 if isinstance(value, bool):
23 return 'b'
24 if isinstance(value, float):
25 return 'f'
26 if isinstance(value, int):
27 return 'i'
28 if isinstance(value, long):
29 return 'l'
30 if isinstance(value, str):
31 return 's'
32 raise ValueError('Unsupported type %s' % type(value))
33
34 def iteritems(self):
35 # Example row:
36 # 'Row: 0 _id=13, name=logging_id2, value=-1fccbaa546705b05'
37 for row in self._device.RunShellCommand(
38 'content query --uri content://%s' % self._table, as_root=True):
39 fields = row.split(', ')
40 key = None
41 value = None
42 for field in fields:
43 k, _, v = field.partition('=')
44 if k == 'name':
45 key = v
46 elif k == 'value':
47 value = v
48 if not key:
49 continue
50 if not value:
51 value = ''
52 yield key, value
53
54 def __getitem__(self, key):
55 return self._device.RunShellCommand(
56 'content query --uri content://%s --where "name=\'%s\'" '
57 '--projection value' % (self._table, key), as_root=True).strip()
58
59 def __setitem__(self, key, value):
60 if key in self:
61 self._device.RunShellCommand(
62 'content update --uri content://%s '
63 '--bind value:%s:%s --where "name=\'%s\'"' % (
64 self._table,
65 self._GetTypeBinding(value), value, key),
66 as_root=True)
67 else:
68 self._device.RunShellCommand(
69 'content insert --uri content://%s '
70 '--bind name:%s:%s --bind value:%s:%s' % (
71 self._table,
72 self._GetTypeBinding(key), key,
73 self._GetTypeBinding(value), value),
74 as_root=True)
75
76 def __delitem__(self, key):
77 self._device.RunShellCommand(
78 'content delete --uri content://%s '
79 '--bind name:%s:%s' % (
80 self._table,
81 self._GetTypeBinding(key), key),
82 as_root=True)
OLDNEW
« no previous file with comments | « build/android/pylib/constants/keyevent.py ('k') | build/android/pylib/device/OWNERS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698