Public Access
Fn+h on any screen, text fields included, and ? outside Text Entry, open a panel over the content area: the screen's own keys, then the ones that work everywhere. Every App declares its keys for the state it is in (pages, viewers, dialogs and text fields answer for themselves); the App manager opens the panel and takes every key while it is open. About 30 hint lines are gone, from every App. What stays on a screen is state. The first-start Setup keeps its hints and teaches the key; a device set up before gets one Toast, once. The guide and the FAQ open with it. `key help` over the consoles. 476 host tests (8 new). Checked on the device with key help and screenshots: the Launcher, all nine Apps and several of their states. 8.5 KB of flash and 40 bytes of static RAM. Decisions Q196 to Q203 in docs/milestones/U1.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
30 lines
770 B
C++
30 lines
770 B
C++
#pragma once
|
|
|
|
#include "app.h"
|
|
#include "app_manager.h"
|
|
#include "list_model.h"
|
|
#include "setup_wizard.h"
|
|
#include "ui/theme.h"
|
|
|
|
namespace roro {
|
|
|
|
// First-boot setup, run as a modal App until finished.
|
|
class SetupApp : public App {
|
|
public:
|
|
SetupApp(Settings& settings, AppManager& apps);
|
|
bool onKey(const KeyEvent& e) override;
|
|
bool textEntryActive() const override {
|
|
return wizard_.step() == SetupWizard::Step::LongName || wizard_.step() == SetupWizard::Step::ShortName;
|
|
}
|
|
void draw(Canvas& c) override;
|
|
void help(std::vector<KeyHelp>& out) const override;
|
|
const char* helpTitle() const override { return "Setup"; }
|
|
|
|
private:
|
|
AppManager& apps_;
|
|
SetupWizard wizard_;
|
|
ListModel choices_{4};
|
|
};
|
|
|
|
} // namespace roro
|