summaryrefslogtreecommitdiff
path: root/src/components/settings
diff options
context:
space:
mode:
authorKozova1 <30871100+Kozova1@users.noreply.github.com>2021-07-14 21:51:51 +0300
committerGitHub <noreply@github.com>2021-07-14 20:51:51 +0200
commit57b339707861c5688f5d432f1506a99df6bb0fce (patch)
tree9c150bcef37892b43dac8e7ad820e51eed615f71 /src/components/settings
parent7133287b76dae9d97a88bed5c5ca1976e507826d (diff)
Multiple wakeup sources (#290)
* Allow multiple wakeup modes at the same time. This commit adds multiple wakeup modes support. It does so by storing them as a uint8_t bitfield enum. It changes the following functions: Since multiple modes can be on now, older version would not cut it: WakeUpMode getWakeupMode() -> std::bitset<3> getWakeUpModes() Where each bit corresponds to a WakeUpMode We still need a way to check whether a specific wakeup mode is on, so: bool isWakeUpModeOn(const WakeUpMode mode) This function was changed to work correctly with the new implementation. setWakeUpMode(WakeupMode mode, bool enable) Previously, systemtask would exit SystemTask::OnTouchEvent() if the wake up mode was None or RaiseWrist, to prevent waking up when a touch was received. However, after enabling using multiple WakeUpModes, this caused a bug where when RaiseWrist was checked with SingleTap or DoubleTap, the tap detection wouldn't work. This commit fixes that bug. Next commit will update the settings WakeUpMode select UI to reflect these changes. Signed-off-by: Kozova1 <mug66kk@gmail.com> * Updated UI to reflect multiple WakeUp sources being available. Signed-off-by: Kozova1 <mug66kk@gmail.com>
Diffstat (limited to 'src/components/settings')
-rw-r--r--src/components/settings/Settings.h39
1 files changed, 31 insertions, 8 deletions
diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h
index 577455eb..93d6d217 100644
--- a/src/components/settings/Settings.h
+++ b/src/components/settings/Settings.h
@@ -1,5 +1,6 @@
#pragma once
#include <cstdint>
+#include <bitset>
#include "components/datetime/DateTimeController.h"
#include "components/brightness/BrightnessController.h"
#include "components/fs/FS.h"
@@ -11,7 +12,11 @@ namespace Pinetime {
public:
enum class ClockType : uint8_t { H24, H12 };
enum class Vibration : uint8_t { ON, OFF };
- enum class WakeUpMode : uint8_t { None, SingleTap, DoubleTap, RaiseWrist };
+ enum class WakeUpMode : uint8_t {
+ SingleTap = 0,
+ DoubleTap = 1,
+ RaiseWrist = 2,
+ };
Settings(Pinetime::Controllers::FS& fs);
@@ -72,15 +77,33 @@ namespace Pinetime {
return settings.screenTimeOut;
};
- void setWakeUpMode(WakeUpMode wakeUp) {
- if (wakeUp != settings.wakeUpMode) {
+ void setWakeUpMode(WakeUpMode wakeUp, bool enabled) {
+ if (!isWakeUpModeOn(wakeUp)) {
settingsChanged = true;
}
- settings.wakeUpMode = wakeUp;
+ settings.wakeUpMode.set(static_cast<size_t>(wakeUp), enabled);
+ // Handle special behavior
+ if (enabled) {
+ switch (wakeUp) {
+ case WakeUpMode::SingleTap:
+ settings.wakeUpMode.set(static_cast<size_t>(WakeUpMode::DoubleTap), false);
+ break;
+ case WakeUpMode::DoubleTap:
+ settings.wakeUpMode.set(static_cast<size_t>(WakeUpMode::SingleTap), false);
+ break;
+ case WakeUpMode::RaiseWrist:
+ break;
+ }
+ }
};
- WakeUpMode getWakeUpMode() const {
+
+ std::bitset<3> getWakeUpModes() const {
return settings.wakeUpMode;
- };
+ }
+
+ bool isWakeUpModeOn(const WakeUpMode mode) const {
+ return getWakeUpModes()[static_cast<size_t>(mode)];
+ }
void SetBrightness(Controllers::BrightnessController::Levels level) {
if (level != settings.brightLevel) {
@@ -116,7 +139,7 @@ namespace Pinetime {
uint8_t clockFace = 0;
- WakeUpMode wakeUpMode = WakeUpMode::None;
+ std::bitset<3> wakeUpMode {0};
Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium;
};
@@ -131,4 +154,4 @@ namespace Pinetime {
void SaveSettingsToFile();
};
}
-} \ No newline at end of file
+}