Merge pull request #423 from morphis/f/start-appmgr-in-single-window
cmds: directly start appmgr in single window mode
This commit is contained in:
commit
3d86122c08
2 changed files with 28 additions and 1 deletions
|
|
@ -60,6 +60,9 @@ std::istream& operator>>(std::istream& in, anbox::graphics::GLRendererServer::Co
|
||||||
namespace fs = boost::filesystem;
|
namespace fs = boost::filesystem;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
constexpr const char *default_appmgr_package{"org.anbox.appmgr"};
|
||||||
|
constexpr const char *default_appmgr_component{"org.anbox.appmgr.AppViewActivity"};
|
||||||
|
const boost::posix_time::milliseconds default_appmgr_startup_delay{50};
|
||||||
const anbox::graphics::Rect default_single_window_size{0, 0, 1024, 768};
|
const anbox::graphics::Rect default_single_window_size{0, 0, 1024, 768};
|
||||||
|
|
||||||
class NullConnectionCreator : public anbox::network::ConnectionCreator<
|
class NullConnectionCreator : public anbox::network::ConnectionCreator<
|
||||||
|
|
@ -85,6 +88,18 @@ std::istream& operator>>(std::istream& in, anbox::graphics::GLRendererServer::Co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void anbox::cmds::SessionManager::launch_appmgr_if_needed(const std::shared_ptr<bridge::AndroidApiStub> &android_api_stub) {
|
||||||
|
if (!single_window_)
|
||||||
|
return;
|
||||||
|
|
||||||
|
android::Intent launch_intent;
|
||||||
|
launch_intent.package = default_appmgr_package;
|
||||||
|
launch_intent.component = default_appmgr_component;
|
||||||
|
// As this will only be executed in single window mode we don't have
|
||||||
|
// to specify and launch bounds.
|
||||||
|
android_api_stub->launch(launch_intent, graphics::Rect::Invalid, wm::Stack::Id::Default);
|
||||||
|
}
|
||||||
|
|
||||||
anbox::cmds::SessionManager::SessionManager()
|
anbox::cmds::SessionManager::SessionManager()
|
||||||
: CommandWithFlagsAndAction{cli::Name{"session-manager"}, cli::Usage{"session-manager"},
|
: CommandWithFlagsAndAction{cli::Name{"session-manager"}, cli::Usage{"session-manager"},
|
||||||
cli::Description{"Run the the anbox session manager"}},
|
cli::Description{"Run the the anbox session manager"}},
|
||||||
|
|
@ -187,7 +202,6 @@ anbox::cmds::SessionManager::SessionManager()
|
||||||
|
|
||||||
platform->set_window_manager(window_manager);
|
platform->set_window_manager(window_manager);
|
||||||
platform->set_renderer(gl_server->renderer());
|
platform->set_renderer(gl_server->renderer());
|
||||||
|
|
||||||
window_manager->setup();
|
window_manager->setup();
|
||||||
|
|
||||||
auto app_manager = std::static_pointer_cast<application::Manager>(android_api_stub);
|
auto app_manager = std::static_pointer_cast<application::Manager>(android_api_stub);
|
||||||
|
|
@ -210,6 +224,8 @@ anbox::cmds::SessionManager::SessionManager()
|
||||||
utils::string_format("%s/qemu_pipe", socket_path), rt,
|
utils::string_format("%s/qemu_pipe", socket_path), rt,
|
||||||
std::make_shared<qemu::PipeConnectionCreator>(gl_server->renderer(), rt));
|
std::make_shared<qemu::PipeConnectionCreator>(gl_server->renderer(), rt));
|
||||||
|
|
||||||
|
boost::asio::deadline_timer appmgr_start_timer(rt->service());
|
||||||
|
|
||||||
auto bridge_connector = std::make_shared<network::PublishedSocketConnector>(
|
auto bridge_connector = std::make_shared<network::PublishedSocketConnector>(
|
||||||
utils::string_format("%s/anbox_bridge", socket_path), rt,
|
utils::string_format("%s/anbox_bridge", socket_path), rt,
|
||||||
std::make_shared<rpc::ConnectionCreator>(
|
std::make_shared<rpc::ConnectionCreator>(
|
||||||
|
|
@ -228,6 +244,12 @@ anbox::cmds::SessionManager::SessionManager()
|
||||||
server->register_boot_finished_handler([&]() {
|
server->register_boot_finished_handler([&]() {
|
||||||
DEBUG("Android successfully booted");
|
DEBUG("Android successfully booted");
|
||||||
android_api_stub->ready().set(true);
|
android_api_stub->ready().set(true);
|
||||||
|
appmgr_start_timer.expires_from_now(default_appmgr_startup_delay);
|
||||||
|
appmgr_start_timer.async_wait([&](const boost::system::error_code &err) {
|
||||||
|
if (err != boost::system::errc::success)
|
||||||
|
return;
|
||||||
|
launch_appmgr_if_needed(android_api_stub);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
return std::make_shared<bridge::PlatformMessageProcessor>(
|
return std::make_shared<bridge::PlatformMessageProcessor>(
|
||||||
sender, server, pending_calls);
|
sender, server, pending_calls);
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,9 @@
|
||||||
#include "anbox/graphics/rect.h"
|
#include "anbox/graphics/rect.h"
|
||||||
|
|
||||||
namespace anbox {
|
namespace anbox {
|
||||||
|
namespace bridge {
|
||||||
|
class AndroidApiStub;
|
||||||
|
} // namespace bridge
|
||||||
namespace container {
|
namespace container {
|
||||||
class Client;
|
class Client;
|
||||||
} // namespace container
|
} // namespace container
|
||||||
|
|
@ -39,6 +42,8 @@ class SessionManager : public cli::CommandWithFlagsAndAction {
|
||||||
SessionManager();
|
SessionManager();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void launch_appmgr_if_needed(const std::shared_ptr<bridge::AndroidApiStub> &android_api_stub);
|
||||||
|
|
||||||
std::shared_ptr<container::Client> container_;
|
std::shared_ptr<container::Client> container_;
|
||||||
std::string desktop_file_hint_;
|
std::string desktop_file_hint_;
|
||||||
graphics::GLRendererServer::Config::Driver gles_driver_;
|
graphics::GLRendererServer::Config::Driver gles_driver_;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue