diff --git a/apps/Makefile b/apps/Makefile index 85433e051..441a7d396 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -14,6 +14,7 @@ include apps/code/Makefile app_objs += $(addprefix apps/,\ apps_container.o\ + apps_container_storage.o\ apps_window.o\ battery_timer.o\ battery_view.o\ diff --git a/apps/apps_container.cpp b/apps/apps_container.cpp index b123551b6..6938827f0 100644 --- a/apps/apps_container.cpp +++ b/apps/apps_container.cpp @@ -21,16 +21,9 @@ AppsContainer::AppsContainer() : m_USBTimer(USBTimer(this)), m_suspendTimer(SuspendTimer(this)), m_backlightDimmingTimer(), - m_hardwareTestSnapshot(), - m_onBoardingSnapshot(), m_homeSnapshot(), - m_calculationSnapshot(), - m_graphSnapshot(), - m_sequenceSnapshot(), - m_settingsSnapshot(), - m_statisticsSnapshot(), - m_probabilitySnapshot(), - m_regressionSnapshot() + m_onBoardingSnapshot(), + m_hardwareTestSnapshot() { m_emptyBatteryWindow.setFrame(KDRect(0, 0, Ion::Display::Width, Ion::Display::Height)); Poincare::Expression::setCircuitBreaker(AppsContainer::poincareCircuitBreaker); @@ -41,30 +34,6 @@ bool AppsContainer::poincareCircuitBreaker(const Poincare::Expression * e) { return state.keyDown(Ion::Keyboard::Key::A6); } -int AppsContainer::numberOfApps() { - return k_numberOfCommonApps; -} - -App::Snapshot * AppsContainer::appSnapshotAtIndex(int index) { - if (index < 0) { - return nullptr; - } - App::Snapshot * snapshots[] = { - &m_homeSnapshot, - &m_calculationSnapshot, - &m_graphSnapshot, - &m_sequenceSnapshot, - &m_settingsSnapshot, - &m_statisticsSnapshot, - &m_probabilitySnapshot, - &m_regressionSnapshot, - &m_codeSnapshot - }; - assert(sizeof(snapshots)/sizeof(snapshots[0]) == k_numberOfCommonApps); - assert(index >= 0 && index < k_numberOfCommonApps); - return snapshots[index]; -} - App::Snapshot * AppsContainer::hardwareTestAppSnapshot() { return &m_hardwareTestSnapshot; } @@ -75,7 +44,7 @@ App::Snapshot * AppsContainer::onBoardingAppSnapshot() { void AppsContainer::reset() { Clipboard::sharedClipboard()->reset(); - for (int i = 0; i < k_numberOfCommonApps; i++) { + for (int i = 0; i < numberOfApps(); i++) { appSnapshotAtIndex(i)->reset(); } } diff --git a/apps/apps_container.h b/apps/apps_container.h index 41549cf53..cd90d7bf1 100644 --- a/apps/apps_container.h +++ b/apps/apps_container.h @@ -2,16 +2,8 @@ #define APPS_CONTAINER_H #include "home/app.h" -#include "graph/app.h" -#include "probability/app.h" -#include "calculation/app.h" -#include "regression/app.h" -#include "sequence/app.h" -#include "settings/app.h" -#include "statistics/app.h" #include "on_boarding/app.h" #include "hardware_test/app.h" -#include "code/app.h" #include "on_boarding/update_controller.h" #include "apps_window.h" #include "empty_battery_window.h" @@ -33,8 +25,8 @@ class AppsContainer : public Container { public: AppsContainer(); static bool poincareCircuitBreaker(const Poincare::Expression * e); - int numberOfApps(); - App::Snapshot * appSnapshotAtIndex(int index); + virtual int numberOfApps() = 0; + virtual App::Snapshot * appSnapshotAtIndex(int index) = 0; App::Snapshot * hardwareTestAppSnapshot(); App::Snapshot * onBoardingAppSnapshot(); void reset(); @@ -51,14 +43,14 @@ public: void shutdownDueToLowBattery(); void reloadTitleBar(); OnBoarding::UpdateController * updatePopUpController(); +protected: + Home::App::Snapshot * homeAppSnapshot() { return &m_homeSnapshot; } private: Window * window() override; int numberOfContainerTimers() override; Timer * containerTimerAtIndex(int i) override; bool processEvent(Ion::Events::Event event); void resetShiftAlphaStatus(); - static constexpr int k_numberOfCommonApps = 9; - static constexpr int k_totalNumberOfApps = 2+k_numberOfCommonApps; AppsWindow m_window; EmptyBatteryWindow m_emptyBatteryWindow; #if USE_PIC_VIEW_APP @@ -74,17 +66,9 @@ private: USBTimer m_USBTimer; SuspendTimer m_suspendTimer; BacklightDimmingTimer m_backlightDimmingTimer; - HardwareTest::App::Snapshot m_hardwareTestSnapshot; - OnBoarding::App::Snapshot m_onBoardingSnapshot; Home::App::Snapshot m_homeSnapshot; - Calculation::App::Snapshot m_calculationSnapshot; - Graph::App::Snapshot m_graphSnapshot; - Sequence::App::Snapshot m_sequenceSnapshot; - Settings::App::Snapshot m_settingsSnapshot; - Statistics::App::Snapshot m_statisticsSnapshot; - Probability::App::Snapshot m_probabilitySnapshot; - Regression::App::Snapshot m_regressionSnapshot; - Code::App::Snapshot m_codeSnapshot; + OnBoarding::App::Snapshot m_onBoardingSnapshot; + HardwareTest::App::Snapshot m_hardwareTestSnapshot; }; #endif diff --git a/apps/apps_container_storage.cpp b/apps/apps_container_storage.cpp new file mode 100644 index 000000000..fcf93f1e4 --- /dev/null +++ b/apps/apps_container_storage.cpp @@ -0,0 +1,38 @@ +#include "apps_container_storage.h" + +AppsContainerStorage::AppsContainerStorage() : + AppsContainer(), + m_calculationSnapshot(), + m_graphSnapshot(), + m_sequenceSnapshot(), + m_settingsSnapshot(), + m_statisticsSnapshot(), + m_probabilitySnapshot(), + m_regressionSnapshot(), + m_codeSnapshot() +{ +} + +int AppsContainerStorage::numberOfApps() { + return k_numberOfCommonApps; +} + +App::Snapshot * AppsContainerStorage::appSnapshotAtIndex(int index) { + if (index < 0) { + return nullptr; + } + App::Snapshot * snapshots[] = { + homeAppSnapshot(), + &m_calculationSnapshot, + &m_graphSnapshot, + &m_sequenceSnapshot, + &m_settingsSnapshot, + &m_statisticsSnapshot, + &m_probabilitySnapshot, + &m_regressionSnapshot, + &m_codeSnapshot + }; + assert(sizeof(snapshots)/sizeof(snapshots[0]) == k_numberOfCommonApps); + assert(index >= 0 && index < k_numberOfCommonApps); + return snapshots[index]; +} diff --git a/apps/apps_container_storage.h b/apps/apps_container_storage.h new file mode 100644 index 000000000..b21f693b7 --- /dev/null +++ b/apps/apps_container_storage.h @@ -0,0 +1,32 @@ +#ifndef APPS_CONTAINER_STORAGE_H +#define APPS_CONTAINER_STORAGE_H + +#include "apps_container.h" +#include "graph/app.h" +#include "probability/app.h" +#include "calculation/app.h" +#include "regression/app.h" +#include "sequence/app.h" +#include "settings/app.h" +#include "statistics/app.h" +#include "code/app.h" + +class AppsContainerStorage : public AppsContainer { +public: + AppsContainerStorage(); + int numberOfApps() override; + App::Snapshot * appSnapshotAtIndex(int index) override; +private: + static constexpr int k_numberOfCommonApps = 9; + static constexpr int k_totalNumberOfApps = 2+k_numberOfCommonApps; + Calculation::App::Snapshot m_calculationSnapshot; + Graph::App::Snapshot m_graphSnapshot; + Sequence::App::Snapshot m_sequenceSnapshot; + Settings::App::Snapshot m_settingsSnapshot; + Statistics::App::Snapshot m_statisticsSnapshot; + Probability::App::Snapshot m_probabilitySnapshot; + Regression::App::Snapshot m_regressionSnapshot; + Code::App::Snapshot m_codeSnapshot; +}; + +#endif diff --git a/apps/main.cpp b/apps/main.cpp index 61e58bcfb..6421fa7e6 100644 --- a/apps/main.cpp +++ b/apps/main.cpp @@ -1,6 +1,6 @@ -#include "apps_container.h" +#include "apps_container_storage.h" -AppsContainer container; +AppsContainerStorage container; void ion_app() { container.run();