docs: protected void onAttributeValueChanged(String attributeName, Object value) {
          if (!attributeListeners.containsKey(attributeName)) {
              return;
          }
          List<AttributeListener> listeners = attributeListeners.get(attributeName);
          synchronized (listeners) {
              for (AttributeListener listener : listeners) {
                  listener.attributeValueChanged(value);
              }
          }
      }