Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_fr amework_service.h" | 5 #include "chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_fr amework_service.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "ash/accelerators/accelerator_controller.h" | 10 #include "ash/accelerators/accelerator_controller.h" |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 34 return; | 34 return; |
| 35 } | 35 } |
| 36 std::vector<uint8_t> result(png_data->front(), | 36 std::vector<uint8_t> result(png_data->front(), |
| 37 png_data->front() + png_data->size()); | 37 png_data->front() + png_data->size()); |
| 38 callback.Run(result); | 38 callback.Run(result); |
| 39 } | 39 } |
| 40 | 40 |
| 41 } // namespace | 41 } // namespace |
| 42 | 42 |
| 43 // static | 43 // static |
| 44 const char ArcVoiceInteractionFrameworkService::kArcServiceName[] = | |
| 45 "arc::ArcVoiceInteractionFrameworkService"; | |
| 46 | |
| 47 // static | |
| 44 bool ArcVoiceInteractionFrameworkService::IsVoiceInteractionEnabled() { | 48 bool ArcVoiceInteractionFrameworkService::IsVoiceInteractionEnabled() { |
| 45 return base::CommandLine::ForCurrentProcess()->HasSwitch( | 49 return base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 46 chromeos::switches::kEnableVoiceInteraction); | 50 chromeos::switches::kEnableVoiceInteraction); |
| 47 } | 51 } |
| 48 | 52 |
| 49 ArcVoiceInteractionFrameworkService::ArcVoiceInteractionFrameworkService( | 53 ArcVoiceInteractionFrameworkService::ArcVoiceInteractionFrameworkService( |
| 50 ArcBridgeService* bridge_service) | 54 ArcBridgeService* bridge_service) |
| 51 : ArcService(bridge_service), binding_(this) { | 55 : ArcService(bridge_service), binding_(this), instance_ready_(false) { |
| 52 arc_bridge_service()->voice_interaction_framework()->AddObserver(this); | 56 arc_bridge_service()->voice_interaction_framework()->AddObserver(this); |
| 53 } | 57 } |
| 54 | 58 |
| 55 ArcVoiceInteractionFrameworkService::~ArcVoiceInteractionFrameworkService() { | 59 ArcVoiceInteractionFrameworkService::~ArcVoiceInteractionFrameworkService() { |
| 56 arc_bridge_service()->voice_interaction_framework()->RemoveObserver(this); | 60 arc_bridge_service()->voice_interaction_framework()->RemoveObserver(this); |
| 57 } | 61 } |
| 58 | 62 |
| 59 void ArcVoiceInteractionFrameworkService::OnInstanceReady() { | 63 void ArcVoiceInteractionFrameworkService::OnInstanceReady() { |
| 60 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 64 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 61 mojom::VoiceInteractionFrameworkInstance* framework_instance = | 65 mojom::VoiceInteractionFrameworkInstance* framework_instance = |
| 62 ARC_GET_INSTANCE_FOR_METHOD( | 66 ARC_GET_INSTANCE_FOR_METHOD( |
| 63 arc_bridge_service()->voice_interaction_framework(), Init); | 67 arc_bridge_service()->voice_interaction_framework(), Init); |
| 64 DCHECK(framework_instance); | 68 DCHECK(framework_instance); |
| 65 framework_instance->Init(binding_.CreateInterfacePtrAndBind()); | 69 framework_instance->Init(binding_.CreateInterfacePtrAndBind()); |
| 66 | 70 |
| 67 ash::Shell::Get()->accelerator_controller()->Register( | 71 ash::Shell::Get()->accelerator_controller()->Register( |
| 68 {ui::Accelerator(ui::VKEY_A, ui::EF_COMMAND_DOWN)}, this); | 72 {ui::Accelerator(ui::VKEY_A, ui::EF_COMMAND_DOWN)}, this); |
| 69 // Temporary shortcut added to enable the metalayer experiment. | 73 // Temporary shortcut added to enable the metalayer experiment. |
| 70 ash::Shell::Get()->accelerator_controller()->Register( | 74 ash::Shell::Get()->accelerator_controller()->Register( |
| 71 {ui::Accelerator(ui::VKEY_A, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN)}, | 75 {ui::Accelerator(ui::VKEY_A, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN)}, |
| 72 this); | 76 this); |
| 77 | |
| 78 instance_ready_ = true; | |
| 73 } | 79 } |
| 74 | 80 |
| 75 void ArcVoiceInteractionFrameworkService::OnInstanceClosed() { | 81 void ArcVoiceInteractionFrameworkService::OnInstanceClosed() { |
| 76 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 82 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
|
Luis Héctor Chávez
2017/04/19 15:48:28
if (!metalayer_closed_callback_.is_null())
base:
Vladislav Kaznacheev
2017/04/19 23:42:59
Done.
| |
| 77 ash::Shell::Get()->accelerator_controller()->UnregisterAll(this); | 83 ash::Shell::Get()->accelerator_controller()->UnregisterAll(this); |
| 78 } | 84 } |
| 79 | 85 |
| 80 bool ArcVoiceInteractionFrameworkService::AcceleratorPressed( | 86 bool ArcVoiceInteractionFrameworkService::AcceleratorPressed( |
| 81 const ui::Accelerator& accelerator) { | 87 const ui::Accelerator& accelerator) { |
| 82 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 88 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 83 | 89 |
| 84 if (accelerator.IsShiftDown()) { | 90 if (accelerator.IsShiftDown()) { |
| 85 mojom::VoiceInteractionFrameworkInstance* framework_instance = | 91 // Temporary, used for debugging. Does not update the palette state. |
| 86 ARC_GET_INSTANCE_FOR_METHOD( | 92 ShowMetalayer(true); |
| 87 arc_bridge_service()->voice_interaction_framework(), | |
| 88 ToggleMetalayer); | |
| 89 DCHECK(framework_instance); | |
| 90 framework_instance->ToggleMetalayer(); | |
| 91 } else { | 93 } else { |
| 92 mojom::VoiceInteractionFrameworkInstance* framework_instance = | 94 mojom::VoiceInteractionFrameworkInstance* framework_instance = |
| 93 ARC_GET_INSTANCE_FOR_METHOD( | 95 ARC_GET_INSTANCE_FOR_METHOD( |
| 94 arc_bridge_service()->voice_interaction_framework(), | 96 arc_bridge_service()->voice_interaction_framework(), |
| 95 StartVoiceInteractionSession); | 97 StartVoiceInteractionSession); |
| 96 DCHECK(framework_instance); | 98 DCHECK(framework_instance); |
| 97 framework_instance->StartVoiceInteractionSession(); | 99 framework_instance->StartVoiceInteractionSession(); |
| 98 } | 100 } |
| 99 | 101 |
| 100 return true; | 102 return true; |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 129 // the screenshot to it. | 131 // the screenshot to it. |
| 130 aura::Window* window = ash::Shell::GetPrimaryRootWindow(); | 132 aura::Window* window = ash::Shell::GetPrimaryRootWindow(); |
| 131 DCHECK(window); | 133 DCHECK(window); |
| 132 ui::GrabWindowSnapshotAsyncPNG(window, gfx::Rect(window->bounds().size()), | 134 ui::GrabWindowSnapshotAsyncPNG(window, gfx::Rect(window->bounds().size()), |
| 133 base::CreateTaskRunnerWithTraits( | 135 base::CreateTaskRunnerWithTraits( |
| 134 base::TaskTraits().MayBlock().WithPriority( | 136 base::TaskTraits().MayBlock().WithPriority( |
| 135 base::TaskPriority::USER_BLOCKING)), | 137 base::TaskPriority::USER_BLOCKING)), |
| 136 base::Bind(&ScreenshotCallback, callback)); | 138 base::Bind(&ScreenshotCallback, callback)); |
| 137 } | 139 } |
| 138 | 140 |
| 141 void ArcVoiceInteractionFrameworkService::OnMetalayerComplete() { | |
| 142 if (metalayer_complete_.is_null()) | |
| 143 return; | |
| 144 metalayer_complete_.Run(); | |
|
Luis Héctor Chávez
2017/04/19 15:48:28
nit: base::ResetAndReturn(&metalayer_closed_callba
Vladislav Kaznacheev
2017/04/19 23:42:59
Done.
| |
| 145 metalayer_complete_ = base::Closure(); | |
| 146 } | |
| 147 | |
| 148 bool ArcVoiceInteractionFrameworkService::IsReady() { | |
| 149 return instance_ready_; | |
| 150 } | |
| 151 | |
| 152 void ArcVoiceInteractionFrameworkService::ShowMetalayer( | |
| 153 const base::Closure& done) { | |
| 154 if (!metalayer_complete_.is_null()) { | |
| 155 LOG(ERROR) << "Metalayer is already enabled"; | |
| 156 return; | |
| 157 } | |
| 158 metalayer_complete_ = done; | |
| 159 ShowMetalayer(true); | |
| 160 } | |
| 161 | |
| 162 void ArcVoiceInteractionFrameworkService::HideMetalayer() { | |
| 163 if (metalayer_complete_.is_null()) { | |
| 164 LOG(ERROR) << "Metalayer is already hidden"; | |
| 165 return; | |
| 166 } | |
| 167 metalayer_complete_ = base::Closure(); | |
| 168 ShowMetalayer(false); | |
| 169 } | |
| 170 | |
| 171 void ArcVoiceInteractionFrameworkService::ShowMetalayer(bool visible) { | |
| 172 mojom::VoiceInteractionFrameworkInstance* framework_instance = | |
| 173 ARC_GET_INSTANCE_FOR_METHOD( | |
| 174 arc_bridge_service()->voice_interaction_framework(), ShowMetalayer); | |
| 175 DCHECK(framework_instance); | |
|
Luis Héctor Chávez
2017/04/19 15:48:28
substitute this with
if (visible && !framework_in
Vladislav Kaznacheev
2017/04/19 23:42:58
Substituted with a slight change.
| |
| 176 framework_instance->ShowMetalayer(visible); | |
| 177 } | |
| 178 | |
| 139 } // namespace arc | 179 } // namespace arc |
| OLD | NEW |