blob: 9edba7f9ad4ef4b7675ac903e1bf1abc467f0393 [file] [edit]
# Shared logic for studiow and codew
function show_project_subsets() {
echo "Project subsets:"
echo " m, main"
echo " Open the project subset main: non-Compose Jetpack libraries"
echo
echo " c, compose"
echo " Open the project subset compose"
echo
echo " ca, camera"
echo " Open the project subset camera"
echo
echo " f, flan"
echo " Open the project subset flan: Fragment, Lifecycle, Activity, and Navigation"
echo
echo " m3, material3"
echo " Open the project subset material3 and material catalog"
echo
echo " media"
echo " Open the project subset media: Media, Media2, and MediaRouter"
echo
echo " kmp"
echo " Open the project subset KMP: Projects that have KMP builds"
echo
echo " w, wear"
echo " Open the project subset for Wear OS libraries"
echo
echo " g, glance"
echo " Open the project subset for glance projects"
echo
echo " x, xr"
echo " Open the project subset for XR projects"
echo
echo
echo " native"
echo " Open the project subset for native projects"
echo
echo " a, all"
echo " Open the project subset all"
echo
}
function show_usage_options() {
echo "OPTIONS"
echo
echo " --clear-caches"
echo " Clear generated caches (but not user settings) before launching"
echo
echo " --clean"
echo " Clear (with backup) generated files (settings, caches, etc) before launching"
echo " Also implies --clear-caches"
echo
echo " --reinstall"
echo " Remove and re-download the IDE itself. Also implies --clean"
echo
}
# Parses project subset/prefix argument.
# Usage: parse_project_arg <arg>
# Sets: OUT_PROJECT_SUBSET, OUT_PROJECT_PREFIX
# Returns 0 if parsed successfully, 1 otherwise.
function parse_project_arg() {
local subsetArg="$1"
OUT_PROJECT_SUBSET=""
OUT_PROJECT_PREFIX=""
case "$subsetArg" in
m|main)
OUT_PROJECT_SUBSET=main
;;
c|compose)
OUT_PROJECT_SUBSET=compose
;;
ca|camera)
OUT_PROJECT_SUBSET=camera
;;
f|flan)
OUT_PROJECT_SUBSET=flan
;;
m3|material3)
OUT_PROJECT_PREFIX=":compose:material3,:compose:integration-tests:material-catalog"
;;
media)
OUT_PROJECT_SUBSET=media
;;
w|wear)
OUT_PROJECT_SUBSET=wear
;;
g|glance)
OUT_PROJECT_SUBSET=glance
;;
k|kmp)
OUT_PROJECT_SUBSET=kmp
;;
native)
OUT_PROJECT_SUBSET=native
;;
a|all)
OUT_PROJECT_SUBSET=all
;;
t|tools)
OUT_PROJECT_SUBSET=tools
;;
wm|window)
OUT_PROJECT_SUBSET=window
;;
x|xr)
OUT_PROJECT_SUBSET=xr
;;
:*)
OUT_PROJECT_PREFIX=$subsetArg
;;
*)
return 1
;;
esac
return 0
}
# Shared arguments parsing logic for studiow and codew.
# Usage: parse_ide_args "$@"
# Sets: clearCaches, cleanSettings, reinstall, acceptTos, projectSubset, projectPrefix
# Returns 0 if parsed successfully, 1 otherwise.
function parse_ide_args() {
clearCaches=false
cleanSettings=false
reinstall=false
acceptTos=false
projectSubset=""
projectPrefix=""
local subsetArg=""
while [ "$1" != "" ]; do
local arg="$1"
shift
# parse options
if [ "$arg" == "--acceptTos" ]; then
acceptTos=true
continue
fi
if [ "$arg" == "--clear-caches" ]; then
clearCaches=true
continue
fi
if [ "$arg" == "--clean" ]; then
clearCaches=true
cleanSettings=true
continue
fi
if [ "$arg" == "--reinstall" ]; then
clearCaches=true
cleanSettings=true
reinstall=true
continue
fi
# parse arguments
subsetArg="$arg"
if parse_project_arg "$subsetArg"; then
if [ "$projectSubset" != "" ] || [ "$projectPrefix" != "" ]; then
echo "Unrecognized argument '$subsetArg', cannot specify project subset or prefix more than once"
return 1
fi
projectSubset=$OUT_PROJECT_SUBSET
projectPrefix=$OUT_PROJECT_PREFIX
else
echo "Unrecognized argument: '$subsetArg'"
return 1
fi
done
if [ "$projectSubset" == "" ] && [ "$projectPrefix" == "" ]; then
echo "Project subset or project prefix is required"
return 1
fi
return 0
}
# ensures the nonexistence of a file or directory, and makes a backup
function backup_and_remove() {
path="$1"
backup_dir_name="$2"
backup="$(dirname $path)/$backup_dir_name/$(basename $path)"
if [ -e "$path" ]; then
echo "Moving $path to $backup"
rm -rf "$backup"
mkdir -p "$(dirname $backup)"
mv "$path" "$backup"
fi
}
function show_usage() {
local script_name="$1"
echo "Usage: ${script_name} [--clear-caches] [--clean] [--reinstall] <project subset>|<comma-separated project prefixes>"
echo
show_usage_options
show_project_subsets
echo "Or use project prefixes to scope down even further. For example:"
echo " ${script_name} :palette:palette"
echo " ${script_name} :room3,:sqlite"
echo
}
function setup_env() {
local script_name="$1"
if [ "$projectSubset" != "" ]; then
unset PROJECT_PREFIX
export ANDROIDX_PROJECTS=$projectSubset
echo "Tip: Opening a full project subset ('$projectSubset') can be slow and memory-intensive."
echo " If you only need a specific module or set of modules, specify them using project prefixes to speed up launch time."
echo " ${script_name} will automatically load all required dependencies for you."
echo " Example: ./${script_name} :compose:material"
echo
else
unset ANDROIDX_PROJECTS
export PROJECT_PREFIX=$projectPrefix
fi
}