if vndk_str != "":
vndk = int(vndk_str)
if vndk > 19:
- ret = "HALIUM_" + str(vndk - 19)
+ halium_ver = vndk - 19
+ if vndk > 31:
+ halium_ver -= 1 # 12L -> Halium 12
+ ret = "HALIUM_" + str(halium_ver)
+ if vndk == 32:
+ ret += "L"
return ret
args.arch = helpers.arch.host()
cfg["waydroid"]["arch"] = args.arch
+ args.vendor_type = get_vendor_type(args)
+ cfg["waydroid"]["vendor_type"] = args.vendor_type
+
+ helpers.drivers.setupBinderNodes(args)
+ cfg["waydroid"]["binder"] = args.BINDER_DRIVER
+ cfg["waydroid"]["vndbinder"] = args.VNDBINDER_DRIVER
+ cfg["waydroid"]["hwbinder"] = args.HWBINDER_DRIVER
+
+ has_preinstalled_images = False
preinstalled_images_paths = tools.config.defaults["preinstalled_images_paths"]
- if not args.images_path:
- for preinstalled_images in preinstalled_images_paths:
- if os.path.isdir(preinstalled_images):
- if os.path.isfile(preinstalled_images + "/system.img") and os.path.isfile(preinstalled_images + "/vendor.img"):
- args.images_path = preinstalled_images
- break
- else:
- logging.warning("Found directory {} but missing system or vendor image, ignoring...".format(preinstalled_images))
+ for preinstalled_images in preinstalled_images_paths:
+ if os.path.isdir(preinstalled_images):
+ if os.path.isfile(preinstalled_images + "/system.img") and os.path.isfile(preinstalled_images + "/vendor.img"):
+ has_preinstalled_images = True
+ args.images_path = preinstalled_images
+ break
+ else:
+ logging.warning("Found directory {} but missing system or vendor image, ignoring...".format(preinstalled_images))
if not args.images_path:
args.images_path = tools.config.defaults["images_path"]
cfg["waydroid"]["images_path"] = args.images_path
+ if has_preinstalled_images:
+ cfg["waydroid"]["system_ota"] = args.system_ota = "None"
+ cfg["waydroid"]["vendor_ota"] = args.vendor_ota = "None"
+ cfg["waydroid"]["system_datetime"] = tools.config.defaults["system_datetime"]
+ cfg["waydroid"]["vendor_datetime"] = tools.config.defaults["vendor_datetime"]
+ tools.config.save(args, cfg)
+ return True
+
channels_cfg = tools.config.load_channels()
if not args.system_channel:
args.system_channel = channels_cfg["channels"]["system_channel"]
if not args.system_type:
args.system_type = channels_cfg["channels"]["system_type"]
+ if not args.system_channel or not args.vendor_channel:
+ logging.error("ERROR: You must provide 'System OTA' and 'Vendor OTA' URLs.")
+ return False
+
args.system_ota = args.system_channel + "/" + args.rom_type + \
"/waydroid_" + args.arch + "/" + args.system_type + ".json"
system_request = helpers.http.retrieve(args.system_ota)
if system_request[0] != 200:
- if args.images_path not in preinstalled_images_paths:
- raise ValueError(
- "Failed to get system OTA channel: {}, error: {}".format(args.system_ota, system_request[0]))
- else:
- args.system_ota = "None"
+ raise ValueError(
+ "Failed to get system OTA channel: {}, error: {}".format(args.system_ota, system_request[0]))
device_codename = helpers.props.host_get(args, "ro.product.device")
args.vendor_type = None
break
if not args.vendor_type:
- if args.images_path not in preinstalled_images_paths:
- raise ValueError(
- "Failed to get vendor OTA channel: {}".format(vendor_ota))
- else:
- args.vendor_ota = "None"
- args.vendor_type = get_vendor_type(args)
+ raise ValueError(
+ "Failed to get vendor OTA channel: {}".format(vendor_ota))
if args.system_ota != cfg["waydroid"].get("system_ota"):
cfg["waydroid"]["system_datetime"] = tools.config.defaults["system_datetime"]
cfg["waydroid"]["vendor_type"] = args.vendor_type
cfg["waydroid"]["system_ota"] = args.system_ota
cfg["waydroid"]["vendor_ota"] = args.vendor_ota
- helpers.drivers.setupBinderNodes(args)
- cfg["waydroid"]["binder"] = args.BINDER_DRIVER
- cfg["waydroid"]["vndbinder"] = args.VNDBINDER_DRIVER
- cfg["waydroid"]["hwbinder"] = args.HWBINDER_DRIVER
tools.config.save(args, cfg)
+ return True
def init(args):
if not is_initialized(args) or args.force:
initializer_service = tools.helpers.ipc.DBusContainerService("/Initializer", "id.waydro.Initializer")
except dbus.DBusException:
pass
- setup_config(args)
+ if not setup_config(args):
+ return
status = "STOPPED"
if os.path.exists(tools.config.defaults["lxc"] + "/waydroid"):
status = helpers.lxc.status(args)
if status != "STOPPED":
logging.info("Stopping container")
- helpers.lxc.stop(args)
- helpers.images.umount_rootfs(args)
+ try:
+ container = tools.helpers.ipc.DBusContainerService()
+ args.session = container.GetSession()
+ container.Stop(False)
+ except Exception as e:
+ logging.debug(e)
+ tools.actions.container_manager.stop(args)
if args.images_path not in tools.config.defaults["preinstalled_images_paths"]:
helpers.images.get(args)
+ else:
+ helpers.images.remove_overlay(args)
if not os.path.isdir(tools.config.defaults["rootfs"]):
os.mkdir(tools.config.defaults["rootfs"])
+ if not os.path.isdir(tools.config.defaults["overlay"]):
+ os.mkdir(tools.config.defaults["overlay"])
+ os.mkdir(tools.config.defaults["overlay"]+"/vendor")
+ if not os.path.isdir(tools.config.defaults["overlay_rw"]):
+ os.mkdir(tools.config.defaults["overlay_rw"])
+ os.mkdir(tools.config.defaults["overlay_rw"]+"/system")
+ os.mkdir(tools.config.defaults["overlay_rw"]+"/vendor")
+ helpers.drivers.probeAshmemDriver(args)
helpers.lxc.setup_host_perms(args)
helpers.lxc.set_lxc_config(args)
helpers.lxc.make_base_props(args)
if status != "STOPPED":
logging.info("Starting container")
- helpers.images.mount_rootfs(args, args.images_path)
- helpers.lxc.start(args)
+ try:
+ container.Start(args.session)
+ except Exception as e:
+ logging.debug(e)
+ logging.error("Failed to restart container. Please do so manually.")
if "running_init_in_service" not in args or not args.running_init_in_service:
try:
channels_cfg = tools.config.load_channels()
self.set_default_size(600, 250)
- self.set_icon_from_file(tools.config.tools_src + "/data/AppIcon.png")
+ self.set_icon_name("waydroid")
grid = Gtk.Grid(row_spacing=6, column_spacing=6, margin=10, column_homogeneous=True)
grid.set_hexpand(True)