# Features

## Overview

The Wear Launcher is a purpose built launcher for wearable devices, such as the Zebra WS301 and WS50.  Its primary purpose is to allow the user to authenticate with Workcloud Sync using a larger host device, such as a CC610, instead of typing credentials in manually on the smaller devices.

## User Guide: An Example Flow & Config

When the user first grabs the device off of the dock, they are presented with the Wear Launcher's version of the Open Zone, which indicates the user should scan a QR code to initiate the login process.  The flow is as follows:

1. The user begins by signing in to the host device, such as a CC610.  Upon successful authentication, they are presented with a QR Code.
2. The user then scans the QR code with the wearable device, such as the WS301.
3. Based on the QR data, the host and the wearable will perform an authentication handshake.  The host provides the session data to the wearable. &#x20;
4. The wearable sets the user's session.  It then sends an acknowledgement to the host device that it has signed in successfully.
5. The host device then signs out and returns to the open zone to await the next user.
6. The wearable switches to an authenticated view and then launches and signs into Workcloud Sync using the token received from the messaging payload.
7. When the user is done with the device, they sign out either by pressing the logout button in the authenticated view, or returning the wearable device to the dock.  This initiates the signout process in Sync and returns the Wear Launcher to the open zone.

**Example Wearable launcher.json:**

```json
    {
  "configVersion": "2025.02.17.1",
  "license": "...",
  "layouts": {
    "*": [
      {
        "label": "Zebra Voice Assistant",
        "package": "com.symbol.datawedge"
      },
      {
        "label": "Sync",
        "package": "com.zebra.workcloud.sync"
      },
      {
        "label": "Support App",
        "package": "com.bluefletch.ems.staging.support"
      },
      {
        "label": "Messaging",
        "package": "com.bluefletch.ems.messaging"
      }
    ]
  },
  "settings": {
    "useLowBatteryMode": true,
    "lowBatteryModeStartLevel": 10,
    "lowBatteryModeEndLevel": 20,
    "hideNotificationsOpenZone": false,
    "idleTimeInMinutes": 361,
    "maxSessionTimeInMinutes": 480,
    "useSiteInfoService": true,
    "refreshSiteOnStartup": true,
    "activateSearchBar": true,
    "onCradleIgnoreLogout": false,
    "cradleLogoutDelayInSeconds": 10,
    "disableRecents": false,
    "lockInMotion": false,
    "device_lost_hours": 36,
    "authBrokerCertVersion": 0,
    "logLevel": "debug"
  },
  "disablePackages": [
    "org.chromium.chrome.stable"
  ],
  "emsSupportTool": {
    "orgId": "...",
    "eventUrl" : "https://ems-pb-api.bluefletch.com/eventsAPI/apiv1/",
    "logUrl" : "https://ems-pb-api.bluefletch.com/",
    "samplingTimer": 30
  },
  "extendedAttributes": {
    "apiUrl": "https://ems-services-api.bluefletch.com",
    "apiKey": "...",
    "crmStoreId": "1001",
    "coordinates_lat": "37.001",
    "coordinates_long": "-77,66124",
    "wearableHostUseSync": true,
    "wearableHostLogoutOnSuccess": true,
    "tenant_id" : "...",
    "tenant_url" : "...",
	  "sync_logout_key" : "...",
	  "provisioning_uri" : "..."
  }
}
```

**Example host device launcher.json:**

