Skip to content

Commit a882b9d

Browse files
committed
User feedback UX improvements
1. Disable generic feedback when Sentry is disabled 2. Add loading pop up when sending feedback for UX 3. Add simple error message in the loading pop up for UX
1 parent 281fd43 commit a882b9d

File tree

5 files changed

+86
-8
lines changed

5 files changed

+86
-8
lines changed

CollapseLauncher/XAMLs/MainApp/Pages/Dialogs/SimpleDialogs.cs

+28-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using CollapseLauncher.Extension;
33
using CollapseLauncher.Helper;
44
using CollapseLauncher.Helper.Animation;
5+
using CollapseLauncher.Helper.Loading;
56
using CollapseLauncher.Helper.Metadata;
67
using CollapseLauncher.InstallManager.Base;
78
using CollapseLauncher.XAMLs.Theme.CustomControls.UserFeedbackDialog;
@@ -1310,16 +1311,40 @@ private static async void SubmitFeedbackButton_Click(object sender, RoutedEventA
13101311
return;
13111312
}
13121313

1313-
var parsedFeedback = UserFeedbackTemplate.ParseTemplate(feedbackResult);
1314+
var feedbackLoadingTitle = Lang._Misc.Feedback;
13141315

1316+
LoadingMessageHelper.Initialize();
1317+
LoadingMessageHelper.SetMessage(feedbackLoadingTitle, Lang._Misc.FeedbackSending);
1318+
LoadingMessageHelper.ShowLoadingFrame();
1319+
1320+
var parsedFeedback = UserFeedbackTemplate.ParseTemplate(feedbackResult);
13151321
if (parsedFeedback == null)
13161322
{
13171323
Logger.LogWriteLine("Failed to parse feedback template! Not sending feedback", LogType.Error, true);
1324+
1325+
LoadingMessageHelper.SetMessage(feedbackLoadingTitle, Lang._Misc.FeedbackSendFailure);
1326+
await Task.Delay(1000);
1327+
LoadingMessageHelper.HideLoadingFrame();
13181328
}
13191329
else
13201330
{
1321-
SentryHelper.SendExceptionFeedback(ErrorSender.SentryErrorId, parsedFeedback.Email, parsedFeedback.User, parsedFeedback.Message);
1322-
isFeedbackSent = true;
1331+
if (SentryHelper.SendExceptionFeedback(ErrorSender.SentryErrorId, parsedFeedback.Email,
1332+
parsedFeedback.User, parsedFeedback.Message))
1333+
{
1334+
// Hide the loading message after 200ms
1335+
await Task.Delay(500);
1336+
LoadingMessageHelper.SetMessage(feedbackLoadingTitle, Lang._Misc.FeedbackSent);
1337+
await Task.Delay(1000);
1338+
LoadingMessageHelper.HideLoadingFrame();
1339+
isFeedbackSent = true;
1340+
}
1341+
else
1342+
{
1343+
await Task.Delay(250);
1344+
LoadingMessageHelper.SetMessage(feedbackLoadingTitle, Lang._Misc.FeedbackSendFailure);
1345+
await Task.Delay(1000);
1346+
LoadingMessageHelper.HideLoadingFrame();
1347+
}
13231348
}
13241349
}
13251350
catch (Exception ex)

CollapseLauncher/XAMLs/MainApp/Pages/SettingsPage.xaml.cs

+28-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using CollapseLauncher.Pages.SettingsContext;
1616
using CollapseLauncher.Statics;
1717
#if ENABLEUSERFEEDBACK
18+
using CollapseLauncher.Helper.Loading;
1819
using CollapseLauncher.XAMLs.Theme.CustomControls.UserFeedbackDialog;
1920
#endif
2021
using CommunityToolkit.WinUI;
@@ -136,6 +137,8 @@ public SettingsPage()
136137

137138
#if !ENABLEUSERFEEDBACK
138139
ShareYourFeedbackButton.Visibility = Visibility.Collapsed;
140+
#else
141+
ShareYourFeedbackButton.IsEnabled = SentryHelper.IsEnabled;
139142
#endif
140143
}
141144

@@ -434,15 +437,38 @@ private async void ShareYourFeedbackClick(object sender, RoutedEventArgs e)
434437
return;
435438
}
436439

437-
var parsedFeedback = UserFeedbackTemplate.ParseTemplate(userFeedbackResult);
440+
var parsedFeedback = UserFeedbackTemplate.ParseTemplate(userFeedbackResult);
441+
var feedbackLoadingTitle = Lang._Misc.Feedback;
442+
443+
// Show pseudo-loading message so user knows the feedback is being sent
444+
LoadingMessageHelper.Initialize();
445+
LoadingMessageHelper.SetMessage(feedbackLoadingTitle, Lang._Misc.FeedbackSending);
446+
LoadingMessageHelper.ShowLoadingFrame();
438447

439448
if (parsedFeedback == null)
440449
{
441450
LogWriteLine("Feedback result failed to be parsed! Feedback not sent.", LogType.Error, true);
451+
LoadingMessageHelper.SetMessage(feedbackLoadingTitle, Lang._Misc.FeedbackSendFailure);
452+
await Task.Delay(1000);
453+
LoadingMessageHelper.HideLoadingFrame();
442454
return;
443455
}
444456

