// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include <QApplication>
#include <QDebug>
#include <QLabel>
#include <QSharedPointer>
#include <QVBoxLayout>
#include <QWidget>
#include <QtOhosExtras>
namespace {
QWidget *initApplication(QtOhosExtras::QOhosWantInfo::LaunchReason launchReason)
{
auto *window = new QWidget;
window->setAttribute(Qt::WA_DeleteOnClose);
window->resize(400, 200);
auto *label = new QLabel(
launchReason == QtOhosExtras::QOhosWantInfo::LaunchReason::Preload
? QString("Preloaded window content")
: QString("Non-preloaded window content"),
window);
label->setAlignment(Qt::AlignCenter);
auto *layout = new QVBoxLayout(window);
layout->addWidget(label);
return window;
}
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
const auto wantInfo = QtOhosExtras::QOhosAppContext::getAppLaunchWantInfo();
const auto appLaunchReason = wantInfo->launchReason();
auto *window = initApplication(appLaunchReason);
if (appLaunchReason == QtOhosExtras::QOhosWantInfo::LaunchReason::StartAbility) {
window->show();
} else if (appLaunchReason == QtOhosExtras::QOhosWantInfo::LaunchReason::Preload) {
struct Context {
QWidget *window;
QMetaObject::Connection connection;
};
auto context = QSharedPointer<Context>::create();
context->window = window;
auto abilityContext = QtOhosExtras::QOhosAbilityContext::getDefaultInstance();
context->connection = QObject::connect(
abilityContext.get(),
&QtOhosExtras::QOhosAbilityContext::newWantInfoReceived,
context->window,
[context](auto wantInfo) {
if (wantInfo->launchReason() == QtOhosExtras::QOhosWantInfo::LaunchReason::StartAbility) {
QObject::disconnect(context->connection);
context->window->show();
}
});
} else {
qWarning()
<< "Expected StartAbility or Preload app launch reason - got QtOhosExtras::QOhosWantInfo::LaunchReason("
<< static_cast<int>(appLaunchReason) << ")";
}
return app.exec();
}