Assets for Android apps

To follow Google requirements we have to keep a push notification, However, you can customize the.

Assets for Android apps

The SDK keeps a foreground notification to comply with Android background execution requirements. You can customize the notification text and icons from your app resources.

Push notifications

The SDK foreground notification can be customized by overriding SDK resources in the host application.

You can customize strings used in SDK notifications. To update the text, create a string resource in your app with the relevant identifier:

<string name="<identifier>">NEW TEXT</string>
<string name="tracking_notification_title">Tracking</string>

Full list of resources 👉 Android App Resources

AI agent integration skill

We provide an AI agent skill that helps integrate Damoov TelematicsSDK into Android applications. The skill can guide coding agents such as Claude Code, OpenAI Codex, and other AI coding tools through verified TelematicsSDK integration patterns, including dependency setup, lifecycle forwarding, tracking flows, trip metadata, and migration away from deprecated APIs.

Skill repository: Mobile-Telematics/damoov-telematics-skills.

Notifications

<string name="app_name">Tracking</string>
<string name="tracking_notification_title">Tracking</string>
<string name="tracking_notification_is_work">Your trip is being scored.</string>
<string name="tracking_notification_is_not_work">Trip not in progress.</string>
<string name="tracking_notification_tracking_disabled">Tracking is disabled.</string>
<string name="tracking_notification_gps_disabled">GPS is disabled. Tap the notification to enable GPS and grant permissions.</string>
<string name="tracking_notification_location_disabled">Location permission is disabled. Tap the notification to grant permissions.</string>
<string name="tracking_notification_background_location_disabled">Background location permission is disabled. Tap the notification to grant permissions.</string>
<string name="tracking_notification_activity_recognition_disabled">Activity recognition permission is disabled. Tap the notification to grant permissions.</string>
<string name="tracking_notification_battery_optimization_enabled">Battery optimization is enabled. Tap the notification to disable optimization.</string>
<string name="tracking_notification_power_saving_enabled">Trips may not be recorded while battery saver is enabled.</string>
<string name="tracking_notification_looking_for_tracks_upload">Waiting for trip upload.</string>
<string name="tracking_notification_waiting_for_manual_start">Waiting for manual trip start.</string>
<string name="tracking_notification_processing">Processing…</string>
<string name="tracking_notification_unknown_state">Tracking status is unavailable.</string>
<string name="tracking_notification_channel_name">Tracker service</string>

NotificationTypeTrigger
Your trip is being scored.Persistent. Android requirementsActive tracking.
Trip not in progress.Persistent. Android requirementsNo active tracking. SDK is in standby mode.
Tracking is disabled.Damoov system notificationTracking is disabled for the DeviceID via API or DataHub.
GPS is disabled. Tap the notification to enable GPS and grant permissions.Damoov system notificationA user disabled GPS access for the mobile app.
Location permission is disabled. Tap the notification to grant permissions.Damoov system notificationA user denied or revoked location permissions for the mobile app.
Background location permission is disabled. Tap the notification to grant permissions.Damoov system notificationA user denied or revoked background location permission for the mobile app on Android 10+.
Activity recognition permission is disabled. Tap the notification to grant permissions.Damoov system notificationA user denied or revoked activity recognition permission for the mobile app.
Battery optimization is enabled. Tap the notification to disable optimization.Damoov system notificationBattery optimization is enabled for the mobile app.
Trips may not be recorded while battery saver is enabled.Damoov system notificationA user enabled low power mode.
Waiting for trip upload.Damoov system notificationTrip recorded, but not sent to Damoov platform.
Waiting for manual trip start.Persistent. Android requirementsTracking is enabled, but automatic trip recording is disabled and no manual trip is in progress.
Processing…Damoov system notificationSDK notification state cannot be resolved from the current tracking, permission, or power state.

tracking_notification_channel_name customizes the Android notification channel name shown in system settings. The channel ID is intentionally not customizable or localized because Android requires it to remain stable.

tracking_notification_unknown_state is retained as a resource key for compatibility, but the current SDK fallback notification uses tracking_notification_processing.


