From e29f358b3b2cd284c313888fea82f3e28467c578 Mon Sep 17 00:00:00 2001 From: Norwin Roosen Date: Mon, 1 Apr 2019 16:43:07 +0200 Subject: [PATCH] allow settings reset --- src/assets/i18n/de.json | 9 +++++++-- src/assets/i18n/en.json | 5 +++++ src/pages/settings/settings.html | 8 ++++++++ src/pages/settings/settings.scss | 4 ++-- src/pages/settings/settings.ts | 29 ++++++++++++++++++++++++++++- src/providers/storage/storage.ts | 11 +++++++++++ 6 files changed, 61 insertions(+), 5 deletions(-) diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index c8ded91..f02d6d8 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -1,4 +1,5 @@ { + "CANCEL": "Abbrechen", "MENU": { "TITLE": "Menü", "ABOUT": "Über", @@ -22,7 +23,7 @@ "BLOCKLY": { "TITLE": "Blockly für senseBox", "BTN_CODE": "Quellcode Ansicht", - "BTN_OTA": "OTA Programmierung" + "BTN_OTA": "OTA Upload" }, "SETTINGS": { "TITLE": "Einstellungen", @@ -30,8 +31,12 @@ "TITLE": "Sprache" }, "LOG_OPTIN": { - "TITLE": "Sende uns automatisch Fehler-Berichte zu", + "TITLE": "Sende uns automatisch Fehlerberichte zu", "TEXT": "Das hilft uns beim Beheben von Fehlern.
Keine persönlichen Daten außer deinem Sketch werden übertragen." + }, + "RESET": { + "TITLE": "App zurücksetzen", + "TEXT": "Dies setzt die Einstellungen zurück und löscht deine Sketche!" } }, "OTAWIZ": { diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index c6eb925..5816779 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -1,4 +1,5 @@ { + "CANCEL": "Cancel", "MENU": { "TITLE": "Menu", "ABOUT": "About", @@ -32,6 +33,10 @@ "LOG_OPTIN": { "TITLE": "Automatically send error reports to us", "TEXT": "These reports help us in troubleshooting issues.
No personal information is collected, except for your Sketch." + }, + "RESET": { + "TITLE": "Reset App", + "TEXT": "This will reset your settings and delete your Sketches!" } }, "OTAWIZ": { diff --git a/src/pages/settings/settings.html b/src/pages/settings/settings.html index e8362c4..90c3492 100644 --- a/src/pages/settings/settings.html +++ b/src/pages/settings/settings.html @@ -31,5 +31,13 @@ + + + diff --git a/src/pages/settings/settings.scss b/src/pages/settings/settings.scss index ee78e1c..b45ee78 100644 --- a/src/pages/settings/settings.scss +++ b/src/pages/settings/settings.scss @@ -1,3 +1,3 @@ -page-settings { - +.error { + color: red !important; } diff --git a/src/pages/settings/settings.ts b/src/pages/settings/settings.ts index a6a1598..1bacf4e 100644 --- a/src/pages/settings/settings.ts +++ b/src/pages/settings/settings.ts @@ -1,8 +1,9 @@ import { Component } from '@angular/core'; -import { IonicPage } from 'ionic-angular'; +import { IonicPage, ActionSheetController } from 'ionic-angular'; import { TranslateService } from '@ngx-translate/core'; import { StorageProvider, SETTINGS } from '../../providers/storage/storage'; +import { DEFAULT_LANG } from '../../constants'; @IonicPage() @@ -14,6 +15,7 @@ export class SettingsPage { settings = {} as any constructor( + public actionCtrl: ActionSheetController, public translate: TranslateService, private storage: StorageProvider, ) { @@ -27,4 +29,29 @@ export class SettingsPage { if (name === 'language') this.translate.use(value) } + + resetStorage() { + const handler = () => { + this.storage.reset() + // update UI state & reset language + this.settings = this.storage.get(SETTINGS) + const lang = this.getPreferredLanguage() + this.storage.get(SETTINGS).language = lang + this.translate.use(lang) + } + + this.actionCtrl.create({ + title: this.translate.instant('SETTINGS.RESET.TEXT'), + buttons: [ + { text: this.translate.instant('CANCEL') }, + { text: this.translate.instant('SETTINGS.RESET.TITLE'), cssClass: 'error', handler }, + ] + }).present() + } + + private getPreferredLanguage () { + const langsAvailable = this.translate.getLangs() + const lang = this.storage.get(SETTINGS).language || this.translate.getBrowserLang() + return langsAvailable.indexOf(lang) === -1 ? DEFAULT_LANG : lang + } } diff --git a/src/providers/storage/storage.ts b/src/providers/storage/storage.ts index 8af4ad5..b3a463e 100644 --- a/src/providers/storage/storage.ts +++ b/src/providers/storage/storage.ts @@ -8,6 +8,11 @@ export class StorageProvider { private cache: Map = new Map() constructor () { + this.init() + } + + init () { + // set up default values this.registerKey(SETTINGS, { logOptin: false }) this.registerKey(LASTSKETCH, '') } @@ -27,4 +32,10 @@ export class StorageProvider { localStorage.setItem(key, JSON.stringify(value)) this.cache[key] = value } + + reset () { + localStorage.clear() + this.cache = new Map() + this.init() + } }