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