[Important] Starting from Android 12, the Persistent Notifications can be hidden. Code example

Custom notification icons

Important: You can add your own icon to the notification. Place your own icons to res/drawable folders with the following names:

ic_tracking_sdk_status_bar.png - use a transparent square canvas with a white icon/glyph and an alpha channel. Do not use a filled white square, square background, or square frame. Android uses this small icon in the status bar and may also use it when notifications are grouped by the system.
ic_tracking_sdk_notification.png - use a colored square image with an alpha channel. Android uses this as the large notification icon when the notification layout supports it.

For Android small icon requirements, see the official Android documentation for setSmallIcon() and notification design.

For Flutter applications, add these files to the native Android project resources, for example android/app/src/main/res/drawable/. Notification grouping is controlled by Android System UI or the device manufacturer UI. The SDK does not provide a separate icon for the automatically generated grouped notification view.

If your application sends its own notifications and a white square appears only in the automatically generated grouped notification header, the issue is not caused by the SDK notification icon. Android System UI or the device manufacturer UI generates the notification group header and may use the host application's launcher icon resources for that header.

Android System UI may use the host application's monochrome launcher icon for the automatically generated notification group header. In this case, if the application's monochrome launcher icon points to an asset with a non-transparent square canvas, Android renders it as a white square in the grouped notification.

The SDK small notification icon is used for the SDK notification itself. However, the grouped notification header is generated by Android/System UI and may depend on the host application's icon resources.

Recommended checks on the application side:

  • Verify the app's adaptive icon monochrome resource.
  • Make sure it uses a transparent canvas with only the white glyph or icon shape.
  • Avoid filled square backgrounds, square frames, or non-transparent launcher foreground assets for the monochrome icon.

Example:

<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@color/ic_launcher_background"/>
    <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
    <monochrome android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

Permissions Wizard

Version 4.1.0 introduces a new Jetpack Compose Permissions Wizard. It guides users through the permissions and device settings required for reliable trip recording:

  • Device location services.
  • Precise foreground location.
  • Background location on Android 10 and later.
  • Physical Activity on Android 10 and later.
  • Battery optimization exclusion.

The SDK manifest declares android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. This permission must remain in the merged manifest so the wizard can open the system battery optimization screen.

On Android 13 and later, request android.permission.POST_NOTIFICATIONS separately. The Permissions Wizard does not request notification permission.

The new wizard does not open OEM-specific Power Manager, autostart, or notification settings.

Full wizard activity

Register an Activity Result launcher in your activity or fragment:

private val permissionsWizardLauncher = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult()
) { result ->
    when (result.resultCode) {
        TrackingPermissionsWizardActivity.WIZARD_RESULT_ALL_GRANTED -> {
            // Required permissions and device settings are ready.
        }
        TrackingPermissionsWizardActivity.WIZARD_RESULT_CANCELED -> {
            // The user closed the wizard.
        }
        TrackingPermissionsWizardActivity.WIZARD_RESULT_NOT_ALL_GRANTED -> {
            // At least one required item is still unavailable.
        }
    }
}

Launch the wizard:

permissionsWizardLauncher.launch(
    TrackingPermissionsWizardActivity.getStartWizardIntent(
        context = this,
        themeMode = TrackingPermissionsWizardThemeMode.System,
        blockEarlyExit = false,
        skipWizardPages = false
    )
)

Activity parameters

ParameterDefaultBehavior
themeModeTrackingPermissionsWizardThemeMode.SystemUses the System, Light, or Dark wizard theme.
blockEarlyExitfalseWhen true, blocks Back, Skip, and other early dismissal until all required items are available.
skipWizardPagesfalseWhen true, opens the status screen directly instead of showing the step-by-step pages.

The wizard returns one of these result codes:

ResultMeaning
WIZARD_RESULT_ALL_GRANTEDAll required permissions and device settings are available.
WIZARD_RESULT_CANCELEDThe user closed the wizard before completion.
WIZARD_RESULT_NOT_ALL_GRANTEDThe user finished the flow with at least one required item unavailable.

Built-in themes

Use one of these values:

