+
+ // listen property change
+ mAccessibilityStatusClient.addPropertyChangedEvent<bool>("ScreenReaderEnabled", [this](bool res) {
+ mIsScreenReaderEnabled = res;
+ if(mIsScreenReaderEnabled || mIsEnabled)
+ {
+ ForceUp();
+ }
+ else
+ {
+ ForceDown();
+ }
+ });
+
+ mAccessibilityStatusClient.addPropertyChangedEvent<bool>("IsEnabled", [this](bool res) {
+ mIsEnabled = res;
+ if(mIsScreenReaderEnabled || mIsEnabled)
+ {
+ ForceUp();
+ }
+ else
+ {
+ ForceDown();
+ }
+ });
+ }
+
+ bool InitializeAccessibilityStatusClient()
+ {
+ mAccessibilityStatusClient = DBus::DBusClient{A11yDbusName, A11yDbusPath, A11yDbusStatusInterface, DBus::ConnectionType::SESSION};
+
+ if (!mAccessibilityStatusClient)
+ {
+ DALI_LOG_ERROR("Accessibility Status DbusClient is not ready\n");
+ return false;
+ }
+
+ return true;
+ }
+
+ bool OnIdleSignal()
+ {
+ if ( InitializeAccessibilityStatusClient() )
+ {
+ ReadAndListenProperty();
+ mIdleCallback = NULL;
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * @copydoc Dali::Accessibility::Bridge::Initialize()
+ */
+ void Initialize() override
+ {
+ if ( InitializeAccessibilityStatusClient() )
+ {
+ ReadAndListenProperty();
+ return;
+ }
+
+ // Initialize failed. Try it again on Idle
+ if( Dali::Adaptor::IsAvailable() )
+ {
+ Dali::Adaptor& adaptor = Dali::Adaptor::Get();
+ if( NULL == mIdleCallback )
+ {
+ mIdleCallback = MakeCallback( this, &BridgeImpl::OnIdleSignal );
+ adaptor.AddIdle( mIdleCallback, true );
+ }
+ }