Home | History | Annotate | Download | only in network
      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