Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions llms.txt
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
<!-- repo: clix-so/clix-android-sdk -->
<!-- ref: main -->
<!-- commit: 18f55d0c061fc895a3c533280675731b715260d9 -->
<!-- generated_at: 2025-12-17T05:03:30Z -->
<!-- commit: 54522483a9563237ead9245db5e19c5263a3a9f6 -->
<!-- generated_at: 2026-02-13T09:34:46Z -->
# Platform: Android

## /
- [Build.gradle](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/build.gradle.kts): Top-level Gradle build script configuring shared Android/Kotlin/ktfmt/GMS plugins (without applying them) and enforcing a specific `commons-compress` version via the `classpath` configuration’s resolution strategy for all modules in the SDK.
- [Settings.gradle](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/settings.gradle.kts): Defines Gradle plugin and dependency repositories, enforces centralized repository resolution, sets the root project name `clix-android-sdk`, and includes the `:clix` SDK module and `:samples:basic-app` sample app modules in the build.
- [Gradle](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/gradle.properties): Defines project-wide Gradle configuration for the SDK, including JVM args, AndroidX usage, Kotlin code style, and non-transitive R class behavior that affects build performance, resource namespacing, and compatibility across all modules.
- [Readme](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/README.md): README.md documents installation and Firebase setup, SDK initialization (Clix.
- [Changelog](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/CHANGELOG.md): Changelog documenting semver releases and dates, enumerating SDK changes such as ClixConfig initialization, coroutine/thread-safe singletons, Clix.Notification/ClixMessagingService FCM integration and foreground/background handler behavior, user/property APIs, event tracking, serialization fixes, logging, and bug fixes.
- [Changelog](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/CHANGELOG.md): CHANGELOG documenting semantic-versioned releases and notable SDK changes—session tracking, event/sourceType tracking, Clix.Notification (configure/handlers), ClixConfig/ClixMessagingService initialization, user property APIs (setUserId/setUserProperty(s)), FCM integration, Kotlin coroutines and SharedPreferences usage.
- [License](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/LICENSE): Defines the SDK’s licensing terms as a modified MIT license, permitting use, modification, and distribution only when integrated with Clix services and requiring inclusion of copyright and permission notices in all substantial copies.

## clix
Expand All @@ -18,8 +18,8 @@
## clix/src/main/kotlin/so/clix/core
- [Clixnotification](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/core/ClixNotification.kt): ClixNotification is a singleton that configures push behavior (configure/autoRequestPermission/autoHandleLandingURL), exposes handler APIs (onMessage, onBackgroundMessage, onNotificationOpened, onFcmTokenError), manages FCM token/permission ops, and routes payloads to Clix services and optional landing URLs.
- [Clixenvironment](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/core/ClixEnvironment.kt): Serializable internal ClixEnvironment constructs and serializes ClixDevice from Context/config/deviceId/token (collecting appVersion, advertising ID via reflection, push permission, timezone/locale), exposes synchronized getDevice/setDevice and companion helpers getAppVersion/getAdId/getIsPushPermissionGranted.
- [Clixconfig](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/core/ClixConfig.kt): Defines the serializable `ClixConfig` data class that centralizes SDK initialization settings (project ID, API key, API endpoint, `ClixLogLevel`, and extra HTTP headers) used to configure Clix network calls and logging behavior.
- [Clix](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/core/Clix.kt): Clix.kt defines the Clix singleton SDK entrypoint that initializes services (storage, token, device, event, notification), persists config, fetches/upserts FCM tokens asynchronously, exposes public APIs (initialize, user ID/properties, trackEvent, setLogLevel, getDeviceId) and Notification, and logs errors via ClixLogger.
- [Clixconfig](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/core/ClixConfig.kt): ClixConfig is a kotlinx‑serializable data class that configures SDK initialization (projectId, apiKey), network endpoint (default https://api.clix.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Prevent llms.txt entries from being truncated

This regeneration introduces incomplete summaries that end mid-sentence (for example, this ClixConfig line now stops at https://api.clix.), which makes the llms.txt index materially less accurate for downstream LLM context and retrieval. The same truncation pattern appears in other updated entries in this commit (e.g., NotificationTappedActivity and EventService), so consumers relying on this file will lose key behavioral details that were present before.

Useful? React with 👍 / 👎.

- [Clix](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/core/Clix.kt): Singleton SDK entrypoint that initializes and restores SDK state, manages core services (Storage, Device, Token, Event, Notification, Session), asynchronously fetches/saves FCM tokens via FirebaseMessaging, and exposes public APIs: initialize(), Notification, setUserId/removeUserId, user property APIs, trackEvent, setLogLevel, getDeviceId.

## clix/src/main/kotlin/so/clix/models
- [Notificationcontext](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/models/NotificationContext.kt): Internal data class NotificationContext encapsulating notificationData: Map<String, Any?> and autoOpenLandingURL flag (default true), used by notification-handling flows to decide whether to auto-open landing URLs; module-internal.
Expand All @@ -31,17 +31,18 @@
## clix/src/main/kotlin/so/clix/notification
- [Permissionactivity](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/notification/PermissionActivity.kt): Internal transparent PermissionActivity that requests POST_NOTIFICATIONS on Android TIRAMISU+, persists pending/result/timestamp in Clix.storageService to recover after restarts, exposes internal suspend requestPermission(context) which starts the activity, awaits result via a synchronized callback, and enforces a 5s timeout.
- [Clixmessagingservice](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/notification/ClixMessagingService.kt): Firebase MessagingService that auto-initializes Clix, parses FCM RemoteMessage into ClixPushNotificationPayload in onMessageReceived and dispatches to Clix.Notification via coroutine, and handles onNewToken by saving/upserting tokens (Clix.
- [Notificationtappedactivity](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/notification/NotificationTappedActivity.kt): Manifest-registered Activity that handles notification tap intents by extracting extras (messageId, landingUrl, journey IDs, autoHandleLandingURL, JSON data), deserializing data, and invoking ClixNotification.handleNotificationTapped (with NotificationContext and ClixPushNotificationPayload), then finishes.
- [Notificationtappedactivity](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/notification/NotificationTappedActivity.kt): NotificationTappedActivity is the manifest entry point for notification taps that extracts intent extras (messageId, landingUrl, userJourneyId, userJourneyNodeId, autoHandleLandingURL, clix_notification_data), sets Clix.sessionService.

## clix/src/main/kotlin/so/clix/services
- [Notificationservice](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/services/NotificationService.kt): NotificationService (Context, StorageService, EventService) manages channels/permissions, deduplicates and shows push notifications (creates NotificationCompat notifications with optional remote image and PendingIntent to NotificationTappedActivity), tracks receive/tap events, and exposes handleNotificationReceived/tapped, requestNotificationPermission, preferences/reset.
- [Sessionservice](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/services/SessionService.kt): SessionService observes app lifecycle via ProcessLifecycleOwner to start or continue sessions based on a timeout, persists last-activity to StorageService, optionally sends a SESSION_START event (via EventService in Clix.coroutineScope), and exposes start() and setPendingMessageId().
- [Notificationservice](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/services/NotificationService.kt): NotificationService manages push reception and display: creates notification channel, prevents duplicate message handling via StorageService, loads remote images, posts Android notifications with PendingIntent to NotificationTappedActivity, requests permissions via PermissionActivity, and tracks events through EventService.
- [Storageservice](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/services/StorageService.kt): Provides a type-safe JSON-backed wrapper around Android `SharedPreferences` for internal SDK persistence, exposing generic `set<T>`, `get<T>`, and `remove` APIs using Kotlinx Serialization with `ignoreUnknownKeys` and logging deserialization failures via `ClixLogger`.
- [Deviceservice](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/services/DeviceService.kt): Manages device identity, local storage, and remote device/user-property synchronization via DeviceAPIService using StorageService and Clix.environment—providing getCurrentDeviceId(), set/remove project userId, update/remove user properties, upsert token and push-permission; logs and handles network/serialization errors.
- [Tokenservice](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/services/TokenService.kt): Internal TokenService (depends on StorageService) persists a timestamped Token at key "clix_current_push_token", maintains up to 5 previous tokens at "clix_push_tokens", and exposes getCurrentToken, getPreviousTokens, saveToken, clearTokens and reset.
- [Deviceapiservice](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/services/DeviceAPIService.kt): DeviceAPIService provides suspend REST client methods (post/delete via ClixAPIClient) to upsert devices, set a device's projectUserId, add/update or remove user properties—returning ClixServerDevice or projectUserId and serializing ClixDevice/ClixUserProperty to /devices and /devices/{id}/user/* endpoints.
- [Eventservice](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/services/EventService.kt): Internal service that converts arbitrary event properties to JSON primitives, builds `EventProperties`/`EventForRequest` payloads (including message/journey metadata and `Clix.environment.
- [Eventservice](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/services/EventService.kt): Internal EventService exposes suspend fun trackEvent(..
- [Clixapiclient](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/services/ClixAPIClient.kt): Defines the internal `ClixAPIClient`, a JSON-configured (snake_case) HTTP wrapper around `HTTPClient` that builds `/api/v1` URLs from `Clix` environment config, injects default auth/identification headers, logs requests/responses, and exposes generic suspend `get`, `post`, `put`, and `delete` helpers.
- [Eventapiservice](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/services/EventAPIService.kt): Implements the `/events` tracking client, defining serializable `Event*` payload models and using the generic `ClixAPIClient.post<CreateEventsRequest, CreateEventsResponse>` flow to send batched device-scoped events (with message/journey metadata and custom JSON properties) to the backend.
- [Eventapiservice](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/services/EventAPIService.kt): Defines serializable event models (EventProperties, EventForRequest, Event, CreateEventsRequest/Response) and an internal EventAPIService (extends ClixAPIClient) exposing suspend trackEvents(List<EventForRequest>) that JSON-serializes and POSTs events to /events via kotlinx.serialization.

## clix/src/main/kotlin/so/clix/utils
- [Clixerror](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/main/kotlin/so/clix/utils/ClixError.kt): Defines the internal sealed `ClixError` exception hierarchy used across the SDK to represent initialization, configuration, network, encoding/decoding, permission, and unknown failures, standardizing error messages and propagation for Clix API flows.
Expand All @@ -66,7 +67,7 @@

## clix/src/test/kotlin/so/clix/services
- [Tokenservicetest](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/test/kotlin/so/clix/services/TokenServiceTest.kt): Robolectric unit tests for TokenService using StorageService-backed SharedPreferences, verifying getCurrentToken/getPreviousTokens, saveToken behavior (append current to previous, cap previous list at 5), and clearTokens/reset side-effects on persisted token state.
- [Notificationservicetest](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/test/kotlin/so/clix/services/NotificationServiceTest.kt): Unit tests for NotificationService using Robolectric and MockK that verify handleNotificationTapped tracks PUSH_NOTIFICATION_TAPPED, setNotificationPreferences persists preferences conditional on NotificationManagerCompat.areNotificationsEnabled, and reset removes settings and calls NotificationManagerCompat.
- [Notificationservicetest](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/test/kotlin/so/clix/services/NotificationServiceTest.kt): Unit tests for NotificationService verifying handleNotificationTapped triggers EventService.trackEvent, setNotificationPreferences persists preferences conditional on NotificationManagerCompat.
- [Eventservicetest](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/test/kotlin/so/clix/services/EventServiceTest.kt): Robolectric/MockK-based unit tests for `EventService.trackEvent`, verifying that events are built with the `Clix.
- [Storageservicetest](https://raw.githubusercontent.com/clix-so/clix-android-sdk/main/clix/src/test/kotlin/so/clix/services/StorageServiceTest.kt): Robolectric-based unit tests for `StorageService`, validating SharedPreferences-backed `set/get/remove` behavior for strings and `@Serializable` objects, null-handling (key removal), and graceful failure on invalid JSON deserialization using the `"clix_preferences"` store.

Expand Down