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_ 103