]> glassweightruler.freedombox.rocks Git - waydroid.git/blob - tools/helpers/arguments.py
Add support for preinstalled images
[waydroid.git] / tools / helpers / arguments.py
1 # Copyright 2021 Oliver Smith
2 # SPDX-License-Identifier: GPL-3.0-or-later
3 import argparse
4
5 try:
6 import argcomplete
7 except ImportError:
8 argcomplete = False
9
10 import tools.config
11
12 """ This file is about parsing command line arguments passed to waydroid, as
13 well as generating the help pages (waydroid -h). All this is done with
14 Python's argparse. The parsed arguments get extended and finally stored in
15 the "args" variable, which is prominently passed to most functions all
16 over the waydroid code base.
17
18 See tools/helpers/args.py for more information about the args variable. """
19
20 def arguments_init(subparser):
21 ret = subparser.add_parser("init", help="set up waydroid specific"
22 " configs and install images")
23 ret.add_argument("-i", "--images_path",
24 help="custom path to waeiod images (default in"
25 " /home/.waydroid/images)")
26 ret.add_argument("-f", "--force", action="store_true",
27 help="re-initialize configs and images")
28 ret.add_argument("-c", "--system_channel",
29 help="custom system channel (options: OTA channel URL; default is Official OTA server)")
30 ret.add_argument("-v", "--vendor_channel",
31 help="custom vendor channel (options: OTA channel URL; default is Official OTA server)")
32 ret.add_argument("-r", "--rom_type",
33 help="rom type (options: \"lineage\", \"bliss\" or OTA channel URL; default is LineageOS)")
34 ret.add_argument("-s", "--system_type",
35 help="system type (options: VANILLA, FOSS or GAPPS; default is VANILLA)")
36 return ret
37
38 def arguments_status(subparser):
39 ret = subparser.add_parser("status",
40 help="quick check for the waydroid")
41 return ret
42
43 def arguments_upgrade(subparser):
44 ret = subparser.add_parser("upgrade", help="upgrade images")
45 ret.add_argument("-o", "--offline", action="store_true",
46 help="just for updating configs")
47 return ret
48
49 def arguments_log(subparser):
50 ret = subparser.add_parser("log", help="follow the waydroid logfile")
51 ret.add_argument("-n", "--lines", default="60",
52 help="count of initial output lines")
53 ret.add_argument("-c", "--clear", help="clear the log",
54 action="store_true", dest="clear_log")
55 return ret
56
57 def arguments_session(subparser):
58 ret = subparser.add_parser("session", help="session controller")
59 sub = ret.add_subparsers(title="subaction", dest="subaction")
60 sub.add_parser("start", help="start session")
61 sub.add_parser("stop", help="start session")
62 return ret
63
64 def arguments_container(subparser):
65 ret = subparser.add_parser("container", help="container controller")
66 sub = ret.add_subparsers(title="subaction", dest="subaction")
67 sub.add_parser("start", help="start container")
68 sub.add_parser("stop", help="start container")
69 sub.add_parser("freeze", help="freeze container")
70 sub.add_parser("unfreeze", help="unfreeze container")
71 return ret
72
73 def arguments_app(subparser):
74 ret = subparser.add_parser("app", help="applications controller")
75 sub = ret.add_subparsers(title="subaction", dest="subaction")
76 install = sub.add_parser(
77 "install", help="push a single package to the container and install it")
78 install.add_argument('PACKAGE', help="path to apk file")
79 remove = sub.add_parser(
80 "remove", help="remove single app package from the container")
81 remove.add_argument('PACKAGE', help="package name of app to remove")
82 launch = sub.add_parser("launch", help="start single application")
83 launch.add_argument('PACKAGE', help="package name of app to launch")
84 sub.add_parser("list", help="list installed applications")
85 return ret
86
87 def arguments_prop(subparser):
88 ret = subparser.add_parser("prop", help="android properties controller")
89 sub = ret.add_subparsers(title="subaction", dest="subaction")
90 get = sub.add_parser(
91 "get", help="get value of property from container")
92 get.add_argument('key', help="key of the property to get")
93 set = sub.add_parser(
94 "set", help="set value to property on container")
95 set.add_argument('key', help="key of the property to set")
96 set.add_argument('value', help="value of the property to set")
97 return ret
98
99 def arguments_fullUI(subparser):
100 ret = subparser.add_parser("show-full-ui", help="show android full screen in window")
101 return ret
102
103 def arguments_shell(subparser):
104 ret = subparser.add_parser("shell", help="run remote shell command")
105 ret.add_argument('COMMAND', nargs='?', help="command to run")
106 return ret
107
108 def arguments_logcat(subparser):
109 ret = subparser.add_parser("logcat", help="show android logcat")
110 return ret
111
112 def arguments():
113 parser = argparse.ArgumentParser(prog="waydroid")
114
115 # Other
116 parser.add_argument("-V", "--version", action="version",
117 version=tools.config.version)
118
119 # Logging
120 parser.add_argument("-l", "--log", dest="log", default=None,
121 help="path to log file")
122 parser.add_argument("--details-to-stdout", dest="details_to_stdout",
123 help="print details (e.g. build output) to stdout,"
124 " instead of writing to the log",
125 action="store_true")
126 parser.add_argument("-v", "--verbose", dest="verbose",
127 action="store_true", help="write even more to the"
128 " logfiles (this may reduce performance)")
129 parser.add_argument("-q", "--quiet", dest="quiet", action="store_true",
130 help="do not output any log messages")
131
132 # Actions
133 sub = parser.add_subparsers(title="action", dest="action")
134
135 arguments_status(sub)
136 arguments_log(sub)
137 arguments_init(sub)
138 arguments_upgrade(sub)
139 arguments_session(sub)
140 arguments_container(sub)
141 arguments_app(sub)
142 arguments_prop(sub)
143 arguments_fullUI(sub)
144 arguments_shell(sub)
145 arguments_logcat(sub)
146
147 if argcomplete:
148 argcomplete.autocomplete(parser, always_complete_options="long")
149
150 # Parse and extend arguments (also backup unmodified result from argparse)
151 args = parser.parse_args()
152 return args