main: Handle terminating event
[apps/homescreen.git] / homescreen / src / main.cpp
index 66ddb75..a98a15b 100644 (file)
@@ -118,8 +118,9 @@ agl_shell_app_on_output(void *data, struct agl_shell *agl_shell,
        homescreenHandler->pending_app_list.push_back(new_pending_app);
 
        if (homescreenHandler->apps_stack.contains(QString(app_id))) {
-               qDebug() << "Gove event to move " << app_id <<
+               qDebug() << "Got event to move " << app_id <<
                        " to another output " << output_name;
+
                homescreenHandler->processAppStatusEvent(app_id, "started");
        }
 }
@@ -321,8 +322,7 @@ run_in_thread(GrpcClient *client)
 
 static void
 load_agl_shell_app(QPlatformNativeInterface *native, QQmlApplicationEngine *engine,
-                  struct shell_data shell_data, const char *screen_name,
-                  bool is_demo, GrpcClient *client)
+                  struct shell_data shell_data, const char *screen_name, bool is_demo)
 {
        QScreen *screen = nullptr;
        HomescreenHandler *homescreenHandler = shell_data.homescreenHandler;
@@ -372,7 +372,7 @@ app_status_callback(::agl_shell_ipc::AppStateResponse app_response, void *data)
                break;
        case AGL_SHELL_APP_STATE_TERMINATED:
                qDebug() << "Got AGL_SHELL_APP_STATE_TERMINATED for app_id " << app_id;
-               // handled by HomescreenHandler::processAppStatusEvent
+               homescreenHandler->processAppStatusEvent(app_id, "terminated");
                break;
        case AGL_SHELL_APP_STATE_ACTIVATED:
                qDebug() << "Got AGL_SHELL_APP_STATE_ACTIVATED for app_id " << app_id;
@@ -418,6 +418,9 @@ int main(int argc, char *argv[])
        // we need to have an app_id
        app.setDesktopFileName("homescreen");
 
+       GrpcClient *client = new GrpcClient();
+       // create a new thread to listner for gRPC events
+       std::thread th = std::thread(run_in_thread, client);
 
        register_agl_shell(native, &shell_data);
        if (!shell_data.shell) {
@@ -444,10 +447,6 @@ int main(int argc, char *argv[])
 
        std::shared_ptr<struct agl_shell> agl_shell{shell_data.shell, agl_shell_destroy};
 
-       GrpcClient *client = new GrpcClient();
-       // create a new thread to listner for gRPC events
-       std::thread th = std::thread(run_in_thread, client);
-
        // Import C++ class to QML
        qmlRegisterType<StatusBarModel>("HomeScreen", 1, 0, "StatusBarModel");
        qmlRegisterType<MasterVolume>("MasterVolume", 1, 0, "MasterVolume");
@@ -459,6 +458,9 @@ int main(int argc, char *argv[])
        shell_data.homescreenHandler = homescreenHandler;
        shell_data.homescreenHandler->setGrpcClient(client);
 
+       // blocks until we're sure connected with the server
+       HMI_DEBUG("HomescreenHandler", "Checking if connected to the gRPC server...");
+       client->WaitForConnected(500, 10);
        client->AppStatusState(app_status_callback, homescreenHandler);
 
        QQmlApplicationEngine engine;
@@ -470,7 +472,7 @@ int main(int argc, char *argv[])
        context->setContextProperty("bluetooth", new Bluetooth(false, context));
 
        load_agl_shell_app(native, &engine, shell_data,
-                          screen_name, is_demo_val, client);
+                          screen_name, is_demo_val);
 
        return app.exec();
 }