1 // Copyright 2018 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 5 #ifndef CHROMEOS_SERVICES_MULTIDEVICE_SETUP_ANDROID_SMS_APP_INSTALLING_STATUS_OBSERVER_H_ 6 #define CHROMEOS_SERVICES_MULTIDEVICE_SETUP_ANDROID_SMS_APP_INSTALLING_STATUS_OBSERVER_H_ 7 8 #include <memory> 9 10 #include "chromeos/services/multidevice_setup/feature_state_manager.h" 11 #include "chromeos/services/multidevice_setup/host_status_provider.h" 12 13 class PrefRegistrySimple; 14 class PrefService; 15 16 namespace chromeos { 17 18 namespace multidevice_setup { 19 20 class AndroidSmsAppHelperDelegate; 21 22 // Listens for status changes in multidevice state and installs the Android 23 // Messages PWA if needed. 24 class AndroidSmsAppInstallingStatusObserver 25 : public HostStatusProvider::Observer, 26 public FeatureStateManager::Observer { 27 public: 28 class Factory { 29 public: 30 static std::unique_ptr<AndroidSmsAppInstallingStatusObserver> Create( 31 HostStatusProvider* host_status_provider, 32 FeatureStateManager* feature_state_manager, 33 AndroidSmsAppHelperDelegate* android_sms_app_helper_delegate, 34 PrefService* pref_service); 35 static void SetFactoryForTesting(Factory* test_factory); 36 37 protected: 38 virtual ~Factory(); 39 virtual std::unique_ptr<AndroidSmsAppInstallingStatusObserver> 40 CreateInstance( 41 HostStatusProvider* host_status_provider, 42 FeatureStateManager* feature_state_manager, 43 AndroidSmsAppHelperDelegate* android_sms_app_helper_delegate) = 0; 44 45 private: 46 static Factory* test_factory_; 47 }; 48 49 ~AndroidSmsAppInstallingStatusObserver() override; 50 51 static void RegisterPrefs(PrefRegistrySimple* registry); 52 53 private: 54 AndroidSmsAppInstallingStatusObserver( 55 HostStatusProvider* host_status_provider, 56 FeatureStateManager* feature_state_manager, 57 AndroidSmsAppHelperDelegate* android_sms_app_helper_delegate, 58 PrefService* pref_service); 59 60 // HostStatusProvider::Observer: 61 void OnHostStatusChange(const HostStatusProvider::HostStatusWithDevice& 62 host_status_with_device) override; 63 64 // FeatureStateManager::Observer: 65 void OnFeatureStatesChange( 66 const FeatureStateManager::FeatureStatesMap& feature_states_map) override; 67 68 bool DoesFeatureStateAllowInstallation(); 69 void UpdatePwaInstallationState(); 70 void ReenableIfAppropriate(); 71 72 HostStatusProvider* host_status_provider_; 73 FeatureStateManager* feature_state_manager_; 74 AndroidSmsAppHelperDelegate* android_sms_app_helper_delegate_; 75 PrefService* pref_service_; 76 base::WeakPtrFactory<AndroidSmsAppInstallingStatusObserver> weak_ptr_factory_{ 77 this}; 78 79 DISALLOW_COPY_AND_ASSIGN(AndroidSmsAppInstallingStatusObserver); 80 }; 81 82 } // namespace multidevice_setup 83 84 } // namespace chromeos 85 86 #endif // CHROMEOS_SERVICES_MULTIDEVICE_SETUP_ANDROID_SMS_APP_INSTALLING_STATUS_OBSERVER_H_ 87