> For the complete documentation index, see [llms.txt](https://docs.bluefletch.com/bluefletch-enterprise/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bluefletch.com/bluefletch-enterprise/product-guides/bluefletch-launcher/release-notes.md).

# Release Notes

### Release 4.4.67

#### Highlights

This release adds a new WRITE\_FILE custom intent action for saving session information as XML or JSON files, adds support for replacement variables in launcher.json, and adds a configurable source field for clearing Google accounts. It also improves reliability in several areas: session recovery after crashes or restarts, the remote wipe warning, Zebra device settings (Wi-Fi and auto date/time), and Launcher stability during bulk uninstalls and manual site selection.

#### New Features

* WRITE\_FILE Custom Intent Action — A new custom intent action writes session information to an XML or JSON file. The file format comes from the configured format type, with a fallback when no file type is set.
* Config Replacement Variables — launcher.json now supports a top-level `variables` object. Any `${name}` placeholder in a config value at any level is replaced with its value. Unknown placeholders are left as they are.
* Configurable Google Account Clearing Source — The new `clearAccountsSourceField` setting lets you choose which field holds the Google account ID, instead of the session user ID. It accepts a replacement string (e.g. `${session.ex.klEmail}`) or the name of a session extended attribute. If the field is empty, account clearing is skipped.
* Screensaver Manifest Support Events — New support events are reported when the screensaver manifest version changes.

#### Bug Fixes

* Fixed the full logged-in state not coming back after the Launcher recovers from a crash or a low-memory kill.
* Prevented an active session from being wiped on the first config load after a restart.
* Fixed the unique login check failing when the other device has no site selected.
* Fixed the Launcher crashing after a bulk uninstall of apps.
* Fixed the Launcher crashing in the manual site select confirmation dialog, and corrected spacing in its message text.
* Fixed the remote wipe warning showing the wrong starting time, and prevented a config change from cancelling or resetting a running wipe schedule.
* Fixed the power event countdown so it stays in sync across views, and prevented multiple dialogs from appearing on repeated power events.
* Fixed the Wi-Fi Settings UI not turning on and off correctly on Zebra devices.
* Fixed the automatic date and time setting failing to apply on Zebra devices.
* Reduced unneeded processing by skipping BlueFletch package handling when the app installed or uninstalled is not a BlueFletch app.

### Release 4.4.65

#### Highlights

This release adds a scheduled remote wipe capability for the Luggage Tag feature, expands secure notification configurability, and improves icon layout handling and workspace swipe performance. It also resolves an Android Enterprise provisioning issue that could block installation of required apps, a status bar color defect on Android 15+, and several secure device/notification correctness issues.

#### New Features & Enhancements

**Luggage Tag Remote Wipe**

* Added a scheduled remote wipe action to Luggage Tag, configurable via wipe action and wipe threshold settings.
* Added a countdown warning dialog that reminds the user of a pending remote wipe, re-displays every minute, and cannot be dismissed once under two minutes remaining.
* Added a device wipe action supporting Enterprise Reset and Factory Reset on Zebra devices.
* Ensured schedules are correctly rescheduled or cleared when wipe configuration changes and persist correctly across geofencing and password-unlock scenarios.

**Secure Notifications**

* Added configurable secure notification bubble size and title/description font sizes.
* Added a new setting to permit full notifications to display on the re-authentication screen.
* Added a notification sound for incoming secure notifications.
* Updated notification handling so calls are no longer suppressed, allowing users to answer incoming calls while in secure notification mode.

**Workspace & Icons**

* Added a layout configuration to allow app icons to fill their container without the default padding.
* Corrected icon padding handling so folder icons and asset- or storage-sourced icons are treated consistently.
* Improved swipe performance on the main workspace.

**Platform**

* Updated target SDK to 37 and refreshed library dependencies.

#### Bug Fixes

* Corrected Android Enterprise managed provisioning so apps marked "required for setup" no longer block installation of other required apps.
* Fixed secure device handling so the security alarm no longer triggers when a password-protected app is already in the foreground.
* Reverted a broken reminder string format that appended rather than substituted the parameter.
* Fixed status bar background color not applying correctly on Android 15+ devices.
* Corrected EMS package reset logic to pass the device ID on package install/uninstall.

### Release 4.4.61

#### Highlights

This release introduces Scheduled Actions and Custom Intents, letting administrators trigger device operations on recurring or one-time schedules, alongside a new Cradle Lock experience with configurable password unlock and device selection. Launcher also gains configuration value replacements and capitalization for custom fields, shorthand BlueFletch package names, lock screen support for secure notifications, device PIN enforcement for managed Google Workspace devices, and remotely granted temporary admin access. The release additionally delivers significant reliability improvements across site location, workspace scrolling performance, screensaver asset handling, widget rendering, and configuration loading.

#### New Features & Enhancements

* Scheduled Actions — Administrators can now configure Launcher to run actions on a schedule, with minutely, hourly, daily, weekly, monthly, yearly, and one-time frequencies, plus automatic retry when a scheduled run cannot complete.
* Custom Intents — Launcher can broadcast or start configurable custom intents, including a device reboot action, both on demand and as part of a schedule.
* Scheduled Action Reporting — Successful schedule executions are now reported as support events, and schedules survive device reboots when their configuration is unchanged.
* Cradle Lock — Devices placed in a cradle can be locked to a dedicated screen, with optional password unlock, a configurable unlock duration, and automatic re-lock once the unlock window ends.
* Virtual Locker Device Selection — A device selection screen is now available on the cradle lock screen, and Launcher publishes login and logout status to the locker over MQTT.
* Configuration Value Replacements — Configuration fields can now reference other configuration values, including values inside lists, arrays, and nested objects.
* Custom Field Capitalization — Custom field displays support a `capitalize` option to force uppercase on selected replacement values or on the entire field.
* BlueFletch Package Shorthand — Configurations can reference BlueFletch applications by shorthand name instead of full package names, resolved reliably at startup, on configuration push, and on app install or uninstall.
* Secure Notifications on the Lock Screen — A new `allowNotificationInLockScreen` setting lets notifications post to the lock screen while secure notifications remain enabled elsewhere.
* Device PIN for Managed Google Workspace — When `settings.devicePinRequiredForLogin` is enabled, Launcher prompts for and sets a device PIN before authentication, and clears it on logout.
* Remote Temporary Admin — Updated Launcher to support setting temporary admin role from the Portal.
* Exit Launcher with Reopen on Reboot — Launcher will attempt to restart itself after a reboot when exit Launcher is used.
* Persisted App Breakout — Applications can be broken out of the Launcher workspace and persisted, protected by a password dialog and controlled by new configuration settings.
* Configurable Widget Font Sizes — The large banner and session widgets support configurable title, text, heading, and subtitle font sizes, with scrolling when banner content overflows.
* Optional Session Widget Logo — The Session 2 widget accepts a custom logo URL; when none is configured, no default logo is shown.
* Screensaver Playlists — Screensavers can now play from a default asset directory, with assets downloaded in the background and the playlist restarting in place rather than relaunching.
* NFC User Switching — NFC badges can now switch users directly during NFC reauthentication, logging the previous user out and the new user in automatically, with a dedicated switching-user transition screen.
* Page Navigation by Drag and Keypad — Home screen pages can be navigated with click-and-drag as well as the arrow keys.
* VPN IP Exclusion for Site Location — A new `ignoreVpnIpForSiteLocation` setting keeps VPN-assigned addresses from being used for site detection.
* License Reminders — Expired or invalid license dialogs are now shown each time Launcher resumes until the issue is resolved.
* Google Workspace Account Removal — Launcher can remove Google Workspace accounts on managed Zebra devices.

#### Bug Fixes

* Fixed stuttering when swiping between home screen pages.
* Corrected header logo sizing, session widget height on tablets and low-resolution devices, and status bar colors on Android 15.
* Fixed wallpapers rendering only partially, and icons and wallpapers not refreshing when their asset URLs changed.
* Corrected one-time schedules running after their date had passed, failing on Honeywell and Samsung devices, and retries not rescheduling after a failure.
* Fixed the home button not returning to the main workspace from a quick access widget.
* Corrected custom fields failing to render plain text alongside replacement values.
* Fixed configuration settings falling back to false instead of their intended default when absent.
* Resolved `defaultSession.location` being ignored when no current site was available.
* Corrected device rotation actions being ignored or applying an outdated orientation.
* Fixed duplicate entries in the Admin Tools session screen and duplicate applications caused by an unvalidated appObjectKey.
* Corrected the screensaver not dismissing when disabled, and newly added assets not entering the active rotation.
* Fixed crashes from secure notifications, uninstalled configured apps, null device tokens, heightAdjust values, and platform commands.
* Corrected the Support Application not starting automatically at startup or after installation.
* Resolved crashes and unresolved shortcuts caused by BlueFletch package resolution, including uninstall handling.
* Fixed an invalid configuration error after scanning a non-configuration QR code; scanned values now open the search screen.
* Corrected invalid configuration files persisting across restarts; Launcher now validates before applying and falls back to the default.
* Fixed license validation failing when supplied a PEM file rather than a PEM string.
* Resolved site records with matching IDs failing to update, and device token records not being deleted.
* Corrected Messaging service restart scheduling and concurrent notification update errors.
* Fixed the Enter key inserting a newline instead of submitting in text inputs.
* Resolved screen timeout being applied in the wrong units on CSDK devices.
* Fixed assets not being re-granted to BlueFletch applications when clearing recent tasks failed.
* Corrected `useDarkText` being overridden by the theme instead of the explicit configuration value.

### Release 4.4.17

#### Highlights

This release introduces a configurable session expiry warning system, expanded theme customization options, and significant reliability improvements across site location services, widget rendering, and the provider database. Several device-specific fixes improve compatibility with Zebra and Spectralink hardware.

#### New Features & Enhancements

* Added configurable time-based warning dialog before max session logout, with audible alarm and countdown timer on both primary and secondary displays.
* Added logoHeight theme configuration to control the session banner image height.
* Added heightAdjust layout field, carried forward from Launcher 3.
* Added custom intent triggers for luggage tag enter and exit events.
* Added configurable search icon via implied theme configuration.
* Added healthcare remote control package to the key injection callback registry.
* Added service connection logic to reliably restart the messaging app when it is killed.

#### Bug Fixes

Site Location

* Corrected site location service initialization to respect refreshSiteOnStartup and currentSiteId configuration.
* Resolved issue where multi-site dialog appeared unnecessarily when the current site was already in the detected list.
* Resolved Zebra EMDK readiness detection on boot, preventing the platform from stalling during initialization.
* Corrected manual site selection to properly trigger a force reload.
* Suppressed site failure and multi-site alerts when external site information is present in the configuration.
* Removed duplicate results when querying the site info database.

Stability & Correctness

* Corrected duplicate provider database rows that broke custom script injection.
* Corrected widget rendering and update logic for improved reliability.
* Corrected Spectralink login/logout by replacing the custom broadcast action with the standard intent.action.main.
* Corrected re-authentication intent flags to apply consistently regardless of auth type.
* Corrected ConnectException caused by invalid URLs in the EMS support tool event processor.
* Corrected secure notification lock screen state to update properly across lifecycle changes.
* Corrected custom intent .setClassName() implementation and ensured openApp intents are only created when a package name is provided without a class name.
* Corrected Zebra SET\_TIMEZONE platform action by adding the required profile name.
* Corrected boot action sequencing to ensure the platform is ready before invoking boot actions.
* Corrected messaging broker connection details to properly reflect the broker array from configuration on each config change.
* Corrected implied group application to properly remove groups when changing to a site without an implied group.
* Corrected settings launch from icons (e.g., Wi-Fi settings) to target the correct activity.
* Updated login button font weight to match logout button styling.

### Release 4.4.1

#### Highlights

This release introduces a redesigned Force Lock screen with configurable branding options, significant screensaver improvements including a default screensaver and smarter asset management, and enhanced Luggage Tag stability. Several bug fixes address device-specific behavior on Zebra and GETAC hardware, notification handling edge cases, and a smoother in-place upgrade path from Launcher 3.

#### New Features & Improvements

* Device Remote Lock Screen Redesign — The screen displayed when a device is remotely locked now supports configurable header and footer fields with automatic text contrast based on background color.
* Screensaver Enhancements — Added a default screensaver, periodic asset change detection, and improved handling when switching between local and remote asset sources.
* External Site on App Install — External site launch now only triggers when the specific configured package is installed.
* Automatic Chat App Permissions — The launcher automatically grants required permissions to the chat app upon installation.
* GETAC Clear Recents Delay — Added a clearRecentSelectiveDelay config property to tune the timing of selective clear operations on GETAC hardware.
* Luggage Tag Stability — Improved Luggage Tag reliability across reboots and activation/deactivation cycles.
* Launcher 3 → 4 In-Place Upgrade — Bumped the provider database version to support upgrading from Launcher 3 without an uninstall.

#### Bug Fixes

* Fixed a null pointer exception when upgrading directly from Launcher 3.
* Fixed an invalid license detection issue that prevented the launcher from starting in certain deployments.
* Fixed an issue where the initializing screen would reappear after a config push.
* Fixed the extended display session prompt for delayed cradle logout not displaying correctly.
* Fixed secure notifications being incorrectly cleared during screen-off when preserveLockedNotifications was enabled.
* Fixed site location not refreshing on startup after the refreshSiteOnStartup flag was deprecated.
* Fixed the session widget background color not applying when set in the config.
* Fixed Force Lock screen default title and message values and a crash caused by invalid color strings.
* Fixed screensaver asset path templates not resolving until a config reload when siteId was used.
* Fixed missing Spanish translations for search and suggestions labels.
* Fixed clear recents behavior on GETAC and Zebra devices.
* Fixed a config replacement issue caused by unnecessary file delete operations in the config manager.

### Release 4.3.98

#### Highlights

Adjustments to site location handling, widgets, secure notifications, and Chrome Custom Tabs (CCT) configuration.

#### Details

* Refactored the site location service using a Strategy Pattern to handle automatic detection, external app integration, and site list matching scenarios.
* Updated the system to support sideloaded sitelist.csv files when a site list URL is not provided in the configuration.
* Added new interface methods to the demo variant of SiteManagerImpl.
* Implemented a fix to only register the site info receiver when site location is enabled.
* Removed legacy site location initialization methods and the redundant \_useStrategyPattern flag.
* Updated for backward compatibility with deprecated methods and extras.
* Fixed issues on custom fields when using replacement values and trimmed unwanted white spaces from formattedField.
* Added a try-catch block to handle volume-setting exceptions in the Volume Manager.
* Updated the AppInfo class to use badge counts for equality checks and forced workspace reactions on badge count changes.
* Added a default value for customField.
* Added Chrome Custom Tab (CCT) customization via remote configuration, including settings for URL bar hiding, title visibility, and back arrow behavior.
* Refactored widget coroutines to a dedicated scope that is cancelled when the widget list is cleared.
* Added a network available callback to allow the site service to run when a network is available.
* Added logic to check for a default site ID when no location match is found.
* Cleaned up the site manager and converted autodetection strategy events to sealed classes.
* Moved site file downloads to strategy constructors to prevent blocking site selection while waiting for the network.
* Removed downloadFilesFlow and replaced with a downloadFileFlow.
* Moved site\_worker\_tag to sitemanager interface for shared use.
* Added tags to site file downloads to allow cancellation of queued work during configuration changes.
* Updated the Assets Manager to clear pending work on configuration changes.
* Implemented secure notification processing and properties, such as playAudioIfLocked and snoozeDuration, aligned with Launcher 3.
* Removed the deprecated NotificationDatamanager.
* Fixed Knox platform issues when requesting external file permissions.
* Added open modifiers and protected functions to platform classes to allow for easier extension.
* Implemented the ability to set the default browser and dialer at the platform level.
* Optimized the controller to only instantiate the secure notification manager when enabled to reduce memory usage.
* Fixed secure notification bubble offsets and visibility issues after the screen is turned on.
* Fixed Authorized Header issues.
* Added a new theme configuration, fadingPageIndicators to show or hide the page indicator.
* Updated the inactive page indicator to remain visible when darkTheme is false.
* Updated SecureNotificationManagerImpl to make \_notifications ConcurrentHashMap thread safe.
* Updated SecureNotificationManagerImpl to remove coroutine when updating notification.
* Updated LauncherNotificationListener to make instance Volatile.
* Updated SbnHelper to add a method on handling all kinds drawables and to prevent app crash.
* Implemented a delayed cradle logout timer dialog for extended displays.
* Updated LauncherNotificationListener to implement a thread safe synchronized companion variable.
* Fixed an issue in extended display where apps would not stay open on the main device.
* Added support for supplying custom extras data to app widgets.
* Set all default config for CustomTabConfig.kt to restrictive
* Added new method cancelNotifications. This new method will handle the removing of multiple notification via swipe or close button.
* Removed Launcher and Extended display state shouldUpdateBadgeNotification.
* Implemented HashMap to JSONObject Conversion of bfbrowser.
* Fixed flickering widgets during re-authentication and app badge updates.
* Resolved an issue where logout from Temporary Admin did not occur on reboot.
* Granted the Launcher widget display access on Zebra devices.
* Migrated revised CCT behavior from Launcher 3.
* Updated \_customTabPackages to make it a Set instead of MutableSet, since it is read only.
* Added launchFallback to make sure custom tabs will get launched even if the defined package or browser is not existing.
* Enabled the preservation of missed notifications on the lock screen.
* Set BlueFletch Phone as default dialer when bf-phone package is present.
* Implemented allowWidgetAccess for devices allowing Platform Service to run ADB commands.
* Updated the NotificationReceiver to allow autologin messages to trigger authentication.
* Fixed search widgets failing to switch to light mode and custom widget headers flashing default configurations.
* Updated AppInfo with an isActivity property to identify applications within footer widgets.
* Resolved failures in AutomaticPermissionControl.
* Fixed intermittent issues where the site list failed to fetch the provided URL on the first launch.
* Implemented the removeAccounts platform method for Samsung Knox.
* Consolidated download logic back into SiteManagerImpl.
* Moved site\_url set in shared preferences until after successful copy
* Fixed an issue where auto selecting a location does not apply when refreshSiteRequiresNetwork is false.

### Release 4.3.70

#### Highlights

Fixes contents of duplicate app folders. Corrects the application of the "roundedCorner" icon shape. Adds value replacement.

#### Details

* Adds `HIDE_NAVIGATION_OPEN_ZONE` configuration setting (default: `false`).
  * Hides system navigation bar in OpenZone when config is `true`. The navigation bar will always shows in Authorized view regardless of config.
  * Use `WindowInsetsControllerCompat` for platform-agnostic control.
* Fixes issue where "roundedCorner" icon shape used "circle".
  * Updated `ThemeConfig` to remove lowercase in `_iconShape`.
* Refreshes the launchable apps whenever site changes.
* Applies replacement variables in layout labels (app, folder, shortcuts, widgets etc.).
* Performs value replacement for `data` field for layout actions.
* Renames `processLabel` to `processReplacementData(inputValue: String?`) Removed `updateInstance()`.
* Fixes contents of duplicate app folders that are hidden.
  * Modifies `data` class's constructor parameter contents to a private val `_contents` and adds a getter for contents that will be publicly available to access; in this case we ensure that the `_contents` is being updated.
  * Makes `_contents` private since there is already a public variable for contents.
* Validates all files are downloaded before starting screen saver and turns off screen saver if config has been updated.

### Release 4.3.48

#### Highlights

Initial production release for Launcher 4 and Launcher 4 for Healthcare.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.bluefletch.com/bluefletch-enterprise/product-guides/bluefletch-launcher/release-notes.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