```json
    {
    "configVersion": "2025.5.29.2_BSB_TEST2",
    "license": "...",
    "group_inclusion": {
        "ZebraAssociates": [
            "Operations"
        ],
        "*": [
            "*"
        ]
    },
    "layouts": {
        "Operations": [
           { 
              "package" : "com.zebra.workcloud.sync"
           }
        ],
        "*": [
            {
                "columnSpan": 3,
                "rowSpan": 1,
                "widgetId": "simple-spacer-1",
                "widgetType": "space"

            },
            {
                "columnSpan": 3,
                "rowSpan": 2,
                "widgetId": "simple-text-1",
                "widgetType": "text",
                "widgetParams": {
                    "icon": "assets:loginIcon2",
                    "iconSize": "400",
                    "backgroundColor": "${launcherState.theme.accentColor}",
                    "onItemClick": {
                        "typeIntent": "a",
                        "action": "com.bluefletch.action.LOGIN",
                        "category": "android.intent.category.LAUNCHER",
                        "package": "com.bluefletch.ems.auth",
                        "class": "com.bluefletch.ems.auth.LoginActivity",
                        "extras": {
                            "EMS_LAUNCHER_PACKAGENAME": "com.bluefletch.ems.emm.launcher",
                            "LOGIN_HINT": ""
                        },
                        "flags": 335544320
                    }
                }
            }
        ]
    },
    "settings": {
        "idleTimeInMinutes": 120,
        "maxSessionTimeInMinutes": 480,
        "activateSearchBar": false,
        "enableNotifications": true,
        "requireAuthOnScreenOn": false,
        "useSecondaryAuth": "none",
        "secondaryAuthPinLength": 4,
        "secondaryAuthRequired": false,
        "alternateSecondaryAuth": "pin",
        "authBrokerService": false,
        "useSiteInfoService": true,
        "disallowSiteChange": false,
        "refreshSiteOnStartup": false,
        "disallowLoggedInSiteChange": false,
        "logLevel": "debug",
        "clearAppDataOnLogout": true,
        "clearAppDataIncludeList": "com.microsoft.teams,com.microsoft.office.outlook",
        "clearAppDataExcludeList": "com.bluefletch.ems.support,com.bluefletch.ems.epm,com.bluefletch.chat,com.bluefletch.ems.browser,com.bluefletch.ems.deviceinformation,com.bluefletch.ems.auth,com.bluefletch.grapheneos.pdfviewer",
        "screenTimeout": 300,
        "useLowBatteryMode": false
    },
    "assets": {
        "loginIcon": "https://storage.googleapis.com/bluefletch-ems-resources/demo/icons/pngtree-vector-login-icon-login-design-shadow-vector-png-image_13266424.png?made=1766973809106000",
        "whiteWallpaper2": "https://img.freepik.com/premium-photo/abstract-white-background-grunge-texture-ai-generative_728418-560.jpg?made=1766973809106000",
        "loginIcon2": "https://storage.googleapis.com/bluefletch-ems-resources/demo/icons/login.png?made=1766973809106000",
        "whiteWallpaper": "https://storage.googleapis.com/bluefletch-ems-resources/demo/wallpapers/nordwood-themes-KcsKWw77Ovw-unsplash.jpg?made=1766973809106000"
    },
    "layoutSettings": {
        "columns": 3,
        "tabletColumns": 3,
        "iconSize": "large",
        "showLabel": true,
        "boldTypeLabel": true,
        "labelFontSize": 14,
        "quickStartIconSize": ""
    },
    "customField": {
        "format": "${config.ex.deviceId}"
    },
    "keyManagement": {
        "enabled": false,
        "baseUrl": "https://ems-services-api-demo.bluefletch.com/",
        "refreshIntervalInSeconds": 280
    },
    "notifications": [
    ],
    "header": [
        {
            "criteria_OR": [
                {
                    "field": "_${session.userId}",
                    "pattern": "^_$"
                }
            ],
            "id": "default_openzone",
            "layout": {
                "columnSpan": 4,
                "rowSpan": 1,
                "widgetId": "openzone_toolbar",
                "widgetParams": {
                    "toolbarTitle": "WS50 Login",
                    "backgroundColor": "${launcherState.theme.accentColor}"
                },
                "widgetType": "toolbar",
                "wifiSettingsEnabled": false
            }
        },
        {
            "criteria_OR": [
                {
                    "field": "_${session.userId}",
                    "pattern": "^_.+$"
                }
            ],
            "id": "default_authorized",
            "layout": {
                "columnSpan": 4,
                "rowSpan": 1,
                "widgetId": "authorized-toolbar",
                "widgetParams": {
                    "toolbarTitle": "WS50 Login",
                    "backgroundColor": "${launcherState.theme.accentColor}"
                },
                "widgetType": "toolbar",
                "wifiSettingsEnabled": false
            }
        }
    ],
    "intents": {
        "login": [
		{
          "typeIntent" : "d",
          "data" : "2000"
        },
            {
                "class": "com.bluefletch.ems.baseauth.wearable.HostActivity",
                "extras": {
                    "wearableLayouts": "${launcherState.wearableLayouts}"
                },
                "flags": 1,
                "package": "com.bluefletch.ems.auth",
                "typeIntent": "a"
            }
        ],
        "postLogout": [
            {
                "action": "com.bluefletch.ems.browser.CLEAR_COOKIES",
                "package": "com.bluefletch.ems.emm.browser",
                "typeIntent": "b"
            },
            {
                "action": "CLEAR_STORAGE",
                "package": "com.bluefletch.ems.emm.browser",
                "typeIntent": "p"
            }
        ],
        "logout": [],
        "uncradle": [],
        "cradle": [
            {
                "action": "android.intent.action.MAIN",
                "package": "com.bluefletch.launcher",
                "category": "android.intent.category.HOME",
                "flags": 1,
                "typeIntent": "a"
            }
        ],
        "screenOn": []
    },
    "theme": {
        "enable": true,
        "darkTheme": false,
        "logo": "assets:BFLogo",
        "wallpaperImage": "assets:whiteWallpaper2"
    },
    "emsSupportTool": {
        "orgId": "...",
        "eventUrl" : "https://ems-pb-api.bluefletch.com/eventsAPI/apiv1/",
        "logUrl" : "https://ems-pb-api.bluefletch.com/",
        "installAppsUncradled": true,
        "allowPhone": true,
        "findMeAutoEnabled": true,
        "findMePlayMedia": true,
        "findMePlayInternalMedia": true,
        "findMeIgnoreScreenState": true,
        "activeLocationTracking": true,
        "allowSpeedTestUI": true
    },
    "appConfig": {
        
    },
	"browser": {
            "showTitle": true,
            "exitBrowserOnIntentCall": true,
            "appLinkPaths": "",
            "convertAppLinks": false,
            "allowCameraAccess": true
    },
    "auth_msal": {
        "client_id": "...",
        "redirect_uri": "msauth://com.bluefletch.ems.auth/KUKEusfKtqAOu9UB6jgjtTMKYas%3D",
        "authority_type": "AAD",
        "authorization_user_agent": "BROWSER",
        "broker_redirect_uri_registered": false,
        "shared_device_mode_supported": false,
        "scopes": "openid email profile User.Read GroupMember.Read.All",
        "default_group": "Associates",
        "authority_url": "https://login.microsoftonline.com/7d90cee7-3a02-4900-bd04-f8f6c55cf2e1",
        "audience_tenant_id": "..."
    },
    "extendedAttributes": {
        "apiUrl": "https://ems-services-api.bluefletch.com",
        "apiKey": "...",
        "crmStoreId": "1001",
        "wearableHostUseSync": true,
        "wearableHostLogoutOnSuccess": true,
        "tenant_id" : "...",
        "tenant_url" : "..."
    }
}
```


---

# Agent Instructions: Querying This Documentation

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

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.bluefletch.com/bluefletch-enterprise/product-guides/device-applications/wear-launcher/features.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
