Commit a4bdde39 authored by James Cook's avatar James Cook Committed by Commit Bot

cros: Move autoclick mojo app into //ash/components

This is an existing example of how a built-in ash feature can be done
with a mojo app, so put it in //ash/components.

Bug: 815334
Test: ash_unittests, autoclick still works in mash
Change-Id: I1d38901a96708cbd2d3fc17c39f66e537851a61b
Reviewed-on: https://chromium-review.googlesource.com/935755Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Commit-Queue: James Cook <jamescook@chromium.org>
Cr-Commit-Position: refs/heads/master@{#539337}
parent b4438bc5
...@@ -1070,7 +1070,7 @@ component("ash") { ...@@ -1070,7 +1070,7 @@ component("ash") {
] ]
deps = [ deps = [
"//ash/autoclick/common:autoclick", "//ash/autoclick/common:autoclick",
"//ash/autoclick/mus/public/mojom", "//ash/components/autoclick/public/mojom",
"//ash/touch_hud", "//ash/touch_hud",
"//base", "//base",
"//base:i18n", "//base:i18n",
...@@ -1143,7 +1143,7 @@ component("ash") { ...@@ -1143,7 +1143,7 @@ component("ash") {
] ]
data_deps = [ data_deps = [
"//ash/autoclick/mus:accessibility_autoclick", "//ash/components/autoclick:autoclick_app",
"//ash/touch_hud/mus:touch_hud", "//ash/touch_hud/mus:touch_hud",
] ]
......
...@@ -42,6 +42,9 @@ include_rules = [ ...@@ -42,6 +42,9 @@ include_rules = [
# header required to launch the app. # header required to launch the app.
"-ash/components", "-ash/components",
# Ash can talk to public interfaces for mini-apps.
"+ash/components/autoclick/public",
# Ash sits above content. Exceptions live in //ash/content. # Ash sits above content. Exceptions live in //ash/content.
"-content", "-content",
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include "ash/accessibility/accessibility_highlight_controller.h" #include "ash/accessibility/accessibility_highlight_controller.h"
#include "ash/autoclick/autoclick_controller.h" #include "ash/autoclick/autoclick_controller.h"
#include "ash/autoclick/mus/public/mojom/autoclick.mojom.h" #include "ash/components/autoclick/public/mojom/autoclick.mojom.h"
#include "ash/high_contrast/high_contrast_controller.h" #include "ash/high_contrast/high_contrast_controller.h"
#include "ash/public/cpp/ash_pref_names.h" #include "ash/public/cpp/ash_pref_names.h"
#include "ash/public/cpp/config.h" #include "ash/public/cpp/config.h"
...@@ -442,7 +442,7 @@ void AccessibilityController::UpdateAutoclickFromPref() { ...@@ -442,7 +442,7 @@ void AccessibilityController::UpdateAutoclickFromPref() {
if (!connector_) // Null in tests. if (!connector_) // Null in tests.
return; return;
mash::mojom::LaunchablePtr launchable; mash::mojom::LaunchablePtr launchable;
connector_->BindInterface("accessibility_autoclick", &launchable); connector_->BindInterface("autoclick_app", &launchable);
launchable->Launch(mash::mojom::kWindow, mash::mojom::LaunchMode::DEFAULT); launchable->Launch(mash::mojom::kWindow, mash::mojom::LaunchMode::DEFAULT);
return; return;
} }
...@@ -463,7 +463,7 @@ void AccessibilityController::UpdateAutoclickDelayFromPref() { ...@@ -463,7 +463,7 @@ void AccessibilityController::UpdateAutoclickDelayFromPref() {
if (!connector_) // Null in tests. if (!connector_) // Null in tests.
return; return;
autoclick::mojom::AutoclickControllerPtr autoclick_controller; autoclick::mojom::AutoclickControllerPtr autoclick_controller;
connector_->BindInterface("accessibility_autoclick", &autoclick_controller); connector_->BindInterface("autoclick_app", &autoclick_controller);
autoclick_controller->SetAutoclickDelay(autoclick_delay_.InMilliseconds()); autoclick_controller->SetAutoclickDelay(autoclick_delay_.InMilliseconds());
return; return;
} }
......
...@@ -15,7 +15,7 @@ source_set("lib") { ...@@ -15,7 +15,7 @@ source_set("lib") {
deps = [ deps = [
"//ash/autoclick/common:autoclick", "//ash/autoclick/common:autoclick",
"//ash/autoclick/mus/public/mojom", "//ash/components/autoclick/public/mojom",
"//ash/public/cpp", "//ash/public/cpp",
"//base", "//base",
"//mash/public/mojom", "//mash/public/mojom",
...@@ -30,7 +30,7 @@ source_set("lib") { ...@@ -30,7 +30,7 @@ source_set("lib") {
] ]
} }
service("accessibility_autoclick") { service("autoclick_app") {
sources = [ sources = [
"main.cc", "main.cc",
] ]
...@@ -47,6 +47,6 @@ service("accessibility_autoclick") { ...@@ -47,6 +47,6 @@ service("accessibility_autoclick") {
} }
service_manifest("manifest") { service_manifest("manifest") {
name = "accessibility_autoclick" name = "autoclick_app"
source = "manifest.json" source = "manifest.json"
} }
include_rules = [ include_rules = [
"-ash",
"+ash/autoclick/common", "+ash/autoclick/common",
"+ash/autoclick/mus", "+ash/components/autoclick",
"+ash/public", "+base",
"+mash/public/mojom", "+mash/public/mojom",
"+mojo/public", "+mojo/public",
"+services/service_manager/public", "+services/service_manager/public",
"+services/ui/public", "+services/ui/public",
"+ui/aura/mus",
"+ui/base",
"+ui/views",
] ]
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ash/autoclick/mus/autoclick_application.h" #include "ash/components/autoclick/autoclick_application.h"
#include <utility> #include <utility>
#include "ash/public/cpp/shell_window_ids.h" #include "ash/public/cpp/shell_window_ids.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "services/service_manager/public/cpp/connector.h" #include "services/service_manager/public/cpp/connector.h"
#include "services/service_manager/public/cpp/service_context.h" #include "services/service_manager/public/cpp/service_context.h"
...@@ -23,18 +22,21 @@ ...@@ -23,18 +22,21 @@
#include "ui/views/widget/widget.h" #include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h" #include "ui/views/widget/widget_delegate.h"
namespace ash {
namespace autoclick { namespace autoclick {
namespace {
// The default wait time between last mouse movement and sending // The default wait time between last mouse movement and sending
// the autoclick. // the autoclick.
const int kDefaultAutoclickDelayMs = 1000; const int kDefaultAutoclickDelayMs = 1000;
} // namespace
// AutoclickUI handles events to the autoclick app. // AutoclickUI handles events to the autoclick app.
class AutoclickUI : public views::WidgetDelegateView, class AutoclickUI : public views::WidgetDelegateView,
public views::PointerWatcher { public views::PointerWatcher {
public: public:
explicit AutoclickUI(AutoclickControllerCommon* autoclick_controller_common) explicit AutoclickUI(
ash::AutoclickControllerCommon* autoclick_controller_common)
: autoclick_controller_common_(autoclick_controller_common) { : autoclick_controller_common_(autoclick_controller_common) {
views::MusClient::Get()->pointer_watcher_event_router()->AddPointerWatcher( views::MusClient::Get()->pointer_watcher_event_router()->AddPointerWatcher(
this, true /* want_moves */); this, true /* want_moves */);
...@@ -74,18 +76,18 @@ class AutoclickUI : public views::WidgetDelegateView, ...@@ -74,18 +76,18 @@ class AutoclickUI : public views::WidgetDelegateView,
} }
} }
AutoclickControllerCommon* autoclick_controller_common_; ash::AutoclickControllerCommon* autoclick_controller_common_;
DISALLOW_COPY_AND_ASSIGN(AutoclickUI); DISALLOW_COPY_AND_ASSIGN(AutoclickUI);
}; };
AutoclickApplication::AutoclickApplication() AutoclickApplication::AutoclickApplication()
: launchable_binding_(this), autoclick_binding_(this) { : launchable_binding_(this), autoclick_binding_(this) {
registry_.AddInterface<mash::mojom::Launchable>(base::Bind( registry_.AddInterface<mash::mojom::Launchable>(base::BindRepeating(
&AutoclickApplication::BindLaunchableRequest, base::Unretained(this))); &AutoclickApplication::BindLaunchableRequest, base::Unretained(this)));
registry_.AddInterface<mojom::AutoclickController>( registry_.AddInterface<mojom::AutoclickController>(
base::Bind(&AutoclickApplication::BindAutoclickControllerRequest, base::BindRepeating(&AutoclickApplication::BindAutoclickControllerRequest,
base::Unretained(this))); base::Unretained(this)));
} }
AutoclickApplication::~AutoclickApplication() = default; AutoclickApplication::~AutoclickApplication() = default;
...@@ -100,8 +102,9 @@ void AutoclickApplication::OnStart() { ...@@ -100,8 +102,9 @@ void AutoclickApplication::OnStart() {
context()->QuitNow(); context()->QuitNow();
return; return;
} }
autoclick_controller_common_.reset(new AutoclickControllerCommon( autoclick_controller_common_ =
base::TimeDelta::FromMilliseconds(kDefaultAutoclickDelayMs), this)); std::make_unique<ash::AutoclickControllerCommon>(
base::TimeDelta::FromMilliseconds(kDefaultAutoclickDelayMs), this);
} }
void AutoclickApplication::OnBindInterface( void AutoclickApplication::OnBindInterface(
...@@ -129,7 +132,7 @@ void AutoclickApplication::Launch(uint32_t what, mash::mojom::LaunchMode how) { ...@@ -129,7 +132,7 @@ void AutoclickApplication::Launch(uint32_t what, mash::mojom::LaunchMode how) {
widget_->Init(params); widget_->Init(params);
} else { } else {
widget_->Close(); widget_->Close();
base::RunLoop::QuitCurrentWhenIdleDeprecated(); context()->QuitNow();
} }
} }
...@@ -164,7 +167,7 @@ void AutoclickApplication::UpdateAutoclickRingWidget( ...@@ -164,7 +167,7 @@ void AutoclickApplication::UpdateAutoclickRingWidget(
void AutoclickApplication::DoAutoclick(const gfx::Point& event_location, void AutoclickApplication::DoAutoclick(const gfx::Point& event_location,
const int mouse_event_flags) { const int mouse_event_flags) {
// TODO(riajiang): Currently not working. Need to know how to generate events // TODO(riajiang): Currently not working. Need to know how to generate events
// in mus world (crbug.com/628665). // in mus world. https://crbug.com/628665
} }
void AutoclickApplication::OnAutoclickCanceled() { void AutoclickApplication::OnAutoclickCanceled() {
...@@ -172,4 +175,3 @@ void AutoclickApplication::OnAutoclickCanceled() { ...@@ -172,4 +175,3 @@ void AutoclickApplication::OnAutoclickCanceled() {
} }
} // namespace autoclick } // namespace autoclick
} // namespace ash
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef ASH_AUTOCLICK_MUS_AUTOCLICK_APPLICATION_H_ #ifndef ASH_COMPONENTS_AUTOCLICK_AUTOCLICK_APPLICATION_H_
#define ASH_AUTOCLICK_MUS_AUTOCLICK_APPLICATION_H_ #define ASH_COMPONENTS_AUTOCLICK_AUTOCLICK_APPLICATION_H_
#include <map> #include <map>
#include "ash/autoclick/common/autoclick_controller_common.h" #include "ash/autoclick/common/autoclick_controller_common.h"
#include "ash/autoclick/common/autoclick_controller_common_delegate.h" #include "ash/autoclick/common/autoclick_controller_common_delegate.h"
#include "ash/autoclick/mus/public/mojom/autoclick.mojom.h" #include "ash/components/autoclick/public/mojom/autoclick.mojom.h"
#include "base/macros.h" #include "base/macros.h"
#include "mash/public/mojom/launchable.mojom.h" #include "mash/public/mojom/launchable.mojom.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
...@@ -20,15 +20,14 @@ ...@@ -20,15 +20,14 @@
namespace views { namespace views {
class AuraInit; class AuraInit;
class Widget; class Widget;
} } // namespace views
namespace ash {
namespace autoclick { namespace autoclick {
class AutoclickApplication : public service_manager::Service, class AutoclickApplication : public service_manager::Service,
public mash::mojom::Launchable, public mash::mojom::Launchable,
public mojom::AutoclickController, public mojom::AutoclickController,
public AutoclickControllerCommonDelegate { public ash::AutoclickControllerCommonDelegate {
public: public:
AutoclickApplication(); AutoclickApplication();
~AutoclickApplication() override; ~AutoclickApplication() override;
...@@ -53,7 +52,7 @@ class AutoclickApplication : public service_manager::Service, ...@@ -53,7 +52,7 @@ class AutoclickApplication : public service_manager::Service,
void BindAutoclickControllerRequest( void BindAutoclickControllerRequest(
mojom::AutoclickControllerRequest request); mojom::AutoclickControllerRequest request);
// AutoclickControllerCommonDelegate: // ash::AutoclickControllerCommonDelegate:
views::Widget* CreateAutoclickRingWidget( views::Widget* CreateAutoclickRingWidget(
const gfx::Point& event_location) override; const gfx::Point& event_location) override;
void UpdateAutoclickRingWidget(views::Widget* widget, void UpdateAutoclickRingWidget(views::Widget* widget,
...@@ -67,7 +66,7 @@ class AutoclickApplication : public service_manager::Service, ...@@ -67,7 +66,7 @@ class AutoclickApplication : public service_manager::Service,
mojo::Binding<mojom::AutoclickController> autoclick_binding_; mojo::Binding<mojom::AutoclickController> autoclick_binding_;
std::unique_ptr<views::AuraInit> aura_init_; std::unique_ptr<views::AuraInit> aura_init_;
std::unique_ptr<AutoclickControllerCommon> autoclick_controller_common_; std::unique_ptr<ash::AutoclickControllerCommon> autoclick_controller_common_;
std::unique_ptr<views::Widget> widget_; std::unique_ptr<views::Widget> widget_;
bool running_standalone_ = false; bool running_standalone_ = false;
...@@ -76,6 +75,5 @@ class AutoclickApplication : public service_manager::Service, ...@@ -76,6 +75,5 @@ class AutoclickApplication : public service_manager::Service,
}; };
} // namespace autoclick } // namespace autoclick
} // namespace ash
#endif // ASH_AUTOCLICK_MUS_AUTOCLICK_APPLICATION_H_ #endif // ASH_COMPONENTS_AUTOCLICK_AUTOCLICK_APPLICATION_H_
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ash/autoclick/mus/autoclick_application.h" #include "ash/components/autoclick/autoclick_application.h"
#include "services/service_manager/public/c/main.h" #include "services/service_manager/public/c/main.h"
#include "services/service_manager/public/cpp/service_runner.h" #include "services/service_manager/public/cpp/service_runner.h"
MojoResult ServiceMain(MojoHandle service_request_handle) { MojoResult ServiceMain(MojoHandle service_request_handle) {
ash::autoclick::AutoclickApplication* app = autoclick::AutoclickApplication* app = new autoclick::AutoclickApplication;
new ash::autoclick::AutoclickApplication;
app->set_running_standalone(true); app->set_running_standalone(true);
service_manager::ServiceRunner runner(app); service_manager::ServiceRunner runner(app);
return runner.Run(service_request_handle); return runner.Run(service_request_handle);
......
{ {
"name": "accessibility_autoclick", "name": "autoclick_app",
"display_name": "Autoclick", "display_name": "Autoclick",
"sandbox_type": "none", "sandbox_type": "none",
"interface_provider_specs": { "interface_provider_specs": {
"service_manager:connector": { "service_manager:connector": {
"provides": { "provides": {
"mash:launchable": [ "mash::mojom::Launchable" ], "mash:launchable": [ "mash::mojom::Launchable" ],
"ash:autoclick": [ "ash::autoclick::mojom::AutoclickController" ] "chromeos:autoclick": [ "autoclick::mojom::AutoclickController" ]
}, },
"requires": { "requires": {
"*": [ "app" ], "*": [ "app" ],
......
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
module ash.autoclick.mojom; module autoclick.mojom;
// Used by Chrome to set the time to wait in milliseconds from when the mouse // Used by Chrome to set the time to wait in milliseconds from when the mouse
// stops moving to when the autoclick event is sent in accessibility_autoclick. // stops moving to when the autoclick event is sent in autoclick_app.
interface AutoclickController { interface AutoclickController {
SetAutoclickDelay(uint32 delay_in_milliseconds); SetAutoclickDelay(uint32 delay_in_milliseconds);
}; };
...@@ -49,8 +49,8 @@ ...@@ -49,8 +49,8 @@
}, },
"requires": { "requires": {
"*": [ "accessibility", "app" ], "*": [ "accessibility", "app" ],
"accessibility_autoclick": [ "autoclick_app": [
"ash:autoclick", "chromeos:autoclick",
"mash:launchable" "mash:launchable"
], ],
"ash_pref_connector": [ "pref_connector" ], "ash_pref_connector": [ "pref_connector" ],
......
...@@ -440,12 +440,10 @@ service_manifest("chrome_content_packaged_services_manifest_overlay") { ...@@ -440,12 +440,10 @@ service_manifest("chrome_content_packaged_services_manifest_overlay") {
source = source =
"//chrome/browser/chrome_content_packaged_services_manifest_overlay.json" "//chrome/browser/chrome_content_packaged_services_manifest_overlay.json"
packaged_services = chrome_packaged_services packaged_services = chrome_packaged_services
if (enable_mus) {
packaged_services += [ "//ash/components/quick_launch:manifest" ]
}
if (is_chromeos) { if (is_chromeos) {
packaged_services += [ packaged_services += [
"//ash/autoclick/mus:manifest", "//ash/components/autoclick:manifest",
"//ash/components/quick_launch:manifest",
"//ash:manifest", "//ash:manifest",
"//ash/touch_hud/mus:manifest", "//ash/touch_hud/mus:manifest",
"//components/font_service:manifest", "//components/font_service:manifest",
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
] ]
}, },
"requires": { "requires": {
"accessibility_autoclick": [ "ash:autoclick" ], "autoclick_app": [ "chromeos:autoclick" ],
"ash": [ "system_ui", "test", "display" ], "ash": [ "system_ui", "test", "display" ],
// Only used in classic ash case. // Only used in classic ash case.
"ash_pref_connector": [ "pref_connector" ], "ash_pref_connector": [ "pref_connector" ],
......
...@@ -27,7 +27,7 @@ constexpr Service kServices[] = { ...@@ -27,7 +27,7 @@ constexpr Service kServices[] = {
{ui::mojom::kServiceName, "UI Service", kAshAndUiProcessGroup}, {ui::mojom::kServiceName, "UI Service", kAshAndUiProcessGroup},
{ash::mojom::kServiceName, "Ash Window Manager and Shell", {ash::mojom::kServiceName, "Ash Window Manager and Shell",
kAshAndUiProcessGroup}, kAshAndUiProcessGroup},
{"accessibility_autoclick", "Ash Accessibility Autoclick", nullptr}, {"autoclick_app", "Accessibility Autoclick", nullptr},
{"touch_hud", "Ash Touch Hud", nullptr}, {"touch_hud", "Ash Touch Hud", nullptr},
{font_service::mojom::kServiceName, "Font Service", nullptr}, {font_service::mojom::kServiceName, "Font Service", nullptr},
}; };
......
...@@ -149,7 +149,7 @@ static_library("utility") { ...@@ -149,7 +149,7 @@ static_library("utility") {
] ]
deps += [ deps += [
"//ash", "//ash",
"//ash/autoclick/mus:lib", "//ash/components/autoclick:lib",
"//ash/components/quick_launch:lib", "//ash/components/quick_launch:lib",
"//ash/components/quick_launch/public/mojom", "//ash/components/quick_launch/public/mojom",
"//ash/touch_hud/mus:lib", "//ash/touch_hud/mus:lib",
......
...@@ -45,7 +45,7 @@ include_rules = [ ...@@ -45,7 +45,7 @@ include_rules = [
specific_include_rules = { specific_include_rules = {
"mash_service_factory.cc": [ "mash_service_factory.cc": [
"+ash/autoclick/mus/autoclick_application.h", "+ash/components/autoclick/autoclick_application.h",
"+ash/components/quick_launch/public", "+ash/components/quick_launch/public",
"+ash/components/quick_launch/quick_launch.h", "+ash/components/quick_launch/quick_launch.h",
"+ash/public/interfaces", "+ash/public/interfaces",
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include <memory> #include <memory>
#include "ash/autoclick/mus/autoclick_application.h" #include "ash/components/autoclick/autoclick_application.h"
#include "ash/components/quick_launch/public/mojom/constants.mojom.h" #include "ash/components/quick_launch/public/mojom/constants.mojom.h"
#include "ash/components/quick_launch/quick_launch.h" #include "ash/components/quick_launch/quick_launch.h"
#include "ash/public/interfaces/constants.mojom.h" #include "ash/public/interfaces/constants.mojom.h"
...@@ -67,8 +67,8 @@ std::unique_ptr<service_manager::Service> CreateAshService() { ...@@ -67,8 +67,8 @@ std::unique_ptr<service_manager::Service> CreateAshService() {
show_primary_host_on_connect); show_primary_host_on_connect);
} }
std::unique_ptr<service_manager::Service> CreateAccessibilityAutoclick() { std::unique_ptr<service_manager::Service> CreateAutoclickApp() {
return std::make_unique<ash::autoclick::AutoclickApplication>(); return std::make_unique<autoclick::AutoclickApplication>();
} }
std::unique_ptr<service_manager::Service> CreateQuickLaunch() { std::unique_ptr<service_manager::Service> CreateQuickLaunch() {
...@@ -96,8 +96,7 @@ void MashServiceFactory::RegisterOutOfProcessServices( ...@@ -96,8 +96,7 @@ void MashServiceFactory::RegisterOutOfProcessServices(
RegisterMashService(services, quick_launch::mojom::kServiceName, RegisterMashService(services, quick_launch::mojom::kServiceName,
&CreateQuickLaunch); &CreateQuickLaunch);
RegisterMashService(services, ash::mojom::kServiceName, &CreateAshService); RegisterMashService(services, ash::mojom::kServiceName, &CreateAshService);
RegisterMashService(services, "accessibility_autoclick", RegisterMashService(services, "autoclick_app", &CreateAutoclickApp);
&CreateAccessibilityAutoclick);
RegisterMashService(services, "touch_hud", &CreateTouchHud); RegisterMashService(services, "touch_hud", &CreateTouchHud);
RegisterMashService(services, font_service::mojom::kServiceName, RegisterMashService(services, font_service::mojom::kServiceName,
&CreateFontService); &CreateFontService);
......
...@@ -26,7 +26,7 @@ group("all") { ...@@ -26,7 +26,7 @@ group("all") {
# Build on platforms that support ash. # Build on platforms that support ash.
if (is_chromeos) { if (is_chromeos) {
deps += [ deps += [
"//ash/autoclick/mus:accessibility_autoclick", "//ash/components/autoclick:autoclick_app",
"//ash/components/quick_launch", "//ash/components/quick_launch",
"//ash/standalone:ash_standalone", "//ash/standalone:ash_standalone",
"//ash/touch_hud/mus:touch_hud", "//ash/touch_hud/mus:touch_hud",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment