File: nearby_share_settings.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (142 lines) | stat: -rw-r--r-- 6,497 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_NEARBY_SHARING_NEARBY_SHARE_SETTINGS_H_
#define CHROME_BROWSER_NEARBY_SHARING_NEARBY_SHARE_SETTINGS_H_

#include <vector>

#include "base/memory/raw_ptr.h"
#include "chrome/browser/nearby_sharing/local_device_data/nearby_share_local_device_data_manager.h"
#include "chromeos/ash/services/nearby/public/mojom/nearby_share_settings.mojom.h"
#include "components/prefs/pref_change_registrar.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "mojo/public/cpp/bindings/remote_set.h"

class PrefService;

// Provides a type safe wrapper/abstraction over prefs for both C++ and
// Javascript (over mojo) to interact with Nearby user settings. This class
// always reads directly from prefs and relies on pref's memory cache.
// It is designed to be contained within the Nearby Sharing Service with an
// instance per user profile. This class also helps to keep some of the prefs
// logic out of |NearbyShareServiceImpl|.
//
// This class is also used to expose device properties that affect the settings
// UI, but cannot be added at load time because they need to be re-computed. See
// GetIsFastInitiationHardwareSupported() as an example.
//
// The mojo interface is intended to be exposed in settings, os_settings, and
// the nearby WebUI.
//
// NOTE: The pref-change registrar only notifies observers of pref value
// changes; observers are not notified if the pref value is set but does not
// change. This class inherits this behavior.
//
// NOTE: Because the observer interface is over mojo, setting a value directly
// will not synchronously trigger the observer event. Generally this is not a
// problem because these settings should only be changed by user interaction,
// but this is necessary to know when writing unit-tests.
//
// TODO(nohle): Use the NearbyShareContactManager to implement
// Get/SetAllowedContacts().
class NearbyShareSettings : public nearby_share::mojom::NearbyShareSettings,
                            public NearbyShareLocalDeviceDataManager::Observer {
 public:
  using DataUsage = nearby_share::mojom::DataUsage;
  NearbyShareSettings(
      PrefService* pref_service_,
      NearbyShareLocalDeviceDataManager* local_device_data_manager);
  ~NearbyShareSettings() override;

  // Synchronous getters for C++ clients, mojo setters can be used as is
  bool GetEnabled() const;
  nearby_share::mojom::FastInitiationNotificationState
  GetFastInitiationNotificationState() const;
  bool is_fast_initiation_hardware_supported() {
    return is_fast_initiation_hardware_supported_;
  }
  void SetIsFastInitiationHardwareSupported(bool is_supported);
  std::string GetDeviceName() const;
  nearby_share::mojom::DataUsage GetDataUsage() const;
  nearby_share::mojom::Visibility GetVisibility() const;
  const std::vector<std::string> GetAllowedContacts() const;
  bool IsOnboardingComplete() const;

  // Returns true if the feature is disabled by policy.
  bool IsDisabledByPolicy() const;

  // nearby_share::mojom::NearbyShareSettings
  void AddSettingsObserver(
      ::mojo::PendingRemote<nearby_share::mojom::NearbyShareSettingsObserver>
          observer) override;
  void GetEnabled(base::OnceCallback<void(bool)> callback) override;
  void GetFastInitiationNotificationState(
      base::OnceCallback<
          void(nearby_share::mojom::FastInitiationNotificationState)> callback)
      override;
  void GetIsFastInitiationHardwareSupported(
      base::OnceCallback<void(bool)> callback) override;
  void SetEnabled(bool enabled) override;
  void SetFastInitiationNotificationState(
      nearby_share::mojom::FastInitiationNotificationState state) override;
  void IsOnboardingComplete(base::OnceCallback<void(bool)> callback) override;
  void SetIsOnboardingComplete(bool completed) override;
  void GetDeviceName(
      base::OnceCallback<void(const std::string&)> callback) override;
  void ValidateDeviceName(
      const std::string& device_name,
      base::OnceCallback<void(nearby_share::mojom::DeviceNameValidationResult)>
          callback) override;
  void SetDeviceName(
      const std::string& device_name,
      base::OnceCallback<void(nearby_share::mojom::DeviceNameValidationResult)>
          callback) override;
  void GetDataUsage(base::OnceCallback<void(nearby_share::mojom::DataUsage)>
                        callback) override;
  void SetDataUsage(nearby_share::mojom::DataUsage data_usage) override;
  void GetVisibility(base::OnceCallback<void(nearby_share::mojom::Visibility)>
                         callback) override;
  void SetVisibility(nearby_share::mojom::Visibility visibility) override;
  void GetAllowedContacts(
      base::OnceCallback<void(const std::vector<std::string>&)> callback)
      override;
  void SetAllowedContacts(
      const std::vector<std::string>& allowed_contacts) override;
  void Bind(
      mojo::PendingReceiver<nearby_share::mojom::NearbyShareSettings> receiver);

  // NearbyShareLocalDeviceDataManager::Observer:
  void OnLocalDeviceDataChanged(bool did_device_name_change,
                                bool did_full_name_change,
                                bool did_icon_change) override;

 private:
  void OnEnabledPrefChanged();
  void OnFastInitiationNotificationStatePrefChanged();
  void OnDataUsagePrefChanged();
  void OnVisibilityPrefChanged();
  void OnAllowedContactsPrefChanged();
  void OnIsOnboardingCompletePrefChanged();

  // If the Nearby Share parent feature is toggled on then Fast Initiation
  // notifications should be re-enabled unless the user explicitly disabled the
  // notification sub-feature.
  void ProcessFastInitiationNotificationParentPrefChanged(bool enabled);

  // This is false by default and gets updated in NearbySharingServiceImpl when
  // the bluetooth adapter availablility changes.
  bool is_fast_initiation_hardware_supported_ = false;
  mojo::RemoteSet<nearby_share::mojom::NearbyShareSettingsObserver>
      observers_set_;
  mojo::ReceiverSet<nearby_share::mojom::NearbyShareSettings> receiver_set_;
  raw_ptr<PrefService> pref_service_ = nullptr;
  raw_ptr<NearbyShareLocalDeviceDataManager> local_device_data_manager_ =
      nullptr;
  PrefChangeRegistrar pref_change_registrar_;
};

#endif  // CHROME_BROWSER_NEARBY_SHARING_NEARBY_SHARE_SETTINGS_H_