• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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_NETWORK_NETWORK_SMS_HANDLER_H_
6 #define CHROMEOS_NETWORK_NETWORK_SMS_HANDLER_H_
7 
8 #include <string>
9 
10 #include "base/memory/scoped_vector.h"
11 #include "base/memory/weak_ptr.h"
12 #include "base/observer_list.h"
13 #include "chromeos/chromeos_export.h"
14 #include "chromeos/dbus/dbus_method_call_status.h"
15 #include "chromeos/dbus/shill_property_changed_observer.h"
16 
17 namespace base {
18 class DictionaryValue;
19 class ListValue;
20 class Value;
21 }
22 
23 namespace chromeos {
24 
25 // Class to watch sms without Libcros.
26 class CHROMEOS_EXPORT NetworkSmsHandler : public ShillPropertyChangedObserver {
27  public:
28   static const char kNumberKey[];
29   static const char kTextKey[];
30   static const char kTimestampKey[];
31 
32   class Observer {
33    public:
~Observer()34     virtual ~Observer() {}
35 
36     // Called when a new message arrives. |message| contains the message.
37     // The contents of the dictionary include the keys listed above.
38     virtual void MessageReceived(const base::DictionaryValue& message) = 0;
39   };
40 
41   virtual ~NetworkSmsHandler();
42 
43   // Requests an immediate check for new messages. If |request_existing| is
44   // true then also requests to be notified for any already received messages.
45   void RequestUpdate(bool request_existing);
46 
47   void AddObserver(Observer* observer);
48   void RemoveObserver(Observer* observer);
49 
50   // ShillPropertyChangedObserver
51   virtual void OnPropertyChanged(const std::string& name,
52                                  const base::Value& value) OVERRIDE;
53 
54  private:
55   friend class NetworkHandler;
56   friend class NetworkSmsHandlerTest;
57 
58   class NetworkSmsDeviceHandler;
59   class ModemManagerNetworkSmsDeviceHandler;
60   class ModemManager1NetworkSmsDeviceHandler;
61 
62   NetworkSmsHandler();
63 
64   // Requests the devices from the network manager, sets up observers, and
65   // requests the initial list of messages.
66   void Init();
67 
68   // Adds |message| to the list of received messages. If the length of the
69   // list exceeds the maximum number of retained messages, erase the least
70   // recently received message.
71   void AddReceivedMessage(const base::DictionaryValue& message);
72 
73   // Notify observers that |message| was received.
74   void NotifyMessageReceived(const base::DictionaryValue& message);
75 
76     // Called from NetworkSmsDeviceHandler when a message is received.
77   void MessageReceived(const base::DictionaryValue& message);
78 
79   // Callback to handle the manager properties with the list of devices.
80   void ManagerPropertiesCallback(DBusMethodCallStatus call_status,
81                                  const base::DictionaryValue& properties);
82 
83   // Requests properties for each entry in |devices|.
84   void UpdateDevices(const base::ListValue* devices);
85 
86   // Callback to handle the device properties for |device_path|.
87   // A NetworkSmsDeviceHandler will be instantiated for each cellular device.
88   void DevicePropertiesCallback(const std::string& device_path,
89                                 DBusMethodCallStatus call_status,
90                                 const base::DictionaryValue& properties);
91 
92   ObserverList<Observer> observers_;
93   ScopedVector<NetworkSmsDeviceHandler> device_handlers_;
94   ScopedVector<base::DictionaryValue> received_messages_;
95   base::WeakPtrFactory<NetworkSmsHandler> weak_ptr_factory_;
96 
97   DISALLOW_COPY_AND_ASSIGN(NetworkSmsHandler);
98 };
99 
100 }  // namespace
101 
102 #endif  // CHROMEOS_NETWORK_NETWORK_SMS_HANDLER_H_
103