Report installed PWA status in rageshakes, analytics

This adds installed PWA status reporting to rageshakes and analytics, as well as
cleaning up some related strings.
This commit is contained in:
J. Ryan Stinnett 2020-02-14 14:58:37 +00:00
parent e2b7be84b2
commit ca4f591cb6
3 changed files with 32 additions and 12 deletions

View file

@ -64,7 +64,7 @@ const customVariables = {
}, },
'App Version': { 'App Version': {
id: 2, id: 2,
expl: _td('The version of Riot.im'), expl: _td('The version of Riot'),
example: '15.0.0', example: '15.0.0',
}, },
'User Type': { 'User Type': {
@ -87,11 +87,6 @@ const customVariables = {
expl: _td('Whether or not you\'re using the Richtext mode of the Rich Text Editor'), expl: _td('Whether or not you\'re using the Richtext mode of the Rich Text Editor'),
example: 'off', example: 'off',
}, },
'Breadcrumbs': {
id: 9,
expl: _td("Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)"),
example: 'disabled',
},
'Homeserver URL': { 'Homeserver URL': {
id: 7, id: 7,
expl: _td('Your homeserver\'s URL'), expl: _td('Your homeserver\'s URL'),
@ -102,6 +97,16 @@ const customVariables = {
expl: _td('Your identity server\'s URL'), expl: _td('Your identity server\'s URL'),
example: 'https://vector.im', example: 'https://vector.im',
}, },
'Breadcrumbs': {
id: 9,
expl: _td("Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)"),
example: 'disabled',
},
'Installed PWA': {
id: 10,
expl: _td("Whether you're using Riot as an installed Progressive Web App"),
example: 'false',
},
}; };
function whitelistRedact(whitelist, str) { function whitelistRedact(whitelist, str) {
@ -190,6 +195,13 @@ class Analytics {
this._setVisitVariable('Instance', window.location.pathname); this._setVisitVariable('Instance', window.location.pathname);
} }
let installedPWA = "unknown";
try {
// Known to work at least for desktop Chrome
installedPWA = window.matchMedia('(display-mode: standalone)').matches;
} catch (e) { }
this._setVisitVariable('Installed PWA', installedPWA);
// start heartbeat // start heartbeat
this._heartbeatIntervalID = window.setInterval(this.ping.bind(this), HEARTBEAT_INTERVAL); this._heartbeatIntervalID = window.setInterval(this.ping.bind(this), HEARTBEAT_INTERVAL);
} }
@ -328,7 +340,7 @@ class Analytics {
}, },
), ),
}, },
{ expl: _td('Your User Agent'), value: navigator.userAgent }, { expl: _td('Your user agent'), value: navigator.userAgent },
{ expl: _td('Your device resolution'), value: resolution }, { expl: _td('Your device resolution'), value: resolution },
]; ];
@ -337,7 +349,7 @@ class Analytics {
title: _t('Analytics'), title: _t('Analytics'),
description: <div className="mx_AnalyticsModal"> description: <div className="mx_AnalyticsModal">
<div> <div>
{ _t('The information being sent to us to help make Riot.im better includes:') } { _t('The information being sent to us to help make Riot better includes:') }
</div> </div>
<table> <table>
{ rows.map((row) => <tr key={row[0]}> { rows.map((row) => <tr key={row[0]}>

View file

@ -5,21 +5,22 @@
"Failed to verify email address: make sure you clicked the link in the email": "Failed to verify email address: make sure you clicked the link in the email", "Failed to verify email address: make sure you clicked the link in the email": "Failed to verify email address: make sure you clicked the link in the email",
"Add Phone Number": "Add Phone Number", "Add Phone Number": "Add Phone Number",
"The platform you're on": "The platform you're on", "The platform you're on": "The platform you're on",
"The version of Riot.im": "The version of Riot.im", "The version of Riot": "The version of Riot",
"Whether or not you're logged in (we don't record your username)": "Whether or not you're logged in (we don't record your username)", "Whether or not you're logged in (we don't record your username)": "Whether or not you're logged in (we don't record your username)",
"Your language of choice": "Your language of choice", "Your language of choice": "Your language of choice",
"Which officially provided instance you are using, if any": "Which officially provided instance you are using, if any", "Which officially provided instance you are using, if any": "Which officially provided instance you are using, if any",
"Whether or not you're using the Richtext mode of the Rich Text Editor": "Whether or not you're using the Richtext mode of the Rich Text Editor", "Whether or not you're using the Richtext mode of the Rich Text Editor": "Whether or not you're using the Richtext mode of the Rich Text Editor",
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)",
"Your homeserver's URL": "Your homeserver's URL", "Your homeserver's URL": "Your homeserver's URL",
"Your identity server's URL": "Your identity server's URL", "Your identity server's URL": "Your identity server's URL",
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)",
"Whether you're using Riot as an installed Progressive Web App": "Whether you're using Riot as an installed Progressive Web App",
"e.g. %(exampleValue)s": "e.g. %(exampleValue)s", "e.g. %(exampleValue)s": "e.g. %(exampleValue)s",
"Every page you use in the app": "Every page you use in the app", "Every page you use in the app": "Every page you use in the app",
"e.g. <CurrentPageURL>": "e.g. <CurrentPageURL>", "e.g. <CurrentPageURL>": "e.g. <CurrentPageURL>",
"Your User Agent": "Your User Agent", "Your user agent": "Your user agent",
"Your device resolution": "Your device resolution", "Your device resolution": "Your device resolution",
"Analytics": "Analytics", "Analytics": "Analytics",
"The information being sent to us to help make Riot.im better includes:": "The information being sent to us to help make Riot.im better includes:", "The information being sent to us to help make Riot better includes:": "The information being sent to us to help make Riot better includes:",
"Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.", "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.",
"Error": "Error", "Error": "Error",
"Unable to load! Check your network connectivity and try again.": "Unable to load! Check your network connectivity and try again.", "Unable to load! Check your network connectivity and try again.": "Unable to load! Check your network connectivity and try again.",

View file

@ -67,6 +67,12 @@ export default async function sendBugReport(bugReportEndpoint, opts) {
userAgent = window.navigator.userAgent; userAgent = window.navigator.userAgent;
} }
let installedPWA = "UNKNOWN";
try {
// Known to work at least for desktop Chrome
installedPWA = window.matchMedia('(display-mode: standalone)').matches;
} catch (e) { }
const client = MatrixClientPeg.get(); const client = MatrixClientPeg.get();
console.log("Sending bug report."); console.log("Sending bug report.");
@ -76,6 +82,7 @@ export default async function sendBugReport(bugReportEndpoint, opts) {
body.append('app', 'riot-web'); body.append('app', 'riot-web');
body.append('version', version); body.append('version', version);
body.append('user_agent', userAgent); body.append('user_agent', userAgent);
body.append('installed_pwa', installedPWA);
if (client) { if (client) {
body.append('user_id', client.credentials.userId); body.append('user_id', client.credentials.userId);