feat(app): allow external apps to hide statusbar via manifest flags
- Add parseAppFlagsString() in AppManifestParsing.cpp to parse comma-separated flags (HideStatusBar, Hidden, None) - Parse [app]flags in V1 and app.flags in V2 manifests - Loader already supports HideStatusBar, GuiService hides statusbarWidget when set - Enables fullscreen for ELF apps (e.g. BibleVerse, BookPlayer) without firmware recompilation of internal manifests - Add tests for flag parsing (38 tests passing) - Tested on es3c28p /dev/cu.usbmodem1101 @ 192.168.68.133 with HelloWorld app
This commit is contained in:
@@ -81,3 +81,70 @@ TEST_CASE("parseManifestV2() should fail when the app id is invalid") {
|
||||
AppManifest manifest;
|
||||
CHECK_EQ(parseManifestV2(properties, manifest), false);
|
||||
}
|
||||
|
||||
TEST_CASE("parseAppFlagsString() should parse various flag combinations") {
|
||||
CHECK_EQ(parseAppFlagsString(""), 0);
|
||||
CHECK_EQ(parseAppFlagsString("None"), 0);
|
||||
CHECK_EQ(parseAppFlagsString("HideStatusBar"), AppManifest::Flags::HideStatusBar);
|
||||
CHECK_EQ(parseAppFlagsString("hidden"), AppManifest::Flags::Hidden);
|
||||
CHECK_EQ(parseAppFlagsString("HideStatusBar,Hidden"), AppManifest::Flags::HideStatusBar | AppManifest::Flags::Hidden);
|
||||
CHECK_EQ(parseAppFlagsString(" hidestatusbar , hidden "), AppManifest::Flags::HideStatusBar | AppManifest::Flags::Hidden);
|
||||
CHECK_EQ(parseAppFlagsString("HideStatusBar, Hidden"), AppManifest::Flags::HideStatusBar | AppManifest::Flags::Hidden);
|
||||
}
|
||||
|
||||
TEST_CASE("parseManifest() should parse V1 flags for fullscreen") {
|
||||
TestFile file("test-manifest-v1-flags.properties");
|
||||
file.writeData(
|
||||
"[manifest]\n"
|
||||
"version=0.1\n"
|
||||
"[target]\n"
|
||||
"sdk=0.0.0\n"
|
||||
"platforms=esp32\n"
|
||||
"[app]\n"
|
||||
"id=one.tactility.sdktest\n"
|
||||
"versionName=0.1.0\n"
|
||||
"versionCode=1\n"
|
||||
"name=SDK Test\n"
|
||||
"flags=HideStatusBar\n"
|
||||
);
|
||||
|
||||
AppManifest manifest;
|
||||
CHECK_EQ(parseManifest(file.getPath(), manifest), true);
|
||||
CHECK_EQ(manifest.appFlags & AppManifest::Flags::HideStatusBar, AppManifest::Flags::HideStatusBar);
|
||||
}
|
||||
|
||||
TEST_CASE("parseManifest() should parse V2 flags for fullscreen") {
|
||||
TestFile file("test-manifest-v2-flags.properties");
|
||||
file.writeData(
|
||||
"manifest.version=0.1\n"
|
||||
"target.sdk=0.0.0\n"
|
||||
"target.platforms=esp32\n"
|
||||
"app.id=one.tactility.sdktest\n"
|
||||
"app.version.name=0.1.0\n"
|
||||
"app.version.code=1\n"
|
||||
"app.name=SDK Test\n"
|
||||
"app.flags=HideStatusBar\n"
|
||||
);
|
||||
|
||||
AppManifest manifest;
|
||||
CHECK_EQ(parseManifest(file.getPath(), manifest), true);
|
||||
CHECK_EQ(manifest.appFlags & AppManifest::Flags::HideStatusBar, AppManifest::Flags::HideStatusBar);
|
||||
}
|
||||
|
||||
TEST_CASE("parseManifest() should parse combined flags") {
|
||||
TestFile file("test-manifest-v2-flags2.properties");
|
||||
file.writeData(
|
||||
"manifest.version=0.1\n"
|
||||
"target.sdk=0.0.0\n"
|
||||
"target.platforms=esp32\n"
|
||||
"app.id=one.tactility.sdktest\n"
|
||||
"app.version.name=0.1.0\n"
|
||||
"app.version.code=1\n"
|
||||
"app.name=SDK Test\n"
|
||||
"app.flags=HideStatusBar,Hidden\n"
|
||||
);
|
||||
|
||||
AppManifest manifest;
|
||||
CHECK_EQ(parseManifest(file.getPath(), manifest), true);
|
||||
CHECK_EQ(manifest.appFlags, (AppManifest::Flags::HideStatusBar | AppManifest::Flags::Hidden));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user