From cb8a18e5517152bd1dfabcbdc6d1d9b0da95a2ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Fri, 30 Jun 2017 13:42:34 +0200 Subject: [PATCH] [apps/hardware_test] Clean plugging USB test Change-Id: I4fcc116c4d498bbc3510c9d9be4596c4e3472f4f --- apps/hardware_test/app.cpp | 16 +++++- apps/hardware_test/app.h | 5 ++ .../hardware_test/battery_test_controller.cpp | 7 +-- apps/hardware_test/battery_test_controller.h | 2 - apps/hardware_test/usb_test_controller.cpp | 52 ++++++++----------- apps/hardware_test/usb_test_controller.h | 7 +-- 6 files changed, 50 insertions(+), 39 deletions(-) diff --git a/apps/hardware_test/app.cpp b/apps/hardware_test/app.cpp index bb7c6fbb8..3083428d0 100644 --- a/apps/hardware_test/app.cpp +++ b/apps/hardware_test/app.cpp @@ -18,8 +18,22 @@ App::Descriptor * App::Snapshot::descriptor() { App::App(Container * container, Snapshot * snapshot) : ::App(container, snapshot, &m_keyboardController), - m_keyboardController(&m_modalViewController) + m_keyboardController(&m_modalViewController), + m_USBTestController(nullptr) { } +ViewController * App::USBController() { + return &m_USBTestController; +} + +int App::numberOfTimers() { + return firstResponder() == &m_USBTestController; +} + +Timer * App::timerAtIndex(int i) { + assert(i == 0); + return &m_USBTestController; +} + } diff --git a/apps/hardware_test/app.h b/apps/hardware_test/app.h index 996261b2e..8601e1f64 100644 --- a/apps/hardware_test/app.h +++ b/apps/hardware_test/app.h @@ -2,6 +2,7 @@ #define HARDWARE_TEST_APP_H #include +#include "usb_test_controller.h" #include "keyboard_test_controller.h" class AppsContainer; @@ -15,9 +16,13 @@ public: App * unpack(Container * container) override; Descriptor * descriptor() override; }; + ViewController * USBController(); + int numberOfTimers() override; + Timer * timerAtIndex(int i) override; private: App(Container * container, Snapshot * snapshot); KeyboardTestController m_keyboardController; + USBTestController m_USBTestController; }; } diff --git a/apps/hardware_test/battery_test_controller.cpp b/apps/hardware_test/battery_test_controller.cpp index a4ef48dfd..d760bd5ce 100644 --- a/apps/hardware_test/battery_test_controller.cpp +++ b/apps/hardware_test/battery_test_controller.cpp @@ -1,5 +1,6 @@ #include "battery_test_controller.h" #include "../constant.h" +#include "app.h" extern "C" { #include } @@ -11,8 +12,7 @@ namespace HardwareTest { BatteryTestController::BatteryTestController(Responder * parentResponder) : ViewController(parentResponder), - m_view(), - m_usbTestController(this) + m_view() { } @@ -24,7 +24,8 @@ bool BatteryTestController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::OK) { if (strcmp(m_view.batteryStateTextView()->text(), k_batteryOKText) == 0) { ModalViewController * modal = (ModalViewController *)parentResponder(); - modal->displayModalViewController(&m_usbTestController, 0.0f, 0.0f); + App * a = (App *)app(); + modal->displayModalViewController(a->USBController(), 0.0f, 0.0f); } } updateBatteryState(Ion::Battery::voltage(), Ion::Battery::isCharging()); diff --git a/apps/hardware_test/battery_test_controller.h b/apps/hardware_test/battery_test_controller.h index 93b36d239..179495dec 100644 --- a/apps/hardware_test/battery_test_controller.h +++ b/apps/hardware_test/battery_test_controller.h @@ -2,7 +2,6 @@ #define HARDWARE_TEST_BATTERY_TEST_CONTROLLER_H #include -#include "usb_test_controller.h" namespace HardwareTest { @@ -35,7 +34,6 @@ private: constexpr static const char * k_batteryNeedChargingText = "BATTERY: NEED RECHARGE"; void updateBatteryState(float batteryLevel, bool batteryCharging); ContentView m_view; - USBTestController m_usbTestController; }; } diff --git a/apps/hardware_test/usb_test_controller.cpp b/apps/hardware_test/usb_test_controller.cpp index 606790b11..56d4fc017 100644 --- a/apps/hardware_test/usb_test_controller.cpp +++ b/apps/hardware_test/usb_test_controller.cpp @@ -10,7 +10,9 @@ namespace HardwareTest { USBTestController::USBTestController(Responder * parentResponder) : ViewController(parentResponder), + Timer(1), m_view(), + m_shouldPlugUSB(true), m_resetController(this) { } @@ -19,41 +21,31 @@ View * USBTestController::view() { return &m_view; } -bool USBTestController::handleEvent(Ion::Events::Event event) { - if (event == Ion::Events::UpperM) { - return true; - } - if (event == Ion::Events::OK) { - if (Ion::USB::isPlugged() && strcmp(m_view.USBTextView()->text(), k_USBPlugText) == 0) { - m_view.USBTextView()->setText(k_USBUnplugText); - m_view.arrowView()->setDirection(false); - m_view.arrowView()->setColor(KDColorRed); - } - if (!Ion::USB::isPlugged() && strcmp(m_view.USBTextView()->text(), k_USBUnplugText) == 0) { - ModalViewController * modal = (ModalViewController *)parentResponder(); - modal->displayModalViewController(&m_resetController, 0.0f, 0.0f); - } - } +bool USBTestController::handleEvent(Ion::Events::Event e) { return true; } -void USBTestController::viewWillAppear() { - m_view.USBTextView()->setText(k_USBPlugText); - m_view.arrowView()->setDirection(true); - m_view.arrowView()->setColor(KDColorGreen); +bool USBTestController::fire() { + if (Ion::USB::isPlugged() && m_shouldPlugUSB) { + m_view.USBTextView()->setText(k_USBUnplugText); + m_view.arrowView()->setDirection(false); + m_view.arrowView()->setColor(KDColorRed); + m_shouldPlugUSB = false; + return true; + } + if (!Ion::USB::isPlugged() && !m_shouldPlugUSB) { + ModalViewController * modal = (ModalViewController *)parentResponder(); + modal->displayModalViewController(&m_resetController, 0.0f, 0.0f); + return true; + } + return false; } -void USBTestController::didBecomeFirstResponder() { - Container * c = (Container *)app()->container(); - /* We dispatch a random event that is caught by the hardware test application - * to force the window redraw. */ - c->dispatchEvent(Ion::Events::UpperM); - while (!Ion::USB::isPlugged() && strcmp(m_view.USBTextView()->text(), k_USBPlugText) == 0) {} - /* We dispatch an event to force the window to redraw (and update the drawn - * instructions at the same type) */ - c->dispatchEvent(Ion::Events::OK); - while (Ion::USB::isPlugged() && strcmp(m_view.USBTextView()->text(), k_USBUnplugText) == 0) {} - c->dispatchEvent(Ion::Events::OK); +void USBTestController::viewWillAppear() { + m_shouldPlugUSB = true; + m_view.USBTextView()->setText(k_USBPlugText); + m_view.arrowView()->setDirection(true); + m_view.arrowView()->setColor(KDColorGreen); } void USBTestController::ContentView::USBView::drawRect(KDContext * ctx, KDRect rect) const { diff --git a/apps/hardware_test/usb_test_controller.h b/apps/hardware_test/usb_test_controller.h index a8f75adc7..7b111d61b 100644 --- a/apps/hardware_test/usb_test_controller.h +++ b/apps/hardware_test/usb_test_controller.h @@ -7,14 +7,14 @@ namespace HardwareTest { -class USBTestController : public ViewController { +class USBTestController : public ViewController, public Timer { public: USBTestController(Responder * parentResponder); View * view() override; - bool handleEvent(Ion::Events::Event event) override; void viewWillAppear() override; - void didBecomeFirstResponder() override; + bool handleEvent(Ion::Events::Event e) override; private: + bool fire() override; class ContentView : public SolidColorView { public: ContentView(); @@ -39,6 +39,7 @@ private: constexpr static const char * k_USBPlugText = "PLUG USB"; constexpr static const char * k_USBUnplugText = "OK, UNPLUG USB"; ContentView m_view; + bool m_shouldPlugUSB; ResetController m_resetController; };