445-
SentryHelper.SendGenericFeedback(parsedFeedback.Message, parsedFeedback.Email, parsedFeedback.User);
457+
if (SentryHelper.SendGenericFeedback(parsedFeedback.Message, parsedFeedback.Email, parsedFeedback.User))
458+
{
459+
// Hide the loading message after 200ms
460+
await Task.Delay(500);
461+
LoadingMessageHelper.SetMessage(feedbackLoadingTitle, Lang._Misc.FeedbackSent);
462+
await Task.Delay(1000);
463+
LoadingMessageHelper.HideLoadingFrame();
464+
}
465+
else
466+
{
467+
await Task.Delay(250);
468+
LoadingMessageHelper.SetMessage(feedbackLoadingTitle, Lang._Misc.FeedbackSendFailure);
469+
await Task.Delay(1000);
470+
LoadingMessageHelper.HideLoadingFrame();
471+
}
446472
#endif
447473
}
448474

Hi3Helper.Core/Classes/SentryHelper/SentryHelper.cs

+20-3
Original file line numberDiff line numberDiff line change
@@ -540,21 +540,38 @@ private static SentryId ExceptionHandlerInner(Exception ex, ExceptionType exT =
540540
#pragma warning restore CS0162 // Unreachable code detected
541541
}
542542

543-
public static void SendExceptionFeedback(Guid sentryId, string userEmail, string user, string feedback)
543+
public static bool SendExceptionFeedback(Guid sentryId, string userEmail, string user, string feedback)
544544
{
545545
if (sentryId == Guid.Empty)
546546
{
547-
Logger.LogWriteLine("[SentryHelper] SentryId is empty, feedback will not be sent!", LogType.Error,
547+
Logger.LogWriteLine("[SendExceptionFeedback] SentryId is empty, feedback will not be sent!", LogType.Error,
548548
true);
549+
return false;
550+
}
551+
552+
if (!IsEnabled)
553+
{
554+
Logger.LogWriteLine("[SendExceptionFeedback] Sentry is disabled, feedback will not be sent!",
555+
LogType.Error, true);
556+
return false;
549557
}
550558

551559
var sId = new SentryId(sentryId);
552560
SentrySdk.CaptureFeedback(feedback, userEmail, user, null, null, sId);
561+
return true;
553562
}
554563

555-
public static void SendGenericFeedback(string feedback, string userEmail, string user)
564+
public static bool SendGenericFeedback(string feedback, string userEmail, string user)
556565
{
566+
if (!IsEnabled)
567+
{
568+
Logger.LogWriteLine("[SendGenericFeedback] Sentry is disabled, feedback will not be sent!",
569+
LogType.Error, true);
570+
return false;
571+
}
572+
557573
SentrySdk.CaptureFeedback(feedback, userEmail, user);
574+
return true;
558575
}
559576

560577
[GeneratedRegex(@"(?<=\bat\s)(CollapseLauncher|Hi3Helper)\.[^\s(]+", RegexOptions.Compiled)]

Hi3Helper.Core/Lang/Locale/LangMisc.cs

+5
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,11 @@ public sealed partial class LangMisc
152152
public string ExceptionFeedbackTemplate_Email { get; set; } = LangFallback?._Misc.ExceptionFeedbackTemplate_Email;
153153
public string ExceptionFeedbackTemplate_Message { get; set; } = LangFallback?._Misc.ExceptionFeedbackTemplate_Message;
154154

155+
public string Feedback { get; set; } = LangFallback?._Misc.Feedback;
156+
public string FeedbackSending { get; set; } = LangFallback?._Misc.FeedbackSending;
157+
public string FeedbackSent { get; set; } = LangFallback?._Misc.FeedbackSent;
158+
public string FeedbackSendFailure { get; set; } = LangFallback?._Misc.FeedbackSendFailure;
159+
155160
public string Tag_Deprecated { get; set; } = LangFallback?._Misc.Tag_Deprecated;
156161

157162
public string Generic_GameFeatureDeprecation { get; set; } = LangFallback?._Misc.Generic_GameFeatureDeprecation;

Hi3Helper.Core/Lang/en_US.json

+5
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,11 @@
832832
"ExceptionFeedbackTemplate_Email": "Email (Optional):",
833833
"ExceptionFeedbackTemplate_Message": "Insert your feedback after this line",
834834

835+
"Feedback": "User Feedback",
836+
"FeedbackSending": "Sending your feedback...",
837+
"FeedbackSent": "Feedback sent!",
838+
"FeedbackSendFailure": "Failed to send feedback! Check logs/console for more info.",
839+
835840
"Tag_Deprecated": "Deprecated",
836841
"Generic_GameFeatureDeprecation": "Due to unforeseen game changes, this feature has been deprecated and will be removed in the future. Using this feature may cause unexpected behavior."
837842
},

0 commit comments

Comments
 (0)