Home | History | Annotate | Download | only in chromeos
      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 ASH_SYSTEM_CHROMEOS_TRAY_DISPLAY_H_
      6 #define ASH_SYSTEM_CHROMEOS_TRAY_DISPLAY_H_
      7 
      8 #include <map>
      9 
     10 #include "ash/ash_export.h"
     11 #include "ash/display/display_controller.h"
     12 #include "ash/display/display_info.h"
     13 #include "ash/system/tray/system_tray_item.h"
     14 #include "base/strings/string16.h"
     15 #include "ui/views/view.h"
     16 
     17 namespace ash {
     18 class DisplayView;
     19 
     20 namespace test {
     21 class AshTestBase;
     22 }
     23 
     24 class ASH_EXPORT TrayDisplay : public SystemTrayItem,
     25                                public DisplayController::Observer {
     26  public:
     27   explicit TrayDisplay(SystemTray* system_tray);
     28   virtual ~TrayDisplay();
     29 
     30   // Overridden from DisplayControllerObserver:
     31   virtual void OnDisplayConfigurationChanged() OVERRIDE;
     32 
     33  private:
     34   friend class TrayDisplayTest;
     35 
     36   typedef std::map<int64, DisplayInfo> DisplayInfoMap;
     37 
     38   static const char kNotificationId[];
     39 
     40   // Scans the current display info and updates |display_info_|. Sets the
     41   // previous data to |old_info| if it's not NULL.
     42   void UpdateDisplayInfo(DisplayInfoMap* old_info);
     43 
     44   // Compares the current display settings with |old_info| and determine what
     45   // message should be shown for notification. Returns true if there's a
     46   // meaningful change. Note that it's possible to return true and set
     47   // |message_out| to empty, which means the notification should be removed. It
     48   // also sets |additional_message_out| which appears in the notification with
     49   // the |message_out|.
     50   bool GetDisplayMessageForNotification(
     51       const DisplayInfoMap& old_info,
     52       base::string16* message_out,
     53       base::string16* additional_message_out);
     54 
     55   // Creates or updates the display notification.
     56   void CreateOrUpdateNotification(const base::string16& message,
     57                                   const base::string16& additional_message);
     58 
     59   // Overridden from SystemTrayItem.
     60   virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE;
     61   virtual void DestroyDefaultView() OVERRIDE;
     62 
     63   // Test accessors.
     64   base::string16 GetDefaultViewMessage() const;
     65   bool GetAccessibleStateForTesting(ui::AXViewState* state);
     66   const views::View* default_view() const {
     67     return reinterpret_cast<views::View*>(default_);
     68   }
     69 
     70   DisplayView* default_;
     71   DisplayInfoMap display_info_;
     72 
     73   DISALLOW_COPY_AND_ASSIGN(TrayDisplay);
     74 };
     75 
     76 }  // namespace ash
     77 
     78 #endif  // ASH_SYSTEM_CHROMEOS_TRAY_DISPLAY_H_
     79