apps_access_manager_impl.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef ASH_WEBUI_ECHE_APP_UI_APPS_ACCESS_MANAGER_IMPL_H_
  5. #define ASH_WEBUI_ECHE_APP_UI_APPS_ACCESS_MANAGER_IMPL_H_
  6. #include <ostream>
  7. #include "ash/components/phonehub/multidevice_feature_access_manager.h"
  8. #include "ash/services/multidevice_setup/public/cpp/multidevice_setup_client.h"
  9. #include "ash/services/secure_channel/public/cpp/client/connection_manager.h"
  10. #include "ash/webui/eche_app_ui/apps_access_manager.h"
  11. #include "ash/webui/eche_app_ui/eche_connector.h"
  12. #include "ash/webui/eche_app_ui/eche_message_receiver.h"
  13. #include "ash/webui/eche_app_ui/feature_status.h"
  14. #include "ash/webui/eche_app_ui/feature_status_provider.h"
  15. class PrefRegistrySimple;
  16. class PrefService;
  17. namespace ash {
  18. namespace eche_app {
  19. using AccessStatus =
  20. ash::phonehub::MultideviceFeatureAccessManager::AccessStatus;
  21. using ConnectionStatus = secure_channel::ConnectionManager::Status;
  22. // Implements AppsAccessManager by persisting the last-known
  23. // apps access value to user prefs.
  24. class AppsAccessManagerImpl
  25. : public AppsAccessManager,
  26. public EcheMessageReceiver::Observer,
  27. public FeatureStatusProvider::Observer,
  28. public secure_channel::ConnectionManager::Observer {
  29. public:
  30. static void RegisterPrefs(PrefRegistrySimple* registry);
  31. explicit AppsAccessManagerImpl(
  32. EcheConnector* eche_connector,
  33. EcheMessageReceiver* message_receiver,
  34. FeatureStatusProvider* feature_status_provider,
  35. PrefService* pref_service,
  36. multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
  37. secure_channel::ConnectionManager* connection_manager);
  38. ~AppsAccessManagerImpl() override;
  39. private:
  40. friend class AppsAccessManagerImplTest;
  41. // AppsAccessManager:
  42. AccessStatus GetAccessStatus() const override;
  43. void SetAccessStatusInternal(AccessStatus access_status) override;
  44. void OnSetupRequested() override;
  45. void NotifyAppsAccessCanceled() override;
  46. // EcheMessageReceiver::Observer:
  47. void OnGetAppsAccessStateResponseReceived(
  48. proto::GetAppsAccessStateResponse apps_access_state_response) override;
  49. void OnSendAppsSetupResponseReceived(
  50. proto::SendAppsSetupResponse apps_setup_response) override;
  51. void OnStatusChange(proto::StatusChangeType status_change_type) override {}
  52. void OnAppPolicyStateChange(
  53. proto::AppStreamingPolicy app_policy_state) override;
  54. // FeatureStatusProvider::Observer:
  55. void OnFeatureStatusChanged() override;
  56. // secure_channel::ConnectionManager::Observer:
  57. void OnConnectionStatusChanged() override;
  58. void AttemptAppsAccessStateRequest();
  59. void GetAppsAccessStateRequest();
  60. void SendShowAppsAccessSetupRequest();
  61. void UpdateFeatureEnabledState(AccessStatus previous_access_status,
  62. AccessStatus current_access_status);
  63. bool IsWaitingForAccessToInitiallyEnableApps() const;
  64. bool IsPhoneHubEnabled() const;
  65. bool IsEligibleForOnboarding(FeatureStatus feature_status) const;
  66. void UpdateSetupOperationState();
  67. void LogAppsSetupResponse(proto::Result apps_setup_result);
  68. AccessStatus ComputeAppsAccessState();
  69. FeatureStatus current_feature_status_;
  70. ConnectionStatus current_connection_status_;
  71. EcheConnector* eche_connector_;
  72. EcheMessageReceiver* message_receiver_;
  73. FeatureStatusProvider* feature_status_provider_;
  74. PrefService* pref_service_;
  75. multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client_;
  76. secure_channel::ConnectionManager* connection_manager_;
  77. bool initialized_ = false;
  78. proto::AppStreamingPolicy current_app_policy_state_ =
  79. proto::AppStreamingPolicy::APP_POLICY_UNKNOWN;
  80. proto::AppsAccessState current_apps_access_state_ =
  81. proto::AppsAccessState::ACCESS_UNKNOWN;
  82. };
  83. } // namespace eche_app
  84. } // namespace ash
  85. #endif // ASH_WEBUI_ECHE_APP_UI_APPS_ACCESS_MANAGER_IMPL_H_