TrackingPermissionsWizardThemeMode.System
TrackingPermissionsWizardThemeMode.Light
TrackingPermissionsWizardThemeMode.Dark

System follows the host device light or dark mode.

Text customization

Override only the strings you need in the host application's res/values/strings.xml. The values below are the SDK defaults.

<resources>
    <!-- Foreground location page -->
    <string name="tracking_permissions_wizard_location_title">Turn on location</string>
    <string name="tracking_permissions_wizard_location_body">Android will ask about your location next. Choose Precise and \"While using the app\" so trips can be detected.</string>
    <string name="tracking_permissions_wizard_location_hint">Precise · While using the app</string>

    <!-- Background location page -->
    <string name="tracking_permissions_wizard_background_location_title">Keep location on in the background</string>
    <string name="tracking_permissions_wizard_background_location_body">Next, allow location all the time so trips can keep recording when the app is closed.</string>
    <string name="tracking_permissions_wizard_background_location_hint">Allow all the time</string>

    <!-- Physical Activity page -->
    <string name="tracking_permissions_wizard_activity_title">Allow physical activity</string>
    <string name="tracking_permissions_wizard_activity_body">Android will ask about physical activity next. Allow it so trip detection and driving score calculations stay accurate.</string>
    <string name="tracking_permissions_wizard_activity_hint">Allow</string>

    <!-- Battery optimization page -->
    <string name="tracking_permissions_wizard_battery_title">Ignore battery optimizations</string>
    <string name="tracking_permissions_wizard_battery_body">One last Android prompt will ask whether the app can run without battery optimization. Allow it for reliable background tracking.</string>
    <string name="tracking_permissions_wizard_battery_hint">Allow</string>

    <!-- Device location services page -->
    <string name="tracking_permissions_wizard_gps_title">Turn on device location</string>
    <string name="tracking_permissions_wizard_gps_body">Device location is currently off. Turn it on so tracking can receive GPS updates.</string>
    <string name="tracking_permissions_wizard_gps_hint">Turn on location services</string>

    <!-- Common page controls -->
    <string name="tracking_permissions_wizard_continue">Continue</string>
    <string name="tracking_permissions_wizard_hint_lead">ON THE NEXT SCREEN, TAP:</string>

    <!-- Status screen -->
    <string name="tracking_permissions_wizard_status_title">You\'re almost there</string>
    <string name="tracking_permissions_wizard_status_attention_title">Permissions need attention</string>
    <string name="tracking_permissions_wizard_status_body">A few permissions still need switching on so %1$s can track your trips accurately. Let\'s sort them in a tap.</string>
    <string name="tracking_permissions_wizard_status_location">Enable location</string>
    <string name="tracking_permissions_wizard_status_background_location">Location in background</string>
    <string name="tracking_permissions_wizard_status_activity">Physical activity</string>
    <string name="tracking_permissions_wizard_status_battery">Battery optimization</string>
    <string name="tracking_permissions_wizard_status_gps">Device location</string>
    <string name="tracking_permissions_wizard_status_location_allowed">Precise &#183; While using</string>
    <string name="tracking_permissions_wizard_status_background_location_allowed">Allow all the time</string>
    <string name="tracking_permissions_wizard_status_activity_allowed">Granted</string>
    <string name="tracking_permissions_wizard_status_battery_allowed">Ignored</string>
    <string name="tracking_permissions_wizard_status_gps_allowed">Enabled</string>
    <string name="tracking_permissions_wizard_status_location_denied">Tap to fix</string>
    <string name="tracking_permissions_wizard_status_background_location_denied">Tap to set Always</string>
    <string name="tracking_permissions_wizard_status_activity_denied">Tap to allow</string>
    <string name="tracking_permissions_wizard_status_battery_denied">Tap to fix</string>
    <string name="tracking_permissions_wizard_status_gps_denied">Tap to turn on</string>
    <string name="tracking_permissions_wizard_status_helper">Tap any item above to finish its setup</string>
    <string name="tracking_permissions_wizard_exit">Skip for now</string>

    <!-- App settings fallback dialog -->
    <string name="tracking_permissions_wizard_settings_dialog_title">Open settings?</string>
    <string name="tracking_permissions_wizard_settings_dialog_body">This permission cannot be requested from the system dialog right now. Open app settings and enable it manually.</string>
    <string name="tracking_permissions_wizard_settings_dialog_positive">Open settings</string>
    <string name="tracking_permissions_wizard_settings_dialog_negative">Not now</string>

    <!-- Full wizard close confirmation -->
    <string name="tracking_permissions_wizard_close_dialog_title">Close wizard?</string>
    <string name="tracking_permissions_wizard_close_dialog_body">Required permissions are not fully enabled yet. Close the wizard anyway?</string>
    <string name="tracking_permissions_wizard_close_dialog_positive">Close</string>
    <string name="tracking_permissions_wizard_close_dialog_negative">Stay</string>
