void PopulateDeviceInfoEvent(DeviceInfoValidatorEvent validatorEvent, VisualTreeAsset cloneableAsset,
                                         VisualElement targetContainer)
            {
                var eventBlock = cloneableAsset.CloneTree().contentContainer;

                eventBlock.Q <Label>(k_DeviceInfoType).text         = validatorEvent.GetDeviceTypeText();
                eventBlock.Q <Label>(k_DeviceInfoOSVersion).text    = validatorEvent.GetOSVersionText();
                eventBlock.Q <Label>(k_DeviceInfoAppVersion).text   = validatorEvent.GetAppVersionText();
                eventBlock.Q <Label>(k_DeviceInfoBundleId).text     = validatorEvent.GetBundleIdText();
                eventBlock.Q <Label>(k_DeviceInfoProcessor).text    = validatorEvent.GetProcessorText();
                eventBlock.Q <Label>(k_DeviceInfoSystemMemory).text = validatorEvent.GetSystemMemoryText();
                eventBlock.Q <Label>(k_DeviceInfoUnityEngine).text  = validatorEvent.GetUnityEngineText();

                targetContainer.Add(eventBlock);
            }
        void OnGetValidationData(string downloadedData)
        {
            string basicStatus        = null;
            string customStatus       = null;
            string monetizationStatus = null;

            List <JSONValue> basicEvents = null;

            m_Events.Clear();

            var jsonParser = new JSONParser(downloadedData);

            try
            {
                var json = jsonParser.Parse();
                basicStatus        = json.AsDict()[k_JsonKeyBasic].AsString();
                customStatus       = json.AsDict()[k_JsonKeyCustom].AsString();
                monetizationStatus = json.AsDict()[k_JsonKeyMonetization].AsString();

                basicEvents = json.AsDict()[k_JsonKeyBasicEvents].AsList();
            }
            catch (Exception ex)
            {
                NotificationManager.instance.Publish(serviceInstance.notificationTopic, Notification.Severity.Error,
                                                     string.Format(L10n.Tr(k_DataValidationExceptionMessage), Connect.UnityConnect.instance.projectInfo.projectName, ex.Message));

                Debug.LogException(ex);
            }

            m_BasicDataValidated         = (basicStatus == k_JsonValueCompleted);
            m_CustomDataIntegrated       = (customStatus == k_JsonValueCompleted);
            m_MonetizationDataIntegrated = (monetizationStatus == k_JsonValueCompleted);

            foreach (var jsonEvent in basicEvents)
            {
                AnalyticsValidatorEvent parsedEvent;

                var type = jsonEvent.AsDict()[k_JsonKeyType].AsString();
                if (type == k_JsonValueCustomType)
                {
                    parsedEvent = new CustomValidatorEvent(jsonEvent);
                }
                else if (type == k_JsonValueDeviceInfoType)
                {
                    parsedEvent = new DeviceInfoValidatorEvent(jsonEvent);
                }
                else if (type == k_JsonValueTransactionType)
                {
                    parsedEvent = new TransactionValidatorEvent(jsonEvent);
                }
                else
                {
                    parsedEvent = new AnalyticsValidatorEvent(jsonEvent);
                }

                if (parsedEvent.GetTimeStamp() > m_LastEventTime)
                {
                    m_Events.Add(parsedEvent);
                }
            }

            if (m_BasicDataValidated && m_NotifyOnBasicValidate != null)
            {
                m_NotifyOnBasicValidate();
                m_NotifyOnBasicValidate = null;
            }

            if (m_Events.Count > 0 && m_NotifyOnEventsUpdate != null)
            {
                m_NotifyOnEventsUpdate();
            }
        }