- add sources.
[platform/framework/web/crosswalk.git] / src / chromeos / network / network_sms_handler.h
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:
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_