The UserSettings plugin provides a unified, persistent user preferences management system for RDK-based devices. It enables applications and services to store, retrieve, and synchronize user-configurable settings across the entire platform, ensuring a consistent user experience regardless of which application or service accesses the settings.
The plugin manages a complete spectrum of user preferences across five key categories:
-
Audio Preferences
- Enable/disable audio description for visually impaired users
- Configure preferred audio language priorities for multi-language content
-
Caption and Subtitle Control
- Toggle closed captions on/off
- Set preferred caption language priorities
- Select closed caption service type (CC1-CC4, AUTO)
-
Parental Controls
- PIN-based content access control
- Age-based viewing restrictions (G, PG, PG-13, R, NC-17, etc.)
- Time-window restrictions for content access
- Watershed hour enforcement for live and recorded content
- Block unrated content
- Purchase protection with PIN
- Configurable content PIN codes
-
Accessibility Features
- System presentation language selection
- High contrast display mode for enhanced visibility
- Voice guidance for visually impaired navigation
- Adjustable voice guidance speech rate (0.1x to 10x)
- Voice guidance hints and prompts
-
Privacy Settings
- Privacy mode configuration for data collection preferences
- Event-driven notification system ensures all applications receive immediate updates when settings change
- Cross-application consistency: settings modified by one app are instantly reflected in all other apps
- No polling required - efficient push-based notification model
- All settings automatically persist across device reboots
- Leverages the PersistentStore plugin for robust storage
- Default value fallback ensures system always returns valid values
Scenario: A cable/satellite STB serving a multi-user household
- Parents configure parental controls to restrict children's viewing during school hours
- Family members set their preferred audio/caption languages based on individual preferences
- Accessibility settings enable elderly users to navigate with voice guidance
- Settings persist across power cycles and software updates
Scenario: Smart TV or streaming stick used by family members
- Multiple user profiles can be implemented using the UserSettings API
- Consistent caption and audio preferences across all streaming apps
- Centralized privacy settings management for data collection opt-in/opt-out
Scenario: Hotels, hospitals, or assisted living facilities
- Default settings configured for guests/patients during device provisioning
- Accessibility features easily enabled for users with disabilities
- Uniform presentation language across entire facility deployment
Scenario: Applications designed for users with disabilities
- Voice guidance configuration for blind/low-vision users
- High contrast mode for users with visual impairments
- Audio description support for video content
- Adjustable voice speed accommodates different user needs
Scenario: Regulatory compliance and content filtering
- Enforce age-appropriate content viewing through parental controls
- Watershed hour compliance for broadcast content
- Audit and reporting capabilities via Inspector interface
- Purchase protection to prevent unauthorized transactions
The plugin exposes a comprehensive JSON-RPC API with methods for:
- Getters: Retrieve individual settings or bulk settings via Inspector interface
- Setters: Update individual settings with validation
- Events: Real-time notifications for all setting changes
For native service integration:
IUserSettings: Standard user settings interface for get/set operationsIUserSettingsInspector: Bulk query interface for efficient multi-setting retrievalIConfiguration: Plugin configuration interface
- Zero-Configuration Discovery: Automatic discovery via Thunder framework
- Language-Agnostic: JSON-RPC API accessible from any programming language
- Type-Safe Native Interface: COM-RPC for C++ services requiring type safety
- Versioned API: Semantic versioning ensures backward compatibility
- Security: Optional security token validation for protected operations
- Low Latency: Settings retrieval typically < 5ms (depends on PersistentStore performance)
- Minimal Memory Footprint: Lightweight implementation with no caching overhead
- Efficient Notifications: Event-based push model eliminates polling overhead
- Scalable: Supports multiple concurrent clients without performance degradation
- Graceful Degradation: Returns default values if PersistentStore unavailable
- Thread-Safe: Mutex-protected operations ensure data consistency in multi-threaded environments
- Error Recovery: Comprehensive error handling with meaningful error codes
- Validation: Input parameter validation prevents invalid state persistence
- Crash Resilience: Plugin isolation ensures crashes don't affect other Thunder plugins
- L1 Unit Tests: Component-level testing with code coverage tracking
- L2 Integration Tests: End-to-end workflow validation
- Continuous Integration: Automated testing on every code change
- Coverity Static Analysis: Integrated security and quality scanning
- Compliance: Follows RDK coding standards and best practices
- Standard Thunder plugin packaging
- Configurable via JSON configuration file
- Controlled startup order integration
- Auto-start capability for seamless user experience
- Modular architecture separates API layer from implementation
- Comprehensive logging for debugging and diagnostics
- Version tracking via CHANGELOG.md
- Clear separation of concerns enables independent component updates
- API versioning strategy maintains compatibility across updates
- Default value mechanism ensures existing clients continue working
- Non-breaking additions via Inspector interface
- Semantic versioning (Current: v2.3.0)
- Unified Settings Store: Single source of truth for all user preferences across the platform
- Real-Time Synchronization: Immediate cross-application consistency without custom integration
- Comprehensive Coverage: Covers audio, video, accessibility, parental controls, and privacy in one plugin
- Standards-Based: Leverages Thunder/WPEFramework industry-standard plugin architecture
- Production-Ready: Battle-tested in commercial RDK deployments worldwide
- Active Development: Regular updates with new features (v2.3.0 released May 2025)
- Open Source: Apache 2.0 license enables customization and community contributions
Potential enhancements based on community feedback:
- Multi-user profile support with per-profile settings
- Cloud synchronization for settings across multiple devices
- Settings import/export functionality
- Enhanced parental control rules engine
- Integration with emerging accessibility standards
- Extended Inspector interface for batch operations
- Settings versioning and rollback capability