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