| Index: grit/format/policy_templates/writers/android_policy_writer.py
|
| diff --git a/grit/format/policy_templates/writers/android_policy_writer.py b/grit/format/policy_templates/writers/android_policy_writer.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5d8cbef38f991b2964d15d36ce6f6e3b45133072
|
| --- /dev/null
|
| +++ b/grit/format/policy_templates/writers/android_policy_writer.py
|
| @@ -0,0 +1,100 @@
|
| +#!/usr/bin/env python
|
| +# Copyright (c) 2015 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +
|
| +from grit.format.policy_templates.writers import xml_formatted_writer
|
| +from xml.dom import minidom
|
| +from xml.sax import saxutils as xml_escape
|
| +
|
| +
|
| +def GetWriter(config):
|
| + '''Factory method for creating AndroidPolicyWriter objects.
|
| + See the constructor of TemplateWriter for description of
|
| + arguments.
|
| + '''
|
| + return AndroidPolicyWriter(['android'], config)
|
| +
|
| +
|
| +def _EscapeResource(resource):
|
| + '''Escape the resource for usage in an Android resource XML file.
|
| + This includes standard XML escaping as well as those specific to Android.
|
| + '''
|
| + if type(resource) == int:
|
| + return str(resource)
|
| + return xml_escape.escape(resource, {"'": "\\'", '"': '\\"', '\\': '\\\\'})
|
| +
|
| +
|
| +class AndroidPolicyWriter(xml_formatted_writer.XMLFormattedWriter):
|
| + '''Outputs localized Android Resource XML files.
|
| + The policy strings are localized and exposed as string resources for
|
| + consumption through Android's App restriction Schema.
|
| + '''
|
| +
|
| + # DOM root node of the generated XML document.
|
| + _doc = None
|
| + # The resources node contains all resource 'string' and 'string-array'
|
| + # elements.
|
| + _resources = None
|
| +
|
| + def AddStringResource(self, name, string):
|
| + '''Add a string resource of the given name.
|
| + '''
|
| + string_node = self._doc.createElement('string')
|
| + string_node.setAttribute('name', name)
|
| + string_node.appendChild(self._doc.createTextNode(_EscapeResource(string)))
|
| + self._resources.appendChild(string_node)
|
| +
|
| + def AddStringArrayResource(self, name, string_items):
|
| + '''Add a string-array resource of the given name and
|
| + elements from string_items.
|
| + '''
|
| + string_array_node = self._doc.createElement('string-array')
|
| + string_array_node.setAttribute('name', name)
|
| + self._resources.appendChild(string_array_node)
|
| + for item in string_items:
|
| + string_node = self._doc.createElement('item')
|
| + string_node.appendChild(self._doc.createTextNode(_EscapeResource(item)))
|
| + string_array_node.appendChild(string_node)
|
| +
|
| + def PreprocessPolicies(self, policy_list):
|
| + return self.FlattenGroupsAndSortPolicies(policy_list)
|
| +
|
| + def CanBeRecommended(self, policy):
|
| + return False
|
| +
|
| + def IsDeprecatedPolicySupported(self, policy):
|
| + return True
|
| +
|
| + def IsFuturePolicySupported(self, policy):
|
| + return True
|
| +
|
| + def WritePolicy(self, policy):
|
| + name = policy['name']
|
| + self.AddStringResource(name + 'Title', policy['caption'])
|
| +
|
| + # Get the first line of the policy description.
|
| + description = policy['desc'].split('\n', 1)[0]
|
| + self.AddStringResource(name + 'Desc', description)
|
| +
|
| + items = policy.get('items')
|
| + if items is not None:
|
| + entries = [ item['caption'] for item in items ]
|
| + values = [ item['value'] for item in items ]
|
| + self.AddStringArrayResource(name + 'Entries', entries)
|
| + self.AddStringArrayResource(name + 'Values', values)
|
| +
|
| + def BeginTemplate(self):
|
| + comment_text = 'DO NOT MODIFY THIS FILE DIRECTLY!\n' \
|
| + 'IT IS GENERATED FROM policy_templates.json.'
|
| + comment_node = self._doc.createComment(comment_text)
|
| + self._doc.insertBefore(comment_node, self._resources)
|
| +
|
| + def Init(self):
|
| + impl = minidom.getDOMImplementation()
|
| + self._doc = impl.createDocument(None, 'resources', None)
|
| + self._resources = self._doc.documentElement
|
| +
|
| + def GetTemplateText(self):
|
| + return self.ToPrettyXml(self._doc)
|
|
|