Merge pull request #86 from MycroftAI/feature/add-data-collection-info

Add data collection info
pull/87/head^2
Chris Veilleux 2022-07-29 14:24:08 -05:00 committed by GitHub
commit 16dcdaac8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 535 additions and 119 deletions

View File

@ -30,6 +30,7 @@ import { ProfileModule } from './modules/profile/profile.module';
import { SharedModule as SharedLibModule } from 'shared';
import { SharedModule } from 'shared';
import { SkillModule } from './modules/skill/skill.module';
import { PersonalDataModule } from './modules/personal-data/personal-data.module';
@NgModule(
{
@ -41,6 +42,7 @@ import { SkillModule } from './modules/skill/skill.module';
GlobalnavModule,
HttpClientModule,
DeviceModule,
PersonalDataModule,
ProfileModule,
SharedLibModule,
SharedModule,

View File

@ -0,0 +1,16 @@
<mat-card>
<mat-card-header>
<fa-icon mat-card-avatar [icon]="addDeviceIcon"></fa-icon>
<mat-card-title>Add Mycroft Device</mat-card-title>
</mat-card-header>
<mat-card-content>
<p class="mat-body">
You just got your new device with Mycroft installed. Congratulations! Pairing your
device with Mycroft's servers provides you with instant access to software updates,
speech transcription, weather and other services.
</p>
</mat-card-content>
<mat-card-actions>
<a mat-button [href]="addDeviceUrl">ADD DEVICE</a>
</mat-card-actions>
</mat-card>

View File

@ -0,0 +1,5 @@
@import "components/cards";
mat-card {
@include selene-card;
}

View File

@ -0,0 +1,21 @@
import { Component, OnInit } from '@angular/core';
import { faPlugCirclePlus } from '@fortawesome/free-solid-svg-icons';
import { environment } from '@account/environments/environment';
@Component({
selector: 'account-dashboard-device',
templateUrl: './dashboard-device.component.html',
styleUrls: ['./dashboard-device.component.scss']
})
export class DashboardDeviceComponent implements OnInit {
public addDeviceIcon = faPlugCirclePlus;
public addDeviceUrl = environment.mycroftUrls.account + '/devices/add';
constructor() { }
ngOnInit(): void {
}
}

View File

@ -0,0 +1,20 @@
<mat-card>
<mat-card-header>
<fa-icon mat-card-avatar [icon]="downloadIcon"></fa-icon>
<mat-card-title>Install New Skills</mat-card-title>
</mat-card-header>
<mat-card-content>
<p class="mat-body">
Mycroft devices include pre-installed essential skills like Timers, Alarms
and News. There are many other skills available built by the Mycroft team or
our developer community. Skills can be fun (ISS Tracker), informational
(National Parks), or useful (Home Assistant).
<p class="mat-body">
Visit the Marketplace for a list of Mycroft-approved skills. To install,
say "Hey Mycroft, install" followed by the skill name.
</p>
</mat-card-content>
<mat-card-actions>
<a mat-button [href]="marketplaceUrl">SKILL MARKETPLACE</a>
</mat-card-actions>
</mat-card>

View File

@ -0,0 +1,5 @@
@import "components/cards";
mat-card {
@include selene-card;
}

View File

@ -0,0 +1,21 @@
import { Component, OnInit } from '@angular/core';
import { faDownload } from '@fortawesome/free-solid-svg-icons';
import { environment } from '@account/environments/environment';
@Component({
selector: 'account-dashboard-marketplace',
templateUrl: './dashboard-marketplace.component.html',
styleUrls: ['./dashboard-marketplace.component.scss']
})
export class DashboardMarketplaceComponent implements OnInit {
public downloadIcon = faDownload;
public marketplaceUrl = environment.mycroftUrls.marketplace;
constructor() { }
ngOnInit(): void {
}
}

View File

@ -0,0 +1,34 @@
<mat-card *ngIf="account.membership">
<mat-card-header>
<fa-icon [icon]="membershipIcon"></fa-icon>
</mat-card-header>
<mat-card-title>Mycroft thanks you!</mat-card-title>
<mat-card-content>
<p class="mat-body">
Your support makes a big difference. Thanks to you and other Mycroft supporters,
we can continue building upon the Mycroft experience. It is also motivating
knowing there is a community of people who believe in the same things we do.
</p>
</mat-card-content>
</mat-card>
<mat-card *ngIf="!account.membership">
<mat-card-header>
<fa-icon mat-card-avatar [icon]="membershipIcon"></fa-icon>
<mat-card-title>Become a Member</mat-card-title>
</mat-card-header>
<mat-card-content>
<p class="mat-body">
Mycroft's voice assistant software is open source, which means it is free to use and
the underlying source code is available to the public. Our entire platform is free
of advertisements. The data we collect, with your consent, is not sold to anyone.
<p class="mat-body">
For less than one cup of coffee a month, you can help with the costs of our servers,
services, and ongoing development. All of which all improve Mycroft's performance
and user experience.
</p>
</mat-card-content>
<mat-card-actions>
<a mat-button [href]="profileUrl">MEMBERSHIP OPTIONS</a>
</mat-card-actions>
</mat-card>

View File

@ -0,0 +1,5 @@
@import "components/cards";
mat-card {
@include selene-card;
}

View File

@ -0,0 +1,23 @@
import { Component, Input, OnInit } from '@angular/core';
import { faAward } from '@fortawesome/free-solid-svg-icons';
import { environment } from '@account/environments/environment';
import { Account } from '@account/models/account.model';
@Component({
selector: 'account-dashboard-membership',
templateUrl: './dashboard-membership.component.html',
styleUrls: ['./dashboard-membership.component.scss']
})
export class DashboardMembershipComponent implements OnInit {
@Input() account: Account;
public membershipIcon = faAward;
public profileUrl = environment.mycroftUrls.account + '/profile';
constructor() { }
ngOnInit(): void {
}
}

View File

@ -0,0 +1,20 @@
<mat-card>
<mat-card-header>
<fa-icon mat-card-avatar [icon]="privacyIcon"></fa-icon>
<mat-card-title>Your Privacy is Our Policy</mat-card-title>
</mat-card-header>
<mat-card-content>
<p class="mat-body">
Mycroft only collects the personally identifiable information (PII) necessary to
deliver a quality user experience when interacting with the voice assistant. Any
PII we collect is stored securely on our servers. It is not shared with anyone.
<p class="mat-body">
We continually investigate solutions to further minimize the PII we collect. We
also strive to be transparent about the data we do collect and why it is collected.
To learn more about the go to My Data.
</p>
</mat-card-content>
<mat-card-actions>
<a mat-button [href]="personalDataUrl">MY DATA</a>
</mat-card-actions>
</mat-card>

View File

@ -0,0 +1,7 @@
@import "components/cards";
mat-card {
@include selene-card;
max-width: 800px;
}

View File

@ -0,0 +1,21 @@
import { Component, OnInit } from '@angular/core';
import { faUserLock } from '@fortawesome/free-solid-svg-icons';
import { environment } from '@account/environments/environment';
@Component({
selector: 'account-dashboard-privacy',
templateUrl: './dashboard-privacy.component.html',
styleUrls: ['./dashboard-privacy.component.scss']
})
export class DashboardPrivacyComponent implements OnInit {
public privacyIcon = faUserLock;
public personalDataUrl = environment.mycroftUrls.account + '/personal-data';
constructor() { }
ngOnInit(): void {
}
}

View File

@ -0,0 +1,16 @@
<mat-card>
<mat-card-header>
<fa-icon mat-card-avatar [icon]="settingsIcon"></fa-icon>
<mat-card-title>Configure Skills</mat-card-title>
</mat-card-header>
<mat-card-content>
<p class="mat-body">
Some skills include settings that can change how the skill behaves or provide
information to the skill that will improve the user experience. To change the
settings of your skills, for instance the sound of your alarm, go to Skill Settings.
</p>
</mat-card-content>
<mat-card-actions>
<a mat-button [href]="settingsUrl">SKILL SETTINGS</a>
</mat-card-actions>
</mat-card>

View File

@ -0,0 +1,5 @@
@import "components/cards";
mat-card {
@include selene-card;
}

View File

@ -0,0 +1,21 @@
import { Component, OnInit } from '@angular/core';
import { faGear } from '@fortawesome/free-solid-svg-icons';
import { environment } from '@account/environments/environment';
@Component({
selector: 'account-dashboard-skill',
templateUrl: './dashboard-skill.component.html',
styleUrls: ['./dashboard-skill.component.scss']
})
export class DashboardSkillComponent implements OnInit {
public settingsIcon = faGear;
public settingsUrl = environment.mycroftUrls.account + '/skills';
constructor() { }
ngOnInit(): void {
}
}

View File

@ -1,65 +1,7 @@
<div id="dashboard" fxLayout="row" fxLayoutAlign="center" fxLayout.xs="column" fxLayoutGap="16px">
<mat-card *ngIf="account.membership" fxFlex="40">
<mat-card-header>
<fa-icon [icon]="awardIcon"></fa-icon>
</mat-card-header>
<mat-card-title>Mycroft likes you</mat-card-title>
<mat-card-content>
<p class="mat-body">
Your support makes a big difference. Thanks to you and other Mycroft supporters,
we can continue building upon the Mycroft experience. It is also motivating
knowing there is a community of people who believe in the same things we do.
</p>
</mat-card-content>
<!-- Commented out until premium voices are available -->
<!-- <mat-card-actions>
<a mat-button [href]="voicesUrl">CHECK OUT PREMIUM VOICES</a>
</mat-card-actions> -->
</mat-card>
<mat-card *ngIf="!account.membership" fxFlex="40">
<mat-card-header>
<fa-icon [icon]="awardIcon"></fa-icon>
</mat-card-header>
<mat-card-title>Become a Member</mat-card-title>
<mat-card-content>
<p class="mat-body">
Mycroft's voice assistant software is open source, which means it is free to use and
the underlying source code is available to the public. Our entire platform is free
of advertisements. The data we collect from those that opt in to our open dataset
is not sold to anyone.
<p class="mat-body">
For less than one cup of coffee a month, you can help support our server costs,
hosting, and ongoing development. All of which all improve Mycroft's performance
and user experience.
</p>
</mat-card-content>
<mat-card-actions>
<a mat-button [href]="accountUrl">MONTHLY MEMBERSHIP $1.99</a>
<a mat-button [href]="accountUrl">YEARLY MEMBERSHIP $19.99</a>
</mat-card-actions>
</mat-card>
<mat-card fxFlex="40">
<mat-card-header>
<fa-icon [icon]="downloadIcon"></fa-icon>
</mat-card-header>
<mat-card-title>Install New Skills</mat-card-title>
<mat-card-content>
<p class="mat-body">
Your device comes with a set of pre-installed skills like Timers and Wikipedia.
To change the settings of your skills, for instance the sound of your alarm,
go to Skill Settings.
</p>
<p class="mat-body">
Our open source community extends the functionality of Mycroft. Their efforts have
produced skills like Fairytalez and ISS Tracker. To install new skills,
visit the Marketplace.
</p>
</mat-card-content>
<mat-card-actions>
<a mat-button [href]="marketplaceUrl">SKILL MARKETPLACE</a>
<a mat-button [href]="settingsUrl">SKILL SETTINGS</a>
</mat-card-actions>
</mat-card>
<div id="dashboard" fxLayout="row wrap" fxLayoutAlign="center" fxLayout.xs="column">
<account-dashboard-privacy fxFlex="75"></account-dashboard-privacy>
<account-dashboard-device fxFlex="45"></account-dashboard-device>
<account-dashboard-skill fxFlex="45"></account-dashboard-skill>
<account-dashboard-membership fxFlex="45" [account]="account"></account-dashboard-membership>
<account-dashboard-marketplace fxFlex="45"></account-dashboard-marketplace>
</div>

View File

@ -1,48 +1,9 @@
@import "@angular/material/theming";
@import "mycroft-colors";
@import "components/buttons";
iframe {
min-width: 350px;
width: 100%;
height: 100vh;
}
#dashboard {
max-width: 1200px;
margin-left: auto;
margin-right: auto;
}
mat-card {
min-height: 540px;
margin: 16px;
max-width: 540px;
min-width: 300px;
fa-icon {
font-size: 60px;
color: mat-color($mycroft-primary)
}
mat-card-title {
font-size: 40px;
font-weight: bolder;
padding: 16px;
}
mat-card-content {
padding: 16px;
.mat-body {
font-size: 16px;
}
}
mat-card-actions {
padding: 16px;
a {
@include action-button-primary;
margin: 8px;
}
}
}

View File

@ -19,10 +19,7 @@ and limitations under the License.
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { faAward, faDownload } from '@fortawesome/free-solid-svg-icons';
import { Account } from '@account/models/account.model';
import { environment } from '@account/environments/environment';
@Component({
selector: 'account-dashboard',
@ -31,12 +28,6 @@ import { environment } from '@account/environments/environment';
})
export class DashboardComponent implements OnInit {
public account: Account;
public awardIcon = faAward;
public downloadIcon = faDownload;
public marketplaceUrl = environment.mycroftUrls.marketplace;
public settingsUrl = environment.mycroftUrls.account + '/skills';
public voicesUrl = environment.mycroftUrls.mimic;
public accountUrl = environment.mycroftUrls.account + '/profile';
constructor(private route: ActivatedRoute) {
}

View File

@ -25,10 +25,20 @@ import { MatCardModule } from '@angular/material/card';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { DashboardComponent } from './dashboard.component';
import { DashboardPrivacyComponent } from './components/dashboard-privacy/dashboard-privacy.component';
import { DashboardDeviceComponent } from './components/dashboard-device/dashboard-device.component';
import { DashboardSkillComponent } from './components/dashboard-skill/dashboard-skill.component';
import { DashboardMembershipComponent } from './components/dashboard-membership/dashboard-membership.component';
import { DashboardMarketplaceComponent } from './components/dashboard-marketplace/dashboard-marketplace.component';
@NgModule({
declarations: [
DashboardComponent
DashboardComponent,
DashboardPrivacyComponent,
DashboardDeviceComponent,
DashboardSkillComponent,
DashboardMembershipComponent,
DashboardMarketplaceComponent
],
imports: [
CommonModule,

View File

@ -0,0 +1,36 @@
/*! *****************************************************************************
SPDX-License-Identifier: Apache-2.0
Copyright (c) Mycroft AI Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { PersonalDataComponent } from './personal-data.component';
const personalDataRoutes: Routes = [
{path: 'personal-data', component: PersonalDataComponent},
];
@NgModule({
imports: [
RouterModule.forChild(personalDataRoutes)
],
exports: [
RouterModule
]
})
export class PersonalDataRoutingModule { }

View File

@ -0,0 +1,90 @@
<h1 class="mat-h1" fxLayoutAlign="center">Data Mycroft Collects</h1>
<div class="personal-data-page" fxLayout="row wrap" fxLayoutAlign="center" fxLayout.xs="column" fxLayoutGap="16px">
<mat-card fxFlex="70">
<mat-card-header>
<fa-icon mat-card-avatar [icon]="emailAddressIcon"></fa-icon>
<mat-card-title>Email Address</mat-card-title>
</mat-card-header>
<mat-card-content>
<p class="mat-body">
When you created this account, you provided your email address. It is the method we
use to identify users. It is also used to send you confirmation messages when
actions are taken against your account. For example, a password reset request is
sent to this email address.
<p class="mat-body">
We do not use your email address for marketing purposes, unless you used the same
email address to sign up for our newsletter or other such mailing list. Your email
address is never shared with third parties.
</p>
</mat-card-content>
</mat-card>
<mat-card fxFlex="70">
<mat-card-header>
<fa-icon mat-card-avatar [icon]="locationIcon"></fa-icon>
<mat-card-title>Geographical Location</mat-card-title>
</mat-card-header>
<mat-card-content>
<p class="mat-body">
When you register a device with Mycroft, the Add Device screen asks for the
geographical location of yor device. This data is synchronized to your device when
it is registered and when it is changed via the Edit Device screen. Your device
uses this data for location-specific services such as date, time and weather.
</p>
</mat-card-content>
</mat-card>
<mat-card fxFlex="70">
<mat-card-header>
<fa-icon mat-card-avatar [icon]="dataPresentationIcon"></fa-icon>
<mat-card-title>Data Presentation</mat-card-title>
</mat-card-header>
<mat-card-content>
<p class="mat-body">
When you register your first device, you are asked for your preferred date format,
time format, and measurement system. This data is synchronized to each of your
devices when they are registered. If the values of these preferences change, the
new values are synchronized to all your devices. Your device uses this data for
when formatting data for presentation such as date, time and weather.
</p>
</mat-card-content>
</mat-card>
</div>
<h1 class="mat-h1" fxLayoutAlign="center">Data Sent to Third Parties</h1>
<div class="personal-data-page" fxLayout="row wrap" fxLayoutAlign="center" fxLayout.xs="column" fxLayoutGap="16px">
<mat-card fxFlex="70">
<mat-card-header>
<fa-icon mat-card-avatar [icon]="voiceIcon"></fa-icon>
<mat-card-title>Speech Transcription</mat-card-title>
</mat-card-header>
<mat-card-content>
<p class="mat-body">
When you issue a command or request to your voice assistant, the audio data is
transcribed into text. The transcription can be performed on your device, but
on-device transcription software does not provide the best user experience.
Transcriptions are more accurate when sent to a third party service provider
over the internet.
<p class="mat-body">
Mycroft has partnered with Assembly AI to provide a privacy focused solution for
speech transcription. Your voice request will be sent for transcription, but will
not be saved.
</p>
</mat-card-content>
</mat-card>
<mat-card fxFlex="70">
<mat-card-header>
<fa-icon mat-card-avatar [icon]="queryIcon"></fa-icon>
<mat-card-title>Answering Queries</mat-card-title>
</mat-card-header>
<mat-card-content>
<p class="mat-body">
When you ask the Mycroft voice assistant a question that cannot be answered by one
of the installed skills, a textual representation of the question is sent to
services like Wolfram Alpha, Duck Duck Go and Wikipedia in an attempt to find the
answer.
</p>
</mat-card-content>
</mat-card>
</div>

View File

@ -0,0 +1,42 @@
@import "@angular/material/theming";
@import "mycroft-colors";
@import "components/buttons";
.personal-data-page {
max-width: 1200px;
margin-left: auto;
margin-right: auto;
}
.mat-h1 {
color: mat-color($mycroft-accent);
font-size: 32px;
margin-top: 32px;
}
mat-card {
border-radius: 12px;
margin: 16px;
max-width: 500px;
min-width: 300px;
mat-card-header {
fa-icon {
font-size: 32px;
color: mat-color($mycroft-primary);
padding-left: 16px;
padding-top: 8px;
}
mat-card-title {
font-weight: bold;
padding-top: 16px;
}
}
mat-card-content {
padding: 16px;
}
}

View File

@ -0,0 +1,22 @@
import { Component, OnInit } from '@angular/core';
import { faComments, faEarthAmericas, faEnvelope, faGauge, faQuestionCircle } from '@fortawesome/free-solid-svg-icons';
@Component({
selector: 'account-personal-data',
templateUrl: './personal-data.component.html',
styleUrls: ['./personal-data.component.scss']
})
export class PersonalDataComponent implements OnInit {
public dataPresentationIcon = faGauge;
public emailAddressIcon = faEnvelope;
public locationIcon = faEarthAmericas;
public queryIcon = faQuestionCircle;
public voiceIcon = faComments;
constructor() { }
ngOnInit(): void {
}
}

View File

@ -0,0 +1,43 @@
/*! *****************************************************************************
SPDX-License-Identifier: Apache-2.0
Copyright (c) Mycroft AI Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FlexLayoutModule } from '@angular/flex-layout';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { PersonalDataComponent } from './personal-data.component';
import { PersonalDataRoutingModule } from './personal-data-routing.module';
@NgModule({
declarations: [
PersonalDataComponent
],
imports: [
CommonModule,
FlexLayoutModule,
FontAwesomeModule,
MatButtonModule,
MatCardModule,
PersonalDataRoutingModule
]
})
export class PersonalDataModule { }

View File

@ -18,7 +18,7 @@ and limitations under the License.
import { Component, Input } from '@angular/core';
import { Account } from '../../../../../shared/models/account.model';
import { Account } from '@account/models/account.model';
@Component({
selector: 'account-login-edit',

View File

@ -121,7 +121,7 @@ $mycroft-warn-palette: (
$mycroft-light-theme-background: (
status-bar: map_get($mat-grey, 300),
app-bar: map_get($mat-grey, 100),
background: #f1f3f4,
background: #e4f1fe,
hover: rgba(black, 0.04),
card: white,
dialog: white,

View File

@ -1,17 +1,17 @@
// *****************************************************************************
// SPDX-License-Identifier: Apache-2.0
//
//
//
//
// Copyright (c) Mycroft AI Inc. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use
// this file except in compliance with the License. You may obtain a copy of the
// License at http://www.apache.org/licenses/LICENSE-2.0
//
//
// THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
// MERCHANTABLITY OR NON-INFRINGEMENT.
//
//
// See the Apache Version 2.0 License for specific language governing permissions
// and limitations under the License.
// *****************************************************************************
@ -62,3 +62,40 @@
}
}
}
@mixin selene-card {
border-radius: 12px;
margin: 16px;
max-width: 500px;
min-width: 300px;
//padding: 16px;
mat-card-header {
fa-icon {
font-size: 32px;
color: mat-color($mycroft-primary);
padding-left: 16px;
padding-top: 8px;
}
mat-card-title {
font-weight: bold;
padding-top: 16px;
}
}
mat-card-content {
padding-left: 16px;
padding-right: 16px;
padding-top: 16px;
}
mat-card-actions {
padding-left: 16px;
a {
@include action-button-primary;
margin: 16px;
}
}
}