Skip to content

Commit

Permalink
unsubscribe buttons implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
VadymLuchko committed Jul 9, 2021
1 parent 1304547 commit b2e43a2
Show file tree
Hide file tree
Showing 12 changed files with 481 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1186,6 +1186,29 @@ class Application : public virtual InitialApplicationData,
virtual void RemovePendingSubscriptionButton(
const int32_t correlation_id) = 0;

/**
* @brief Get map of pending button unsubscription requests correlation ids
* to button names
* @return pending button unsubscriptions map
*/
virtual const ButtonSubscriptionsMap& PendingButtonUnsubscriptions()
const = 0;

/**
* @brief Add pending button unsubscription request
* @param correlation_id - correlation id of unsubscription request
* @param button_name - enum value indicating button name
*/
virtual void AddPendingButtonUnsubscription(
const int32_t correlation_id,
const hmi_apis::Common_ButtonName::eType button_name) = 0;
/**
* @brief Remove pending button unsubscription request
* @param correlation_id - correlation id of unsubscription request
*/
virtual void RemovePendingButtonUnsubscription(
const int32_t correlation_id) = 0;

/**
* @brief Get cloud app endpoint for websocket connection
* @return cloud app endpoint
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,14 @@ class ApplicationImpl : public virtual Application,

void RemovePendingSubscriptionButton(const int32_t correlation_id) OVERRIDE;

const ButtonSubscriptionsMap& PendingButtonUnsubscriptions() const OVERRIDE;

void AddPendingButtonUnsubscription(
const int32_t correlation_id,
const hmi_apis::Common_ButtonName::eType button_name) OVERRIDE;

void RemovePendingButtonUnsubscription(const int32_t correlation_id) OVERRIDE;

protected:
/**
* @brief Clean up application folder. Persistent files will stay
Expand Down Expand Up @@ -610,6 +618,7 @@ class ApplicationImpl : public virtual Application,
AppFilesMap app_files_;
std::set<mobile_apis::ButtonName::eType> subscribed_buttons_;
ButtonSubscriptionsMap pending_button_subscriptions_;
ButtonSubscriptionsMap pending_button_unsubscriptions_;
UsageStatistics usage_report_;
HelpPromptManagerImpl help_prompt_manager_impl_;
protocol_handler::MajorProtocolVersion protocol_version_;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* Copyright (c) 2021, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
* Neither the name of the Ford Motor Company nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_UNSUBSCRIBE_BUTTON_REQUEST_H_
#define SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_UNSUBSCRIBE_BUTTON_REQUEST_H_

#include "application_manager/commands/request_to_hmi.h"
#include "application_manager/event_engine/event.h"
#include "utils/macro.h"

namespace sdl_rpc_plugin {
namespace app_mngr = application_manager;

namespace commands {

namespace hmi {

class UnsubscribeButtonRequest : public app_mngr::commands::RequestToHMI,
public app_mngr::event_engine::EventObserver {
public:
UnsubscribeButtonRequest(const app_mngr::commands::MessageSharedPtr& message,
app_mngr::ApplicationManager& application_manager,
app_mngr::rpc_service::RPCService& rpc_service,
app_mngr::HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handle);

~UnsubscribeButtonRequest();

void Run() OVERRIDE;

void onTimeOut() OVERRIDE;

void on_event(const application_manager::event_engine::Event& event) OVERRIDE;

private:
DISALLOW_COPY_AND_ASSIGN(UnsubscribeButtonRequest);

hmi_apis::Common_ButtonName::eType button_name_;
};

} // namespace hmi
} // namespace commands

} // namespace sdl_rpc_plugin

#endif // SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_UNSUBSCRIBE_BUTTON_REQUEST_H_
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* Copyright (c) 2021, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
* Neither the name of the Ford Motor Company nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_UNSUBSCRIBE_BUTTON_RESPONSE_H_
#define SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_UNSUBSCRIBE_BUTTON_RESPONSE_H_

#include "application_manager/application_manager.h"
#include "application_manager/commands/response_from_hmi.h"
#include "utils/macro.h"

namespace sdl_rpc_plugin {
namespace app_mngr = application_manager;

namespace commands {

namespace hmi {

class UnsubscribeButtonResponse : public app_mngr::commands::ResponseFromHMI {
public:
UnsubscribeButtonResponse(const app_mngr::commands::MessageSharedPtr& message,
app_mngr::ApplicationManager& application_manager,
app_mngr::rpc_service::RPCService& rpc_service,
app_mngr::HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handle);

~UnsubscribeButtonResponse();

void Run() OVERRIDE;

private:
DISALLOW_COPY_AND_ASSIGN(UnsubscribeButtonResponse);
};

} // namespace hmi

} // namespace commands

} // namespace sdl_rpc_plugin

#endif // SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_UNSUBSCRIBE_BUTTON_RESPONSE_H_
Original file line number Diff line number Diff line change
Expand Up @@ -42,44 +42,23 @@ namespace app_mngr = application_manager;

namespace commands {

/**
* @brief UnsubscribeButtonRequest command class
**/
class UnsubscribeButtonRequest : public app_mngr::commands::CommandRequestImpl {
public:
/**
* @brief UnsubscribeButtonRequest class constructor
*
* @param message Incoming SmartObject message
**/
UnsubscribeButtonRequest(const app_mngr::commands::MessageSharedPtr& message,
app_mngr::ApplicationManager& application_manager,
app_mngr::rpc_service::RPCService& rpc_service,
app_mngr::HMICapabilities& hmi_capabilities,
policy::PolicyHandlerInterface& policy_handler);

/**
* @brief UnsubscribeButtonRequest class destructor
**/
~UnsubscribeButtonRequest() FINAL;

/**
* @brief Execute command
**/
void Run() FINAL;

/**
* @brief Init sets hash update mode for request
*/
bool Init() FINAL;

private:
/**
* @brief Sends ButtonSubscription notification
* to notify HMI that app unsubscribed from the button.
*/
void SendUnsubscribeButtonNotification();
void on_event(const app_mngr::event_engine::Event& event) FINAL;

private:
DISALLOW_COPY_AND_ASSIGN(UnsubscribeButtonRequest);
};

Expand Down
Loading

0 comments on commit b2e43a2

Please sign in to comment.