</resources>

Keep the %1$s application-name placeholder in tracking_permissions_wizard_status_body.

Image customization

Override wizard images and icons in the host application's res/drawable directory. Use the same resource names:

Drawable resourceUsed for
ic_tracking_pw_location_outlineForeground location and device location services.
ic_tracking_pw_location_filledBackground location.
ic_tracking_pw_motion_fitnessPhysical Activity.
ic_tracking_pw_batteryBattery optimization.
ic_tracking_pw_status_check_squareHeader icon on the completed/status screen.
ic_tracking_pw_tap_hintTap instruction shown on permission pages.
ic_tracking_pw_chevron_rightNavigation indicator for a missing item on the status screen.
ic_tracking_pw_checkGranted-item indicator on the status screen.
ic_tracking_pw_warningMissing-item indicator on the status screen.

The first four resources are the large permission-page images. The remaining resources are smaller instruction and status icons. The wizard applies theme colors as tint, so replacement assets should use a transparent background and a single opaque foreground color. Vector drawables are recommended because permission-page images scale up to the available screen size.

Color customization

Override wizard colors in the host application's res/values/colors.xml. TrackingPermissionsWizardThemeMode.Light uses the light group; Dark uses the dark group; System selects one of those groups from the current system theme.

Light theme defaults:

<resources>
    <!-- Screen background gradient -->
    <color name="tracking_permissions_wizard_light_gradient_start">#F6F7F9</color>
    <color name="tracking_permissions_wizard_light_gradient_end">#F6F7F9</color>

    <!-- Main text and controls -->
    <color name="tracking_permissions_wizard_light_title">#211D4F</color>
    <color name="tracking_permissions_wizard_light_body">#4F5C73</color>
    <color name="tracking_permissions_wizard_light_primary">#211D4F</color>
    <color name="tracking_permissions_wizard_light_secondary">#E9EDF4</color>
    <color name="tracking_permissions_wizard_light_button_text">#FFFFFF</color>
    <color name="tracking_permissions_wizard_light_caption">#9AA1AC</color>

    <!-- Cards and instruction hint icon -->
    <color name="tracking_permissions_wizard_light_card">#FFFFFF</color>
    <color name="tracking_permissions_wizard_light_hint_icon_background">#E8F1FF</color>
    <color name="tracking_permissions_wizard_light_hint_icon">#1A73E8</color>

    <!-- Status row title in the light theme -->
    <color name="tracking_permissions_wizard_status_title_text">#0B0B14</color>
</resources>

Dark theme defaults:

<resources>
    <!-- Screen background gradient -->
    <color name="tracking_permissions_wizard_dark_gradient_start">#14152A</color>
    <color name="tracking_permissions_wizard_dark_gradient_end">#090A17</color>

    <!-- Main text and controls -->
    <color name="tracking_permissions_wizard_dark_title">#FFFFFF</color>
    <color name="tracking_permissions_wizard_dark_body">#E0E3EA</color>
    <color name="tracking_permissions_wizard_dark_primary">#FFFFFF</color>
    <color name="tracking_permissions_wizard_dark_secondary">#2E3147</color>
    <color name="tracking_permissions_wizard_dark_button_text">#15162D</color>
    <color name="tracking_permissions_wizard_dark_caption">#A7ADBC</color>

    <!-- Cards and instruction hint icon -->
    <color name="tracking_permissions_wizard_dark_card">#25283A</color>
    <color name="tracking_permissions_wizard_dark_hint_icon_background">#263452</color>
    <color name="tracking_permissions_wizard_dark_hint_icon">#8AB4F8</color>

    <!-- Status row title in the dark theme -->
    <color name="tracking_permissions_wizard_dark_status_title_text">#FFFFFF</color>
