From 16150615917dc3656ce5ad2ee440c30bd5fc9db8 Mon Sep 17 00:00:00 2001 From: Daniel Freiling Date: Tue, 5 Dec 2017 22:38:18 +0100 Subject: [PATCH] Application-Settings: Non-blocking changes (#5091) * fix(app-settings): changes are now non-blocking * chore(app-settings): return result of flush to disk * chore(app-settings): added test for flush --- .../application-settings-tests.ts | 10 ++++++++++ .../application-settings.android.ts | 16 ++++++++++------ .../application-settings.d.ts | 6 ++++++ .../application-settings.ios.ts | 8 ++++---- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/tests/app/application-settings/application-settings-tests.ts b/tests/app/application-settings/application-settings-tests.ts index 4cdea8d7d..0aac00562 100644 --- a/tests/app/application-settings/application-settings-tests.ts +++ b/tests/app/application-settings/application-settings-tests.ts @@ -102,6 +102,16 @@ export var testClear = function () { TKUnit.assert(!appSettings.hasKey(numberKey), "Failed to remove key: " + numberKey); }; +export var testFlush = function () { + appSettings.setString(stringKey, "String value"); + // >> application-settings-flush + var flushed = appSettings.flush(); + // will return boolean indicating whether flush to disk was successful + // << application-settings-flush + TKUnit.assert(flushed, "Flush failed: "+ flushed); + TKUnit.assert(appSettings.hasKey(stringKey), "There is no key: " + stringKey); +}; + export var testInvalidKey = function () { try { appSettings.hasKey(undefined); diff --git a/tns-core-modules/application-settings/application-settings.android.ts b/tns-core-modules/application-settings/application-settings.android.ts index c2687b249..53e1a3ee1 100644 --- a/tns-core-modules/application-settings/application-settings.android.ts +++ b/tns-core-modules/application-settings/application-settings.android.ts @@ -1,7 +1,7 @@ import * as common from "./application-settings-common"; import { getNativeApplication } from "../application"; -var sharedPreferences; +var sharedPreferences: android.content.ISharedPreferences; function ensureSharedPreferences() { if (!sharedPreferences) { sharedPreferences = (getNativeApplication()).getApplicationContext().getSharedPreferences("prefs.db", 0); @@ -49,7 +49,7 @@ export function setBoolean(key: string, value: boolean): void { common.ensureValidValue(value, "boolean"); var editor = sharedPreferences.edit(); editor.putBoolean(key, value); - editor.commit(); + editor.apply(); } export function setString(key: string, value: string): void { @@ -57,7 +57,7 @@ export function setString(key: string, value: string): void { common.ensureValidValue(value, "string"); var editor = sharedPreferences.edit(); editor.putString(key, value); - editor.commit(); + editor.apply(); } export function setNumber(key: string, value: number): void { @@ -65,17 +65,21 @@ export function setNumber(key: string, value: number): void { common.ensureValidValue(value, "number"); var editor = sharedPreferences.edit(); editor.putFloat(key, float(value)); - editor.commit(); + editor.apply(); } export function remove(key: string): void { verify(key); var editor = sharedPreferences.edit(); editor.remove(key); - editor.commit(); + editor.apply(); } export function clear(): void { ensureSharedPreferences(); - sharedPreferences.edit().clear().commit(); + sharedPreferences.edit().clear().apply(); +} + +export var flush = function (): boolean { + return sharedPreferences.edit().commit(); } diff --git a/tns-core-modules/application-settings/application-settings.d.ts b/tns-core-modules/application-settings/application-settings.d.ts index 788076644..12facde11 100644 --- a/tns-core-modules/application-settings/application-settings.d.ts +++ b/tns-core-modules/application-settings/application-settings.d.ts @@ -61,3 +61,9 @@ export function remove(key: string): void; * Removes all values. */ export function clear(): void; + +/** + * Flush all changes to disk synchronously. + * @return {boolean} flag indicating if changes were saved successfully to disk. + */ +export function flush(): boolean; diff --git a/tns-core-modules/application-settings/application-settings.ios.ts b/tns-core-modules/application-settings/application-settings.ios.ts index 1f32c0e22..57e7a19d4 100644 --- a/tns-core-modules/application-settings/application-settings.ios.ts +++ b/tns-core-modules/application-settings/application-settings.ios.ts @@ -39,29 +39,29 @@ export var setBoolean = function (key: string, value: boolean): void { Common.checkKey(key); Common.ensureValidValue(value, "boolean"); userDefaults.setBoolForKey(value, key); - userDefaults.synchronize(); } export var setString = function (key: string, value: string): void { Common.checkKey(key); Common.ensureValidValue(value, "string"); userDefaults.setObjectForKey(value, key); - userDefaults.synchronize(); } export var setNumber = function (key: string, value: number): void { Common.checkKey(key); Common.ensureValidValue(value, "number"); userDefaults.setDoubleForKey(value, key); - userDefaults.synchronize(); } export var remove = function (key: string): void { Common.checkKey(key); userDefaults.removeObjectForKey(key); - userDefaults.synchronize(); } export var clear = function (): void { userDefaults.removePersistentDomainForName(utils.ios.getter(NSBundle, NSBundle.mainBundle).bundleIdentifier); } + +export var flush = function (): boolean { + return userDefaults.synchronize(); +}