feat(runtime)!: sys.startApp replaces routing, history and app identity
The runtime kept a back stack, a launcher fallback, an app id and a title because a teardown destroys the Lua that would otherwise hold them. Only the first of those is true: everything about where an app came from can ride in the arguments, and the arguments are the one value that has to outlive the VM. So the runtime now does four things -- close the state, load a path, hand the next state its arguments, defer the swap to a batch boundary -- and sys.startApp(path, args) is the whole of navigation. Routing, history, titles and data directories move to the Lua file a firmware boots, where they can differ per product without a flag on Runtime. Arguments cross as JSON, encoded while the sending state still holds the table, so a function or a cycle raises at the call rather than stranding a launch. start(args) receives the decoded table, or nil at boot, which is how the entry file knows to open its own launcher. Removes launch, replace, back, canGoBack, getAppID, getAppTitle, setAppTitle and getAppDataPath, along with the home and data fields. LANDSCAPE.md goes with them: it recorded a divergence from firmwares that have since migrated.
This commit is contained in:
@@ -2,10 +2,10 @@
|
||||
|
||||
-- Generated from native/src/runtime/runtime.cpp. Do not edit.
|
||||
|
||||
-- The firmware loads /.lua/main.lua into every fresh state and calls these on the
|
||||
-- table it returns. Where apps live, what surrounds them and which of these an app
|
||||
-- itself sees are all main.lua's to decide, which is why an app composes the
|
||||
-- classes for the features it handles:
|
||||
-- The firmware loads the path it was booted with into every fresh state and calls
|
||||
-- these on the table it returns. Where apps live, what surrounds them and which of
|
||||
-- these an app itself sees are all that file's to decide, which is why an app
|
||||
-- composes the classes for the features it handles:
|
||||
--
|
||||
-- ---@class PaintApp : App, TouchHandlers
|
||||
--
|
||||
@@ -14,7 +14,5 @@
|
||||
-- Timer callbacks are registered directly with timer.after/every.
|
||||
|
||||
---@class App
|
||||
---@field home? string The route sys.back() lands on once history is empty.
|
||||
---@field data? string The sys.getAppDataPath() template whose ? is the app id.
|
||||
---@field start fun(route: string, arg?: string) Required. Mounts the route; failing here leaves no app running.
|
||||
---@field start fun(args?: table) Required. Mounts whatever the arguments describe; failing here leaves no app running.
|
||||
---@field draw? fun(deltaMs: integer) Optional frame loop, called once after start and then at most 30 FPS, best effort.
|
||||
|
||||
+4
-32
@@ -20,38 +20,10 @@ function sys.hasFeature(feature) end
|
||||
---@return integer
|
||||
function sys.getMillis() end
|
||||
|
||||
---Returns the immutable first path component of the running app.
|
||||
---@return string
|
||||
function sys.getAppID() end
|
||||
|
||||
---Returns the running app title, initially the app ID.
|
||||
---@return string
|
||||
function sys.getAppTitle() end
|
||||
|
||||
---Returns the current app's guaranteed-existing persistent data directory.
|
||||
---@return string Absolute path under /.lua/data, preserved across app updates.
|
||||
function sys.getAppDataPath() end
|
||||
|
||||
---Changes the running app's display title.
|
||||
---@param title string
|
||||
function sys.setAppTitle(title) end
|
||||
|
||||
---Launches a route, which main.lua resolves, and pushes the current one.
|
||||
---@param path string App-relative route; traversal is rejected.
|
||||
---@param arg? string Passed to main.start(route, arg).
|
||||
function sys.launch(path, arg) end
|
||||
|
||||
---Launches a route without retaining the current one.
|
||||
---@param path string App-relative route; traversal is rejected.
|
||||
---@param arg? string Passed to main.start(route, arg).
|
||||
function sys.replace(path, arg) end
|
||||
|
||||
---Returns to the previous app, or the launcher when history is empty.
|
||||
function sys.back() end
|
||||
|
||||
---Whether sys.back() would return somewhere rather than land on the launcher, which is what chrome needs to decide whether to offer a back control.
|
||||
---@return boolean
|
||||
function sys.canGoBack() end
|
||||
---Tears the runtime down and starts over from a Lua file, which is the only navigation there is: history, titles and where apps live are whatever that file makes of the arguments.
|
||||
---@param path string Absolute path to the Lua file to load; traversal is rejected.
|
||||
---@param args? table Plain data, carried across the teardown as JSON and handed to start(args). Raises on anything JSON cannot represent.
|
||||
function sys.startApp(path, args) end
|
||||
|
||||
---Returns heap statistics.
|
||||
---@return integer freeBytes
|
||||
|
||||
Reference in New Issue
Block a user