[workstation] Writing refinement for Report an Issue and Usage & Diagnostics
Updated writings to improve UX of Report an Issue and Usage &
Diagnostics. It is based on the suggestions we got from the UX writing review with @guinevere.
Change-Id: If4bc8953adcc2166ff022b8012d87e91619c8f02
Reviewed-on: https://fuchsia-review.googlesource.com/c/experiences/+/678352
Commit-Queue: Yeonhee Lee <yhlee@google.com>
Reviewed-by: Charles Whitten <cwhitten@google.com>
Reviewed-by: Sanjay Chouksey <sanjayc@google.com>
diff --git a/session_shells/ermine/internationalization/lib/strings.dart b/session_shells/ermine/internationalization/lib/strings.dart
index eebed96..65fff0a 100644
--- a/session_shells/ermine/internationalization/lib/strings.dart
+++ b/session_shells/ermine/internationalization/lib/strings.dart
@@ -1205,20 +1205,23 @@
'Tooltip text for the wifi toggle warning icon when turning off wifi fails.',
);
- static String get usageDiagnostics => Intl.message('Usage & Diagnostics',
- name: 'usage and diagnostics',
- desc: 'The title for "Usage & Diagnostics" menu in Quick Settings');
-
- static String get enabled => Intl.message(
- 'Enabled',
- name: 'enabled',
- desc: 'A text indicator for enabled feature',
+ static String get usageAndDiagnostics => Intl.message(
+ 'Usage & Diagnostics',
+ name: 'usage and diagnostics',
+ desc:
+ 'The title for "Usage & Diagnostics Sharing" menu in Quick Settings',
);
- static String get disabled => Intl.message(
- 'Disabled',
- name: 'disabled',
- desc: 'A text indicator for disabled feature',
+ static String get sharingOn => Intl.message(
+ 'Sharing on',
+ name: 'sharing on',
+ desc: 'A text indicator of the data sharing opt-in status',
+ );
+
+ static String get sharingOff => Intl.message(
+ 'Sharing off',
+ name: 'sharing off',
+ desc: 'A text indicator of the data sharing opt-out status',
);
static String get helpFuchsia => Intl.message(
@@ -1234,19 +1237,19 @@
desc: 'The text link to the Google\'s privacy and terms webpage.',
);
- static String get enableDataSharingTitle => Intl.message(
- 'Enable Usage & Diagnostics to send feedback',
- name: 'the title for enable usage & diagnostics',
- desc: 'The title for the alert that pops up when the user tries to '
+ static String get turnOnDataSharingTitle => Intl.message(
+ 'Turn on sharing to send feedback',
+ name: 'the title of the alert dialog to turn on data sharing',
+ desc: 'The title of the alert that pops up when the user tries to '
'open User Feedback when the data sharing is disabled',
);
- static String get enableDataSharingBody => Intl.message(
- 'User Feedback is available only when you have consented to sharing '
+ static String get turnOnDataSharingBody => Intl.message(
+ 'Report an Issue is available only when you have consented to sharing '
'usage and diagnostics data. You can update the preference in Quick '
'Settings > Usage & Diagnostics.',
- name: 'the body text for enable usage & diagnostics',
- desc: 'The body text for the alert that pops up when the user tries to '
+ name: 'the body text of the alert dialog to turn on data sharing',
+ desc: 'The body text of the alert that pops up when the user tries to '
'open User Feedback when the data sharing is disabled',
);
@@ -1274,9 +1277,9 @@
'first-time dialog',
);
- static String get acknowledged => Intl.message(
- 'Acknowledged',
- name: 'acknowledged',
+ static String get okGotIt => Intl.message(
+ 'OK, got it',
+ name: 'ok got it',
desc: 'The label of the button on the user feedback first-time dialog',
);
@@ -1287,17 +1290,17 @@
);
static String get noPII => Intl.message(
- 'Please do not include personal information in the summary or '
- 'description unless it is necessary to describe the issue.',
+ 'Please do not include personal information in the description unless '
+ 'it is necessary to describe the issue.',
name: 'noPII',
desc:
'A warning message not to include personal data in the user feedback form',
);
- static String get summary => Intl.message(
- 'Summary',
- name: 'issue summary',
- desc: 'The label for the issue summary input field',
+ static String get issueTitle => Intl.message(
+ 'Issue Title',
+ name: 'issue title',
+ desc: 'The label for the issue title input field',
);
static String get description => Intl.message(
@@ -1326,25 +1329,22 @@
desc: 'The lable of the Submit button',
);
- static String get submittedTitle =>
- Intl.message('Your feedback report is on its way.',
- name: 'user feedback submitted title',
- desc: 'The title for the user feedback submission complete page');
-
- static String get submittedDesc1 => Intl.message(
- 'Thanks for taking the time to submit your report. '
- 'It is successfully filed and you will be able to see the submitted data '
- 'on crash once the upload is done. Here is the UUID of the report:',
- name: 'user feedback submission description 1',
- desc:
- 'The first sentence of the description on the user feedback submission complete page',
+ static String get submittedTitle => Intl.message(
+ 'Feedback has been sent.',
+ name: 'feedback submitted title',
+ desc: 'The title for the user feedback submission complete page',
);
- static String get submittedDesc2 => Intl.message(
- 'You will also be notified when its auto-created Monorail bug is ready.',
- name: 'user feedback submission description 2',
- desc:
- 'The second sentence of the description on the user feedback submission complete page',
+ static String submittedDesc(String id) => Intl.message(
+ 'Thanks for submitting your report. It has been filed successfully and '
+ 'will appear on the crash server when the upload is complete.\n\n'
+ 'This report will also create a Monorail bug. You\'ll be notified by '
+ 'email when the bug is ready.\n\n'
+ 'Report ID: $id',
+ name: 'user feedback submission description',
+ desc: 'The description on the user feedback submission complete page',
+ examples: const {'id': '271649084504292-5ts4-8ew5'},
+ args: [id],
);
static String dataSharingLegalStatement(String legalHelpUrl,
diff --git a/session_shells/ermine/shell/lib/src/services/user_feedback_service.dart b/session_shells/ermine/shell/lib/src/services/user_feedback_service.dart
index 87cb2f5..68c5c34 100644
--- a/session_shells/ermine/shell/lib/src/services/user_feedback_service.dart
+++ b/session_shells/ermine/shell/lib/src/services/user_feedback_service.dart
@@ -15,7 +15,7 @@
late final FeedbackSubmitCallback onSubmit;
late final VoidCallback onError;
- Future<void> submit(String summary, String desc, String username) async {
+ Future<void> submit(String title, String desc, String username) async {
final uptime = zircon.System.clockGetMonotonic();
final eventId = Uuid().v4();
@@ -28,7 +28,7 @@
crashSignature: crashSignature,
annotations: [
Annotation(key: 'feedback.description', value: desc),
- Annotation(key: 'feedback.summary', value: summary),
+ Annotation(key: 'feedback.summary', value: title),
Annotation(key: 'feedback.username', value: username),
],
);
diff --git a/session_shells/ermine/shell/lib/src/states/app_state.dart b/session_shells/ermine/shell/lib/src/states/app_state.dart
index 0b6cca0..fca6a27 100644
--- a/session_shells/ermine/shell/lib/src/states/app_state.dart
+++ b/session_shells/ermine/shell/lib/src/states/app_state.dart
@@ -81,7 +81,7 @@
void launchLicense();
void checkingForUpdatesAlert();
void userFeedbackSubmit(
- {required String desc, required String username, String summary});
+ {required String desc, required String username, String title});
void setScale(double scale);
void dismissDialogs();
diff --git a/session_shells/ermine/shell/lib/src/states/app_state_impl.dart b/session_shells/ermine/shell/lib/src/states/app_state_impl.dart
index 3f0eb50..c62a663 100644
--- a/session_shells/ermine/shell/lib/src/states/app_state_impl.dart
+++ b/session_shells/ermine/shell/lib/src/states/app_state_impl.dart
@@ -436,8 +436,8 @@
void showUserFeedback() async {
if (!settingsState.dataSharingConsentEnabled) {
_displayDialog(AlertDialogInfo(
- title: Strings.enableDataSharingTitle,
- body: Strings.enableDataSharingBody,
+ title: Strings.turnOnDataSharingTitle,
+ body: Strings.turnOnDataSharingBody,
actions: [Strings.close],
width: 714,
));
@@ -464,8 +464,8 @@
_feedbackPage.value = FeedbackPage.ready;
});
},
- actions: [Strings.acknowledged],
- defaultAction: Strings.acknowledged,
+ actions: [Strings.okGotIt],
+ defaultAction: Strings.okGotIt,
width: 790,
));
@@ -489,8 +489,8 @@
void userFeedbackSubmit(
{required String desc,
required String username,
- String summary = 'New user feedback for Workstation'}) {
- userFeedbackService.submit(summary, desc, username);
+ String title = 'New user feedback for Workstation'}) {
+ userFeedbackService.submit(title, desc, username);
}
@override
diff --git a/session_shells/ermine/shell/lib/src/widgets/quick_settings.dart b/session_shells/ermine/shell/lib/src/widgets/quick_settings.dart
index 64ca587..6fac772 100644
--- a/session_shells/ermine/shell/lib/src/widgets/quick_settings.dart
+++ b/session_shells/ermine/shell/lib/src/widgets/quick_settings.dart
@@ -339,13 +339,13 @@
title: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
- Text(Strings.usageDiagnostics),
+ Text(Strings.usageAndDiagnostics),
SizedBox(width: 48),
Expanded(
child: Text(
appState.settingsState.dataSharingConsentEnabled
- ? Strings.enabled
- : Strings.disabled,
+ ? Strings.sharingOn
+ : Strings.sharingOff,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.right,
maxLines: 1,
diff --git a/session_shells/ermine/shell/lib/src/widgets/settings/data_sharing_consent_settings.dart b/session_shells/ermine/shell/lib/src/widgets/settings/data_sharing_consent_settings.dart
index 495c656..32b94ea 100644
--- a/session_shells/ermine/shell/lib/src/widgets/settings/data_sharing_consent_settings.dart
+++ b/session_shells/ermine/shell/lib/src/widgets/settings/data_sharing_consent_settings.dart
@@ -23,7 +23,7 @@
? 'https://policies.google.com/privacy'
: 'https://policies.google.com/privacy?hl=${app.simpleLocale}';
return SettingDetails(
- title: Strings.usageDiagnostics,
+ title: Strings.usageAndDiagnostics,
onBack: state.showAllSettings,
trailing: Switch(
value: state.dataSharingConsentEnabled,
diff --git a/session_shells/ermine/shell/lib/src/widgets/user_feedback.dart b/session_shells/ermine/shell/lib/src/widgets/user_feedback.dart
index 8d0fc23..6d646a9 100644
--- a/session_shells/ermine/shell/lib/src/widgets/user_feedback.dart
+++ b/session_shells/ermine/shell/lib/src/widgets/user_feedback.dart
@@ -47,7 +47,7 @@
final AppState app;
final bool isOutFocused;
final _formKey = GlobalKey<FormState>();
- final _summaryController = TextEditingController();
+ final _titleController = TextEditingController();
final _descController = TextEditingController();
final _usernameController = TextEditingController();
final _descFocusNode = FocusNode();
@@ -88,13 +88,6 @@
Strings.sendFeedback,
style: Theme.of(context).textTheme.headline5,
),
- SizedBox(height: 24),
- // Warning
- Text(
- Strings.noPII,
- style: _theme.textTheme.bodyText1!
- .copyWith(color: _theme.errorColor),
- ),
SizedBox(height: 40),
]),
@@ -107,13 +100,13 @@
key: _formKey,
child: Column(
children: [
- // Summary
+ // IssueTitle
TextFormField(
maxLines: 1,
- controller: _summaryController,
+ controller: _titleController,
autofocus: !isOutFocused,
decoration: InputDecoration(
- labelText: Strings.summary,
+ labelText: Strings.issueTitle,
border: OutlineInputBorder(
borderRadius: BorderRadius.zero),
),
@@ -132,6 +125,7 @@
AutovalidateMode.onUserInteraction,
decoration: InputDecoration(
labelText: '${Strings.description}*',
+ hintText: Strings.noPII,
alignLabelWithHint: true,
border: OutlineInputBorder(
borderRadius: BorderRadius.zero),
@@ -216,7 +210,7 @@
onPressed: () =>
_formKey.currentState?.validate() ?? false
? app.userFeedbackSubmit(
- summary: _summaryController.text,
+ title: _titleController.text,
desc: _descController.text,
username: _usernameController.text,
)
@@ -259,13 +253,7 @@
Text(Strings.submittedTitle,
style: Theme.of(context).textTheme.headline5),
SizedBox(height: 32),
- Text(Strings.submittedDesc1,
- style: Theme.of(context).textTheme.bodyText1),
- SizedBox(height: 24),
- Text(app.feedbackUuid,
- style: Theme.of(context).textTheme.headline6),
- SizedBox(height: 24),
- Text(Strings.submittedDesc2,
+ Text(Strings.submittedDesc(app.feedbackUuid),
style: Theme.of(context).textTheme.bodyText1),
],
),