diff --git a/core/main/src/bootstrap/start_app_manager_step.rs b/core/main/src/bootstrap/start_app_manager_step.rs index 0d495879b..25b1aedc9 100644 --- a/core/main/src/bootstrap/start_app_manager_step.rs +++ b/core/main/src/bootstrap/start_app_manager_step.rs @@ -18,7 +18,6 @@ use ripple_sdk::async_trait::async_trait; use ripple_sdk::{framework::bootstrap::Bootstep, tokio, utils::error::RippleError}; -use crate::processor::lifecycle_management_processor::LifecycleManagementProcessor; use crate::{ service::apps::delegated_launcher_handler::DelegatedLauncherHandler, state::bootstrap_state::BootstrapState, @@ -34,12 +33,6 @@ impl Bootstep for StartAppManagerStep { } async fn setup(&self, state: BootstrapState) -> Result<(), RippleError> { - state - .platform_state - .get_client() - .add_request_processor(LifecycleManagementProcessor::new( - state.platform_state.get_client(), - )); let mut app_manager = DelegatedLauncherHandler::new(state.channels_state, state.platform_state); tokio::spawn(async move { diff --git a/core/main/src/processor/lifecycle_management_processor.rs b/core/main/src/processor/lifecycle_management_processor.rs deleted file mode 100644 index 778186e56..000000000 --- a/core/main/src/processor/lifecycle_management_processor.rs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2023 Comcast Cable Communications Management, LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// SPDX-License-Identifier: Apache-2.0 -// - -use ripple_sdk::{ - api::{ - apps::{AppMethod, AppRequest, AppResponse}, - firebolt::fb_lifecycle_management::LifecycleManagementRequest, - }, - async_trait::async_trait, - extn::{ - client::extn_processor::{ - DefaultExtnStreamer, ExtnRequestProcessor, ExtnStreamProcessor, ExtnStreamer, - }, - extn_client_message::{ExtnMessage, ExtnPayload, ExtnPayloadProvider}, - }, - log::error, - tokio::sync::{mpsc::Sender, oneshot}, -}; - -use crate::service::extn::ripple_client::RippleClient; - -/// Processor to service incoming Lifecycle Requests from launcher extension. -#[derive(Debug)] -pub struct LifecycleManagementProcessor { - client: RippleClient, - streamer: DefaultExtnStreamer, -} - -impl LifecycleManagementProcessor { - pub fn new(client: RippleClient) -> LifecycleManagementProcessor { - LifecycleManagementProcessor { - client, - streamer: DefaultExtnStreamer::new(), - } - } -} - -impl ExtnStreamProcessor for LifecycleManagementProcessor { - type STATE = RippleClient; - type VALUE = LifecycleManagementRequest; - fn get_state(&self) -> Self::STATE { - self.client.clone() - } - - fn sender(&self) -> Sender { - self.streamer.sender() - } - - fn receiver(&mut self) -> ripple_sdk::tokio::sync::mpsc::Receiver { - self.streamer.receiver() - } -} - -#[async_trait] -impl ExtnRequestProcessor for LifecycleManagementProcessor { - fn get_client(&self) -> ripple_sdk::extn::client::extn_client::ExtnClient { - self.client.get_extn_client() - } - - async fn process_request(state: Self::STATE, msg: ExtnMessage, request: Self::VALUE) -> bool { - let (resp_tx, resp_rx) = oneshot::channel::(); - let method = match request { - LifecycleManagementRequest::Session(s) => AppMethod::BrowserSession(s.session), - LifecycleManagementRequest::SetState(s) => AppMethod::SetState(s.app_id, s.state), - LifecycleManagementRequest::Close(app_id, cr) => AppMethod::Close(app_id, cr), - LifecycleManagementRequest::Ready(app_id) => AppMethod::Ready(app_id), - LifecycleManagementRequest::GetSecondScreenPayload(app_id) => { - AppMethod::GetSecondScreenPayload(app_id) - } - LifecycleManagementRequest::StartPage(app_id) => AppMethod::GetStartPage(app_id), - }; - if let Err(e) = state.send_app_request(AppRequest::new(method, resp_tx)) { - error!("Sending to App manager {:?}", e); - return Self::handle_error(state.get_extn_client(), msg, e).await; - } - let resp = resp_rx.await; - if let Ok(app_response) = resp { - if let ExtnPayload::Response(payload) = app_response.get_extn_payload() { - return Self::respond(state.get_extn_client(), msg, payload) - .await - .is_ok(); - } - } - - true - } -} diff --git a/core/main/src/processor/mod.rs b/core/main/src/processor/mod.rs index 8a86607d8..32ba50ec1 100644 --- a/core/main/src/processor/mod.rs +++ b/core/main/src/processor/mod.rs @@ -19,7 +19,6 @@ pub mod app_events_processor; pub mod authorized_info_processor; pub mod config_processor; pub mod keyboard_processor; -pub mod lifecycle_management_processor; pub mod metrics_processor; pub mod pin_processor; pub mod rpc_gateway_processor; diff --git a/core/main/src/service/apps/delegated_launcher_handler.rs b/core/main/src/service/apps/delegated_launcher_handler.rs index 91d14aa54..f52b04c33 100644 --- a/core/main/src/service/apps/delegated_launcher_handler.rs +++ b/core/main/src/service/apps/delegated_launcher_handler.rs @@ -1508,37 +1508,29 @@ impl DelegatedLauncherHandler { &mut self, event: LifecycleManagementEventRequest, ) -> Result { - if self.platform_state.has_internal_launcher() { - if let Err(e) = self.platform_state.get_client().send_event(event) { - error!("send event error {:?}", e); - return Err(AppError::OsError); + let event_name; + let value; + match event { + LifecycleManagementEventRequest::Launch(req) => { + event_name = LCM_EVENT_ON_REQUEST_LAUNCH; + value = serde_json::to_value(req).unwrap(); } - } else { - let event_name; - let value; - match event { - LifecycleManagementEventRequest::Launch(req) => { - event_name = LCM_EVENT_ON_REQUEST_LAUNCH; - value = serde_json::to_value(req).unwrap(); - } - LifecycleManagementEventRequest::Ready(req) => { - event_name = LCM_EVENT_ON_REQUEST_READY; - value = serde_json::to_value(req).unwrap(); - } - LifecycleManagementEventRequest::Close(req) => { - event_name = LCM_EVENT_ON_REQUEST_CLOSE; - value = serde_json::to_value(req).unwrap(); - } - LifecycleManagementEventRequest::Finished(req) => { - event_name = LCM_EVENT_ON_REQUEST_FINISHED; - value = serde_json::to_value(req).unwrap(); - } - _ => return Err(AppError::OsError), + LifecycleManagementEventRequest::Ready(req) => { + event_name = LCM_EVENT_ON_REQUEST_READY; + value = serde_json::to_value(req).unwrap(); } - - AppEvents::emit(&self.platform_state, event_name, &value).await; + LifecycleManagementEventRequest::Close(req) => { + event_name = LCM_EVENT_ON_REQUEST_CLOSE; + value = serde_json::to_value(req).unwrap(); + } + LifecycleManagementEventRequest::Finished(req) => { + event_name = LCM_EVENT_ON_REQUEST_FINISHED; + value = serde_json::to_value(req).unwrap(); + } + _ => return Err(AppError::OsError), } + AppEvents::emit(&self.platform_state, event_name, &value).await; Ok(AppManagerResponse::None) } diff --git a/core/main/src/service/apps/provider_broker.rs b/core/main/src/service/apps/provider_broker.rs index 62af35ec3..e6ba68d37 100644 --- a/core/main/src/service/apps/provider_broker.rs +++ b/core/main/src/service/apps/provider_broker.rs @@ -21,9 +21,6 @@ use ripple_sdk::{ firebolt::{ fb_capabilities::{CapEvent, FireboltCap}, fb_general::ListenRequest, - fb_lifecycle_management::{ - LifecycleManagementEventRequest, LifecycleManagementProviderEvent, - }, fb_openrpc::FireboltOpenRpcMethod, provider::{ FocusRequest, GenericProviderError, ProviderRequest, ProviderRequestPayload, @@ -330,16 +327,6 @@ impl ProviderBroker { match active_sessions.remove(&resp.correlation_id) { Some(session) => { oneshot_send_and_log(session.caller.tx, resp.result, "ProviderResponse"); - if session.focused { - let app_id = session.provider.provider.app_id; - let event = LifecycleManagementEventRequest::Provide( - LifecycleManagementProviderEvent::Remove(app_id), - ); - let client = pst.clone().get_client(); - if let Err(e) = client.send_event(event) { - error!("send event error {:?}", e); - } - } } None => { error!("Ignored provider response because there was no active session waiting") @@ -420,16 +407,6 @@ impl ProviderBroker { let mut active_sessions = pst.provider_broker_state.active_sessions.write().unwrap(); if let Some(session) = active_sessions.get_mut(&request.correlation_id) { session.focused = true; - if pst.has_internal_launcher() { - let app_id = session.provider.provider.app_id.clone(); - let event = LifecycleManagementEventRequest::Provide( - LifecycleManagementProviderEvent::Add(app_id), - ); - let client = pst.clone().get_client(); - if let Err(e) = client.send_event(event) { - error!("send event error {:?}", e); - } - } } else { warn!("Focus: No active session for request"); } diff --git a/core/sdk/src/api/apps.rs b/core/sdk/src/api/apps.rs index a25c5d14c..1959b5aa2 100644 --- a/core/sdk/src/api/apps.rs +++ b/core/sdk/src/api/apps.rs @@ -23,7 +23,7 @@ use tokio::sync::oneshot; use uuid::Uuid; use crate::{ - extn::extn_client_message::{ExtnEvent, ExtnPayload, ExtnPayloadProvider, ExtnResponse}, + extn::extn_client_message::{ExtnEvent, ExtnPayload, ExtnPayloadProvider}, framework::ripple_contract::RippleContract, utils::{channel_utils::oneshot_send_and_log, error::RippleError}, }; @@ -100,42 +100,6 @@ pub struct AppLaunchInfo { pub type AppResponse = Result; -impl ExtnPayloadProvider for AppResponse { - fn get_extn_payload(&self) -> ExtnPayload { - let response = if self.is_ok() { - if let Ok(resp) = self { - ExtnResponse::Value(serde_json::to_value(resp.clone()).unwrap()) - } else { - ExtnResponse::None(()) - } - } else { - ExtnResponse::Error(RippleError::ProcessorError) - }; - - ExtnPayload::Response(response) - } - - fn get_from_payload(payload: ExtnPayload) -> Option { - if let ExtnPayload::Response(resp) = payload { - match resp { - ExtnResponse::Value(v) => { - if let Ok(v) = serde_json::from_value(v) { - return Some(Ok(v)); - } - } - ExtnResponse::Error(_) => return Some(Err(AppError::General)), - _ => {} - } - } - - None - } - - fn contract() -> RippleContract { - RippleContract::LifecycleManagement - } -} - #[derive(Debug, Clone)] pub struct AppRequest { pub method: AppMethod, @@ -379,13 +343,6 @@ mod tests { assert_eq!(result.unwrap_err(), RippleError::SenderMissing); } - #[test] - fn test_extn_payload_provider_for_app_response() { - let app_response: AppResponse = Ok(AppManagerResponse::State(LifecycleState::Initializing)); - let contract_type: RippleContract = RippleContract::LifecycleManagement; - test_extn_payload_provider(app_response, contract_type); - } - #[test] fn test_extn_payload_provider_for_app_event_request() { let app_event_request = AppEventRequest::Emit(AppEvent { diff --git a/core/sdk/src/api/firebolt/fb_lifecycle_management.rs b/core/sdk/src/api/firebolt/fb_lifecycle_management.rs index b51f890e0..c9340d602 100644 --- a/core/sdk/src/api/firebolt/fb_lifecycle_management.rs +++ b/core/sdk/src/api/firebolt/fb_lifecycle_management.rs @@ -17,13 +17,9 @@ use serde::{Deserialize, Serialize}; -use crate::{ - api::{ - apps::{AppSession, CloseReason}, - device::entertainment_data::{InternalNavigationIntent, NavigationIntent}, - }, - extn::extn_client_message::{ExtnEvent, ExtnPayload, ExtnPayloadProvider, ExtnRequest}, - framework::ripple_contract::RippleContract, +use crate::api::{ + apps::{AppSession, CloseReason}, + device::entertainment_data::{InternalNavigationIntent, NavigationIntent}, }; use super::{fb_discovery::LaunchRequest, fb_lifecycle::LifecycleState}; @@ -46,27 +42,6 @@ pub enum LifecycleManagementEventRequest { Provide(LifecycleManagementProviderEvent), } -impl ExtnPayloadProvider for LifecycleManagementEventRequest { - fn get_extn_payload(&self) -> ExtnPayload { - ExtnPayload::Event(ExtnEvent::Value(serde_json::to_value(self).unwrap())) - } - - fn get_from_payload(payload: ExtnPayload) -> Option { - if let ExtnPayload::Event(ExtnEvent::Value(value)) = payload { - let result: Result = serde_json::from_value(value); - if let Ok(result) = result { - return Some(result); - } - } - - None - } - - fn contract() -> RippleContract { - RippleContract::Launcher - } -} - #[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] pub enum LifecycleManagementRequest { Session(AppSessionRequest), @@ -77,24 +52,6 @@ pub enum LifecycleManagementRequest { StartPage(String), } -impl ExtnPayloadProvider for LifecycleManagementRequest { - fn get_extn_payload(&self) -> ExtnPayload { - ExtnPayload::Request(ExtnRequest::LifecycleManagement(self.clone())) - } - - fn get_from_payload(payload: ExtnPayload) -> Option { - if let ExtnPayload::Request(ExtnRequest::LifecycleManagement(value)) = payload { - return Some(value); - } - - None - } - - fn contract() -> RippleContract { - RippleContract::LifecycleManagement - } -} - #[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] pub struct LifecycleManagementLaunchEvent { pub parameters: LifecycleManagementLaunchParameters, @@ -207,13 +164,11 @@ pub struct AppSessionRequest { #[cfg(test)] mod tests { use super::*; - use crate::api::apps::{AppBasicInfo, AppLaunchInfo, AppRuntime, AppSession}; use crate::api::device::entertainment_data::{ HomeIntent, InternalNavigationIntent, InternalNavigationIntentStrict, NavigationIntentLoose, NavigationIntentStrict, }; use crate::api::firebolt::fb_discovery::DiscoveryContext; - use crate::utils::test_utils::test_extn_payload_provider; #[test] fn test_get_intent_some() { @@ -276,45 +231,4 @@ mod tests { } ); } - - #[test] - fn test_extn_request_lifecycle_management() { - let app_session_request = AppSessionRequest { - session: AppSession { - app: AppBasicInfo { - id: "sample_id".to_string(), - catalog: None, - url: None, - title: None, - }, - runtime: Some(AppRuntime { - id: Some("sample_runtime_id".to_string()), - }), - launch: AppLaunchInfo::default(), - }, - }; - let lifecycle_management_request = LifecycleManagementRequest::Session(app_session_request); - let contract_type: RippleContract = RippleContract::LifecycleManagement; - test_extn_payload_provider(lifecycle_management_request, contract_type); - } - - #[test] - fn test_lifecycle_management_launch_event_serialization() { - let launch_event = - LifecycleManagementEventRequest::Launch(LifecycleManagementLaunchEvent { - parameters: LifecycleManagementLaunchParameters { - app_id: "example_app".to_string(), - intent: Some(InternalNavigationIntent::NavigationIntentStrict( - InternalNavigationIntentStrict::Home(HomeIntent { - context: DiscoveryContext { - source: "test_source".to_string(), - age_policy: None, - }, - }), - )), - }, - }); - let contract_type: RippleContract = RippleContract::Launcher; - test_extn_payload_provider(launch_event, contract_type); - } }