config: Add support for custom web apps dir
We need to be able to customize the set of default installed web apps in
Chrome per device model. In model.yaml files, it is already possible to
specify a "extra web apps dir", which gets transformed into an ash flag
at build time (see crrev.com/c/2750846).
This CL adds the same mechanism to the new style of Starlark
configuration. Individual configs can specify a directory name, which
will be converted into an ash flag by cros_config_proto_converter.
This new configuration is added to a new 'ui_config' proto, which is
intended to roughly match the structure of the fields in model.yaml.
BUG=chromium:1182481
TEST=./run_py_unittests.sh
Change-Id: I8a8c0df81b9c1f64e849bfb793b8351c95873d23
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/config/+/2810579
Commit-Queue: Tim Sergeant <tsergeant@chromium.org>
Reviewed-by: Andrew Lamb <andrewlamb@chromium.org>
(cherry picked from commit 7a02246586a1f96c8bc5978f78e01ded9758ea8d)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/config/+/2845650
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
diff --git a/go/api/software/software_config.pb.go b/go/api/software/software_config.pb.go
index f0c1465..5ac1d42 100644
--- a/go/api/software/software_config.pb.go
+++ b/go/api/software/software_config.pb.go
@@ -34,7 +34,7 @@
// SoftwareConfig payloads can be shared across different
// hardware-design-configs, if the software payloads are the same.
//
-// NEXT ID: 17
+// NEXT ID: 18
type SoftwareConfig struct {
// Configures fields of AudioConfig that are made public.
PublicReplication *public_replication.PublicReplication `protobuf:"bytes,12,opt,name=public_replication,json=publicReplication,proto3" json:"public_replication,omitempty"`
@@ -56,6 +56,7 @@
AudioConfigs []*AudioConfig `protobuf:"bytes,10,rep,name=audio_configs,json=audioConfigs,proto3" json:"audio_configs,omitempty"`
WifiConfig *WifiConfig `protobuf:"bytes,11,opt,name=wifi_config,json=wifiConfig,proto3" json:"wifi_config,omitempty"`
CameraConfig *CameraConfig `protobuf:"bytes,15,opt,name=camera_config,json=cameraConfig,proto3" json:"camera_config,omitempty"`
+ UiConfig *UiConfig `protobuf:"bytes,17,opt,name=ui_config,json=uiConfig,proto3" json:"ui_config,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -177,6 +178,13 @@
return nil
}
+func (m *SoftwareConfig) GetUiConfig() *UiConfig {
+ if m != nil {
+ return m.UiConfig
+ }
+ return nil
+}
+
func init() {
proto.RegisterType((*SoftwareConfig)(nil), "chromiumos.config.api.software.SoftwareConfig")
}
@@ -186,43 +194,45 @@
}
var fileDescriptor_a5bdb966d9171747 = []byte{
- // 607 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0x5f, 0x6b, 0xdb, 0x3c,
- 0x14, 0xc6, 0x69, 0x9b, 0xb7, 0x4d, 0x95, 0x3f, 0x75, 0xd5, 0xbe, 0x43, 0xe4, 0x62, 0x94, 0xb2,
- 0xb1, 0xad, 0xeb, 0xec, 0xb5, 0xdd, 0xd8, 0xd5, 0x60, 0x4b, 0xc7, 0x20, 0x19, 0x6c, 0xa9, 0x33,
- 0x18, 0x74, 0x94, 0xa0, 0xd8, 0xb2, 0x2b, 0x88, 0x23, 0x63, 0x2b, 0x84, 0x7c, 0xad, 0x7d, 0xc2,
- 0x91, 0x63, 0x25, 0x91, 0x6c, 0x13, 0xef, 0xce, 0x3a, 0x3a, 0xcf, 0xef, 0x1c, 0xc9, 0x47, 0x0f,
- 0x7a, 0xe7, 0x3d, 0x26, 0x22, 0xe2, 0xb3, 0x48, 0xa4, 0x8e, 0x27, 0xa6, 0x01, 0x0f, 0x1d, 0x1a,
- 0x73, 0x27, 0x15, 0x81, 0x9c, 0xd3, 0x84, 0xad, 0x3f, 0x46, 0xd9, 0xa6, 0x1d, 0x27, 0x42, 0x0a,
- 0xfc, 0x74, 0xa3, 0xb2, 0xd5, 0x06, 0x8d, 0xb9, 0xbd, 0x4a, 0xee, 0x9c, 0x6b, 0xd4, 0xf1, 0x8c,
- 0x4f, 0x7c, 0x80, 0x06, 0xd4, 0x93, 0x22, 0x59, 0x64, 0x8c, 0xce, 0x45, 0x79, 0x0e, 0x4f, 0xa2,
- 0x42, 0xbd, 0xce, 0x8b, 0xd2, 0xdc, 0x74, 0x91, 0x4a, 0x16, 0x8d, 0x78, 0x44, 0x43, 0xa6, 0x12,
- 0x2f, 0xcb, 0x8f, 0xe3, 0xb3, 0x94, 0x87, 0x53, 0xc5, 0x1c, 0x71, 0x5f, 0x65, 0x5f, 0x55, 0x1c,
- 0x9e, 0xce, 0x7c, 0x2e, 0xcc, 0x4e, 0xde, 0x57, 0x48, 0xc6, 0x93, 0x19, 0x93, 0x42, 0xc8, 0x47,
- 0x53, 0xd6, 0xab, 0x90, 0xc1, 0x36, 0x13, 0xa9, 0x52, 0x39, 0xdc, 0x67, 0x53, 0xc9, 0xe5, 0x62,
- 0x94, 0x7a, 0x74, 0x6a, 0xa2, 0xaa, 0x9a, 0x8e, 0xc5, 0x9c, 0x25, 0xa6, 0xe4, 0x6d, 0x85, 0x64,
- 0xce, 0x03, 0x6e, 0x2a, 0xae, 0xab, 0xfa, 0xa5, 0x11, 0x4b, 0xa8, 0xa9, 0xf9, 0x58, 0xd4, 0xc4,
- 0xb3, 0xf1, 0x84, 0x7b, 0xa3, 0x84, 0xc5, 0x13, 0xee, 0x51, 0xc9, 0xc5, 0xb4, 0x24, 0x94, 0xc9,
- 0xcf, 0xff, 0x1c, 0xa2, 0xf6, 0x50, 0xf1, 0x6f, 0x41, 0x8e, 0x03, 0x84, 0x8b, 0xe9, 0xa4, 0x79,
- 0xb6, 0xf3, 0xb2, 0x71, 0xfd, 0xc1, 0x2e, 0xce, 0x60, 0x09, 0x7b, 0x00, 0x21, 0x77, 0x13, 0x71,
- 0x8f, 0xe3, 0x7c, 0x08, 0xff, 0x40, 0x56, 0x7e, 0x42, 0xc8, 0x01, 0x54, 0x79, 0x6e, 0x97, 0x4f,
- 0xfa, 0x17, 0x48, 0xcf, 0xda, 0xec, 0xf9, 0x6e, 0xdb, 0x37, 0xd6, 0x78, 0x8e, 0xda, 0xdc, 0xd7,
- 0xff, 0x1d, 0xa9, 0x03, 0xee, 0xce, 0xde, 0xfe, 0x70, 0xec, 0xdc, 0x1c, 0xd8, 0x3d, 0x35, 0x07,
- 0x43, 0x8f, 0x2a, 0x7a, 0xbe, 0x74, 0x93, 0xfb, 0x9b, 0x4d, 0xfc, 0x09, 0xd5, 0x57, 0x2f, 0x88,
- 0xec, 0x41, 0xc9, 0x67, 0x7a, 0x49, 0x78, 0x3b, 0x50, 0xf1, 0xab, 0xca, 0xca, 0x74, 0xee, 0x5a,
- 0x85, 0x1f, 0xd0, 0xff, 0xeb, 0x37, 0x08, 0xe9, 0xab, 0x13, 0x1c, 0x02, 0xee, 0xd5, 0x76, 0x5c,
- 0x77, 0x19, 0x51, 0xcc, 0x93, 0xa0, 0x18, 0xc4, 0x14, 0x3d, 0xc9, 0xe1, 0x25, 0x4d, 0x42, 0x26,
- 0x53, 0x62, 0x01, 0xff, 0xf5, 0x76, 0xbe, 0x0d, 0xac, 0x9f, 0x99, 0xc4, 0x3d, 0x35, 0x2a, 0xa8,
- 0x28, 0x7e, 0x40, 0x27, 0xca, 0x19, 0xf4, 0x02, 0xa4, 0x05, 0xfc, 0x37, 0xe5, 0xfc, 0x21, 0x08,
- 0x7a, 0xe0, 0x24, 0x1a, 0xcc, 0x3d, 0xce, 0x48, 0x5a, 0x08, 0xff, 0x46, 0xa7, 0xca, 0xc8, 0x4c,
- 0x7e, 0x7b, 0xeb, 0xfd, 0x28, 0xeb, 0xd3, 0xd9, 0x58, 0x61, 0x74, 0xf8, 0x3d, 0xb2, 0xf2, 0x0e,
- 0x42, 0x6a, 0x00, 0x76, 0xaa, 0x46, 0xa7, 0xbb, 0xd2, 0xa9, 0xeb, 0x3f, 0x1a, 0x9b, 0x01, 0xfc,
- 0x1d, 0x35, 0x75, 0x6f, 0x20, 0xff, 0x15, 0x2f, 0xbc, 0x8c, 0x3b, 0x58, 0x6a, 0x14, 0xb3, 0x11,
- 0x6f, 0x16, 0x78, 0x80, 0x5a, 0xba, 0x41, 0xa6, 0x04, 0x9d, 0xed, 0xfd, 0x0b, 0xf0, 0xf3, 0x52,
- 0xa4, 0x80, 0x4d, 0xba, 0x59, 0xa4, 0xf8, 0x1b, 0x6a, 0x68, 0x56, 0x44, 0x1a, 0xd0, 0xe0, 0x45,
- 0x15, 0xef, 0x17, 0x0f, 0xb8, 0xc2, 0xa1, 0xf9, 0xfa, 0x1b, 0xdf, 0xa1, 0x96, 0xe1, 0x52, 0xe4,
- 0x08, 0x70, 0x97, 0x55, 0xb8, 0x5b, 0x10, 0xad, 0xfa, 0xf3, 0xb4, 0x55, 0xbf, 0x56, 0xdf, 0xb1,
- 0x76, 0xfb, 0xb5, 0xfa, 0xae, 0xb5, 0xd7, 0xaf, 0xd5, 0xf7, 0xad, 0x83, 0xee, 0xcd, 0xfd, 0x55,
- 0x28, 0xd6, 0x44, 0x5b, 0x24, 0xa1, 0x53, 0x74, 0xc1, 0x50, 0x18, 0xe6, 0x39, 0xde, 0x07, 0xc3,
- 0xbb, 0xf9, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xb7, 0x25, 0x6a, 0xa0, 0x7c, 0x07, 0x00, 0x00,
+ // 629 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xdf, 0x6f, 0xd3, 0x30,
+ 0x10, 0xc7, 0xb5, 0xad, 0x6c, 0x99, 0xdb, 0x75, 0x99, 0x37, 0x90, 0xb5, 0x07, 0x34, 0x4d, 0x20,
+ 0xc6, 0x18, 0x09, 0xdb, 0x40, 0x3c, 0x21, 0x41, 0x07, 0x48, 0x2d, 0x12, 0x74, 0x29, 0x08, 0x69,
+ 0x68, 0xaa, 0xdc, 0xfc, 0x9a, 0xa5, 0xa6, 0x8e, 0xf2, 0x43, 0x55, 0xff, 0x74, 0xde, 0x50, 0x2f,
+ 0x4e, 0x6a, 0x27, 0x51, 0xc3, 0x5b, 0x7c, 0xbe, 0xef, 0xe7, 0xce, 0x8e, 0xef, 0x8b, 0xde, 0xda,
+ 0x0f, 0x11, 0x0f, 0x58, 0x1a, 0xf0, 0xd8, 0xb4, 0xf9, 0xcc, 0x63, 0xbe, 0x49, 0x43, 0x66, 0xc6,
+ 0xdc, 0x4b, 0xe6, 0x34, 0x72, 0x8b, 0x8f, 0x71, 0xb6, 0x69, 0x84, 0x11, 0x4f, 0x38, 0x7e, 0xba,
+ 0x52, 0x19, 0x62, 0x83, 0x86, 0xcc, 0xc8, 0x93, 0x8f, 0x4f, 0x25, 0xea, 0x24, 0x65, 0x53, 0x07,
+ 0xa0, 0x1e, 0xb5, 0x13, 0x1e, 0x2d, 0x32, 0xc6, 0xf1, 0x79, 0x7d, 0x0e, 0x8b, 0x82, 0x4a, 0xbd,
+ 0xe3, 0x17, 0xb5, 0xb9, 0xf1, 0x22, 0x4e, 0xdc, 0x60, 0xcc, 0x02, 0xea, 0xbb, 0x22, 0xf1, 0xa2,
+ 0xfe, 0x38, 0x8e, 0x1b, 0x33, 0x7f, 0x26, 0x98, 0x63, 0xe6, 0x88, 0xec, 0xcb, 0x86, 0xc3, 0xd3,
+ 0xd4, 0x61, 0x5c, 0xed, 0xe4, 0x5d, 0x83, 0x64, 0x32, 0x4d, 0xdd, 0x84, 0xf3, 0xe4, 0x41, 0x95,
+ 0xf5, 0x1b, 0x64, 0xb0, 0xed, 0xf2, 0x58, 0xa8, 0x4c, 0xe6, 0xb8, 0xb3, 0x84, 0x25, 0x8b, 0x71,
+ 0x6c, 0xd3, 0x99, 0x8a, 0x6a, 0x6a, 0x3a, 0xe4, 0x73, 0x37, 0x52, 0x25, 0x6f, 0x1a, 0x24, 0x73,
+ 0xe6, 0x31, 0x55, 0x71, 0xd5, 0xd4, 0x2f, 0x0d, 0xdc, 0x88, 0xaa, 0x1a, 0xa3, 0x41, 0x93, 0x96,
+ 0x6a, 0x7c, 0xa8, 0xe6, 0x87, 0xe9, 0x64, 0xca, 0xec, 0x71, 0xe4, 0x86, 0x53, 0x66, 0xd3, 0x84,
+ 0xf1, 0x59, 0x4d, 0x28, 0x93, 0x9f, 0xfe, 0xdd, 0x45, 0xdd, 0x91, 0x60, 0xdf, 0x80, 0x1c, 0x7b,
+ 0x08, 0x57, 0xd3, 0x49, 0xe7, 0x64, 0xe3, 0xac, 0x7d, 0xf5, 0xde, 0xa8, 0xbe, 0xd9, 0x1a, 0xf6,
+ 0x10, 0x42, 0xd6, 0x2a, 0x62, 0x1d, 0x84, 0xe5, 0x10, 0xfe, 0x81, 0xf4, 0xf2, 0x8b, 0x22, 0x3b,
+ 0x50, 0xe5, 0xb9, 0x51, 0x3f, 0x19, 0x9f, 0x21, 0x3d, 0x6b, 0xb3, 0xef, 0x58, 0x5d, 0x47, 0x59,
+ 0xe3, 0x39, 0xea, 0x32, 0x47, 0xfe, 0xd7, 0x44, 0x03, 0xdc, 0xad, 0xb1, 0x7e, 0xd0, 0x8c, 0xd2,
+ 0xbb, 0x31, 0xfa, 0xe2, 0xdd, 0x8c, 0x6c, 0x2a, 0xe8, 0xe5, 0xd2, 0x1d, 0xe6, 0xac, 0x36, 0xf1,
+ 0x47, 0xa4, 0xe5, 0x13, 0x47, 0xb6, 0xa0, 0xe4, 0x33, 0xb9, 0x24, 0xcc, 0x1a, 0x54, 0xfc, 0x2a,
+ 0xb2, 0x32, 0x9d, 0x55, 0xa8, 0xf0, 0x3d, 0x7a, 0x5c, 0xcc, 0x2c, 0xa4, 0xe7, 0x27, 0xd8, 0x05,
+ 0xdc, 0xcb, 0xf5, 0xb8, 0xde, 0x32, 0x22, 0x98, 0x87, 0x5e, 0x35, 0x88, 0x29, 0x7a, 0x52, 0xc2,
+ 0x27, 0x34, 0xf2, 0xdd, 0x24, 0x26, 0x3a, 0xf0, 0x5f, 0xad, 0xe7, 0x1b, 0xc0, 0xfa, 0x99, 0x49,
+ 0xac, 0x23, 0xa5, 0x82, 0x88, 0xe2, 0x7b, 0x74, 0x28, 0x9c, 0x44, 0x2e, 0x40, 0xf6, 0x80, 0xff,
+ 0xba, 0x9e, 0x3f, 0x02, 0x41, 0x1f, 0x9c, 0x47, 0x82, 0x59, 0x07, 0x19, 0x49, 0x0a, 0xe1, 0x3f,
+ 0xe8, 0x48, 0x18, 0x9f, 0xca, 0xef, 0xae, 0xbd, 0x1f, 0x61, 0x95, 0x32, 0x1b, 0x0b, 0x8c, 0x0c,
+ 0xbf, 0x43, 0x7a, 0xd9, 0x71, 0x48, 0x0b, 0xc0, 0x66, 0xd3, 0xd3, 0xe9, 0xe5, 0x3a, 0x71, 0xfd,
+ 0xfb, 0x13, 0x35, 0x80, 0xbf, 0xa3, 0x8e, 0xec, 0x25, 0xe4, 0x51, 0xf5, 0xc2, 0xeb, 0xb8, 0xc3,
+ 0xa5, 0x46, 0x30, 0xdb, 0xe1, 0x6a, 0x81, 0x87, 0x68, 0x4f, 0x36, 0xd4, 0x98, 0xa0, 0x93, 0xad,
+ 0xff, 0x01, 0x7e, 0x5a, 0x8a, 0x04, 0xb0, 0x43, 0x57, 0x8b, 0x18, 0x7f, 0x43, 0x6d, 0xc9, 0xba,
+ 0x48, 0x1b, 0x1a, 0x3c, 0x6f, 0xe2, 0xfd, 0x66, 0x1e, 0x13, 0x38, 0x34, 0x2f, 0xbe, 0xf1, 0x2d,
+ 0xda, 0x53, 0x5c, 0x8d, 0xec, 0x03, 0xee, 0xa2, 0x09, 0x77, 0x03, 0xa2, 0xbc, 0x3f, 0x5b, 0x5a,
+ 0xe1, 0x2f, 0x68, 0xb7, 0x30, 0x3d, 0x72, 0x00, 0xb8, 0xb3, 0x26, 0xdc, 0xaf, 0xbc, 0x37, 0x2d,
+ 0x15, 0x5f, 0x83, 0x96, 0xb6, 0xa1, 0x6f, 0x0e, 0x5a, 0xda, 0xa6, 0xbe, 0x35, 0x68, 0x69, 0xdb,
+ 0xfa, 0x4e, 0xef, 0xfa, 0xee, 0xd2, 0xe7, 0x05, 0xc9, 0xe0, 0x91, 0x6f, 0x56, 0xcd, 0xd4, 0xe7,
+ 0x8a, 0xff, 0x4e, 0xb6, 0xc1, 0x37, 0xaf, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xc5, 0x99,
+ 0x07, 0xf3, 0x07, 0x00, 0x00,
}
diff --git a/go/api/software/ui_config.pb.go b/go/api/software/ui_config.pb.go
new file mode 100644
index 0000000..cb6846b
--- /dev/null
+++ b/go/api/software/ui_config.pb.go
@@ -0,0 +1,84 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: chromiumos/config/api/software/ui_config.proto
+
+package software
+
+import (
+ fmt "fmt"
+ proto "github.com/golang/protobuf/proto"
+ math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type UiConfig struct {
+ // If set, additional web apps will be installed from the given subdirectory
+ // of the web_apps directory.
+ ExtraWebAppsDir string `protobuf:"bytes,1,opt,name=extra_web_apps_dir,json=extraWebAppsDir,proto3" json:"extra_web_apps_dir,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *UiConfig) Reset() { *m = UiConfig{} }
+func (m *UiConfig) String() string { return proto.CompactTextString(m) }
+func (*UiConfig) ProtoMessage() {}
+func (*UiConfig) Descriptor() ([]byte, []int) {
+ return fileDescriptor_5e183cecfa090da8, []int{0}
+}
+
+func (m *UiConfig) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_UiConfig.Unmarshal(m, b)
+}
+func (m *UiConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_UiConfig.Marshal(b, m, deterministic)
+}
+func (m *UiConfig) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_UiConfig.Merge(m, src)
+}
+func (m *UiConfig) XXX_Size() int {
+ return xxx_messageInfo_UiConfig.Size(m)
+}
+func (m *UiConfig) XXX_DiscardUnknown() {
+ xxx_messageInfo_UiConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UiConfig proto.InternalMessageInfo
+
+func (m *UiConfig) GetExtraWebAppsDir() string {
+ if m != nil {
+ return m.ExtraWebAppsDir
+ }
+ return ""
+}
+
+func init() {
+ proto.RegisterType((*UiConfig)(nil), "chromiumos.config.api.software.UiConfig")
+}
+
+func init() {
+ proto.RegisterFile("chromiumos/config/api/software/ui_config.proto", fileDescriptor_5e183cecfa090da8)
+}
+
+var fileDescriptor_5e183cecfa090da8 = []byte{
+ // 157 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4b, 0xce, 0x28, 0xca,
+ 0xcf, 0xcd, 0x2c, 0xcd, 0xcd, 0x2f, 0xd6, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0x2c,
+ 0xc8, 0xd4, 0x2f, 0xce, 0x4f, 0x2b, 0x29, 0x4f, 0x2c, 0x4a, 0xd5, 0x2f, 0xcd, 0x8c, 0x87, 0x08,
+ 0xeb, 0x15, 0x14, 0xe5, 0x97, 0xe4, 0x0b, 0xc9, 0x21, 0xd4, 0xeb, 0x41, 0x25, 0x12, 0x0b, 0x32,
+ 0xf5, 0x60, 0xea, 0x95, 0xcc, 0xb9, 0x38, 0x42, 0x33, 0x9d, 0xc1, 0x12, 0x42, 0xda, 0x5c, 0x42,
+ 0xa9, 0x15, 0x25, 0x45, 0x89, 0xf1, 0xe5, 0xa9, 0x49, 0xf1, 0x89, 0x05, 0x05, 0xc5, 0xf1, 0x29,
+ 0x99, 0x45, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0xfc, 0x60, 0x99, 0xf0, 0xd4, 0x24, 0xc7,
+ 0x82, 0x82, 0x62, 0x97, 0xcc, 0x22, 0x27, 0xe3, 0x28, 0xc3, 0xf4, 0x7c, 0xb8, 0x6b, 0xf4, 0xf2,
+ 0x8b, 0xd2, 0xf5, 0x31, 0x9d, 0x96, 0x9e, 0x8f, 0xe2, 0xba, 0x24, 0x36, 0xb0, 0xa3, 0x8c, 0x01,
+ 0x01, 0x00, 0x00, 0xff, 0xff, 0x68, 0x89, 0xeb, 0x26, 0xc6, 0x00, 0x00, 0x00,
+}
diff --git a/payload_utils/cros_config_proto_converter.py b/payload_utils/cros_config_proto_converter.py
index fed0e6f..43b3479 100755
--- a/payload_utils/cros_config_proto_converter.py
+++ b/payload_utils/cros_config_proto_converter.py
@@ -192,6 +192,9 @@
lid_accel == topology_pb2.HardwareFeatures.PRESENT):
flags['supports-clamshell-auto-rotation'] = None
+ if config.sw_config.ui_config.extra_web_apps_dir:
+ flags['extra-web-apps-dir'] = config.sw_config.ui_config.extra_web_apps_dir
+
return sorted([f'--{k}={v}' if v else f'--{k}' for k, v in flags.items()])
diff --git a/payload_utils/test_data/fake_project.json b/payload_utils/test_data/fake_project.json
index 066808e..b34596d 100644
--- a/payload_utils/test_data/fake_project.json
+++ b/payload_utils/test_data/fake_project.json
@@ -120,6 +120,7 @@
"--default-wallpaper-is-oem",
"--default-wallpaper-large=/usr/share/chromeos-assets/wallpaper/fake_wallpaper_large.jpg",
"--default-wallpaper-small=/usr/share/chromeos-assets/wallpaper/fake_wallpaper_small.jpg",
+ "--extra-web-apps-dir=apps1",
"--fingerprint-sensor-location=keyboard-bottom-left",
"--guest-wallpaper-large=/usr/share/chromeos-assets/wallpaper/guest_large.jpg",
"--guest-wallpaper-small=/usr/share/chromeos-assets/wallpaper/guest_small.jpg",
@@ -267,6 +268,7 @@
"--default-wallpaper-is-oem",
"--default-wallpaper-large=/usr/share/chromeos-assets/wallpaper/fake_wallpaper_large.jpg",
"--default-wallpaper-small=/usr/share/chromeos-assets/wallpaper/fake_wallpaper_small.jpg",
+ "--extra-web-apps-dir=apps2",
"--guest-wallpaper-large=/usr/share/chromeos-assets/wallpaper/guest_large.jpg",
"--guest-wallpaper-small=/usr/share/chromeos-assets/wallpaper/guest_small.jpg",
"--has-internal-stylus",
diff --git a/proto/chromiumos/config/api/software/software_config.proto b/proto/chromiumos/config/api/software/software_config.proto
index bde5b58..aab0e2d 100644
--- a/proto/chromiumos/config/api/software/software_config.proto
+++ b/proto/chromiumos/config/api/software/software_config.proto
@@ -16,6 +16,7 @@
import "chromiumos/config/api/software/power_config.proto";
import "chromiumos/config/api/software/wifi_config.proto";
import "chromiumos/config/api/software/camera_config.proto";
+import "chromiumos/config/api/software/ui_config.proto";
import "chromiumos/config/public_replication/public_replication.proto";
option go_package = "go.chromium.org/chromiumos/config/go/api/software";
@@ -30,7 +31,7 @@
// SoftwareConfig payloads can be shared across different
// hardware-design-configs, if the software payloads are the same.
//
-// NEXT ID: 17
+// NEXT ID: 18
message SoftwareConfig {
// Configures fields of AudioConfig that are made public.
chromiumos.config.public_replication.PublicReplication public_replication =
@@ -62,5 +63,7 @@
CameraConfig camera_config = 15;
+ UiConfig ui_config = 17;
+
reserved 1, 2, 6;
}
diff --git a/proto/chromiumos/config/api/software/ui_config.proto b/proto/chromiumos/config/api/software/ui_config.proto
new file mode 100644
index 0000000..2ec6bde
--- /dev/null
+++ b/proto/chromiumos/config/api/software/ui_config.proto
@@ -0,0 +1,15 @@
+// Copyright 2021 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+syntax = "proto3";
+
+option go_package = "go.chromium.org/chromiumos/config/go/api/software";
+
+package chromiumos.config.api.software;
+
+message UiConfig {
+ // If set, additional web apps will be installed from the given subdirectory
+ // of the web_apps directory.
+ string extra_web_apps_dir = 1;
+}
diff --git a/python/chromiumos/config/api/software/software_config_pb2.py b/python/chromiumos/config/api/software/software_config_pb2.py
index 7b92300..d9d7c81 100644
--- a/python/chromiumos/config/api/software/software_config_pb2.py
+++ b/python/chromiumos/config/api/software/software_config_pb2.py
@@ -22,6 +22,7 @@
from chromiumos.config.api.software import power_config_pb2 as chromiumos_dot_config_dot_api_dot_software_dot_power__config__pb2
from chromiumos.config.api.software import wifi_config_pb2 as chromiumos_dot_config_dot_api_dot_software_dot_wifi__config__pb2
from chromiumos.config.api.software import camera_config_pb2 as chromiumos_dot_config_dot_api_dot_software_dot_camera__config__pb2
+from chromiumos.config.api.software import ui_config_pb2 as chromiumos_dot_config_dot_api_dot_software_dot_ui__config__pb2
from chromiumos.config.public_replication import public_replication_pb2 as chromiumos_dot_config_dot_public__replication_dot_public__replication__pb2
@@ -30,9 +31,9 @@
package='chromiumos.config.api.software',
syntax='proto3',
serialized_options=_b('Z1go.chromium.org/chromiumos/config/go/api/software'),
- serialized_pb=_b('\n4chromiumos/config/api/software/software_config.proto\x12\x1e\x63hromiumos.config.api.software\x1a\"chromiumos/build/api/factory.proto\x1a*chromiumos/build/api/firmware_config.proto\x1a\'chromiumos/build/api/system_image.proto\x1a,chromiumos/config/api/design_config_id.proto\x1a\x31\x63hromiumos/config/api/software/audio_config.proto\x1a\x35\x63hromiumos/config/api/software/bluetooth_config.proto\x1aIchromiumos/config/api/software/chromeos_config/identity_scan_config.proto\x1a\x31\x63hromiumos/config/api/software/power_config.proto\x1a\x30\x63hromiumos/config/api/software/wifi_config.proto\x1a\x32\x63hromiumos/config/api/software/camera_config.proto\x1a=chromiumos/config/public_replication/public_replication.proto\"\xdf\x07\n\x0eSoftwareConfig\x12S\n\x12public_replication\x18\x0c \x01(\x0b\x32\x37.chromiumos.config.public_replication.PublicReplication\x12?\n\x10\x64\x65sign_config_id\x18\x07 \x01(\x0b\x32%.chromiumos.config.api.DesignConfigId\x12i\n\x0eid_scan_config\x18\x08 \x01(\x0b\x32Q.chromiumos.config.api.software.chromeos_config.IdentityScanConfig.DesignConfigId\x12\x36\n\x08\x66irmware\x18\x03 \x01(\x0b\x32$.chromiumos.build.api.FirmwareConfig\x12H\n\x15\x66irmware_build_config\x18\t \x01(\x0b\x32).chromiumos.build.api.FirmwareBuildConfig\x12K\n\x16\x66irmware_build_targets\x18\x10 \x01(\x0b\x32+.chromiumos.build.api.Firmware.BuildTargets\x12J\n\x13system_build_target\x18\r \x01(\x0b\x32-.chromiumos.build.api.SystemImage.BuildTarget\x12G\n\x14\x66\x61\x63tory_build_target\x18\x0e \x01(\x0b\x32).chromiumos.build.api.Factory.BuildTarget\x12I\n\x10\x62luetooth_config\x18\x04 \x01(\x0b\x32/.chromiumos.config.api.software.BluetoothConfig\x12\x41\n\x0cpower_config\x18\x05 \x01(\x0b\x32+.chromiumos.config.api.software.PowerConfig\x12\x42\n\raudio_configs\x18\n \x03(\x0b\x32+.chromiumos.config.api.software.AudioConfig\x12?\n\x0bwifi_config\x18\x0b \x01(\x0b\x32*.chromiumos.config.api.software.WifiConfig\x12\x43\n\rcamera_config\x18\x0f \x01(\x0b\x32,.chromiumos.config.api.software.CameraConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x06\x10\x07\x42\x33Z1go.chromium.org/chromiumos/config/go/api/softwareb\x06proto3')
+ serialized_pb=_b('\n4chromiumos/config/api/software/software_config.proto\x12\x1e\x63hromiumos.config.api.software\x1a\"chromiumos/build/api/factory.proto\x1a*chromiumos/build/api/firmware_config.proto\x1a\'chromiumos/build/api/system_image.proto\x1a,chromiumos/config/api/design_config_id.proto\x1a\x31\x63hromiumos/config/api/software/audio_config.proto\x1a\x35\x63hromiumos/config/api/software/bluetooth_config.proto\x1aIchromiumos/config/api/software/chromeos_config/identity_scan_config.proto\x1a\x31\x63hromiumos/config/api/software/power_config.proto\x1a\x30\x63hromiumos/config/api/software/wifi_config.proto\x1a\x32\x63hromiumos/config/api/software/camera_config.proto\x1a.chromiumos/config/api/software/ui_config.proto\x1a=chromiumos/config/public_replication/public_replication.proto\"\x9c\x08\n\x0eSoftwareConfig\x12S\n\x12public_replication\x18\x0c \x01(\x0b\x32\x37.chromiumos.config.public_replication.PublicReplication\x12?\n\x10\x64\x65sign_config_id\x18\x07 \x01(\x0b\x32%.chromiumos.config.api.DesignConfigId\x12i\n\x0eid_scan_config\x18\x08 \x01(\x0b\x32Q.chromiumos.config.api.software.chromeos_config.IdentityScanConfig.DesignConfigId\x12\x36\n\x08\x66irmware\x18\x03 \x01(\x0b\x32$.chromiumos.build.api.FirmwareConfig\x12H\n\x15\x66irmware_build_config\x18\t \x01(\x0b\x32).chromiumos.build.api.FirmwareBuildConfig\x12K\n\x16\x66irmware_build_targets\x18\x10 \x01(\x0b\x32+.chromiumos.build.api.Firmware.BuildTargets\x12J\n\x13system_build_target\x18\r \x01(\x0b\x32-.chromiumos.build.api.SystemImage.BuildTarget\x12G\n\x14\x66\x61\x63tory_build_target\x18\x0e \x01(\x0b\x32).chromiumos.build.api.Factory.BuildTarget\x12I\n\x10\x62luetooth_config\x18\x04 \x01(\x0b\x32/.chromiumos.config.api.software.BluetoothConfig\x12\x41\n\x0cpower_config\x18\x05 \x01(\x0b\x32+.chromiumos.config.api.software.PowerConfig\x12\x42\n\raudio_configs\x18\n \x03(\x0b\x32+.chromiumos.config.api.software.AudioConfig\x12?\n\x0bwifi_config\x18\x0b \x01(\x0b\x32*.chromiumos.config.api.software.WifiConfig\x12\x43\n\rcamera_config\x18\x0f \x01(\x0b\x32,.chromiumos.config.api.software.CameraConfig\x12;\n\tui_config\x18\x11 \x01(\x0b\x32(.chromiumos.config.api.software.UiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x06\x10\x07\x42\x33Z1go.chromium.org/chromiumos/config/go/api/softwareb\x06proto3')
,
- dependencies=[chromiumos_dot_build_dot_api_dot_factory__pb2.DESCRIPTOR,chromiumos_dot_build_dot_api_dot_firmware__config__pb2.DESCRIPTOR,chromiumos_dot_build_dot_api_dot_system__image__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_design__config__id__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_audio__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_bluetooth__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_chromeos__config_dot_identity__scan__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_power__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_wifi__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_camera__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_public__replication_dot_public__replication__pb2.DESCRIPTOR,])
+ dependencies=[chromiumos_dot_build_dot_api_dot_factory__pb2.DESCRIPTOR,chromiumos_dot_build_dot_api_dot_firmware__config__pb2.DESCRIPTOR,chromiumos_dot_build_dot_api_dot_system__image__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_design__config__id__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_audio__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_bluetooth__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_chromeos__config_dot_identity__scan__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_power__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_wifi__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_camera__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_ui__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_public__replication_dot_public__replication__pb2.DESCRIPTOR,])
@@ -135,6 +136,13 @@
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ui_config', full_name='chromiumos.config.api.software.SoftwareConfig.ui_config', index=13,
+ number=17, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -147,8 +155,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=653,
- serialized_end=1644,
+ serialized_start=701,
+ serialized_end=1753,
)
_SOFTWARECONFIG.fields_by_name['public_replication'].message_type = chromiumos_dot_config_dot_public__replication_dot_public__replication__pb2._PUBLICREPLICATION
@@ -164,6 +172,7 @@
_SOFTWARECONFIG.fields_by_name['audio_configs'].message_type = chromiumos_dot_config_dot_api_dot_software_dot_audio__config__pb2._AUDIOCONFIG
_SOFTWARECONFIG.fields_by_name['wifi_config'].message_type = chromiumos_dot_config_dot_api_dot_software_dot_wifi__config__pb2._WIFICONFIG
_SOFTWARECONFIG.fields_by_name['camera_config'].message_type = chromiumos_dot_config_dot_api_dot_software_dot_camera__config__pb2._CAMERACONFIG
+_SOFTWARECONFIG.fields_by_name['ui_config'].message_type = chromiumos_dot_config_dot_api_dot_software_dot_ui__config__pb2._UICONFIG
DESCRIPTOR.message_types_by_name['SoftwareConfig'] = _SOFTWARECONFIG
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
diff --git a/python/chromiumos/config/api/software/ui_config_pb2.py b/python/chromiumos/config/api/software/ui_config_pb2.py
new file mode 100644
index 0000000..dfec98b
--- /dev/null
+++ b/python/chromiumos/config/api/software/ui_config_pb2.py
@@ -0,0 +1,70 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: chromiumos/config/api/software/ui_config.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='chromiumos/config/api/software/ui_config.proto',
+ package='chromiumos.config.api.software',
+ syntax='proto3',
+ serialized_options=_b('Z1go.chromium.org/chromiumos/config/go/api/software'),
+ serialized_pb=_b('\n.chromiumos/config/api/software/ui_config.proto\x12\x1e\x63hromiumos.config.api.software\"&\n\x08UiConfig\x12\x1a\n\x12\x65xtra_web_apps_dir\x18\x01 \x01(\tB3Z1go.chromium.org/chromiumos/config/go/api/softwareb\x06proto3')
+)
+
+
+
+
+_UICONFIG = _descriptor.Descriptor(
+ name='UiConfig',
+ full_name='chromiumos.config.api.software.UiConfig',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='extra_web_apps_dir', full_name='chromiumos.config.api.software.UiConfig.extra_web_apps_dir', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=82,
+ serialized_end=120,
+)
+
+DESCRIPTOR.message_types_by_name['UiConfig'] = _UICONFIG
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+UiConfig = _reflection.GeneratedProtocolMessageType('UiConfig', (_message.Message,), dict(
+ DESCRIPTOR = _UICONFIG,
+ __module__ = 'chromiumos.config.api.software.ui_config_pb2'
+ # @@protoc_insertion_point(class_scope:chromiumos.config.api.software.UiConfig)
+ ))
+_sym_db.RegisterMessage(UiConfig)
+
+
+DESCRIPTOR._options = None
+# @@protoc_insertion_point(module_scope)
diff --git a/test/project/fake/fake/config.star b/test/project/fake/fake/config.star
index bbe6a1b..98b6170 100755
--- a/test/project/fake/fake/config.star
+++ b/test/project/fake/fake/config.star
@@ -223,6 +223,7 @@
limit_5g = 4,
),
),
+ ui = sc.create_ui(extra_web_apps_dir = "apps1"),
)
design.append_configs(
@@ -281,6 +282,7 @@
),
),
camera = sc.create_camera(generate_media_profiles = True),
+ ui = sc.create_ui(extra_web_apps_dir = "apps2"),
)
_HW_CONFIGS_A = []
diff --git a/test/project/fake/fake/generated/config.jsonproto b/test/project/fake/fake/generated/config.jsonproto
index ea1da79..8920c8b 100644
--- a/test/project/fake/fake/generated/config.jsonproto
+++ b/test/project/fake/fake/generated/config.jsonproto
@@ -3253,6 +3253,9 @@
"publicReplication": {
"publicFields": "designConfigId"
},
+ "uiConfig": {
+ "extraWebAppsDir": "apps1"
+ },
"wifiConfig": {
"ath10kConfig": {
"nonTabletModePowerTable": {
@@ -3345,6 +3348,9 @@
"publicReplication": {
"publicFields": "designConfigId"
},
+ "uiConfig": {
+ "extraWebAppsDir": "apps2"
+ },
"wifiConfig": {
"rtw88Config": {
"nonTabletModePowerTable": {
diff --git a/test/project/fake/fake/sw_build_config/platform/chromeos-config/generated/project-config.json b/test/project/fake/fake/sw_build_config/platform/chromeos-config/generated/project-config.json
index 7396e95..ee5fe27 100644
--- a/test/project/fake/fake/sw_build_config/platform/chromeos-config/generated/project-config.json
+++ b/test/project/fake/fake/sw_build_config/platform/chromeos-config/generated/project-config.json
@@ -153,6 +153,7 @@
"--default-wallpaper-is-oem",
"--default-wallpaper-large=/usr/share/chromeos-assets/wallpaper/fake_wallpaper_large.jpg",
"--default-wallpaper-small=/usr/share/chromeos-assets/wallpaper/fake_wallpaper_small.jpg",
+ "--extra-web-apps-dir=apps1",
"--fingerprint-sensor-location=keyboard-bottom-left",
"--guest-wallpaper-large=/usr/share/chromeos-assets/wallpaper/guest_large.jpg",
"--guest-wallpaper-small=/usr/share/chromeos-assets/wallpaper/guest_small.jpg",
@@ -333,6 +334,7 @@
"--default-wallpaper-is-oem",
"--default-wallpaper-large=/usr/share/chromeos-assets/wallpaper/fake_wallpaper_large.jpg",
"--default-wallpaper-small=/usr/share/chromeos-assets/wallpaper/fake_wallpaper_small.jpg",
+ "--extra-web-apps-dir=apps2",
"--guest-wallpaper-large=/usr/share/chromeos-assets/wallpaper/guest_large.jpg",
"--guest-wallpaper-small=/usr/share/chromeos-assets/wallpaper/guest_small.jpg",
"--has-internal-stylus",
diff --git a/util/design.star b/util/design.star
index a1435d8..23cfcb5 100644
--- a/util/design.star
+++ b/util/design.star
@@ -56,6 +56,7 @@
audio = None,
wifi = None,
camera = None,
+ ui = None,
smbios_name_match_override = None):
"""Creates and appends new SW and HW configs.
@@ -86,6 +87,7 @@
single AudioConfig or a list of AudioConfigs.
wifi: A WifiConfig to be used in the SoftwareConfig.
camera: A CameraConfig to be used in the SoftwareConfig.
+ ui: A UiConfig to be used in the SoftwareConfig.
smbios_name_match_override: A str used for smbios_name_match in
IdentityScanConfig. If not specified, the string in DesignId is
used.
@@ -129,6 +131,7 @@
sw_config.audio_configs.append(audio)
sw_config.wifi_config = wifi
sw_config.camera_config = camera
+ sw_config.ui_config = ui
sw_config.public_replication = public_replication.create(
public_fields = sw_config_public_fields,
)
diff --git a/util/sw_config.star b/util/sw_config.star
index 234e25d..01e01ef 100644
--- a/util/sw_config.star
+++ b/util/sw_config.star
@@ -18,6 +18,10 @@
bt_pb = "chromiumos.config.api.software",
)
load(
+ "@proto//chromiumos/config/api/software/ui_config.proto",
+ ui_pb = "chromiumos.config.api.software",
+)
+load(
"@proto//chromiumos/build/api/firmware_config.proto",
fw_pb = "chromiumos.build.api",
)
@@ -363,6 +367,9 @@
camcorder_resolutions = camcorder_resolutions if camcorder_resolutions else [],
)
+def _create_ui(extra_web_apps_dir = None):
+ return ui_pb.UiConfig(extra_web_apps_dir = extra_web_apps_dir)
+
def _make_resolution(width, height):
return cam_pb.Resolution(width = width, height = height)
@@ -386,6 +393,7 @@
create_rtw88 = _create_rtw88,
create_rtw88_geo_offsets = _create_rtw88_geo_offsets,
create_rtw88_power_chain = _create_rtw88_power_chain,
+ create_ui = _create_ui,
fw_type = _FW_TYPE,
make_resolution = _make_resolution,
)