From 786d1824ee6fe5debeb42726a39d59dbe1b89121 Mon Sep 17 00:00:00 2001 From: coxtor Date: Thu, 30 Sep 2021 23:29:28 +0200 Subject: [PATCH 01/17] Favorites --- src/CMakeLists.txt | 1 + src/components/settings/Settings.h | 14 ++++ src/displayapp/Apps.h | 3 +- src/displayapp/DisplayApp.cpp | 10 +++ src/displayapp/DisplayApp.h | 1 + src/displayapp/screens/Tile.cpp | 48 ++++++++++--- src/displayapp/screens/Tile.h | 8 ++- .../screens/settings/SettingFavoriteApp.cpp | 70 +++++++++++++++++++ .../screens/settings/SettingFavoriteApp.h | 29 ++++++++ src/displayapp/screens/settings/Settings.cpp | 8 +-- 10 files changed, 174 insertions(+), 18 deletions(-) create mode 100644 src/displayapp/screens/settings/SettingFavoriteApp.cpp create mode 100644 src/displayapp/screens/settings/SettingFavoriteApp.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 37ee0848bd..209499cdbb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -433,6 +433,7 @@ list(APPEND SOURCE_FILES displayapp/screens/settings/SettingDisplay.cpp displayapp/screens/settings/SettingSteps.cpp displayapp/screens/settings/SettingPineTimeStyle.cpp + displayapp/screens/settings/SettingFavoriteApp.cpp ## Watch faces displayapp/icons/bg_clock.c diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 871ff3b6cf..d4bab4ad12 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -5,6 +5,7 @@ #include "components/brightness/BrightnessController.h" #include "components/fs/FS.h" #include "drivers/Cst816s.h" +#include "displayapp/Apps.h" namespace Pinetime { namespace Controllers { @@ -31,6 +32,17 @@ namespace Pinetime { void Init(); void SaveSettings(); + void SetFavoriteApp(Applications::Apps app){ + if (app != settings.favoriteApp) { + settingsChanged = true; + } + settings.favoriteApp = app; + } + + Applications::Apps GetFavoriteApp(){ + return settings.favoriteApp; + } + void SetClockFace(uint8_t face) { if (face != settings.clockFace) { settingsChanged = true; @@ -179,6 +191,8 @@ namespace Pinetime { std::bitset<3> wakeUpMode {0}; Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium; + + Applications::Apps favoriteApp = Applications::Apps::None; }; SettingsData settings; diff --git a/src/displayapp/Apps.h b/src/displayapp/Apps.h index e3aca8cf00..96274086e1 100644 --- a/src/displayapp/Apps.h +++ b/src/displayapp/Apps.h @@ -32,7 +32,8 @@ namespace Pinetime { SettingDisplay, SettingWakeUp, SettingSteps, - SettingPineTimeStyle + SettingPineTimeStyle, + SettingFavoriteApp }; } } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 9d47310197..93b9396e06 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -46,6 +46,7 @@ #include "displayapp/screens/settings/SettingPineTimeStyle.h" #include "libs/lv_conf.h" +#include "displayapp/screens/settings/SettingFavoriteApp.h" using namespace Pinetime::Applications; using namespace Pinetime::Applications::Display; @@ -232,6 +233,13 @@ void DisplayApp::Refresh() { case TouchEvents::SwipeRight: LoadApp(Apps::QuickSettings, DisplayApp::FullRefreshDirections::RightAnim); break; + case TouchEvents::SwipeLeft: + favoriteApp = settingsController.GetFavoriteApp(); + if (favoriteApp == Apps::None) + LoadApp(Apps::SettingFavoriteApp, DisplayApp::FullRefreshDirections::LeftAnim); + else + LoadApp(favoriteApp, DisplayApp::FullRefreshDirections::LeftAnim); + break; case TouchEvents::DoubleTap: PushMessageToSystemTask(System::Messages::GoToSleep); break; @@ -380,6 +388,8 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) break; case Apps::SettingPineTimeStyle: currentScreen = std::make_unique(this, settingsController); + case Apps::SettingFavoriteApp: + currentScreen = std::make_unique(this, settingsController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::BatteryInfo: diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 4254523ad9..e4ea210587 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -103,6 +103,7 @@ namespace Pinetime { Apps currentApp = Apps::None; Apps returnToApp = Apps::None; + Apps favoriteApp = Apps::None; FullRefreshDirections returnDirection = FullRefreshDirections::None; TouchEvents returnTouchEvent = TouchEvents::None; diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 1d4f0d0ef7..1a608ae63b 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -1,6 +1,7 @@ #include "Tile.h" #include "../DisplayApp.h" #include "BatteryIcon.h" +#include "Symbols.h" using namespace Pinetime::Applications::Screens; @@ -11,12 +12,15 @@ namespace { } static void event_handler(lv_obj_t* obj, lv_event_t event) { - if (event != LV_EVENT_VALUE_CHANGED) return; - - Tile* screen = static_cast(obj->user_data); - auto* eventDataPtr = (uint32_t*) lv_event_get_data(); - uint32_t eventData = *eventDataPtr; - screen->OnValueChangedEvent(obj, eventData); + switch(event){ + case LV_EVENT_VALUE_CHANGED: + case LV_EVENT_LONG_PRESSED: + Tile* screen = static_cast(obj->user_data); + auto* eventDataPtr = (uint32_t*) lv_event_get_data(); + uint32_t eventData = *eventDataPtr; + screen->OnValueChangedEvent(obj, eventData, event); + break; + } } } @@ -27,7 +31,7 @@ Tile::Tile(uint8_t screenID, Pinetime::Controllers::Battery& batteryController, Controllers::DateTime& dateTimeController, std::array& applications) - : Screen(app), batteryController {batteryController}, dateTimeController {dateTimeController} { + : Screen(app), batteryController {batteryController}, dateTimeController {dateTimeController}, settingsController {settingsController}, motorController {motorController} { settingsController.SetAppMenu(screenID); @@ -74,7 +78,13 @@ Tile::Tile(uint8_t screenID, if (applications[i].application == Apps::None) { btnmMap[btIndex] = " "; } else { - btnmMap[btIndex] = applications[i].icon; + if (applications[i].application == settingsController.GetFavoriteApp()){ + //applications[i].icon + btnmMap[btIndex] ="*"; + } + else{ + btnmMap[btIndex] = applications[i].icon; + } } btIndex++; apps[i] = applications[i].application; @@ -123,9 +133,25 @@ void Tile::UpdateScreen() { lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); } -void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId) { +void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId, lv_event_t event) { if(obj != btnm1) return; + switch(event){ + case LV_EVENT_VALUE_CHANGED: + app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); + running = false; + break; + case LV_EVENT_LONG_PRESSED: + currentFavoriteApp = settingsController.GetFavoriteApp(); + if(buttonId){ + if(currentFavoriteApp == apps[buttonId]){ + settingsController.SetFavoriteApp(Apps::None); + } + else{ + settingsController.SetFavoriteApp(apps[buttonId]); + } + motorController.RunForDuration(35); + } + break; + } - app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); - running = false; } diff --git a/src/displayapp/screens/Tile.h b/src/displayapp/screens/Tile.h index 83d3fdf5fa..df372a132a 100644 --- a/src/displayapp/screens/Tile.h +++ b/src/displayapp/screens/Tile.h @@ -9,6 +9,7 @@ #include "components/settings/Settings.h" #include "components/datetime/DateTimeController.h" #include "components/battery/BatteryController.h" +#include "components/motor/MotorController.h" namespace Pinetime { namespace Applications { @@ -31,12 +32,14 @@ namespace Pinetime { ~Tile() override; void UpdateScreen(); - void OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId); + void OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId, lv_event_t event); private: Pinetime::Controllers::Battery& batteryController; Controllers::DateTime& dateTimeController; - + Controllers::Settings& settingsController; + Controllers::MotorController& motorController; + lv_task_t* taskUpdate; lv_obj_t* label_time; @@ -49,6 +52,7 @@ namespace Pinetime { const char* btnmMap[8]; Pinetime::Applications::Apps apps[6]; + Pinetime::Applications::Apps currentFavoriteApp = Pinetime::Applications::Apps::None; }; } } diff --git a/src/displayapp/screens/settings/SettingFavoriteApp.cpp b/src/displayapp/screens/settings/SettingFavoriteApp.cpp new file mode 100644 index 0000000000..c6c0679ca0 --- /dev/null +++ b/src/displayapp/screens/settings/SettingFavoriteApp.cpp @@ -0,0 +1,70 @@ +#include "SettingFavoriteApp.h" +#include +#include "displayapp/DisplayApp.h" +#include "displayapp/screens/Screen.h" +#include "displayapp/screens/Symbols.h" +#include "displayapp/Apps.h" + +using namespace Pinetime::Applications::Screens; + +namespace { + static void event_handler(lv_obj_t* obj, lv_event_t event) { + SettingFavoriteApp* screen = static_cast(obj->user_data); + screen->UpdateSelected(obj, event); + } +} + +SettingFavoriteApp::SettingFavoriteApp(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) + : Screen(app), settingsController {settingsController} { + + lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); + + // lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); + lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); + lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); + lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); + lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); + + lv_obj_set_pos(container1, 10, 60); + lv_obj_set_width(container1, LV_HOR_RES - 20); + lv_obj_set_height(container1, LV_VER_RES - 50); + lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); + + lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(title, "Favorite app"); + lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); + lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 10, 15); + + lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); + lv_label_set_text_static(icon, Symbols::clock); + lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); + lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); + + for(optionsTotal = 0; optionsTotal < 12; optionsTotal++){ + cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); + lv_checkbox_set_text_static(cbOption[optionsTotal], favoriteNames[optionsTotal]); + cbOption[optionsTotal]->user_data = this; + lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); + if (settingsController.GetFavoriteApp() == favoriteOptions[optionsTotal]) { + lv_checkbox_set_checked(cbOption[optionsTotal], true); + } + } +} + +SettingFavoriteApp::~SettingFavoriteApp() { + lv_obj_clean(lv_scr_act()); + settingsController.SaveSettings(); +} + +void SettingFavoriteApp::UpdateSelected(lv_obj_t* object, lv_event_t event) { + if (event == LV_EVENT_VALUE_CHANGED) { + for (int i = 0; i < optionsTotal; i++) { + lv_checkbox_set_checked(cbOption[i], false); + if (object == cbOption[i]) { + lv_checkbox_set_checked(cbOption[i], true); + settingsController.SetFavoriteApp(favoriteOptions[i]); + } + } + } +} diff --git a/src/displayapp/screens/settings/SettingFavoriteApp.h b/src/displayapp/screens/settings/SettingFavoriteApp.h new file mode 100644 index 0000000000..f3327dad48 --- /dev/null +++ b/src/displayapp/screens/settings/SettingFavoriteApp.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include +#include "components/settings/Settings.h" +#include "displayapp/screens/Screen.h" +#include "displayapp/Apps.h" + +namespace Pinetime { + + namespace Applications { + namespace Screens { + + class SettingFavoriteApp : public Screen { + public: + SettingFavoriteApp(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); + ~SettingFavoriteApp() override; + void UpdateSelected(lv_obj_t* object, lv_event_t event); + + private: + Controllers::Settings& settingsController; + uint8_t optionsTotal; + lv_obj_t* cbOption[13]; + Apps favoriteOptions[13] = {Apps::Music,Apps::Navigation,Apps::StopWatch,Apps::Timer,Apps::None,Apps::FlashLight,Apps::Paint,Apps::Paddle,Apps::Twos,Apps::HeartRate,Apps::Metronome,Apps::Motion,Apps::Steps}; + char favoriteNames[13][12] = { "Music","Navigation","Stop Watch","Timer","None","Flash Light","Paint","Paddle","Twos","Heart Rate","Metronome","Motion","Steps"}; + }; + } + } +} diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index e3319f030a..6941119e61 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -60,11 +60,11 @@ std::unique_ptr Settings::CreateScreen2() { std::unique_ptr Settings::CreateScreen3() { std::array applications {{ + {Symbols::shoe, "Favorite app", Apps::SettingFavoriteApp}, {Symbols::list, "About", Apps::SysInfo}, - {Symbols::none, "None", Apps::None}, - {Symbols::none, "None", Apps::None}, - {Symbols::none, "None", Apps::None}, + {Symbols::batteryHalf, "", Apps::None}, + {Symbols::batteryHalf, "", Apps::None}, }}; return std::make_unique(2, 3, app, settingsController, applications); -} +} \ No newline at end of file From d684d3d25640b06c13d53422f5644a8a896dd46d Mon Sep 17 00:00:00 2001 From: coxtor Date: Sun, 3 Oct 2021 21:31:21 +0200 Subject: [PATCH 02/17] Selected favorite is signaled with icon + * --- src/displayapp/screens/Tile.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 1a608ae63b..d668a92c13 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -79,8 +79,11 @@ Tile::Tile(uint8_t screenID, btnmMap[btIndex] = " "; } else { if (applications[i].application == settingsController.GetFavoriteApp()){ - //applications[i].icon - btnmMap[btIndex] ="*"; + char* result; + result = (char*) calloc(strlen(applications[i].icon)+strlen("*")+1, sizeof(char)); + strcpy(result,applications[i].icon); + strcat(result,"*"); + btnmMap[btIndex] = result; } else{ btnmMap[btIndex] = applications[i].icon; From ccd37429b9c70c8189d21283a46eedae2c5cf680 Mon Sep 17 00:00:00 2001 From: coxtor Date: Sun, 3 Oct 2021 21:49:29 +0200 Subject: [PATCH 03/17] Fix animation directions --- src/displayapp/DisplayApp.cpp | 17 +++++++++++++++-- src/displayapp/DisplayApp.h | 2 ++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 93b9396e06..2f5cda2f70 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -225,7 +225,13 @@ void DisplayApp::Refresh() { if (currentApp == Apps::Clock) { switch (gesture) { case TouchEvents::SwipeUp: - LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::Up); + if(favoriteAppActive){ + favoriteAppActive = false; + LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::RightAnim); + } + else { + LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::Up); + } break; case TouchEvents::SwipeDown: LoadApp(Apps::Notifications, DisplayApp::FullRefreshDirections::Down); @@ -235,6 +241,7 @@ void DisplayApp::Refresh() { break; case TouchEvents::SwipeLeft: favoriteApp = settingsController.GetFavoriteApp(); + favoriteAppActive = true; if (favoriteApp == Apps::None) LoadApp(Apps::SettingFavoriteApp, DisplayApp::FullRefreshDirections::LeftAnim); else @@ -260,7 +267,13 @@ void DisplayApp::Refresh() { PushMessageToSystemTask(System::Messages::GoToSleep); } else { if (!currentScreen->OnButtonPushed()) { - LoadApp(returnToApp, returnDirection); + if(favoriteAppActive){ + favoriteAppActive = false; + LoadApp(Apps::Clock,DisplayApp::FullRefreshDirections::RightAnim); + } + else{ + LoadApp(returnToApp, returnDirection); + } brightnessController.Set(settingsController.GetBrightness()); brightnessController.Backup(); } diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index e4ea210587..044369432d 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -104,6 +104,8 @@ namespace Pinetime { Apps currentApp = Apps::None; Apps returnToApp = Apps::None; Apps favoriteApp = Apps::None; + bool favoriteAppActive = false; + FullRefreshDirections returnDirection = FullRefreshDirections::None; TouchEvents returnTouchEvent = TouchEvents::None; From 0684eef6d004b5e6b7f3ff6c62ce1ed272d21353 Mon Sep 17 00:00:00 2001 From: coxtor Date: Sun, 3 Oct 2021 23:13:10 +0200 Subject: [PATCH 04/17] Beauftify selected favorite in Applist --- src/displayapp/screens/Tile.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index d668a92c13..f83689f892 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -71,6 +71,7 @@ Tile::Tile(uint8_t screenID, lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } + uint8_t favoriteIndex = -1; uint8_t btIndex = 0; for (uint8_t i = 0; i < 6; i++) { if (i == 3) @@ -79,15 +80,9 @@ Tile::Tile(uint8_t screenID, btnmMap[btIndex] = " "; } else { if (applications[i].application == settingsController.GetFavoriteApp()){ - char* result; - result = (char*) calloc(strlen(applications[i].icon)+strlen("*")+1, sizeof(char)); - strcpy(result,applications[i].icon); - strcat(result,"*"); - btnmMap[btIndex] = result; + favoriteIndex = i; } - else{ btnmMap[btIndex] = applications[i].icon; - } } btIndex++; apps[i] = applications[i].application; @@ -106,7 +101,11 @@ Tile::Tile(uint8_t screenID, lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, lv_color_hex(0x111111)); lv_obj_set_style_local_pad_all(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 0); lv_obj_set_style_local_pad_inner(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 10); - + + if (favoriteIndex != -1){ + lv_btnmatrix_set_btn_ctrl(btnm1, favoriteIndex, LV_BTNMATRIX_CTRL_CHECK_STATE); + } + for (uint8_t i = 0; i < 6; i++) { lv_btnmatrix_set_btn_ctrl(btnm1, i, LV_BTNMATRIX_CTRL_CLICK_TRIG); if (applications[i].application == Apps::None) { From 497cc70057b94a56ca4bf7352d57f0934a14cebc Mon Sep 17 00:00:00 2001 From: coxtor Date: Sun, 3 Oct 2021 23:45:36 +0200 Subject: [PATCH 05/17] Open last used app if no favorite is set --- src/displayapp/DisplayApp.cpp | 13 ++++++++++--- src/displayapp/DisplayApp.h | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 2f5cda2f70..29cdd6f5c0 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -242,10 +242,14 @@ void DisplayApp::Refresh() { case TouchEvents::SwipeLeft: favoriteApp = settingsController.GetFavoriteApp(); favoriteAppActive = true; - if (favoriteApp == Apps::None) - LoadApp(Apps::SettingFavoriteApp, DisplayApp::FullRefreshDirections::LeftAnim); - else + if (favoriteApp == Apps::None){ + if (previousApp != Apps::None) { + LoadApp(previousApp, DisplayApp::FullRefreshDirections::LeftAnim); + } + } + else { LoadApp(favoriteApp, DisplayApp::FullRefreshDirections::LeftAnim); + } break; case TouchEvents::DoubleTap: PushMessageToSystemTask(System::Messages::GoToSleep); @@ -450,6 +454,9 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) currentScreen = std::make_unique(this, motionController, settingsController); break; } + if (currentApp != Apps::Clock && currentApp != Apps::Launcher && currentApp != Apps::QuickSettings){ + previousApp = currentApp; + } currentApp = app; } diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 044369432d..ee49458694 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -102,6 +102,7 @@ namespace Pinetime { std::unique_ptr currentScreen; Apps currentApp = Apps::None; + Apps previousApp = Apps::None; Apps returnToApp = Apps::None; Apps favoriteApp = Apps::None; bool favoriteAppActive = false; From b97eb6b717e95bf3bdfca4187ff2350fdb33d1a5 Mon Sep 17 00:00:00 2001 From: coxtor Date: Mon, 4 Oct 2021 13:28:18 +0200 Subject: [PATCH 06/17] Fix crash bug, remove settings page for favorites --- src/displayapp/Apps.h | 3 +- src/displayapp/DisplayApp.cpp | 5 -- src/displayapp/screens/Tile.cpp | 10 ++- src/displayapp/screens/Tile.h | 1 - .../screens/settings/SettingFavoriteApp.cpp | 70 ------------------- .../screens/settings/SettingFavoriteApp.h | 29 -------- src/displayapp/screens/settings/Settings.cpp | 2 +- 7 files changed, 6 insertions(+), 114 deletions(-) delete mode 100644 src/displayapp/screens/settings/SettingFavoriteApp.cpp delete mode 100644 src/displayapp/screens/settings/SettingFavoriteApp.h diff --git a/src/displayapp/Apps.h b/src/displayapp/Apps.h index 96274086e1..e3aca8cf00 100644 --- a/src/displayapp/Apps.h +++ b/src/displayapp/Apps.h @@ -32,8 +32,7 @@ namespace Pinetime { SettingDisplay, SettingWakeUp, SettingSteps, - SettingPineTimeStyle, - SettingFavoriteApp + SettingPineTimeStyle }; } } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 29cdd6f5c0..e1fa229855 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -46,7 +46,6 @@ #include "displayapp/screens/settings/SettingPineTimeStyle.h" #include "libs/lv_conf.h" -#include "displayapp/screens/settings/SettingFavoriteApp.h" using namespace Pinetime::Applications; using namespace Pinetime::Applications::Display; @@ -405,10 +404,6 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) break; case Apps::SettingPineTimeStyle: currentScreen = std::make_unique(this, settingsController); - case Apps::SettingFavoriteApp: - currentScreen = std::make_unique(this, settingsController); - ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); - break; case Apps::BatteryInfo: currentScreen = std::make_unique(this, batteryController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index f83689f892..c2fda93a5e 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -137,22 +137,20 @@ void Tile::UpdateScreen() { void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId, lv_event_t event) { if(obj != btnm1) return; + uint8_t lastPressedButton = lv_btnmatrix_get_active_btn(obj); switch(event){ case LV_EVENT_VALUE_CHANGED: - app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); + app->StartApp(apps[lastPressedButton], DisplayApp::FullRefreshDirections::Up); running = false; break; case LV_EVENT_LONG_PRESSED: - currentFavoriteApp = settingsController.GetFavoriteApp(); - if(buttonId){ - if(currentFavoriteApp == apps[buttonId]){ + if(settingsController.GetFavoriteApp() == apps[lastPressedButton]){ settingsController.SetFavoriteApp(Apps::None); } else{ - settingsController.SetFavoriteApp(apps[buttonId]); + settingsController.SetFavoriteApp(apps[lastPressedButton]); } motorController.RunForDuration(35); - } break; } diff --git a/src/displayapp/screens/Tile.h b/src/displayapp/screens/Tile.h index df372a132a..13111476d9 100644 --- a/src/displayapp/screens/Tile.h +++ b/src/displayapp/screens/Tile.h @@ -52,7 +52,6 @@ namespace Pinetime { const char* btnmMap[8]; Pinetime::Applications::Apps apps[6]; - Pinetime::Applications::Apps currentFavoriteApp = Pinetime::Applications::Apps::None; }; } } diff --git a/src/displayapp/screens/settings/SettingFavoriteApp.cpp b/src/displayapp/screens/settings/SettingFavoriteApp.cpp deleted file mode 100644 index c6c0679ca0..0000000000 --- a/src/displayapp/screens/settings/SettingFavoriteApp.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "SettingFavoriteApp.h" -#include -#include "displayapp/DisplayApp.h" -#include "displayapp/screens/Screen.h" -#include "displayapp/screens/Symbols.h" -#include "displayapp/Apps.h" - -using namespace Pinetime::Applications::Screens; - -namespace { - static void event_handler(lv_obj_t* obj, lv_event_t event) { - SettingFavoriteApp* screen = static_cast(obj->user_data); - screen->UpdateSelected(obj, event); - } -} - -SettingFavoriteApp::SettingFavoriteApp(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) - : Screen(app), settingsController {settingsController} { - - lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); - - // lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); - lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); - lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); - lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); - lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); - - lv_obj_set_pos(container1, 10, 60); - lv_obj_set_width(container1, LV_HOR_RES - 20); - lv_obj_set_height(container1, LV_VER_RES - 50); - lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); - - lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(title, "Favorite app"); - lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); - lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 10, 15); - - lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); - lv_label_set_text_static(icon, Symbols::clock); - lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); - lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); - - for(optionsTotal = 0; optionsTotal < 12; optionsTotal++){ - cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); - lv_checkbox_set_text_static(cbOption[optionsTotal], favoriteNames[optionsTotal]); - cbOption[optionsTotal]->user_data = this; - lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); - if (settingsController.GetFavoriteApp() == favoriteOptions[optionsTotal]) { - lv_checkbox_set_checked(cbOption[optionsTotal], true); - } - } -} - -SettingFavoriteApp::~SettingFavoriteApp() { - lv_obj_clean(lv_scr_act()); - settingsController.SaveSettings(); -} - -void SettingFavoriteApp::UpdateSelected(lv_obj_t* object, lv_event_t event) { - if (event == LV_EVENT_VALUE_CHANGED) { - for (int i = 0; i < optionsTotal; i++) { - lv_checkbox_set_checked(cbOption[i], false); - if (object == cbOption[i]) { - lv_checkbox_set_checked(cbOption[i], true); - settingsController.SetFavoriteApp(favoriteOptions[i]); - } - } - } -} diff --git a/src/displayapp/screens/settings/SettingFavoriteApp.h b/src/displayapp/screens/settings/SettingFavoriteApp.h deleted file mode 100644 index f3327dad48..0000000000 --- a/src/displayapp/screens/settings/SettingFavoriteApp.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include -#include -#include "components/settings/Settings.h" -#include "displayapp/screens/Screen.h" -#include "displayapp/Apps.h" - -namespace Pinetime { - - namespace Applications { - namespace Screens { - - class SettingFavoriteApp : public Screen { - public: - SettingFavoriteApp(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); - ~SettingFavoriteApp() override; - void UpdateSelected(lv_obj_t* object, lv_event_t event); - - private: - Controllers::Settings& settingsController; - uint8_t optionsTotal; - lv_obj_t* cbOption[13]; - Apps favoriteOptions[13] = {Apps::Music,Apps::Navigation,Apps::StopWatch,Apps::Timer,Apps::None,Apps::FlashLight,Apps::Paint,Apps::Paddle,Apps::Twos,Apps::HeartRate,Apps::Metronome,Apps::Motion,Apps::Steps}; - char favoriteNames[13][12] = { "Music","Navigation","Stop Watch","Timer","None","Flash Light","Paint","Paddle","Twos","Heart Rate","Metronome","Motion","Steps"}; - }; - } - } -} diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index 6941119e61..6c55a4f969 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -60,10 +60,10 @@ std::unique_ptr Settings::CreateScreen2() { std::unique_ptr Settings::CreateScreen3() { std::array applications {{ - {Symbols::shoe, "Favorite app", Apps::SettingFavoriteApp}, {Symbols::list, "About", Apps::SysInfo}, {Symbols::batteryHalf, "", Apps::None}, {Symbols::batteryHalf, "", Apps::None}, + {Symbols::batteryHalf, "", Apps::None}, }}; return std::make_unique(2, 3, app, settingsController, applications); From f1c2e4975f48553f3cd6dbac885c5c7452f53fac Mon Sep 17 00:00:00 2001 From: coxtor Date: Mon, 4 Oct 2021 13:48:29 +0200 Subject: [PATCH 07/17] Fix Build --- src/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 209499cdbb..37ee0848bd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -433,7 +433,6 @@ list(APPEND SOURCE_FILES displayapp/screens/settings/SettingDisplay.cpp displayapp/screens/settings/SettingSteps.cpp displayapp/screens/settings/SettingPineTimeStyle.cpp - displayapp/screens/settings/SettingFavoriteApp.cpp ## Watch faces displayapp/icons/bg_clock.c From 1c5a9567b3f9cb5daf40a35cb3bf200824814a9a Mon Sep 17 00:00:00 2001 From: coxtor Date: Mon, 4 Oct 2021 23:04:33 +0200 Subject: [PATCH 08/17] Dont launch app on favorite selection --- src/displayapp/screens/Tile.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index c2fda93a5e..71306f17c3 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -13,7 +13,7 @@ namespace { static void event_handler(lv_obj_t* obj, lv_event_t event) { switch(event){ - case LV_EVENT_VALUE_CHANGED: + case LV_EVENT_SHORT_CLICKED: case LV_EVENT_LONG_PRESSED: Tile* screen = static_cast(obj->user_data); auto* eventDataPtr = (uint32_t*) lv_event_get_data(); @@ -139,19 +139,21 @@ void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId, lv_event_t even if(obj != btnm1) return; uint8_t lastPressedButton = lv_btnmatrix_get_active_btn(obj); switch(event){ - case LV_EVENT_VALUE_CHANGED: + case LV_EVENT_SHORT_CLICKED:{ app->StartApp(apps[lastPressedButton], DisplayApp::FullRefreshDirections::Up); running = false; - break; - case LV_EVENT_LONG_PRESSED: + break;} + case LV_EVENT_LONG_PRESSED:{ if(settingsController.GetFavoriteApp() == apps[lastPressedButton]){ settingsController.SetFavoriteApp(Apps::None); } else{ settingsController.SetFavoriteApp(apps[lastPressedButton]); - } + } + lv_btnmatrix_clear_btn_ctrl_all(btnm1, LV_BTNMATRIX_CTRL_CHECK_STATE); + lv_btnmatrix_set_btn_ctrl(btnm1, lastPressedButton, LV_BTNMATRIX_CTRL_CHECK_STATE); motorController.RunForDuration(35); - break; + break; } } } From c4232bcbf1139fe005432b447f8d8d7477c3d70f Mon Sep 17 00:00:00 2001 From: coxtor Date: Mon, 4 Oct 2021 23:07:29 +0200 Subject: [PATCH 09/17] Opened favorite app should always return to clock --- src/displayapp/DisplayApp.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index e1fa229855..67f9bb95f3 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -227,6 +227,7 @@ void DisplayApp::Refresh() { if(favoriteAppActive){ favoriteAppActive = false; LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::RightAnim); + ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); } else { LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::Up); @@ -244,10 +245,12 @@ void DisplayApp::Refresh() { if (favoriteApp == Apps::None){ if (previousApp != Apps::None) { LoadApp(previousApp, DisplayApp::FullRefreshDirections::LeftAnim); + ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); } } else { LoadApp(favoriteApp, DisplayApp::FullRefreshDirections::LeftAnim); + ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); } break; case TouchEvents::DoubleTap: From 256270fad0e637e7b297deda57c796dcab0e660d Mon Sep 17 00:00:00 2001 From: coxtor Date: Tue, 5 Oct 2021 08:27:18 +0200 Subject: [PATCH 10/17] Fix highlighting bug --- src/displayapp/screens/Tile.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 71306f17c3..5fc87c69aa 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -144,14 +144,14 @@ void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId, lv_event_t even running = false; break;} case LV_EVENT_LONG_PRESSED:{ + lv_btnmatrix_clear_btn_ctrl_all(btnm1, LV_BTNMATRIX_CTRL_CHECK_STATE); if(settingsController.GetFavoriteApp() == apps[lastPressedButton]){ settingsController.SetFavoriteApp(Apps::None); } else{ settingsController.SetFavoriteApp(apps[lastPressedButton]); + lv_btnmatrix_set_btn_ctrl(btnm1, lastPressedButton, LV_BTNMATRIX_CTRL_CHECK_STATE); } - lv_btnmatrix_clear_btn_ctrl_all(btnm1, LV_BTNMATRIX_CTRL_CHECK_STATE); - lv_btnmatrix_set_btn_ctrl(btnm1, lastPressedButton, LV_BTNMATRIX_CTRL_CHECK_STATE); motorController.RunForDuration(35); break; } } From d26407d6b746cfbae51ea038eea46264ba9a19e7 Mon Sep 17 00:00:00 2001 From: coxtor Date: Tue, 5 Oct 2021 08:49:11 +0200 Subject: [PATCH 11/17] fix animation direction --- src/displayapp/DisplayApp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 67f9bb95f3..75241a7406 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -226,7 +226,7 @@ void DisplayApp::Refresh() { case TouchEvents::SwipeUp: if(favoriteAppActive){ favoriteAppActive = false; - LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::RightAnim); + LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::Up); ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); } else { From 353c1235cb4eefd4c415cdf59d7639d29533f5cc Mon Sep 17 00:00:00 2001 From: coxtor Date: Wed, 6 Oct 2021 10:36:59 +0200 Subject: [PATCH 12/17] Allow to set settings as favorite using long press --- src/displayapp/screens/List.cpp | 42 ++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index 064b47a6c1..ef5c8ab30c 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -84,6 +84,9 @@ List::List(uint8_t screenID, labelBt = lv_label_create(itemApps[i], nullptr); lv_label_set_text_fmt(labelBt, " %s", applications[i].name); + if( applications[i].application == settingsController.GetFavoriteApp()){ + lv_btn_set_state(itemApps[i], LV_BTN_STATE_CHECKED_PRESSED); + } } } @@ -99,13 +102,40 @@ List::~List() { } void List::OnButtonEvent(lv_obj_t* object, lv_event_t event) { - if (event == LV_EVENT_CLICKED) { - for (int i = 0; i < MAXLISTITEMS; i++) { - if (apps[i] != Apps::None && object == itemApps[i]) { - app->StartApp(apps[i], DisplayApp::FullRefreshDirections::Up); - running = false; - return; + if ( event == LV_EVENT_SHORT_CLICKED or event == LV_EVENT_LONG_PRESSED) { + switch (event) + { + case LV_EVENT_SHORT_CLICKED: { + for (int i = 0; i < MAXLISTITEMS; i++) { + if (apps[i] != Apps::None && object == itemApps[i]) { + app->StartApp(apps[i], DisplayApp::FullRefreshDirections::Up); + running = false; + return; + } + } + } + break; + case LV_EVENT_LONG_PRESSED:{ + for (int i = 0; i < MAXLISTITEMS; i++) { + lv_btn_set_state(object, LV_BTN_STATE_RELEASED); + if (apps[i] != Apps::None && object == itemApps[i]) { + if(settingsController.GetFavoriteApp() == apps[i]){ + settingsController.SetFavoriteApp(Apps::None); + } + else{ + settingsController.SetFavoriteApp(apps[i]); + lv_btn_set_state(object, LV_BTN_STATE_CHECKED_PRESSED); + } + return; + } } } + break; + default: + break; + } + } + else{ + } } From 3cf5ceaa8799347ab9f7a82f5d4e470655f63242 Mon Sep 17 00:00:00 2001 From: coxtor Date: Thu, 7 Oct 2021 19:57:06 +0000 Subject: [PATCH 13/17] add vibration + fix highlighting bug in settings --- src/displayapp/screens/List.cpp | 6 +++--- src/displayapp/screens/List.h | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index ef5c8ab30c..4e96173077 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -17,7 +17,7 @@ List::List(uint8_t screenID, DisplayApp* app, Controllers::Settings& settingsController, std::array& applications) - : Screen(app), settingsController {settingsController} { + : Screen(app), settingsController {settingsController}, motorController {motorController} { // Set the background to Black lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(0, 0, 0)); @@ -117,7 +117,7 @@ void List::OnButtonEvent(lv_obj_t* object, lv_event_t event) { break; case LV_EVENT_LONG_PRESSED:{ for (int i = 0; i < MAXLISTITEMS; i++) { - lv_btn_set_state(object, LV_BTN_STATE_RELEASED); + lv_btn_set_state(itemApps[i], LV_BTN_STATE_RELEASED); if (apps[i] != Apps::None && object == itemApps[i]) { if(settingsController.GetFavoriteApp() == apps[i]){ settingsController.SetFavoriteApp(Apps::None); @@ -126,9 +126,9 @@ void List::OnButtonEvent(lv_obj_t* object, lv_event_t event) { settingsController.SetFavoriteApp(apps[i]); lv_btn_set_state(object, LV_BTN_STATE_CHECKED_PRESSED); } - return; } } + motorController.RunForDuration(35); } break; default: diff --git a/src/displayapp/screens/List.h b/src/displayapp/screens/List.h index d9f61f2910..74b13f9370 100644 --- a/src/displayapp/screens/List.h +++ b/src/displayapp/screens/List.h @@ -6,6 +6,7 @@ #include "Screen.h" #include "../Apps.h" #include "components/settings/Settings.h" +#include "components/motor/MotorController.h" #define MAXLISTITEMS 4 @@ -32,6 +33,7 @@ namespace Pinetime { private: Controllers::Settings& settingsController; Pinetime::Applications::Apps apps[MAXLISTITEMS]; + Controllers::MotorController& motorController; lv_obj_t* itemApps[MAXLISTITEMS]; From 44e90ec693176a12a49f87d2708529829c6c621a Mon Sep 17 00:00:00 2001 From: coxtor Date: Fri, 8 Oct 2021 09:25:16 +0200 Subject: [PATCH 14/17] Clang format, code cleanup --- src/displayapp/DisplayApp.cpp | 31 +++++---- src/displayapp/DisplayApp.h | 2 +- src/displayapp/screens/List.cpp | 59 ++++++++--------- src/displayapp/screens/Tile.cpp | 66 ++++++++++---------- src/displayapp/screens/Tile.h | 4 +- src/displayapp/screens/settings/Settings.cpp | 8 +-- 6 files changed, 80 insertions(+), 90 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 75241a7406..b9ef92fc59 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -224,12 +224,11 @@ void DisplayApp::Refresh() { if (currentApp == Apps::Clock) { switch (gesture) { case TouchEvents::SwipeUp: - if(favoriteAppActive){ + if (favoriteAppActive) { favoriteAppActive = false; LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::Up); ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); - } - else { + } else { LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::Up); } break; @@ -242,17 +241,16 @@ void DisplayApp::Refresh() { case TouchEvents::SwipeLeft: favoriteApp = settingsController.GetFavoriteApp(); favoriteAppActive = true; - if (favoriteApp == Apps::None){ - if (previousApp != Apps::None) { - LoadApp(previousApp, DisplayApp::FullRefreshDirections::LeftAnim); - ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); - } - } - else { + if (favoriteApp == Apps::None) { + if (previousApp != Apps::None) { + LoadApp(previousApp, DisplayApp::FullRefreshDirections::LeftAnim); + ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); + } + } else { LoadApp(favoriteApp, DisplayApp::FullRefreshDirections::LeftAnim); ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); } - break; + break; case TouchEvents::DoubleTap: PushMessageToSystemTask(System::Messages::GoToSleep); break; @@ -273,11 +271,10 @@ void DisplayApp::Refresh() { PushMessageToSystemTask(System::Messages::GoToSleep); } else { if (!currentScreen->OnButtonPushed()) { - if(favoriteAppActive){ + if (favoriteAppActive) { favoriteAppActive = false; - LoadApp(Apps::Clock,DisplayApp::FullRefreshDirections::RightAnim); - } - else{ + LoadApp(Apps::Clock, DisplayApp::FullRefreshDirections::RightAnim); + } else { LoadApp(returnToApp, returnDirection); } brightnessController.Set(settingsController.GetBrightness()); @@ -407,6 +404,8 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) break; case Apps::SettingPineTimeStyle: currentScreen = std::make_unique(this, settingsController); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); + break; case Apps::BatteryInfo: currentScreen = std::make_unique(this, batteryController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); @@ -452,7 +451,7 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) currentScreen = std::make_unique(this, motionController, settingsController); break; } - if (currentApp != Apps::Clock && currentApp != Apps::Launcher && currentApp != Apps::QuickSettings){ + if (currentApp != Apps::Clock && currentApp != Apps::Launcher && currentApp != Apps::QuickSettings) { previousApp = currentApp; } currentApp = app; diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index ee49458694..5a29bedbc3 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -106,7 +106,7 @@ namespace Pinetime { Apps returnToApp = Apps::None; Apps favoriteApp = Apps::None; bool favoriteAppActive = false; - + FullRefreshDirections returnDirection = FullRefreshDirections::None; TouchEvents returnTouchEvent = TouchEvents::None; diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index 4e96173077..aa78b2aeb7 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -84,9 +84,9 @@ List::List(uint8_t screenID, labelBt = lv_label_create(itemApps[i], nullptr); lv_label_set_text_fmt(labelBt, " %s", applications[i].name); - if( applications[i].application == settingsController.GetFavoriteApp()){ + if (applications[i].application == settingsController.GetFavoriteApp()) { lv_btn_set_state(itemApps[i], LV_BTN_STATE_CHECKED_PRESSED); - } + } } } @@ -102,40 +102,33 @@ List::~List() { } void List::OnButtonEvent(lv_obj_t* object, lv_event_t event) { - if ( event == LV_EVENT_SHORT_CLICKED or event == LV_EVENT_LONG_PRESSED) { - switch (event) - { - case LV_EVENT_SHORT_CLICKED: { - for (int i = 0; i < MAXLISTITEMS; i++) { - if (apps[i] != Apps::None && object == itemApps[i]) { - app->StartApp(apps[i], DisplayApp::FullRefreshDirections::Up); - running = false; - return; + if (event == LV_EVENT_SHORT_CLICKED or event == LV_EVENT_LONG_PRESSED) { + switch (event) { + case LV_EVENT_SHORT_CLICKED: { + for (int i = 0; i < MAXLISTITEMS; i++) { + if (apps[i] != Apps::None && object == itemApps[i]) { + app->StartApp(apps[i], DisplayApp::FullRefreshDirections::Up); + running = false; + return; + } } - } - } - break; - case LV_EVENT_LONG_PRESSED:{ - for (int i = 0; i < MAXLISTITEMS; i++) { - lv_btn_set_state(itemApps[i], LV_BTN_STATE_RELEASED); - if (apps[i] != Apps::None && object == itemApps[i]) { - if(settingsController.GetFavoriteApp() == apps[i]){ - settingsController.SetFavoriteApp(Apps::None); + } break; + case LV_EVENT_LONG_PRESSED: { + for (int i = 0; i < MAXLISTITEMS; i++) { + lv_btn_set_state(itemApps[i], LV_BTN_STATE_RELEASED); + if (apps[i] != Apps::None && object == itemApps[i]) { + if (settingsController.GetFavoriteApp() == apps[i]) { + settingsController.SetFavoriteApp(Apps::None); + } else { + settingsController.SetFavoriteApp(apps[i]); + lv_btn_set_state(object, LV_BTN_STATE_CHECKED_PRESSED); + } } - else{ - settingsController.SetFavoriteApp(apps[i]); - lv_btn_set_state(object, LV_BTN_STATE_CHECKED_PRESSED); - } } - } - motorController.RunForDuration(35); - } - break; - default: - break; + motorController.RunForDuration(35); + } break; + default: + break; } } - else{ - - } } diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 5fc87c69aa..21f632cf80 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -12,15 +12,8 @@ namespace { } static void event_handler(lv_obj_t* obj, lv_event_t event) { - switch(event){ - case LV_EVENT_SHORT_CLICKED: - case LV_EVENT_LONG_PRESSED: - Tile* screen = static_cast(obj->user_data); - auto* eventDataPtr = (uint32_t*) lv_event_get_data(); - uint32_t eventData = *eventDataPtr; - screen->OnValueChangedEvent(obj, eventData, event); - break; - } + Tile* screen = static_cast(obj->user_data); + screen->OnValueChangedEvent(obj, event); } } @@ -31,7 +24,11 @@ Tile::Tile(uint8_t screenID, Pinetime::Controllers::Battery& batteryController, Controllers::DateTime& dateTimeController, std::array& applications) - : Screen(app), batteryController {batteryController}, dateTimeController {dateTimeController}, settingsController {settingsController}, motorController {motorController} { + : Screen(app), + batteryController {batteryController}, + dateTimeController {dateTimeController}, + settingsController {settingsController}, + motorController {motorController} { settingsController.SetAppMenu(screenID); @@ -79,10 +76,10 @@ Tile::Tile(uint8_t screenID, if (applications[i].application == Apps::None) { btnmMap[btIndex] = " "; } else { - if (applications[i].application == settingsController.GetFavoriteApp()){ + if (applications[i].application == settingsController.GetFavoriteApp()) { favoriteIndex = i; } - btnmMap[btIndex] = applications[i].icon; + btnmMap[btIndex] = applications[i].icon; } btIndex++; apps[i] = applications[i].application; @@ -101,11 +98,11 @@ Tile::Tile(uint8_t screenID, lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, lv_color_hex(0x111111)); lv_obj_set_style_local_pad_all(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 0); lv_obj_set_style_local_pad_inner(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 10); - - if (favoriteIndex != -1){ + + if (favoriteIndex != -1) { lv_btnmatrix_set_btn_ctrl(btnm1, favoriteIndex, LV_BTNMATRIX_CTRL_CHECK_STATE); } - + for (uint8_t i = 0; i < 6; i++) { lv_btnmatrix_set_btn_ctrl(btnm1, i, LV_BTNMATRIX_CTRL_CLICK_TRIG); if (applications[i].application == Apps::None) { @@ -135,25 +132,26 @@ void Tile::UpdateScreen() { lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); } -void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId, lv_event_t event) { - if(obj != btnm1) return; +void Tile::OnValueChangedEvent(lv_obj_t* obj, lv_event_t event) { + if (obj != btnm1) + return; uint8_t lastPressedButton = lv_btnmatrix_get_active_btn(obj); - switch(event){ - case LV_EVENT_SHORT_CLICKED:{ - app->StartApp(apps[lastPressedButton], DisplayApp::FullRefreshDirections::Up); - running = false; - break;} - case LV_EVENT_LONG_PRESSED:{ - lv_btnmatrix_clear_btn_ctrl_all(btnm1, LV_BTNMATRIX_CTRL_CHECK_STATE); - if(settingsController.GetFavoriteApp() == apps[lastPressedButton]){ - settingsController.SetFavoriteApp(Apps::None); - } - else{ - settingsController.SetFavoriteApp(apps[lastPressedButton]); - lv_btnmatrix_set_btn_ctrl(btnm1, lastPressedButton, LV_BTNMATRIX_CTRL_CHECK_STATE); - } - motorController.RunForDuration(35); - break; } + switch (event) { + case LV_EVENT_SHORT_CLICKED: { + app->StartApp(apps[lastPressedButton], DisplayApp::FullRefreshDirections::Up); + running = false; + break; + } + case LV_EVENT_LONG_PRESSED: { + lv_btnmatrix_clear_btn_ctrl_all(btnm1, LV_BTNMATRIX_CTRL_CHECK_STATE); + if (settingsController.GetFavoriteApp() == apps[lastPressedButton]) { + settingsController.SetFavoriteApp(Apps::None); + } else { + settingsController.SetFavoriteApp(apps[lastPressedButton]); + lv_btnmatrix_set_btn_ctrl(btnm1, lastPressedButton, LV_BTNMATRIX_CTRL_CHECK_STATE); + } + motorController.RunForDuration(35); + break; + } } - } diff --git a/src/displayapp/screens/Tile.h b/src/displayapp/screens/Tile.h index 13111476d9..25b7fc14fd 100644 --- a/src/displayapp/screens/Tile.h +++ b/src/displayapp/screens/Tile.h @@ -32,14 +32,14 @@ namespace Pinetime { ~Tile() override; void UpdateScreen(); - void OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId, lv_event_t event); + void OnValueChangedEvent(lv_obj_t* obj, lv_event_t event); private: Pinetime::Controllers::Battery& batteryController; Controllers::DateTime& dateTimeController; Controllers::Settings& settingsController; Controllers::MotorController& motorController; - + lv_task_t* taskUpdate; lv_obj_t* label_time; diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index 6c55a4f969..e3319f030a 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -61,10 +61,10 @@ std::unique_ptr Settings::CreateScreen3() { std::array applications {{ {Symbols::list, "About", Apps::SysInfo}, - {Symbols::batteryHalf, "", Apps::None}, - {Symbols::batteryHalf, "", Apps::None}, - {Symbols::batteryHalf, "", Apps::None}, + {Symbols::none, "None", Apps::None}, + {Symbols::none, "None", Apps::None}, + {Symbols::none, "None", Apps::None}, }}; return std::make_unique(2, 3, app, settingsController, applications); -} \ No newline at end of file +} From 49b9320be2e8921bde6fa2bb118ac729a1e618c7 Mon Sep 17 00:00:00 2001 From: coxtor Date: Fri, 8 Oct 2021 10:48:13 +0200 Subject: [PATCH 15/17] Fix crashing issue --- src/displayapp/screens/List.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index aa78b2aeb7..2608be6a43 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -115,13 +115,15 @@ void List::OnButtonEvent(lv_obj_t* object, lv_event_t event) { } break; case LV_EVENT_LONG_PRESSED: { for (int i = 0; i < MAXLISTITEMS; i++) { - lv_btn_set_state(itemApps[i], LV_BTN_STATE_RELEASED); + if (apps[i] != Apps::None) { + lv_btn_set_state(itemApps[i], LV_BTN_STATE_RELEASED); + } if (apps[i] != Apps::None && object == itemApps[i]) { if (settingsController.GetFavoriteApp() == apps[i]) { settingsController.SetFavoriteApp(Apps::None); } else { settingsController.SetFavoriteApp(apps[i]); - lv_btn_set_state(object, LV_BTN_STATE_CHECKED_PRESSED); + lv_btn_set_state(itemApps[i], LV_BTN_STATE_CHECKED_PRESSED); } } } From fc24c60c8412d80991356272de3ad621aea52973 Mon Sep 17 00:00:00 2001 From: coxtor Date: Fri, 8 Oct 2021 11:41:30 +0200 Subject: [PATCH 16/17] simplify highlighting mechanism --- src/displayapp/screens/Tile.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 21f632cf80..bd1dc0ef17 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -68,7 +68,6 @@ Tile::Tile(uint8_t screenID, lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } - uint8_t favoriteIndex = -1; uint8_t btIndex = 0; for (uint8_t i = 0; i < 6; i++) { if (i == 3) @@ -76,9 +75,6 @@ Tile::Tile(uint8_t screenID, if (applications[i].application == Apps::None) { btnmMap[btIndex] = " "; } else { - if (applications[i].application == settingsController.GetFavoriteApp()) { - favoriteIndex = i; - } btnmMap[btIndex] = applications[i].icon; } btIndex++; @@ -99,14 +95,12 @@ Tile::Tile(uint8_t screenID, lv_obj_set_style_local_pad_all(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 0); lv_obj_set_style_local_pad_inner(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 10); - if (favoriteIndex != -1) { - lv_btnmatrix_set_btn_ctrl(btnm1, favoriteIndex, LV_BTNMATRIX_CTRL_CHECK_STATE); - } - for (uint8_t i = 0; i < 6; i++) { lv_btnmatrix_set_btn_ctrl(btnm1, i, LV_BTNMATRIX_CTRL_CLICK_TRIG); if (applications[i].application == Apps::None) { lv_btnmatrix_set_btn_ctrl(btnm1, i, LV_BTNMATRIX_CTRL_DISABLED); + } else if (applications[i].application == settingsController.GetFavoriteApp()) { + lv_btnmatrix_set_btn_ctrl(btnm1, i, LV_BTNMATRIX_CTRL_CHECK_STATE); } } From a3eee0a1b6f82b327d90097482160d61c6d030ad Mon Sep 17 00:00:00 2001 From: coxtor Date: Fri, 8 Oct 2021 11:56:20 +0200 Subject: [PATCH 17/17] Blacklist certain apps from lastused app feature --- src/displayapp/DisplayApp.cpp | 3 ++- src/displayapp/DisplayApp.h | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 71ba17c4fc..fff0518210 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -438,7 +438,8 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) currentScreen = std::make_unique(this, motionController, settingsController); break; } - if (currentApp != Apps::Clock && currentApp != Apps::Launcher && currentApp != Apps::QuickSettings) { + Apps* NotBlacklistedReturnApp = std::find(std::begin(blackListReturnApps), std::end(blackListReturnApps), currentApp); + if (NotBlacklistedReturnApp == std::end(blackListReturnApps)) { previousApp = currentApp; } currentApp = app; diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index db97d58539..a67d19cf51 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -119,6 +119,13 @@ namespace Pinetime { void PushMessageToSystemTask(Pinetime::System::Messages message); Apps nextApp = Apps::None; + Apps blackListReturnApps[7] = {Apps::Clock, + Apps::Launcher, + Apps::QuickSettings, + Apps::Notifications, + Apps::NotificationsPreview, + Apps::Settings, + Apps::QuickSettings}; DisplayApp::FullRefreshDirections nextDirection; }; }