#ifndef ASH_SYSTEM_SCREEN_LAYOUT_OBSERVER_H_
#define ASH_SYSTEM_SCREEN_LAYOUT_OBSERVER_H_
#include <stdint.h>
#include <map>
#include <set>
#include <string>
#include "ash/ash_export.h"
#include "base/gtest_prod_util.h"
#include "ui/display/manager/display_manager_observer.h"
#include "ui/display/manager/managed_display_info.h"
namespace ash {
class ASH_EXPORT ScreenLayoutObserver : public display::DisplayManagerObserver {
public:
ScreenLayoutObserver();
ScreenLayoutObserver(const ScreenLayoutObserver&) = delete;
ScreenLayoutObserver& operator=(const ScreenLayoutObserver&) = delete;
~ScreenLayoutObserver() override;
static const char kNotificationId[];
void OnDidApplyDisplayChanges() override;
void set_show_notifications_for_testing(bool show) {
show_notifications_for_testing_ = show;
}
private:
FRIEND_TEST_ALL_PREFIXES(ScreenLayoutObserverTestMultiMirroring,
DisplayNotifications);
friend class ScreenLayoutObserverTest;
using DisplayInfoMap = std::map<int64_t, display::ManagedDisplayInfo>;
void UpdateDisplayInfo(DisplayInfoMap* old_info);
bool GetUnassociatedDisplayMessage(const DisplayInfoMap& old_info,
std::u16string* out_message,
std::u16string* out_additional_message);
void CreateOrUpdateNotification(const std::u16string& message,
const std::u16string& additional_message);
bool GetExitMirrorModeMessage(std::u16string* out_message,
std::u16string* out_additional_message);
DisplayInfoMap display_info_;
enum class DisplayMode {
SINGLE,
EXTENDED_2,
EXTENDED_3_PLUS,
MIRRORING,
UNIFIED,
DOCKED
};
DisplayMode old_display_mode_ = DisplayMode::SINGLE;
DisplayMode current_display_mode_ = DisplayMode::SINGLE;
bool has_unassociated_display_ = false;
bool show_notifications_for_testing_ = true;
};
}
#endif