Package 

Class MiscConfiguration

    • Method Detail

      • getSdkEnabled

         final Boolean getSdkEnabled()

        Server-driven master switch. When false, the SDK refuses to start a new session — startDeliveryByX(...) callbacks fire with com.doorstepai.sdks.tracking.internal.SdkError.SdkDisabled and no newSession request is made. Defaults to true so older config responses (without the field) keep working unchanged. Honored immediately on the next ensureLoaded().

      • getHoldWakeLock

         final Boolean getHoldWakeLock()

        Hold a continuous PARTIAL_WAKE_LOCK for the whole tracking lifetime.

        true (default) = legacy behavior. false = the Play-compliant mode: wake-up batched IMU sensors carry continuity through AP suspend, location callbacks arrive under the platform's brief exempt wake lock, and uploads use the short-duration uploadWakeLockTimeoutMs lock instead. Since March 1, 2026 Google Play enforces against non-exempt partial wake locks held >=2h average screen-off in >5% of sessions (wake locks under a foreground service COUNT), so fleets should be migrated to false once the device class passes the untethered screen-off yield gate (devices with no wake-up IMU variants — see the "CAP" capability log — should stay true).

      • getUploadWakeLockTimeoutMs

         final Long getUploadWakeLockTimeoutMs()

        Timeout (ms) for the short-duration wake lock wrapped around each upload tick when holdWakeLock is false, so an upload that started inside a location-callback wake window isn't truncated by re-suspend. Short bounded locks don't approach the Play enforcement metric. 0 disables the upload lock entirely.

      • getSessionWatchdogEnabled

         final Boolean getSessionWatchdogEnabled()

        Periodic (~15 min) WorkManager watchdog that re-asserts TrackingService when the durable session registry says deliveries are in flight but the service is dead (OEM task killers, FGS start denials). Checked at fire time, so a server flip takes effect without reschedule.

      • getDataPushDelayIntervalSeconds

         final Long getDataPushDelayIntervalSeconds()

        Sensor batch upload timer delay between upload loops, in seconds. Drives the period of DataManager.startUploadTimer — every N seconds the SDK snapshots all in-memory capture buffers into a BatchData, persists it to the pending-batches store, and (when online) drains the store FIFO to the server.

      • getMaxBatchesDrainedPerTick

         final Integer getMaxBatchesDrainedPerTick()

        Maximum number of persisted batches the FIFO drain ships per upload tick. Caps radio time after a long offline window so one tick can't monopolise the network; the rest are picked up on subsequent ticks.

      • getMaxBatchRetries

         final Integer getMaxBatchRetries()

        Max retryable send failures for a single persisted batch before it is dead-lettered (dropped) instead of retried forever — prevents a poison batch from blocking the FIFO head indefinitely.

      • getRetryBaseDelayMs

         final Long getRetryBaseDelayMs()

        Base delay (ms) for the drain's full-jitter exponential backoff: the Nth retry of a row waits a random duration in 0, min(retryMaxDelayMs, base·2^N). A server Retry-After header overrides this when present.

      • getMaxCacheSizePerStream

         final Integer getMaxCacheSizePerStream()

        HARD per-stream cap (samples) on the in-memory capture buffers — drop-oldest ring semantics enforced in DataManager.appendBounded. Sized for one drain-interval's worth of samples at the maximum expected rate (e.g. 100 Hz × 10 s = 1000): under normal operation buffers never reach it, but when upload ticks stall (CPU starvation, long suspend) it bounds memory so the SDK can't amplify the host's memory pressure into an OS process kill. Overflow drops are counted in the pipeline heartbeat (droppedOverflow). Also used as the ArrayList.ensureCapacity pre-size on every applyConfig. Floor 64.

      • getBinaryEncoding

         final Boolean getBinaryEncoding()

        When true, the SDK sends DSDP v2 binary payloads (S-011) instead of JSON. Default false so older server builds receive JSON unchanged.

      • getDualTimestamp

         final Boolean getDualTimestamp()

        When true, every sample emits both wallClockTimestamp (capture-time unix epoch seconds) and sensorTimestamp (native sensor / boot-relative clock) (S-001). Default false so older server builds receive only the legacy timestamp field.

      • getPendingBatchesMaxBytes

         final Long getPendingBatchesMaxBytes()

        Total byte ceiling for the on-disk pending-batches store. Once exceeded, the pruner drops oldest batches first. Mirrors iOS's maxPendingBatchesTotalBytes = 16 MB but defaults higher on Android because we have private app storage rather than a sandbox file. Set to 0 to disable the byte budget.

      • getPendingBatchesMaxAgeMs

         final Long getPendingBatchesMaxAgeMs()

        Maximum age of a persisted batch before it's pruned. Sensor data older than the default (24 h) is rarely useful for delivery analysis. 0 disables the age budget.

      • getPendingBatchesMaxCount

         final Integer getPendingBatchesMaxCount()

        Hard cap on the number of persisted batches. Mirrors iOS's maxPendingBatchesCount = 240. 0 disables the count budget.