192 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			192 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								// Copyright (c) 2022 Sentry. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "SentryScopeAndroid.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "SentryBreadcrumbAndroid.h"
							 | 
						||
| 
								 | 
							
								#include "SentryAttachmentAndroid.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "Infrastructure/SentryConvertorsAndroid.h"
							 | 
						||
| 
								 | 
							
								#include "Infrastructure/SentryJavaClasses.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SentryScopeAndroid::SentryScopeAndroid()
							 | 
						||
| 
								 | 
							
									: FSentryJavaObjectWrapper(SentryJavaClasses::Scope, "(Lio/sentry/SentryOptions;)V",
							 | 
						||
| 
								 | 
							
										*FSentryJavaObjectWrapper::CallStaticObjectMethod<jobject>(SentryJavaClasses::SentryBridgeJava, "getOptions", "()Lio/sentry/SentryOptions;"))
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									SetupClassMethods();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SentryScopeAndroid::SentryScopeAndroid(jobject scope)
							 | 
						||
| 
								 | 
							
									: FSentryJavaObjectWrapper(SentryJavaClasses::Scope, scope)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									SetupClassMethods();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::SetupClassMethods()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									AddBreadcrumbMethod = GetMethod("addBreadcrumb", "(Lio/sentry/Breadcrumb;)V");
							 | 
						||
| 
								 | 
							
									ClearBreadcrumbsMethod = GetMethod("clearBreadcrumbs", "()V");
							 | 
						||
| 
								 | 
							
									AddAttachmentMethod = GetMethod("addAttachment", "(Lio/sentry/Attachment;)V");
							 | 
						||
| 
								 | 
							
									ClearAttachmentsMethod = GetMethod("clearAttachments", "()V");
							 | 
						||
| 
								 | 
							
									SetTagValueMethod = GetMethod("setTag", "(Ljava/lang/String;Ljava/lang/String;)V");
							 | 
						||
| 
								 | 
							
									RemoveTagMethod = GetMethod("removeTag", "(Ljava/lang/String;)V");
							 | 
						||
| 
								 | 
							
									GetTagsMethod = GetMethod("getTags", "()Ljava/util/Map;");
							 | 
						||
| 
								 | 
							
									SetFingerprintMethod = GetMethod("setFingerprint", "(Ljava/util/List;)V");
							 | 
						||
| 
								 | 
							
									GetFingerprintMethod = GetMethod("getFingerprint", "()Ljava/util/List;");
							 | 
						||
| 
								 | 
							
									SetLevelMethod = GetMethod("setLevel", "(Lio/sentry/SentryLevel;)V");
							 | 
						||
| 
								 | 
							
									GetLevelMethod = GetMethod("getLevel", "()Lio/sentry/SentryLevel;");
							 | 
						||
| 
								 | 
							
									SetContextMethod = GetMethod("setContexts", "(Ljava/lang/String;Ljava/lang/Object;)V");
							 | 
						||
| 
								 | 
							
									RemoveContextMethod = GetMethod("removeContexts", "(Ljava/lang/String;)V");
							 | 
						||
| 
								 | 
							
									SetExtraValueMethod = GetMethod("setExtra", "(Ljava/lang/String;Ljava/lang/String;)V");
							 | 
						||
| 
								 | 
							
									RemoveExtraMethod = GetMethod("removeExtra", "(Ljava/lang/String;)V");
							 | 
						||
| 
								 | 
							
									GetExtrasMethod = GetMethod("getExtras", "()Ljava/util/Map;");
							 | 
						||
| 
								 | 
							
									ClearMethod = GetMethod("clear", "()V");
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::AddBreadcrumb(TSharedPtr<ISentryBreadcrumb> breadcrumb)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									TSharedPtr<SentryBreadcrumbAndroid> breadcrumbAndroid = StaticCastSharedPtr<SentryBreadcrumbAndroid>(breadcrumb);
							 | 
						||
| 
								 | 
							
									CallMethod<void>(AddBreadcrumbMethod, breadcrumbAndroid->GetJObject());
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::ClearBreadcrumbs()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									CallMethod<void>(ClearBreadcrumbsMethod);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::AddAttachment(TSharedPtr<ISentryAttachment> attachment)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									TSharedPtr<SentryAttachmentAndroid> attachmentAndroid = StaticCastSharedPtr<SentryAttachmentAndroid>(attachment);
							 | 
						||
