Commit fb0e6284 authored by Li Lin's avatar Li Lin Committed by Commit Bot

Launch Android Intent for media playback.

Bug: b:124796759
Test: Manual
Change-Id: I197f984578e9f80096ada1701e0399058bf9e848
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1480726Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarXiaohui Chen <xiaohuic@chromium.org>
Commit-Queue: Li Lin <llin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#638359}
parent bb3f881d
...@@ -139,6 +139,9 @@ void DeviceActions::OpenAndroidApp(AndroidAppInfoPtr app_info, ...@@ -139,6 +139,9 @@ void DeviceActions::OpenAndroidApp(AndroidAppInfoPtr app_info,
arc::mojom::ActivityNamePtr activity = arc::mojom::ActivityName::New(); arc::mojom::ActivityNamePtr activity = arc::mojom::ActivityName::New();
activity->package_name = package_name; activity->package_name = package_name;
auto intent = arc::mojom::IntentInfo::New(); auto intent = arc::mojom::IntentInfo::New();
if (!app_info->action.empty())
intent->action = app_info->action;
if (!app_info->intent.empty()) { if (!app_info->intent.empty()) {
intent->data = app_info->intent; intent->data = app_info->intent;
} else { } else {
......
...@@ -63,6 +63,7 @@ constexpr char kVolumeLevelDeviceSettingId[] = "VOLUME_LEVEL"; ...@@ -63,6 +63,7 @@ constexpr char kVolumeLevelDeviceSettingId[] = "VOLUME_LEVEL";
constexpr char kScreenBrightnessDeviceSettingId[] = "BRIGHTNESS_LEVEL"; constexpr char kScreenBrightnessDeviceSettingId[] = "BRIGHTNESS_LEVEL";
constexpr char kDoNotDisturbDeviceSettingId[] = "DO_NOT_DISTURB"; constexpr char kDoNotDisturbDeviceSettingId[] = "DO_NOT_DISTURB";
constexpr char kNightLightDeviceSettingId[] = "NIGHT_LIGHT_SWITCH"; constexpr char kNightLightDeviceSettingId[] = "NIGHT_LIGHT_SWITCH";
constexpr char kIntentActionView[] = "android.intent.action.VIEW";
constexpr base::Feature kChromeOSAssistantDogfood{ constexpr base::Feature kChromeOSAssistantDogfood{
"ChromeOSAssistantDogfood", base::FEATURE_DISABLED_BY_DEFAULT}; "ChromeOSAssistantDogfood", base::FEATURE_DISABLED_BY_DEFAULT};
...@@ -205,10 +206,17 @@ void AssistantManagerServiceImpl::RegisterFallbackMediaHandler() { ...@@ -205,10 +206,17 @@ void AssistantManagerServiceImpl::RegisterFallbackMediaHandler() {
// Register handler for media actions. // Register handler for media actions.
assistant_manager_internal_->RegisterFallbackMediaHandler( assistant_manager_internal_->RegisterFallbackMediaHandler(
[this](std::string play_media_args_proto) { [this](std::string action_name, std::string play_media_args_proto) {
std::string url = GetWebUrlFromMediaArgs(play_media_args_proto); std::unique_ptr<action::AndroidAppInfo> android_app_info =
if (!url.empty()) { GetAndroidAppInfoFromMediaArgs(play_media_args_proto);
OnOpenUrl(url); if (android_app_info) {
OnOpenMediaAndroidIntent(play_media_args_proto,
android_app_info.get());
} else {
std::string url = GetWebUrlFromMediaArgs(play_media_args_proto);
// Fallack to web URL.
if (!url.empty())
OnOpenUrl(url);
} }
}); });
} }
...@@ -516,7 +524,7 @@ void AssistantManagerServiceImpl::OnVerifyAndroidApp( ...@@ -516,7 +524,7 @@ void AssistantManagerServiceImpl::OnVerifyAndroidApp(
const std::vector<action::AndroidAppInfo>& apps_info, const std::vector<action::AndroidAppInfo>& apps_info,
const action::InteractionInfo& interaction) { const action::InteractionInfo& interaction) {
std::vector<mojom::AndroidAppInfoPtr> apps_info_list; std::vector<mojom::AndroidAppInfoPtr> apps_info_list;
for (auto app_info : apps_info) { for (auto& app_info : apps_info) {
mojom::AndroidAppInfoPtr app_info_ptr = mojom::AndroidAppInfo::New(); mojom::AndroidAppInfoPtr app_info_ptr = mojom::AndroidAppInfo::New();
app_info_ptr->package_name = app_info.package_name; app_info_ptr->package_name = app_info.package_name;
apps_info_list.push_back(std::move(app_info_ptr)); apps_info_list.push_back(std::move(app_info_ptr));
...@@ -528,6 +536,31 @@ void AssistantManagerServiceImpl::OnVerifyAndroidApp( ...@@ -528,6 +536,31 @@ void AssistantManagerServiceImpl::OnVerifyAndroidApp(
weak_factory_.GetWeakPtr(), interaction)); weak_factory_.GetWeakPtr(), interaction));
} }
void AssistantManagerServiceImpl::OnOpenMediaAndroidIntent(
const std::string play_media_args_proto,
action::AndroidAppInfo* android_app_info) {
ENSURE_MAIN_THREAD(&AssistantManagerServiceImpl::OnOpenMediaAndroidIntent,
play_media_args_proto, android_app_info);
// Handle android media playback intent.
mojom::AndroidAppInfoPtr app_info_ptr = mojom::AndroidAppInfo::New();
app_info_ptr->package_name = android_app_info->package_name;
app_info_ptr->action = kIntentActionView;
if (!android_app_info->intent.empty()) {
app_info_ptr->intent = android_app_info->intent;
} else {
std::string url = GetAndroidIntentUrlFromMediaArgs(play_media_args_proto);
if (!url.empty()) {
app_info_ptr->intent = url;
}
}
service_->device_actions()->OpenAndroidApp(
std::move(app_info_ptr),
base::BindOnce(
&AssistantManagerServiceImpl::HandleLaunchMediaIntentResponse,
weak_factory_.GetWeakPtr()));
}
void AssistantManagerServiceImpl::OnRecognitionStateChanged( void AssistantManagerServiceImpl::OnRecognitionStateChanged(
assistant_client::ConversationStateListener::RecognitionState state, assistant_client::ConversationStateListener::RecognitionState state,
const assistant_client::ConversationStateListener::RecognitionResult& const assistant_client::ConversationStateListener::RecognitionResult&
...@@ -829,6 +862,12 @@ void AssistantManagerServiceImpl::PostInitAssistant( ...@@ -829,6 +862,12 @@ void AssistantManagerServiceImpl::PostInitAssistant(
assistant_settings_manager_->SyncSpeakerIdEnrollmentStatus(); assistant_settings_manager_->SyncSpeakerIdEnrollmentStatus();
} }
void AssistantManagerServiceImpl::HandleLaunchMediaIntentResponse(
bool app_opened) {
// TODO(llin): Handle the response.
NOTIMPLEMENTED();
}
void AssistantManagerServiceImpl::HandleOpenAndroidAppResponse( void AssistantManagerServiceImpl::HandleOpenAndroidAppResponse(
const action::InteractionInfo& interaction, const action::InteractionInfo& interaction,
bool app_opened) { bool app_opened) {
......
...@@ -196,6 +196,8 @@ class AssistantManagerServiceImpl ...@@ -196,6 +196,8 @@ class AssistantManagerServiceImpl
const action::InteractionInfo& interaction, const action::InteractionInfo& interaction,
std::vector<mojom::AndroidAppInfoPtr> apps_info); std::vector<mojom::AndroidAppInfoPtr> apps_info);
void HandleLaunchMediaIntentResponse(bool app_opened);
void OnConversationTurnStartedOnMainThread(bool is_mic_open); void OnConversationTurnStartedOnMainThread(bool is_mic_open);
void OnConversationTurnFinishedOnMainThread( void OnConversationTurnFinishedOnMainThread(
assistant_client::ConversationStateListener::Resolution resolution); assistant_client::ConversationStateListener::Resolution resolution);
...@@ -216,6 +218,8 @@ class AssistantManagerServiceImpl ...@@ -216,6 +218,8 @@ class AssistantManagerServiceImpl
void OnRespondingStartedOnMainThread(bool is_error_response); void OnRespondingStartedOnMainThread(bool is_error_response);
void OnSpeechLevelUpdatedOnMainThread(const float speech_level); void OnSpeechLevelUpdatedOnMainThread(const float speech_level);
void OnModifySettingsAction(const std::string& modify_setting_args_proto); void OnModifySettingsAction(const std::string& modify_setting_args_proto);
void OnOpenMediaAndroidIntent(const std::string play_media_args_proto,
action::AndroidAppInfo* android_app_info);
void RegisterFallbackMediaHandler(); void RegisterFallbackMediaHandler();
......
...@@ -271,11 +271,23 @@ enum AppStatus { UNKNOWN, AVAILABLE, UNAVAILABLE, VERSION_MISMATCH, DISABLED }; ...@@ -271,11 +271,23 @@ enum AppStatus { UNKNOWN, AVAILABLE, UNAVAILABLE, VERSION_MISMATCH, DISABLED };
// Models an Android app. // Models an Android app.
struct AndroidAppInfo { struct AndroidAppInfo {
// Unique name to identify a specific app.
string package_name; string package_name;
// Version number of the app.
int32 version; int32 version;
// Localized app name.
string localized_app_name; string localized_app_name;
// Intent data to operate on.
string intent; string intent;
// Status of the app.
AppStatus status; AppStatus status;
// The general action to be performed, such as ACTION_VIEW, ACTION_MAIN, etc.
string action;
}; };
// Details for Assistant feedback. // Details for Assistant feedback.
......
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