getPermissions method

List<ManifestPermissionEntry> getPermissions()

Parses and returns a list of all permissions currently in the manifest.

Implementation

List<ManifestPermissionEntry> getPermissions() {
  final permissions = <ManifestPermissionEntry>[];
  final range = _getElementScope('manifest');
  if (range == null) return permissions;

  final comments = <String>[];
  var depth = 0;
  for (var i = range.start; i <= range.end; i++) {
    final event = _events[i];
    if (event is XmlCommentEvent) {
      comments.add(event.value);
      continue;
    } else if (event is XmlStartElementEvent) {
      if (event.name == 'uses-permission') {
        // Only include permissions that are direct children of manifest (depth 0)
        if (depth == 0) {
          String? nameAttrValue;
          for (final attr in event.attributes) {
            if (attr.name == 'android:name') {
              nameAttrValue = attr.value;
            } else if (attr.name == 'tools:node' && attr.value == 'remove') {
              nameAttrValue = null;
              break;
            }
          }
          if (nameAttrValue != null) {
            permissions.add(
              ManifestPermissionEntry(
                key: nameAttrValue,
                comments: List.from(comments),
              ),
            );
          }
          comments.clear();
        }
      }
      if (!event.isSelfClosing) {
        depth++;
      }
    } else if (event is XmlEndElementEvent) {
      depth--;
    }
  }

  return permissions;
}