@Override
	public void onUpdatePath(@Nonnull PathNode<?> path) {
		// Pass to children
		for (Navigable navigableChild : getNavigableChildren())
			if (navigableChild instanceof UpdatableNavigable updatableNavigable)
				updatableNavigable.onUpdatePath(path);

		// Handle updates to the text.
		if (!updateLock.get() && path instanceof FilePathNode filePath) {
			FileInfo info = filePath.getValue();
			if (info instanceof BinaryXmlFileInfo binaryXml) {
				this.path = filePath;
				try {
					// Attempt to lookup ARSC resource for better decoding.
					ArscFileInfo arscFile = null;
					Workspace workspace = path.getValueOfType(Workspace.class);
					if (workspace != null) {
						FilePathNode arscPath = workspace.findFile(ArscFileInfo.NAME);
						if (arscPath != null) arscFile = (ArscFileInfo) arscPath.getValue();
					}

					// Decode XML and update the editor text.
					AndroidResourceProvider arscResources = arscFile == null ? null : arscFile.getResourceInfo();
					String decodedXml = XmlDecoder.decode(binaryXml.getChunkModel(), AndroidRes.getAndroidBase(), arscResources);
					FxThreadUtil.run(() -> editor.setText(decodedXml));
				} catch (Exception ex) {
					FxThreadUtil.run(() -> editor.setText("<!-- Failed to decode XML:\n" +
							"Message: " + ex.getMessage() + "\n" +
							StringUtil.traceToString(ex) + "\n--->"));
				}
			}
		}
	}
Displays a {@link TextFileInfo} via a configured {@link Editor}.

@author Matt Coley
recaf-ui/src/main/java/software/coley/recaf/ui/pane/editing/binary/DecodingXmlPane.java