</resources>

Shared status colors used by both themes:

<resources>
    <!-- Status icons and text -->
    <color name="tracking_permissions_wizard_success">#2FBF4E</color>
    <color name="tracking_permissions_wizard_warning">#FF9F0A</color>
    <color name="tracking_permissions_wizard_status_success_text">#2A9D4B</color>
    <color name="tracking_permissions_wizard_status_warning_text">#D98200</color>
    <color name="tracking_permissions_wizard_status_text">#FFFFFF</color>

    <!-- Status row borders -->
    <color name="tracking_permissions_wizard_status_warning_border">#8CF5A623</color>
    <color name="tracking_permissions_wizard_status_success_border">#12211D4F</color>
</resources>

Color roles:

  • gradient_start and gradient_end define the screen background.
  • title, body, and caption control the main text hierarchy.
  • primary, secondary, and button_text control primary actions and supporting controls.
  • card controls cards and dialogs.
  • hint_icon_background and hint_icon control the instruction hint.
  • success, warning, status_*_text, and status_*_border control granted and missing status rows.
  • Light status row titles use tracking_permissions_wizard_status_title_text; dark status row titles use tracking_permissions_wizard_dark_status_title_text.

Legacy wizard_telematics_* resources customize only the deprecated View-based wizard. They do not customize the new Compose wizard.

Permission status dialogs

The SDK provides two status-only dialog variants. Both show every required permission and device setting, let users fix missing items, and close automatically when all items are available. The DialogFragment and Compose variants share the same UI.

DialogFragment

Use TrackingPermissionsWizardStatusDialogFragment from an AppCompatActivity or Fragment:

TrackingPermissionsWizardStatusDialogFragment
    .newInstance(
        themeMode = TrackingPermissionsWizardThemeMode.System,
        blockEarlyExit = false
    )
    .show(
        supportFragmentManager,
        TrackingPermissionsWizardStatusDialogFragment.TAG
    )

When calling from a Fragment, use its parentFragmentManager.

Compose dialog

Use TrackingPermissionsWizardStatusDialog from a Compose screen:

var showPermissionsStatus by rememberSaveable { mutableStateOf(true) }

if (showPermissionsStatus) {
    TrackingPermissionsWizardStatusDialog(
        themeMode = TrackingPermissionsWizardThemeMode.System,
        blockEarlyExit = false,
        onDismissRequest = { showPermissionsStatus = false }
    )
}

For both variants, blockEarlyExit = true prevents manual dismissal until all required items are available. The dialogs still close automatically after the final required item becomes available.

Migration from the legacy wizard

The legacy View-based wizard remains available for compatibility but is deprecated in 4.1.0.

Deprecated APIReplacement
PermissionsWizardActivityTrackingPermissionsWizardActivity
PermissionsWizardActivity.getStartWizardIntent(...)TrackingPermissionsWizardActivity.getStartWizardIntent(...)
PermissionsDialogFragmentTrackingPermissionsWizardStatusDialogFragment or TrackingPermissionsWizardStatusDialog

Migration notes:

  • Replace enableAggressivePermissionsWizard with blockEarlyExit.
  • enableAggressivePermissionsWizardPage has no direct replacement. The new wizard guides the user through available system requests, then shows unresolved items on the status screen.
  • Replace startActivityForResult() and onActivityResult() with the Activity Result API.
  • The new status dialogs always close automatically when all required items are available.
  • Remove customizations based on legacy fonts, dimensions, annotations, and wizard_telematics_* resources.
  • Remove integration logic for OEM-specific Power Manager and autostart wizard pages.


Did this page help you?