From 6deaef49b836a15465be9d00a0601b3f84ac5ae8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Fri, 14 Sep 2018 13:35:03 +0200 Subject: [PATCH] [poincare] When memory exception, stay in the app and display popup --- apps/apps_container.cpp | 9 ++++----- apps/apps_container.h | 2 +- apps/shared.de.i18n | 1 + apps/shared.en.i18n | 1 + apps/shared.es.i18n | 1 + apps/shared.fr.i18n | 1 + apps/shared.pt.i18n | 1 + escher/include/escher/container.h | 2 +- escher/src/container.cpp | 4 ++-- 9 files changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/apps_container.cpp b/apps/apps_container.cpp index 91d0ec224..8e95c0164 100644 --- a/apps/apps_container.cpp +++ b/apps/apps_container.cpp @@ -143,7 +143,7 @@ bool AppsContainer::processEvent(Ion::Events::Event event) { return false; } -void AppsContainer::switchTo(App::Snapshot * snapshot) { +void AppsContainer::switchTo(App::Snapshot * snapshot, bool forceSwitch) { if (activeApp() && snapshot != activeApp()->snapshot()) { resetShiftAlphaStatus(); } @@ -155,7 +155,7 @@ void AppsContainer::switchTo(App::Snapshot * snapshot) { if (snapshot) { m_window.setTitle(snapshot->descriptor()->upperName()); } - Container::switchTo(snapshot); + Container::switchTo(snapshot, forceSwitch); } void AppsContainer::run() { @@ -177,9 +177,8 @@ void AppsContainer::run() { * tree for the jump to work. */ Poincare::ExceptionCheckpoint ecp; if (!ExceptionRun(ecp)) { - switchTo(appSnapshotAtIndex(0)); - activeApp()->displayModalViewController(&m_updateController, 0.f, 0.f); //TODO this is debug - //displayMemoryExhaustionPopUp(); TODO + switchTo(activeApp()->snapshot(), true); + activeApp()->displayWarning(I18n::Message::AppMemoryFull); } Container::run(); switchTo(nullptr); diff --git a/apps/apps_container.h b/apps/apps_container.h index 76fdf3612..cf3b66074 100644 --- a/apps/apps_container.h +++ b/apps/apps_container.h @@ -38,7 +38,7 @@ public: VariableBoxController * variableBoxController(); void suspend(bool checkIfPowerKeyReleased = false); virtual bool dispatchEvent(Ion::Events::Event event) override; - void switchTo(App::Snapshot * snapshot) override; + void switchTo(App::Snapshot * snapshot, bool forceSwitch = false) override; void run() override; bool updateBatteryState(); void refreshPreferences(); diff --git a/apps/shared.de.i18n b/apps/shared.de.i18n index 7882b63b2..2b540116c 100644 --- a/apps/shared.de.i18n +++ b/apps/shared.de.i18n @@ -2,6 +2,7 @@ ActivateDesactivate = "Aktivieren/Deaktivieren" ActiveExamModeMessage1 = "Alle Ihre Daten werden " ActiveExamModeMessage2 = "geloscht, wenn Sie den " ActiveExamModeMessage3 = "Testmodus einschalten." +AppMemoryFull = "Memory full for this app" Axis = "Achsen" Cancel = "Abbrechen" ClearColumn = "Spalte loschen" diff --git a/apps/shared.en.i18n b/apps/shared.en.i18n index 33cfdbd9f..290eb30fe 100644 --- a/apps/shared.en.i18n +++ b/apps/shared.en.i18n @@ -2,6 +2,7 @@ ActivateDesactivate = "Turn on/off" ActiveExamModeMessage1 = "All your data will be " ActiveExamModeMessage2 = "deleted when you activate " ActiveExamModeMessage3 = "the exam mode." +AppMemoryFull = "Memory full for this app" Axis = "Axes" Cancel = "Cancel" ClearColumn = "Clear column" diff --git a/apps/shared.es.i18n b/apps/shared.es.i18n index 5339f9be0..bebf4ff82 100644 --- a/apps/shared.es.i18n +++ b/apps/shared.es.i18n @@ -2,6 +2,7 @@ ActivateDesactivate = "Activar/Desactivar" ActiveExamModeMessage1 = "Todos sus datos se " ActiveExamModeMessage2 = "eliminaran al activar " ActiveExamModeMessage3 = "el modo examen." +AppMemoryFull = "Memory full for this app" Axis = "Ejes" Cancel = "Cancelar" ClearColumn = "Borrar la columna" diff --git a/apps/shared.fr.i18n b/apps/shared.fr.i18n index 17e9da1f5..df584386c 100644 --- a/apps/shared.fr.i18n +++ b/apps/shared.fr.i18n @@ -2,6 +2,7 @@ ActivateDesactivate = "Activer/Desactiver" ActiveExamModeMessage1 = "Toutes vos donnees seront " ActiveExamModeMessage2 = "supprimees si vous activez " ActiveExamModeMessage3 = "le mode examen." +AppMemoryFull = "Memory full for this app" Axis = "Axes" Cancel = "Annuler" ClearColumn = "Effacer la colonne" diff --git a/apps/shared.pt.i18n b/apps/shared.pt.i18n index a23d9c19a..6667c13f6 100644 --- a/apps/shared.pt.i18n +++ b/apps/shared.pt.i18n @@ -2,6 +2,7 @@ ActivateDesactivate = "Activar/Desactivar" ActiveExamModeMessage1 = "Todos os seus dados serao " ActiveExamModeMessage2 = "apagados se voce ligar " ActiveExamModeMessage3 = "o modo de exame." +AppMemoryFull = "Memory full for this app" Axis = "Eixos" Cancel = "Cancelar" ClearColumn = "Excluir coluna" diff --git a/escher/include/escher/container.h b/escher/include/escher/container.h index 8857c59bc..66c7242e4 100644 --- a/escher/include/escher/container.h +++ b/escher/include/escher/container.h @@ -27,7 +27,7 @@ public: virtual void run(); App * activeApp(); virtual bool dispatchEvent(Ion::Events::Event event) override; - virtual void switchTo(App::Snapshot * snapshot); + virtual void switchTo(App::Snapshot * snapshot, bool forceSwitch = false); protected: virtual Window * window() = 0; private: diff --git a/escher/src/container.cpp b/escher/src/container.cpp index ae8094d20..009f8aff1 100644 --- a/escher/src/container.cpp +++ b/escher/src/container.cpp @@ -14,8 +14,8 @@ Container::~Container() { } } -void Container::switchTo(App::Snapshot * snapshot) { - if (m_activeApp && snapshot == m_activeApp->snapshot()) { +void Container::switchTo(App::Snapshot * snapshot, bool forceSwitch) { + if (!forceSwitch && m_activeApp && snapshot == m_activeApp->snapshot()) { return; } if (m_activeApp) {