multi_profile_media_tray_item.cc revision 010d83a9304c5a91596085d917d248abff47903a
1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file.
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ash/system/tray/media_security/multi_profile_media_tray_item.h"
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ash/ash_view_ids.h"
8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ash/media_delegate.h"
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ash/session/session_state_delegate.h"
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ash/shell.h"
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ash/system/tray/media_security/media_capture_observer.h"
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ash/system/tray/system_tray_notifier.h"
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ash/system/tray/tray_item_view.h"
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "grit/ash_resources.h"
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/views/controls/image_view.h"
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/views/layout/fill_layout.h"
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace ash {
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace tray {
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class MultiProfileMediaTrayView : public TrayItemView,
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                  public MediaCaptureObserver {
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public:
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  explicit MultiProfileMediaTrayView(SystemTrayItem* system_tray_item)
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      : TrayItemView(system_tray_item) {
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    SetLayoutManager(new views::FillLayout);
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    views::ImageView* icon = new views::ImageView;
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    icon->SetImage(
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        bundle.GetImageNamed(IDR_AURA_UBER_TRAY_RECORDING).ToImageSkia());
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    AddChildView(icon);
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    OnMediaCaptureChanged();
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    Shell::GetInstance()->system_tray_notifier()->AddMediaCaptureObserver(this);
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    set_id(VIEW_ID_MEDIA_TRAY_VIEW);
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual ~MultiProfileMediaTrayView() {
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    Shell::GetInstance()->system_tray_notifier()->RemoveMediaCaptureObserver(
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        this);
41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // MediaCaptureObserver:
44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void OnMediaCaptureChanged() OVERRIDE {
45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    MediaDelegate* media_delegate = Shell::GetInstance()->media_delegate();
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    SessionStateDelegate* session_state_delegate =
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        Shell::GetInstance()->session_state_delegate();
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // The user at 0 is the current desktop user.
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    for (MultiProfileIndex index = 1;
50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)         index < session_state_delegate->NumberOfLoggedInUsers();
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)         ++index) {
52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      content::BrowserContext* context =
53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          session_state_delegate->GetBrowserContextByIndex(index);
54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      if (media_delegate->GetMediaCaptureState(context) != MEDIA_CAPTURE_NONE) {
55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        SetVisible(true);
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        return;
57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      }
58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    }
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    SetVisible(false);
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private:
63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MultiProfileMediaTrayView);
64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)};
65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace tray
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)MultiProfileMediaTrayItem::MultiProfileMediaTrayItem(SystemTray* system_tray)
69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    : SystemTrayItem(system_tray), tray_view_(NULL) {
70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)MultiProfileMediaTrayItem::~MultiProfileMediaTrayItem() {
73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)views::View* MultiProfileMediaTrayItem::CreateTrayView(
76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    user::LoginStatus status) {
77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  tray_view_ = new tray::MultiProfileMediaTrayView(this);
78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return tray_view_;
79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void MultiProfileMediaTrayItem::DestroyTrayView() {
82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  tray_view_ = NULL;
83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace ash
86