Implementation
const PLUGIN_SETTINGS = {
'common': [
// Geolocation
{'name': 'desiredAccuracy', 'group': 'geolocation', 'dataType': 'integer', 'inputType': 'select', 'labels': ['NAVIGATION', 'HIGH', 'LOW', 'VERY_LOW', 'LOWEST'], 'values': [-2, -1, 10, 100, 1000], 'defaultValue': 0 },
{'name': 'distanceFilter', 'group': 'geolocation', 'dataType': 'integer', 'inputType': 'select', 'values': [0, 10, 20, 50, 100, 500], 'defaultValue': 20 },
{'name': 'disableElasticity', 'group': 'geolocation', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': false},
{'name': 'elasticityMultiplier', 'group': 'geolocation', 'dataType': 'integer', 'inputType': 'select', 'values': [0, 1, 2, 3, 5, 10], 'defaultValue': 1},
{'name': 'geofenceProximityRadius', 'group': 'geolocation', 'dataType': 'integer', 'inputType': 'select', 'values': [1000, 1500, 2000, 5000, 10000, 100000], 'defaultValue': 1000 },
{'name': 'stopAfterElapsedMinutes', 'group': 'geolocation', 'dataType': 'integer', 'inputType': 'select', 'values': [-1, 0, 1, 2, 5, 10, 15], 'defaultValue': 0},
{'name': 'desiredOdometerAccuracy', 'group': 'geolocation', 'dataType': 'integer', 'inputType': 'select', 'values': [10, 20, 50, 100, 500], 'defaultValue': 100},
// Activity Recognition
{'name': 'activityRecognitionInterval', 'group': 'activity recognition', 'dataType': 'integer', 'inputType': 'select', 'values': [0, 1000, 5000, 10000, 30000], 'defaultValue': 10000},
{'name': 'stopTimeout', 'group': 'activity recognition', 'dataType': 'integer', 'inputType': 'select', 'values': [0, 1, 5, 10, 15], 'defaultValue': 1},
// HTTP & Persistence
{'name': 'url', 'group': 'http', 'inputType': 'text', 'dataType': 'string', 'defaultValue': 'http://your.server.com/endpoint'},
{'name': 'autoSync', 'group': 'http', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': true},
{'name': 'autoSyncThreshold', 'group': 'http', 'dataType': 'integer', 'inputType': 'select', 'values': [0, 5, 10, 25, 50, 100], 'defaultValue': 0},
{'name': 'batchSync', 'group': 'http', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': false},
{'name': 'maxBatchSize', 'group': 'http', 'dataType': 'integer', 'inputType': 'select', 'values': [-1, 50, 100, 250, 500], 'defaultValue': 250},
{'name': 'maxRecordsToPersist', 'group': 'http', 'dataType': 'integer', 'inputType': 'select', 'values': [-1, 0, 1, 10, 100, 1000], 'defaultValue': -1},
{'name': 'maxDaysToPersist', 'group': 'http', 'dataType': 'integer', 'inputType': 'select', 'values': [-1, 1, 2, 3, 4, 5, 6, 7], 'defaultValue': -1},
// Application
{'name': 'stopOnTerminate', 'group': 'application', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': true},
{'name': 'startOnBoot', 'group': 'application', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': false},
{'name': 'heartbeatInterval', 'group': 'application', 'dataType': 'integer', 'inputType': 'select', 'values': [-1, 60, (2*60), (5*60), (15*60)], 'defaultValue': 60},
// Logging & Debug
{'name': 'debug', 'group': 'debug', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': true},
{'name': 'logLevel', 'group': 'debug', 'dataType': 'integer', 'inputType': 'select', 'values': [0, 1, 2, 3, 4, 5], 'labels': ['OFF', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'VERBOSE'], 'defaultValue': 'VERBOSE'},
{'name': 'logMaxDays', 'group': 'debug', 'dataType': 'integer', 'inputType': 'select', 'values': [1, 2, 3, 4, 5, 6, 7], 'defaultValue': 3}
],
'ios': [
// Geolocation
{'name': 'stationaryRadius', 'group': 'geolocation', 'dataType': 'integer', 'inputType': 'select', 'values': [0, 25, 50, 100, 500, 1000, 5000], 'defaultValue': 25 },
{'name': 'activityType', 'group': 'geolocation', 'dataType': 'integer', 'inputType': 'select', 'values': [1, 2, 3, 4], 'labels': ['OTHER', 'AUTOMOTIVE_NAVIGATION', 'FITNESS', 'OTHER_NAVIGATION'], 'defaultValue': 'OTHER'},
{'name': 'useSignificantChangesOnly', 'group': 'geolocation', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': false},
// Application
{'name': 'preventSuspend', 'group': 'application', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': false},
// Activity Recognition
{'name': 'disableStopDetection', 'group': 'activity recognition', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': false},
{'name': 'stopDetectionDelay', 'group': 'activity recognition', 'dataType': 'integer', 'inputType': 'select', 'values': [0, 1, 5, 10, 15], 'defaultValue': 0}
],
'android': [
// Geolocation
{'name': 'locationUpdateInterval', 'group': 'geolocation', 'dataType': 'integer', 'inputType': 'select', 'values': [0, 1000, 5000, 10000, 30000, 60000], 'defaultValue': 5000},
{'name': 'fastestLocationUpdateInterval', 'group': 'geolocation', 'dataType': 'integer', 'inputType': 'select', 'values': [0, 1000, 5000, 10000, 30000, 60000], 'defaultValue': 1000},
{'name': 'deferTime', 'group': 'geolocation', 'dataType': 'integer', 'inputType': 'select', 'values': [0, (10*1000), (30*1000), (60*1000), (5*60*1000)], 'defaultValue': 0},
// Activity Recognition
// Application
{'name': 'enableHeadless', 'group': 'application', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': true},
{'name': 'foregroundService', 'group': 'application', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': false},
{'name': 'forceReloadOnMotionChange', 'group': 'application', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': false},
{'name': 'forceReloadOnLocationChange', 'group': 'application', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': false},
{'name': 'forceReloadOnGeofence', 'group': 'application', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': false},
{'name': 'forceReloadOnHeartbeat', 'group': 'application', 'dataType': 'boolean', 'inputType': 'toggle', 'values': [true, false], 'defaultValue': false},
{'name': 'notificationPriority', 'group': 'application', 'dataType': 'string', 'inputType': 'select', 'values': [0, 1, -1, 2, -2], 'labels': ['DEFAULT', 'HIGH', 'LOW', 'MAX', 'MIN'], 'defaultValue': 'DEFAULT'}
]
}