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,
arc::mojom::ActivityNamePtr activity = arc::mojom::ActivityName::New();
activity->package_name = package_name;
auto intent = arc::mojom::IntentInfo::New();
if (!app_info->action.empty())
intent->action = app_info->action;
if (!app_info->intent.empty()) {
intent->data = app_info->intent;
} else {
......
......@@ -63,6 +63,7 @@ constexpr char kVolumeLevelDeviceSettingId[] = "VOLUME_LEVEL";
constexpr char kScreenBrightnessDeviceSettingId[] = "BRIGHTNESS_LEVEL";
constexpr char kDoNotDisturbDeviceSettingId[] = "DO_NOT_DISTURB";
constexpr char kNightLightDeviceSettingId[] = "NIGHT_LIGHT_SWITCH";
constexpr char kIntentActionView[] = "android.intent.action.VIEW";
constexpr base::Feature kChromeOSAssistantDogfood{
"ChromeOSAssistantDogfood", base::FEATURE_DISABLED_BY_DEFAULT};
......@@ -205,9 +206,16 @@ void AssistantManagerServiceImpl::RegisterFallbackMediaHandler() {
// Register handler for media actions.
assistant_manager_internal_->RegisterFallbackMediaHandler(
[this](std::string play_media_args_proto) {
[this](std::string action_name, std::string play_media_args_proto) {
std::unique_ptr<action::AndroidAppInfo> android_app_info =
GetAndroidAppInfoFromMediaArgs(play_media_args_proto);
if (android_app_info) {
OnOpenMediaAndroidIntent(play_media_args_proto,
android_app_info.get());
} else {
std::string url = GetWebUrlFromMediaArgs(play_media_args_proto);
if (!url.empty()) {
// Fallack to web URL.
if (!url.empty())
OnOpenUrl(url);
}
});
......@@ -516,7 +524,7 @@ void AssistantManagerServiceImpl::OnVerifyAndroidApp(
const std::vector<action::AndroidAppInfo>& apps_info,
const action::InteractionInfo& interaction) {
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();
app_info_ptr->package_name = app_info.package_name;
apps_info_list.push_back(std::move(app_info_ptr));
......@@ -528,6 +536,31 @@ void AssistantManagerServiceImpl::OnVerifyAndroidApp(
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(
assistant_client::ConversationStateListener::RecognitionState state,
const assistant_client::ConversationStateListener::RecognitionResult&
......@@ -829,6 +862,12 @@ void AssistantManagerServiceImpl::PostInitAssistant(
assistant_settings_manager_->SyncSpeakerIdEnrollmentStatus();
}
void AssistantManagerServiceImpl::HandleLaunchMediaIntentResponse(
bool app_opened) {
// TODO(llin): Handle the response.
NOTIMPLEMENTED();
}
void AssistantManagerServiceImpl::HandleOpenAndroidAppResponse(
const action::InteractionInfo& interaction,
bool app_opened) {
......
......@@ -196,6 +196,8 @@ class AssistantManagerServiceImpl
const action::InteractionInfo& interaction,
std::vector<mojom::AndroidAppInfoPtr> apps_info);
void HandleLaunchMediaIntentResponse(bool app_opened);
void OnConversationTurnStartedOnMainThread(bool is_mic_open);
void OnConversationTurnFinishedOnMainThread(
assistant_client::ConversationStateListener::Resolution resolution);
......@@ -216,6 +218,8 @@ class AssistantManagerServiceImpl
void OnRespondingStartedOnMainThread(bool is_error_response);
void OnSpeechLevelUpdatedOnMainThread(const float speech_level);
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();
......
......@@ -271,11 +271,23 @@ enum AppStatus { UNKNOWN, AVAILABLE, UNAVAILABLE, VERSION_MISMATCH, DISABLED };
// Models an Android app.
struct AndroidAppInfo {
// Unique name to identify a specific app.
string package_name;
// Version number of the app.
int32 version;
// Localized app name.
string localized_app_name;
// Intent data to operate on.
string intent;
// Status of the app.
AppStatus status;
// The general action to be performed, such as ACTION_VIEW, ACTION_MAIN, etc.
string action;
};
// 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