| 
								 | 
							
									CallMethod<void>(AddAttachmentMethod, attachmentAndroid->GetJObject());
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::ClearAttachments()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									CallMethod<void>(ClearAttachmentsMethod);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::SetTagValue(const FString& key, const FString& value)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									CallMethod<void>(SetTagValueMethod, *GetJString(key), *GetJString(value));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								FString SentryScopeAndroid::GetTagValue(const FString& key) const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									TMap<FString, FString> tags = GetTags();
							 | 
						||
| 
								 | 
							
									FString* tagValue = tags.Find(key);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (!tagValue)
							 | 
						||
| 
								 | 
							
										return FString();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return *tagValue;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::RemoveTag(const FString& key)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									CallMethod<void>(RemoveTagMethod, *GetJString(key));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::SetTags(const TMap<FString, FString>& tags)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									for (const auto& tag : tags)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										SetTagValue(tag.Key, tag.Value);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TMap<FString, FString> SentryScopeAndroid::GetTags() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									auto tags = CallObjectMethod<jobject>(GetTagsMethod);
							 | 
						||
| 
								 | 
							
									return SentryConvertorsAndroid::StringMapToUnreal(*tags);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::SetDist(const FString& dist)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									SetTagValue("dist", dist);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								FString SentryScopeAndroid::GetDist() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return GetTagValue("dist");
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::SetEnvironment(const FString& environment)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									SetTagValue("environment", environment);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								FString SentryScopeAndroid::GetEnvironment() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return GetTagValue("environment");
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::SetFingerprint(const TArray<FString>& fingerprint)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									CallMethod<void>(SetFingerprintMethod, SentryConvertorsAndroid::StringArrayToNative(fingerprint)->GetJObject());
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TArray<FString> SentryScopeAndroid::GetFingerprint() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									auto fingerprint = CallObjectMethod<jobject>(GetFingerprintMethod);
							 | 
						||
| 
								 | 
							
									return SentryConvertorsAndroid::StringListToUnreal(*fingerprint);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::SetLevel(ESentryLevel level)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									CallMethod<void>(SetLevelMethod, SentryConvertorsAndroid::SentryLevelToNative(level)->GetJObject());
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ESentryLevel SentryScopeAndroid::GetLevel() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									auto level = CallObjectMethod<jobject>(GetLevelMethod);
							 | 
						||
| 
								 | 
							
									return SentryConvertorsAndroid::SentryLevelToUnreal(*level);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::SetContext(const FString& key, const TMap<FString, FString>& values)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									CallMethod<void>(SetContextMethod, *GetJString(key), SentryConvertorsAndroid::StringMapToNative(values)->GetJObject());
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::RemoveContext(const FString& key)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									CallMethod<void>(RemoveContextMethod, *GetJString(key));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::SetExtraValue(const FString& key, const FString& value)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									CallMethod<void>(SetExtraValueMethod, *GetJString(key), *GetJString(value));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								FString SentryScopeAndroid::GetExtraValue(const FString& key) const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									TMap<FString, FString> extras = GetTags();
							 | 
						||
| 
								 | 
							
									FString* extraValue = extras.Find(key);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (!extraValue)
							 | 
						||
| 
								 | 
							
										return FString();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return *extraValue;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::RemoveExtra(const FString& key)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									CallMethod<void>(RemoveExtraMethod, *GetJString(key));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::SetExtras(const TMap<FString, FString>& extras)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									for (const auto& extra : extras)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										SetExtraValue(extra.Key, extra.Value);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TMap<FString, FString> SentryScopeAndroid::GetExtras() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									auto extras = CallObjectMethod<jobject>(GetExtrasMethod);
							 | 
						||
| 
								 | 
							
									return SentryConvertorsAndroid::StringMapToUnreal(*extras);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryScopeAndroid::Clear()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									CallMethod<void>(ClearMethod);
							 | 
						||
| 
								 | 
							
								}
							 |