2
.gitignore
vendored
@@ -1,2 +0,0 @@
|
||||
proprietary/*
|
||||
prebuilt/archive
|
14
LICENSE
@@ -1,14 +0,0 @@
|
||||
Copyright 2011-15 The CyanogenMod Project
|
||||
2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
26
README.mkdn
@@ -1,26 +0,0 @@
|
||||
LineageOS
|
||||
===========
|
||||
|
||||
Getting started
|
||||
---------------
|
||||
|
||||
Please see the [LineageOS Wiki](https://wiki.lineageos.org/) for building instructions, by device.
|
||||
|
||||
|
||||
Submitting patches
|
||||
------------------
|
||||
Patches are always welcome! Please submit your patches via LineageOS Gerrit!
|
||||
|
||||
Simply follow our guide on [how to submit patches](https://wiki.lineageos.org/submitting-patch-howto.html).
|
||||
|
||||
To view the status of your and others' patches, visit [LineageOS Gerrit Code Review](https://review.lineageos.org/).
|
||||
|
||||
|
||||
Buildbot
|
||||
--------
|
||||
|
||||
All supported devices are built weekly and periodically as changes are committed to ensure the source trees remain buildable.
|
||||
|
||||
You can view the current build statuses at [LineageOS Buildkite](https://buildkite.com/lineageos).
|
||||
|
||||
Builds produced weekly by the buildbot can be downloaded from [LineageOS downloads](https://download.lineageos.org/).
|
@@ -1,63 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2016 The CyanogenMod Project
|
||||
# 2017-2024 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
TARGET_GENERATED_BOOTANIMATION := $(TARGET_OUT_INTERMEDIATES)/BOOTANIMATION/bootanimation.zip
|
||||
$(TARGET_GENERATED_BOOTANIMATION): INTERMEDIATES := $(call intermediates-dir-for,BOOTANIMATION,bootanimation)
|
||||
$(TARGET_GENERATED_BOOTANIMATION): $(SOONG_ZIP)
|
||||
@echo "Building bootanimation.zip"
|
||||
@rm -rf $(dir $@)
|
||||
@mkdir -p $(INTERMEDIATES)
|
||||
$(hide) tar xfp vendor/lineage/bootanimation/bootanimation.tar -C $(INTERMEDIATES)
|
||||
$(hide) if [ $(TARGET_SCREEN_HEIGHT) -lt $(TARGET_SCREEN_WIDTH) ]; then \
|
||||
IMAGEWIDTH=$(TARGET_SCREEN_HEIGHT); \
|
||||
else \
|
||||
IMAGEWIDTH=$(TARGET_SCREEN_WIDTH); \
|
||||
fi; \
|
||||
IMAGESCALEWIDTH=$$IMAGEWIDTH; \
|
||||
IMAGESCALEHEIGHT=$$(expr $$IMAGESCALEWIDTH / 3); \
|
||||
if [ "$(TARGET_BOOTANIMATION_HALF_RES)" = "true" ]; then \
|
||||
IMAGEWIDTH="$$(expr "$$IMAGEWIDTH" / 2)"; \
|
||||
fi; \
|
||||
IMAGEHEIGHT=$$(expr $$IMAGEWIDTH / 3); \
|
||||
RESOLUTION="$$IMAGEWIDTH"x"$$IMAGEHEIGHT"; \
|
||||
prebuilts/tools-lineage/${HOST_OS}-x86/bin/mogrify -resize $$RESOLUTION -colors 256 $(INTERMEDIATES)/*/*.png; \
|
||||
echo "$$IMAGESCALEWIDTH $$IMAGESCALEHEIGHT 60" > $(INTERMEDIATES)/desc.txt; \
|
||||
cat vendor/lineage/bootanimation/desc.txt >> $(INTERMEDIATES)/desc.txt
|
||||
$(hide) $(SOONG_ZIP) -L 0 -o $@ -C $(INTERMEDIATES) -D $(INTERMEDIATES)
|
||||
|
||||
ifeq ($(TARGET_BOOTANIMATION),)
|
||||
TARGET_BOOTANIMATION := $(TARGET_GENERATED_BOOTANIMATION)
|
||||
endif
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := bootanimation.zip
|
||||
LOCAL_MODULE_CLASS := ETC
|
||||
LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT)/media
|
||||
|
||||
include $(BUILD_SYSTEM)/base_rules.mk
|
||||
|
||||
$(LOCAL_BUILT_MODULE): $(TARGET_BOOTANIMATION)
|
||||
@cp $(TARGET_BOOTANIMATION) $@
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
BOOTANIMATION_SYMLINK := $(TARGET_OUT_PRODUCT)/media/bootanimation-dark.zip
|
||||
$(BOOTANIMATION_SYMLINK): $(LOCAL_INSTALLED_MODULE)
|
||||
@mkdir -p $(dir $@)
|
||||
$(hide) ln -sf bootanimation.zip $@
|
||||
|
||||
ALL_DEFAULT_INSTALLED_MODULES += $(BOOTANIMATION_SYMLINK)
|
@@ -1,17 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2017 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/BOOTANIMATION)
|
@@ -1,3 +0,0 @@
|
||||
c 1 0 part0
|
||||
c 0 0 part1
|
||||
c 1 0 part2
|
@@ -14,4 +14,4 @@
|
||||
# limitations under the License.
|
||||
|
||||
# Rules for QCOM targets
|
||||
include $(TOPDIR)vendor/lineage/build/core/qcom_target.mk
|
||||
include $(TOPDIR)vendor/minus/build/core/qcom_target.mk
|
||||
|
@@ -6,4 +6,4 @@ $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))
|
||||
endef
|
||||
|
||||
# Include board/platform macros
|
||||
include vendor/lineage/build/core/utils.mk
|
||||
include vendor/minus/build/core/utils.mk
|
||||
|
6
build/core/version.mk
Normal file
@@ -0,0 +1,6 @@
|
||||
ADDITIONAL_SYSTEM_PROPERTIES += \
|
||||
ro.minus.build.date=$(BUILD_DATE) \
|
||||
ro.minus.fingerprint=$(ROM_FINGERPRINT) \
|
||||
ro.minus.version=$(MINUS_VERSION) \
|
||||
ro.minus.device=$(MINUS_BUILD) \
|
||||
ro.modversion=$(MINUS_VERSION)
|
@@ -9,12 +9,12 @@ function check_product()
|
||||
echo "Couldn't locate the top of the tree. Try setting TOP." >&2
|
||||
return
|
||||
fi
|
||||
if (echo -n $1 | grep -q -e "^lineage_") ; then
|
||||
LINEAGE_BUILD=$(echo -n $1 | sed -e 's/^lineage_//g')
|
||||
if (echo -n $1 | grep -q -e "^minus_") ; then
|
||||
MINUS_BUILD=$(echo -n $1 | sed -e 's/^minus_//g')
|
||||
else
|
||||
LINEAGE_BUILD=
|
||||
MINUS_BUILD=
|
||||
fi
|
||||
export LINEAGE_BUILD
|
||||
export MINUS_BUILD
|
||||
|
||||
TARGET_PRODUCT=$1 \
|
||||
TARGET_RELEASE=$2 \
|
||||
@@ -41,7 +41,7 @@ function breakfast()
|
||||
{
|
||||
target=$1
|
||||
local variant=$2
|
||||
source ${ANDROID_BUILD_TOP}/vendor/lineage/vars/aosp_target_release
|
||||
source ${ANDROID_BUILD_TOP}/vendor/minus/vars/aosp_target_release
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
# No arguments, so let's have the full menu
|
||||
@@ -51,12 +51,12 @@ function breakfast()
|
||||
# A buildtype was specified, assume a full device name
|
||||
lunch $target
|
||||
else
|
||||
# This is probably just the Lineage model name
|
||||
# This is probably just the Minus model name
|
||||
if [ -z "$variant" ]; then
|
||||
variant="userdebug"
|
||||
fi
|
||||
|
||||
lunch lineage_$target-$aosp_target_release-$variant
|
||||
lunch minus_$target-$aosp_target_release-$variant
|
||||
fi
|
||||
fi
|
||||
return $?
|
||||
@@ -67,7 +67,7 @@ alias bib=breakfast
|
||||
function eat()
|
||||
{
|
||||
if [ "$OUT" ] ; then
|
||||
ZIPPATH=`ls -tr "$OUT"/lineage-*.zip | tail -1`
|
||||
ZIPPATH=`ls -tr "$OUT"/minus-*.zip | tail -1`
|
||||
if [ ! -f $ZIPPATH ] ; then
|
||||
echo "Nothing to eat"
|
||||
return 1
|
||||
@@ -75,13 +75,13 @@ function eat()
|
||||
echo "Waiting for device..."
|
||||
adb wait-for-device-recovery
|
||||
echo "Found device"
|
||||
if (adb shell getprop ro.lineage.device | grep -q "$LINEAGE_BUILD"); then
|
||||
if (adb shell getprop ro.minus.device | grep -q "$MINUS_BUILD"); then
|
||||
echo "Rebooting to sideload for install"
|
||||
adb reboot sideload-auto-reboot
|
||||
adb wait-for-sideload
|
||||
adb sideload $ZIPPATH
|
||||
else
|
||||
echo "The connected device does not appear to be $LINEAGE_BUILD, run away!"
|
||||
echo "The connected device does not appear to be $MINUS_BUILD, run away!"
|
||||
fi
|
||||
return $?
|
||||
else
|
||||
@@ -205,45 +205,6 @@ function dddclient()
|
||||
fi
|
||||
}
|
||||
|
||||
function lineageremote()
|
||||
{
|
||||
if ! git rev-parse --git-dir &> /dev/null
|
||||
then
|
||||
echo ".git directory not found. Please run this from the root directory of the Android repository you wish to set up."
|
||||
return 1
|
||||
fi
|
||||
git remote rm lineage 2> /dev/null
|
||||
local REMOTE=$(git config --get remote.github.projectname)
|
||||
local LINEAGE="true"
|
||||
if [ -z "$REMOTE" ]
|
||||
then
|
||||
REMOTE=$(git config --get remote.aosp.projectname)
|
||||
LINEAGE="false"
|
||||
fi
|
||||
if [ -z "$REMOTE" ]
|
||||
then
|
||||
REMOTE=$(git config --get remote.clo.projectname)
|
||||
LINEAGE="false"
|
||||
fi
|
||||
|
||||
if [ $LINEAGE = "false" ]
|
||||
then
|
||||
local PROJECT=$(echo $REMOTE | sed -e "s#platform/#android/#g; s#/#_#g")
|
||||
local PFX="LineageOS/"
|
||||
else
|
||||
local PROJECT=$REMOTE
|
||||
fi
|
||||
|
||||
local LINEAGE_USER=$(git config --get review.review.lineageos.org.username)
|
||||
if [ -z "$LINEAGE_USER" ]
|
||||
then
|
||||
git remote add lineage ssh://review.lineageos.org:29418/$PFX$PROJECT
|
||||
else
|
||||
git remote add lineage ssh://$LINEAGE_USER@review.lineageos.org:29418/$PFX$PROJECT
|
||||
fi
|
||||
echo "Remote 'lineage' created"
|
||||
}
|
||||
|
||||
function aospremote()
|
||||
{
|
||||
if ! git rev-parse --git-dir &> /dev/null
|
||||
@@ -321,7 +282,7 @@ function githubremote()
|
||||
|
||||
local PROJECT=$(echo $REMOTE | sed -e "s#platform/#android/#g; s#/#_#g")
|
||||
|
||||
git remote add github https://github.com/LineageOS/$PROJECT
|
||||
git remote add github https://github.com/MinusOS/$PROJECT
|
||||
echo "Remote 'github' created"
|
||||
}
|
||||
|
||||
@@ -366,14 +327,14 @@ function installboot()
|
||||
adb wait-for-device-recovery
|
||||
adb root
|
||||
adb wait-for-device-recovery
|
||||
if (adb shell getprop ro.lineage.device | grep -q "$LINEAGE_BUILD");
|
||||
if (adb shell getprop ro.minus.device | grep -q "$MINUS_BUILD");
|
||||
then
|
||||
adb push $OUT/boot.img /cache/
|
||||
adb shell dd if=/cache/boot.img of=$PARTITION
|
||||
adb shell rm -rf /cache/boot.img
|
||||
echo "Installation complete."
|
||||
else
|
||||
echo "The connected device does not appear to be $LINEAGE_BUILD, run away!"
|
||||
echo "The connected device does not appear to be $MINUS_BUILD, run away!"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -404,296 +365,17 @@ function installrecovery()
|
||||
adb wait-for-device-recovery
|
||||
adb root
|
||||
adb wait-for-device-recovery
|
||||
if (adb shell getprop ro.lineage.device | grep -q "$LINEAGE_BUILD");
|
||||
if (adb shell getprop ro.minus.device | grep -q "$MINUS_BUILD");
|
||||
then
|
||||
adb push $OUT/recovery.img /cache/
|
||||
adb shell dd if=/cache/recovery.img of=$PARTITION
|
||||
adb shell rm -rf /cache/recovery.img
|
||||
echo "Installation complete."
|
||||
else
|
||||
echo "The connected device does not appear to be $LINEAGE_BUILD, run away!"
|
||||
echo "The connected device does not appear to be $MINUS_BUILD, run away!"
|
||||
fi
|
||||
}
|
||||
|
||||
function lineagegerrit() {
|
||||
if [ "$(basename $SHELL)" = "zsh" ]; then
|
||||
# zsh does not define FUNCNAME, derive from funcstack
|
||||
local FUNCNAME=$funcstack[1]
|
||||
fi
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
$FUNCNAME help
|
||||
return 1
|
||||
fi
|
||||
local user=`git config --get review.review.lineageos.org.username`
|
||||
local review=`git config --get remote.github.review`
|
||||
local project=`git config --get remote.github.projectname`
|
||||
local command=$1
|
||||
shift
|
||||
case $command in
|
||||
help)
|
||||
if [ $# -eq 0 ]; then
|
||||
cat <<EOF
|
||||
Usage:
|
||||
$FUNCNAME COMMAND [OPTIONS] [CHANGE-ID[/PATCH-SET]][{@|^|~|:}ARG] [-- ARGS]
|
||||
|
||||
Commands:
|
||||
fetch Just fetch the change as FETCH_HEAD
|
||||
help Show this help, or for a specific command
|
||||
pull Pull a change into current branch
|
||||
push Push HEAD or a local branch to Gerrit for a specific branch
|
||||
|
||||
Any other Git commands that support refname would work as:
|
||||
git fetch URL CHANGE && git COMMAND OPTIONS FETCH_HEAD{@|^|~|:}ARG -- ARGS
|
||||
|
||||
See '$FUNCNAME help COMMAND' for more information on a specific command.
|
||||
|
||||
Example:
|
||||
$FUNCNAME checkout -b topic 1234/5
|
||||
works as:
|
||||
git fetch http://DOMAIN/p/PROJECT refs/changes/34/1234/5 \\
|
||||
&& git checkout -b topic FETCH_HEAD
|
||||
will checkout a new branch 'topic' base on patch-set 5 of change 1234.
|
||||
Patch-set 1 will be fetched if omitted.
|
||||
EOF
|
||||
return
|
||||
fi
|
||||
case $1 in
|
||||
__cmg_*) echo "For internal use only." ;;
|
||||
changes|for)
|
||||
if [ "$FUNCNAME" = "lineagegerrit" ]; then
|
||||
echo "'$FUNCNAME $1' is deprecated."
|
||||
fi
|
||||
;;
|
||||
help) $FUNCNAME help ;;
|
||||
fetch|pull) cat <<EOF
|
||||
usage: $FUNCNAME $1 [OPTIONS] CHANGE-ID[/PATCH-SET]
|
||||
|
||||
works as:
|
||||
git $1 OPTIONS http://DOMAIN/p/PROJECT \\
|
||||
refs/changes/HASH/CHANGE-ID/{PATCH-SET|1}
|
||||
|
||||
Example:
|
||||
$FUNCNAME $1 1234
|
||||
will $1 patch-set 1 of change 1234
|
||||
EOF
|
||||
;;
|
||||
push) cat <<EOF
|
||||
usage: $FUNCNAME push [OPTIONS] [LOCAL_BRANCH:]REMOTE_BRANCH
|
||||
|
||||
works as:
|
||||
git push OPTIONS ssh://USER@DOMAIN:29418/PROJECT \\
|
||||
{LOCAL_BRANCH|HEAD}:refs/for/REMOTE_BRANCH
|
||||
|
||||
Example:
|
||||
$FUNCNAME push fix6789:gingerbread
|
||||
will push local branch 'fix6789' to Gerrit for branch 'gingerbread'.
|
||||
HEAD will be pushed from local if omitted.
|
||||
EOF
|
||||
;;
|
||||
*)
|
||||
$FUNCNAME __cmg_err_not_supported $1 && return
|
||||
cat <<EOF
|
||||
usage: $FUNCNAME $1 [OPTIONS] CHANGE-ID[/PATCH-SET][{@|^|~|:}ARG] [-- ARGS]
|
||||
|
||||
works as:
|
||||
git fetch http://DOMAIN/p/PROJECT \\
|
||||
refs/changes/HASH/CHANGE-ID/{PATCH-SET|1} \\
|
||||
&& git $1 OPTIONS FETCH_HEAD{@|^|~|:}ARG -- ARGS
|
||||
EOF
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
__cmg_get_ref)
|
||||
$FUNCNAME __cmg_err_no_arg $command $# && return 1
|
||||
local change_id patchset_id hash
|
||||
case $1 in
|
||||
*/*)
|
||||
change_id=${1%%/*}
|
||||
patchset_id=${1#*/}
|
||||
;;
|
||||
*)
|
||||
change_id=$1
|
||||
patchset_id=1
|
||||
;;
|
||||
esac
|
||||
hash=$(($change_id % 100))
|
||||
case $hash in
|
||||
[0-9]) hash="0$hash" ;;
|
||||
esac
|
||||
echo "refs/changes/$hash/$change_id/$patchset_id"
|
||||
;;
|
||||
fetch|pull)
|
||||
$FUNCNAME __cmg_err_no_arg $command $# help && return 1
|
||||
$FUNCNAME __cmg_err_not_repo && return 1
|
||||
local change=$1
|
||||
shift
|
||||
git $command $@ http://$review/p/$project \
|
||||
$($FUNCNAME __cmg_get_ref $change) || return 1
|
||||
;;
|
||||
push)
|
||||
$FUNCNAME __cmg_err_no_arg $command $# help && return 1
|
||||
$FUNCNAME __cmg_err_not_repo && return 1
|
||||
if [ -z "$user" ]; then
|
||||
echo >&2 "Gerrit username not found."
|
||||
return 1
|
||||
fi
|
||||
local local_branch remote_branch
|
||||
case $1 in
|
||||
*:*)
|
||||
local_branch=${1%:*}
|
||||
remote_branch=${1##*:}
|
||||
;;
|
||||
*)
|
||||
local_branch=HEAD
|
||||
remote_branch=$1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
git push $@ ssh://$user@$review:29418/$project \
|
||||
${local_branch}:refs/for/$remote_branch || return 1
|
||||
;;
|
||||
changes|for)
|
||||
if [ "$FUNCNAME" = "lineagegerrit" ]; then
|
||||
echo >&2 "'$FUNCNAME $command' is deprecated."
|
||||
fi
|
||||
;;
|
||||
__cmg_err_no_arg)
|
||||
if [ $# -lt 2 ]; then
|
||||
echo >&2 "'$FUNCNAME $command' missing argument."
|
||||
elif [ $2 -eq 0 ]; then
|
||||
if [ -n "$3" ]; then
|
||||
$FUNCNAME help $1
|
||||
else
|
||||
echo >&2 "'$FUNCNAME $1' missing argument."
|
||||
fi
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
__cmg_err_not_repo)
|
||||
if [ -z "$review" -o -z "$project" ]; then
|
||||
echo >&2 "Not currently in any reviewable repository."
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
__cmg_err_not_supported)
|
||||
$FUNCNAME __cmg_err_no_arg $command $# && return
|
||||
case $1 in
|
||||
#TODO: filter more git commands that don't use refname
|
||||
init|add|rm|mv|status|clone|remote|bisect|config|stash)
|
||||
echo >&2 "'$FUNCNAME $1' is not supported."
|
||||
;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
;;
|
||||
#TODO: other special cases?
|
||||
*)
|
||||
$FUNCNAME __cmg_err_not_supported $command && return 1
|
||||
$FUNCNAME __cmg_err_no_arg $command $# help && return 1
|
||||
$FUNCNAME __cmg_err_not_repo && return 1
|
||||
local args="$@"
|
||||
local change pre_args refs_arg post_args
|
||||
case "$args" in
|
||||
*--\ *)
|
||||
pre_args=${args%%-- *}
|
||||
post_args="-- ${args#*-- }"
|
||||
;;
|
||||
*) pre_args="$args" ;;
|
||||
esac
|
||||
args=($pre_args)
|
||||
pre_args=
|
||||
if [ ${#args[@]} -gt 0 ]; then
|
||||
change=${args[${#args[@]}-1]}
|
||||
fi
|
||||
if [ ${#args[@]} -gt 1 ]; then
|
||||
pre_args=${args[0]}
|
||||
for ((i=1; i<${#args[@]}-1; i++)); do
|
||||
pre_args="$pre_args ${args[$i]}"
|
||||
done
|
||||
fi
|
||||
while ((1)); do
|
||||
case $change in
|
||||
""|--)
|
||||
$FUNCNAME help $command
|
||||
return 1
|
||||
;;
|
||||
*@*)
|
||||
if [ -z "$refs_arg" ]; then
|
||||
refs_arg="@${change#*@}"
|
||||
change=${change%%@*}
|
||||
fi
|
||||
;;
|
||||
*~*)
|
||||
if [ -z "$refs_arg" ]; then
|
||||
refs_arg="~${change#*~}"
|
||||
change=${change%%~*}
|
||||
fi
|
||||
;;
|
||||
*^*)
|
||||
if [ -z "$refs_arg" ]; then
|
||||
refs_arg="^${change#*^}"
|
||||
change=${change%%^*}
|
||||
fi
|
||||
;;
|
||||
*:*)
|
||||
if [ -z "$refs_arg" ]; then
|
||||
refs_arg=":${change#*:}"
|
||||
change=${change%%:*}
|
||||
fi
|
||||
;;
|
||||
*) break ;;
|
||||
esac
|
||||
done
|
||||
$FUNCNAME fetch $change \
|
||||
&& git $command $pre_args FETCH_HEAD$refs_arg $post_args \
|
||||
|| return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
function lineagerebase() {
|
||||
local repo=$1
|
||||
local refs=$2
|
||||
local pwd="$(pwd)"
|
||||
local dir="$(gettop)/$repo"
|
||||
|
||||
if [ -z $repo ] || [ -z $refs ]; then
|
||||
echo "LineageOS Gerrit Rebase Usage: "
|
||||
echo " lineagerebase <path to project> <patch IDs on Gerrit>"
|
||||
echo " The patch IDs appear on the Gerrit commands that are offered."
|
||||
echo " They consist on a series of numbers and slashes, after the text"
|
||||
echo " refs/changes. For example, the ID in the following command is 26/8126/2"
|
||||
echo ""
|
||||
echo " git[...]ges_apps_Camera refs/changes/26/8126/2 && git cherry-pick FETCH_HEAD"
|
||||
echo ""
|
||||
return
|
||||
fi
|
||||
|
||||
if [ ! -d $dir ]; then
|
||||
echo "Directory $dir doesn't exist in tree."
|
||||
return
|
||||
fi
|
||||
cd $dir
|
||||
repo=$(cat .git/config | grep git://github.com | awk '{ print $NF }' | sed s#git://github.com/##g)
|
||||
echo "Starting branch..."
|
||||
repo start tmprebase .
|
||||
echo "Bringing it up to date..."
|
||||
repo sync .
|
||||
echo "Fetching change..."
|
||||
git fetch "http://review.lineageos.org/p/$repo" "refs/changes/$refs" && git cherry-pick FETCH_HEAD
|
||||
if [ "$?" != "0" ]; then
|
||||
echo "Error cherry-picking. Not uploading!"
|
||||
return
|
||||
fi
|
||||
echo "Uploading..."
|
||||
repo upload .
|
||||
echo "Cleaning up..."
|
||||
repo abandon tmprebase .
|
||||
cd $pwd
|
||||
}
|
||||
|
||||
function mka() {
|
||||
m "$@"
|
||||
}
|
||||
@@ -766,7 +448,7 @@ function dopush()
|
||||
echo "Device Found."
|
||||
fi
|
||||
|
||||
if (adb shell getprop ro.lineage.device | grep -q "$LINEAGE_BUILD") || [ "$FORCE_PUSH" = "true" ];
|
||||
if (adb shell getprop ro.minus.device | grep -q "$MINUS_BUILD") || [ "$FORCE_PUSH" = "true" ];
|
||||
then
|
||||
# retrieve IP and PORT info if we're using a TCP connection
|
||||
TCPIPPORT=$(adb devices \
|
||||
@@ -885,7 +567,7 @@ EOF
|
||||
rm -f $OUT/.log
|
||||
return 0
|
||||
else
|
||||
echo "The connected device does not appear to be $LINEAGE_BUILD, run away!"
|
||||
echo "The connected device does not appear to be $MINUS_BUILD, run away!"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -896,11 +578,6 @@ alias mmmap='dopush mmma'
|
||||
alias mkap='dopush mka'
|
||||
alias cmkap='dopush cmka'
|
||||
|
||||
function repopick() {
|
||||
T=$(gettop)
|
||||
$T/vendor/lineage/build/tools/repopick.py $@
|
||||
}
|
||||
|
||||
function sort-blobs-list() {
|
||||
T=$(gettop)
|
||||
$T/tools/extract-utils/sort-blobs-list.py $@
|
||||
@@ -910,7 +587,7 @@ function fixup_common_out_dir() {
|
||||
common_out_dir=$(_get_build_var_cached OUT_DIR)/target/common
|
||||
target_device=$(_get_build_var_cached TARGET_DEVICE)
|
||||
common_target_out=common-${target_device}
|
||||
if [ ! -z $LINEAGE_FIXUP_COMMON_OUT ]; then
|
||||
if [ ! -z $MINUS_FIXUP_COMMON_OUT ]; then
|
||||
if [ -d ${common_out_dir} ] && [ ! -L ${common_out_dir} ]; then
|
||||
mv ${common_out_dir} ${common_out_dir}-${target_device}
|
||||
ln -s ${common_target_out} ${common_out_dir}
|
||||
|
@@ -1,8 +1,8 @@
|
||||
// LineageOS soong configs
|
||||
// MinusOS soong configs
|
||||
|
||||
bootstrap_go_package {
|
||||
name: "soong-lineage-generator",
|
||||
pkgPath: "lineage/soong/generator",
|
||||
name: "soong-minus-generator",
|
||||
pkgPath: "minus/soong/generator",
|
||||
deps: [
|
||||
"blueprint",
|
||||
"blueprint-pathtools",
|
||||
@@ -17,11 +17,11 @@ bootstrap_go_package {
|
||||
pluginFor: ["soong_build"],
|
||||
}
|
||||
|
||||
lineage_generator {
|
||||
minus_generator {
|
||||
name: "generated_kernel_includes",
|
||||
|
||||
// The headers make command
|
||||
cmd: "$(PATH_OVERRIDE_SOONG) $(KERNEL_MAKE_CMD) $(KERNEL_MAKE_FLAGS) -C $(TARGET_KERNEL_SOURCE) O=$(KERNEL_BUILD_OUT_PREFIX)$(genDir) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) headers_install && vendor/lineage/tools/clean_headers.sh $(KERNEL_BUILD_OUT_PREFIX)$(genDir)",
|
||||
cmd: "$(PATH_OVERRIDE_SOONG) $(KERNEL_MAKE_CMD) $(KERNEL_MAKE_FLAGS) -C $(TARGET_KERNEL_SOURCE) O=$(KERNEL_BUILD_OUT_PREFIX)$(genDir) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) headers_install && vendor/minus/tools/clean_headers.sh $(KERNEL_BUILD_OUT_PREFIX)$(genDir)",
|
||||
|
||||
// Directories that can be imported by a cc_* module generated_headers property
|
||||
export_include_dirs: [
|
||||
@@ -42,11 +42,11 @@ lineage_generator {
|
||||
],
|
||||
}
|
||||
|
||||
lineage_generator {
|
||||
minus_generator {
|
||||
name: "prebuilt_kernel_includes",
|
||||
|
||||
// The headers extract command
|
||||
cmd: "mkdir -p $(KERNEL_BUILD_OUT_PREFIX)$(genDir) && gzip -d < $(TARGET_PREBUILT_KERNEL_HEADERS) | tar -x -C $(KERNEL_BUILD_OUT_PREFIX)$(genDir) && vendor/lineage/tools/clean_headers.sh $(KERNEL_BUILD_OUT_PREFIX)$(genDir)",
|
||||
cmd: "mkdir -p $(KERNEL_BUILD_OUT_PREFIX)$(genDir) && gzip -d < $(TARGET_PREBUILT_KERNEL_HEADERS) | tar -x -C $(KERNEL_BUILD_OUT_PREFIX)$(genDir) && vendor/minus/tools/clean_headers.sh $(KERNEL_BUILD_OUT_PREFIX)$(genDir)",
|
||||
|
||||
// Directories that can be imported by a cc_* module generated_headers property
|
||||
export_include_dirs: [
|
||||
@@ -59,8 +59,8 @@ lineage_generator {
|
||||
}
|
||||
|
||||
bootstrap_go_package {
|
||||
name: "soong-lineage-mkdir",
|
||||
pkgPath: "lineage/soong/mkdir",
|
||||
name: "soong-minus-mkdir",
|
||||
pkgPath: "minus/soong/mkdir",
|
||||
deps: [
|
||||
"blueprint",
|
||||
"blueprint-pathtools",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
function __print_lineage_functions_help() {
|
||||
function __print_minus_functions_help() {
|
||||
cat <<EOF
|
||||
Additional LineageOS functions:
|
||||
Additional functions:
|
||||
- brunch: Runs "breakfast" and "mka bacon" for the provided device target.
|
||||
- breakfast: Wrapper for "lunch".
|
||||
- eat: Reboots to recovery and installs the compiled OTA package.
|
||||
@@ -9,12 +9,9 @@ Additional LineageOS functions:
|
||||
- mmp: Builds all of the modules in the current directory and pushes them to the device.
|
||||
- mmap: Builds all of the modules in the current directory and its dependencies, then pushes the package to the device.
|
||||
- mmmp: Builds all of the modules in the supplied directories and pushes them to the device.
|
||||
- lineagegerrit: A Git wrapper that fetches/pushes patch from/to LineageOS Gerrit Review.
|
||||
- lineagerebase: Rebase a Gerrit change and push it again.
|
||||
- lineageremote: Add git remote for LineageOS Gerrit Review.
|
||||
- aospremote: Add git remote for matching AOSP repository.
|
||||
- cloremote: Add git remote for matching CodeLinaro repository.
|
||||
- githubremote: Add git remote for LineageOS Github.
|
||||
- githubremote: Add git remote for Github.
|
||||
- privateremote: Add git remote for Github with ssh access.
|
||||
- mka: Alias to "m".
|
||||
- mkap: Builds the module(s) using mka and pushes them to the device.
|
||||
|
@@ -27,7 +27,7 @@ import (
|
||||
)
|
||||
|
||||
func init() {
|
||||
android.RegisterModuleType("lineage_generator", GeneratorFactory)
|
||||
android.RegisterModuleType("minus_generator", GeneratorFactory)
|
||||
}
|
||||
|
||||
var String = proptools.String
|
||||
@@ -203,12 +203,12 @@ func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
if depRoot == "" {
|
||||
depRoot = ctx.ModuleDir()
|
||||
} else {
|
||||
depRoot = lineageExpandVariables(ctx, depRoot)
|
||||
depRoot = minusExpandVariables(ctx, depRoot)
|
||||
}
|
||||
|
||||
// Glob dep_files property
|
||||
for _, dep_file := range g.properties.Dep_files {
|
||||
dep_file = lineageExpandVariables(ctx, dep_file)
|
||||
dep_file = minusExpandVariables(ctx, dep_file)
|
||||
globPath := filepath.Join(depRoot, dep_file)
|
||||
paths, err := ctx.GlobWithDeps(globPath, nil)
|
||||
if err != nil {
|
||||
@@ -220,7 +220,7 @@ func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
}
|
||||
}
|
||||
|
||||
cmd := lineageExpandVariables(ctx, String(g.properties.Cmd))
|
||||
cmd := minusExpandVariables(ctx, String(g.properties.Cmd))
|
||||
|
||||
rawCommand, err := android.Expand(cmd, func(name string) (string, error) {
|
||||
switch name {
|
||||
|
@@ -6,12 +6,12 @@ import (
|
||||
"android/soong/android"
|
||||
)
|
||||
|
||||
func lineageExpandVariables(ctx android.ModuleContext, in string) string {
|
||||
lineageVars := ctx.Config().VendorConfig("lineageVarsPlugin")
|
||||
func minusExpandVariables(ctx android.ModuleContext, in string) string {
|
||||
minusVars := ctx.Config().VendorConfig("minusVarsPlugin")
|
||||
|
||||
out, err := android.Expand(in, func(name string) (string, error) {
|
||||
if lineageVars.IsSet(name) {
|
||||
return lineageVars.String(name), nil
|
||||
if minusVars.IsSet(name) {
|
||||
return minusVars.String(name), nil
|
||||
}
|
||||
// This variable is not for us, restore what the original
|
||||
// variable string will have looked like for an Expand
|
||||
|
@@ -18,7 +18,7 @@ import (
|
||||
"android/soong/android"
|
||||
)
|
||||
|
||||
var pctx = android.NewPackageContext("lineage/soong/mkdir")
|
||||
var pctx = android.NewPackageContext("minus/soong/mkdir")
|
||||
|
||||
func init() {
|
||||
RegisterBuildComponents(android.InitRegistrationContext)
|
||||
|
@@ -58,7 +58,7 @@ func (this *Mkdir) AndroidMkEntries() []android.AndroidMkEntries {
|
||||
Class: "FAKE",
|
||||
// Need at least one output file in order for this to take effect.
|
||||
OutputFile: android.OptionalPathForPath(this.output),
|
||||
Include: "vendor/lineage/build/core/mkdir.mk",
|
||||
Include: "vendor/minus/build/core/mkdir.mk",
|
||||
ExtraEntries: []android.AndroidMkExtraEntriesFunc{
|
||||
func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
|
||||
entries.SetString("LOCAL_SOONG_INSTALL_DIR", this.installDir.String())
|
||||
|
@@ -1,63 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2018-2021 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
PRODUCT_MAKEFILES := \
|
||||
$(LOCAL_DIR)/lineage_cf_car_arm64.mk \
|
||||
$(LOCAL_DIR)/lineage_cf_car_x86_64.mk \
|
||||
$(LOCAL_DIR)/lineage_cf_phone_arm64.mk \
|
||||
$(LOCAL_DIR)/lineage_cf_phone_x86_64.mk \
|
||||
$(LOCAL_DIR)/lineage_cf_tv_x86_64.mk \
|
||||
$(LOCAL_DIR)/lineage_gsi_arm.mk \
|
||||
$(LOCAL_DIR)/lineage_gsi_arm64.mk \
|
||||
$(LOCAL_DIR)/lineage_gsi_x86.mk \
|
||||
$(LOCAL_DIR)/lineage_gsi_x86_64.mk \
|
||||
$(LOCAL_DIR)/lineage_gsi_car_arm64.mk \
|
||||
$(LOCAL_DIR)/lineage_gsi_car_x86_64.mk \
|
||||
$(LOCAL_DIR)/lineage_gsi_tv_arm.mk \
|
||||
$(LOCAL_DIR)/lineage_gsi_tv_arm64.mk \
|
||||
$(LOCAL_DIR)/lineage_gsi_tv_x86.mk \
|
||||
$(LOCAL_DIR)/lineage_gsi_tv_x86_64.mk \
|
||||
$(LOCAL_DIR)/lineage_sdk_car_arm64.mk \
|
||||
$(LOCAL_DIR)/lineage_sdk_car_x86_64.mk \
|
||||
$(LOCAL_DIR)/lineage_sdk_phone_arm64.mk \
|
||||
$(LOCAL_DIR)/lineage_sdk_phone_x86_64.mk \
|
||||
$(LOCAL_DIR)/lineage_sdk_tv_arm.mk \
|
||||
$(LOCAL_DIR)/lineage_sdk_tv_x86.mk \
|
||||
$(LOCAL_DIR)/lineage_sdk_tv_x86_64.mk
|
||||
|
||||
COMMON_LUNCH_CHOICES := \
|
||||
lineage_cf_car_arm64-userdebug \
|
||||
lineage_cf_car_x86_64-userdebug \
|
||||
lineage_cf_phone_arm64-userdebug \
|
||||
lineage_cf_phone_x86_64-userdebug \
|
||||
lineage_cf_tv_x86_64-userdebug \
|
||||
lineage_gsi_arm-userdebug \
|
||||
lineage_gsi_arm64-userdebug \
|
||||
lineage_gsi_x86-userdebug \
|
||||
lineage_gsi_x86_64-userdebug \
|
||||
lineage_gsi_car_arm64-userdebug \
|
||||
lineage_gsi_car_x86_64-userdebug \
|
||||
lineage_gsi_tv_arm-userdebug \
|
||||
lineage_gsi_tv_arm64-userdebug \
|
||||
lineage_gsi_tv_x86-userdebug \
|
||||
lineage_gsi_tv_x86_64-userdebug \
|
||||
lineage_sdk_car_arm64-userdebug \
|
||||
lineage_sdk_car_x86_64-userdebug \
|
||||
lineage_sdk_phone_arm64-userdebug \
|
||||
lineage_sdk_phone_x86_64-userdebug \
|
||||
lineage_sdk_tv_arm-userdebug \
|
||||
lineage_sdk_tv_x86-userdebug \
|
||||
lineage_sdk_tv_x86_64-userdebug
|
@@ -1,15 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 The LineageOS Project
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
$(call inherit-product, device/google/cuttlefish/vsoc_arm64_only/auto/aosp_cf.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_car_target.mk
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
# Enable mainline checking
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
|
||||
|
||||
# Overrides
|
||||
PRODUCT_NAME := lineage_cf_car_arm64
|
||||
PRODUCT_MODEL := LineageOS Cuttlefish car built for arm64
|
@@ -1,15 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 The LineageOS Project
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
$(call inherit-product, device/google/cuttlefish/vsoc_x86_64_only/auto/aosp_cf.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_car_target.mk
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
# Enable mainline checking
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
|
||||
|
||||
# Overrides
|
||||
PRODUCT_NAME := lineage_cf_car_x86_64
|
||||
PRODUCT_MODEL := LineageOS Cuttlefish car built for x86_64
|
@@ -1,12 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 The LineageOS Project
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
$(call inherit-product, device/google/cuttlefish/vsoc_arm64/phone/aosp_cf.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_target.mk
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
# Overrides
|
||||
PRODUCT_NAME := lineage_cf_phone_arm64
|
||||
PRODUCT_MODEL := LineageOS Cuttlefish phone built for arm64
|
@@ -1,12 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 The LineageOS Project
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
$(call inherit-product, device/google/cuttlefish/vsoc_x86_64/phone/aosp_cf.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_target.mk
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
# Overrides
|
||||
PRODUCT_NAME := lineage_cf_phone_x86_64
|
||||
PRODUCT_MODEL := LineageOS Cuttlefish phone built for x86_64
|
@@ -1,12 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 The LineageOS Project
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
$(call inherit-product, device/google/cuttlefish/vsoc_x86_64/tv/aosp_cf.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_tv_target.mk
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
# Overrides
|
||||
PRODUCT_NAME := lineage_cf_tv_x86_64
|
||||
PRODUCT_MODEL := LineageOS Cuttlefish TV built for x86_64
|
@@ -1,21 +0,0 @@
|
||||
# Copyright (C) 2019-2020 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, vendor/lineage/config/common_car.mk)
|
||||
|
||||
EMULATOR_VENDOR_NO_SENSORS := true
|
||||
EMULATOR_VENDOR_NO_SOUND := true
|
||||
|
||||
# Allow building otatools
|
||||
TARGET_FORCE_OTA_PACKAGE := true
|
@@ -1,18 +0,0 @@
|
||||
# Copyright (C) 2019-2020 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, vendor/lineage/config/common_full_phone.mk)
|
||||
|
||||
# Allow building otatools
|
||||
TARGET_FORCE_OTA_PACKAGE := true
|
@@ -1,19 +0,0 @@
|
||||
# Copyright (C) 2019-2020 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, device/google/atv/products/atv_base.mk)
|
||||
$(call inherit-product, vendor/lineage/config/common_full_tv.mk)
|
||||
|
||||
# Allow building otatools
|
||||
TARGET_FORCE_OTA_PACKAGE := true
|
@@ -1,27 +0,0 @@
|
||||
# Copyright (C) 2018-2020 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, device/generic/common/gsi_arm.mk)
|
||||
|
||||
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_target.mk
|
||||
|
||||
PRODUCT_USE_DYNAMIC_PARTITION_SIZE := true
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
PRODUCT_NAME := lineage_gsi_arm
|
||||
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS :=
|
@@ -1,28 +0,0 @@
|
||||
# Copyright (C) 2018-2020 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, device/generic/common/gsi_arm64.mk)
|
||||
|
||||
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_target.mk
|
||||
|
||||
PRODUCT_USE_DYNAMIC_PARTITION_SIZE := true
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
PRODUCT_NAME := lineage_gsi_arm64
|
||||
PRODUCT_DEVICE := generic_arm64
|
||||
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS :=
|
@@ -1,29 +0,0 @@
|
||||
# Copyright (C) 2022 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, device/generic/car/gsi_car_arm64.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_car_target.mk
|
||||
|
||||
PRODUCT_USE_DYNAMIC_PARTITION_SIZE := true
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
# Enable mainline checking
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
|
||||
|
||||
PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \
|
||||
system/app/Home/Home.apk
|
||||
|
||||
PRODUCT_NAME := lineage_gsi_car_arm64
|
@@ -1,29 +0,0 @@
|
||||
# Copyright (C) 2022 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, device/generic/car/gsi_car_x86_64.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_car_target.mk
|
||||
|
||||
PRODUCT_USE_DYNAMIC_PARTITION_SIZE := true
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
# Enable mainline checking
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
|
||||
|
||||
PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \
|
||||
system/app/Home/Home.apk
|
||||
|
||||
PRODUCT_NAME := lineage_gsi_car_x86_64
|
@@ -1,24 +0,0 @@
|
||||
# Copyright (C) 2018-2020 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, build/target/product/gsi_release.mk)
|
||||
$(call inherit-product, device/google/atv/products/aosp_tv_arm.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_tv_target.mk
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
PRODUCT_NAME := lineage_gsi_tv_arm
|
||||
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS :=
|
@@ -1,24 +0,0 @@
|
||||
# Copyright (C) 2018-2020 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, build/target/product/gsi_release.mk)
|
||||
$(call inherit-product, device/google/atv/products/aosp_tv_arm64.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_tv_target.mk
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
PRODUCT_NAME := lineage_gsi_tv_arm64
|
||||
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS :=
|
@@ -1,24 +0,0 @@
|
||||
# Copyright (C) 2018-2020 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, device/google/atv/products/aosp_tv_x86.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_tv_target.mk
|
||||
|
||||
PRODUCT_NAME := lineage_gsi_tv_x86
|
||||
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS :=
|
||||
|
||||
PRODUCT_SDK_ADDON_NAME := lineage
|
||||
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := $(LOCAL_PATH)/source.properties
|
@@ -1,26 +0,0 @@
|
||||
# Copyright (C) 2018-2020 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, device/google/atv/products/aosp_tv_x86_64.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_tv_target.mk
|
||||
|
||||
TARGET_SUPPORTS_64_BIT_APPS := true
|
||||
|
||||
PRODUCT_NAME := lineage_gsi_tv_x86_64
|
||||
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS :=
|
||||
|
||||
PRODUCT_SDK_ADDON_NAME := lineage
|
||||
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := $(LOCAL_PATH)/source.properties
|
@@ -1,23 +0,0 @@
|
||||
# Copyright (C) 2018-2022 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, device/generic/common/gsi_x86.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_target.mk
|
||||
|
||||
PRODUCT_USE_DYNAMIC_PARTITION_SIZE := true
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
PRODUCT_NAME := lineage_gsi_x86
|
@@ -1,23 +0,0 @@
|
||||
# Copyright (C) 2018-2022 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, device/generic/common/gsi_x86_64.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_target.mk
|
||||
|
||||
PRODUCT_USE_DYNAMIC_PARTITION_SIZE := true
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
PRODUCT_NAME := lineage_gsi_x86_64
|
@@ -1,26 +0,0 @@
|
||||
# Copyright (C) 2018-2022 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_car_target.mk
|
||||
|
||||
$(call inherit-product, device/generic/car/emulator/aosp_car_emulator.mk)
|
||||
|
||||
$(call inherit-product, $(SRC_TARGET_DIR)/product/sdk.mk)
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
PRODUCT_NAME := lineage_sdk_car_arm64
|
||||
|
||||
PRODUCT_SDK_ADDON_NAME := lineage
|
||||
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := $(LOCAL_PATH)/source.properties
|
@@ -1,24 +0,0 @@
|
||||
# Copyright (C) 2018-2022 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_car_target.mk
|
||||
|
||||
$(call inherit-product, device/generic/car/emulator/aosp_car_emulator.mk)
|
||||
|
||||
$(call inherit-product, $(SRC_TARGET_DIR)/product/sdk.mk)
|
||||
|
||||
PRODUCT_NAME := lineage_sdk_car_x86_64
|
||||
|
||||
PRODUCT_SDK_ADDON_NAME := lineage
|
||||
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := $(LOCAL_PATH)/source.properties
|
@@ -1,31 +0,0 @@
|
||||
# Copyright (C) 2021-2024 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, device/generic/goldfish/64bitonly/product/sdk_phone64_arm64.mk)
|
||||
$(call inherit-product, vendor/lineage/build/target/product/lineage_sdk_phone_arm64_board.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_target.mk
|
||||
|
||||
# Always build modules from source
|
||||
PRODUCT_MODULE_BUILD_FROM_SOURCE := true
|
||||
|
||||
# Enable mainline checking
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
|
||||
|
||||
# Overrides
|
||||
PRODUCT_NAME := lineage_sdk_phone_arm64
|
||||
PRODUCT_MODEL := LineageOS Android SDK built for arm64
|
||||
|
||||
PRODUCT_SDK_ADDON_NAME := lineage
|
||||
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := vendor/lineage/build/target/product/source.properties
|
@@ -1,22 +0,0 @@
|
||||
# Copyright (C) 2021-2024 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# 2.0G + 8M
|
||||
BOARD_SUPER_PARTITION_SIZE := 2155872256
|
||||
BOARD_EMULATOR_DYNAMIC_PARTITIONS_SIZE := 2147483648
|
||||
|
||||
PRODUCT_SDK_ADDON_COPY_FILES += \
|
||||
device/generic/goldfish/data/etc/advancedFeatures.ini.arm:images/arm64-v8a/advancedFeatures.ini \
|
||||
device/generic/goldfish/data/etc/encryptionkey.img:images/arm64-v8a/encryptionkey.img \
|
||||
$(EMULATOR_KERNEL_FILE):images/arm64-v8a/kernel-ranchu
|
@@ -1,41 +0,0 @@
|
||||
# Copyright (C) 2021-2024 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
$(call inherit-product, device/generic/goldfish/64bitonly/product/sdk_phone64_x86_64.mk)
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_target.mk
|
||||
include device/generic/goldfish/board/kernel/x86_64.mk
|
||||
|
||||
# Always build modules from source
|
||||
PRODUCT_MODULE_BUILD_FROM_SOURCE := true
|
||||
|
||||
# Enable mainline checking
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
|
||||
|
||||
# Overrides
|
||||
PRODUCT_NAME := lineage_sdk_phone_x86_64
|
||||
PRODUCT_MODEL := LineageOS Android SDK built for x86_64
|
||||
|
||||
PRODUCT_SDK_ADDON_NAME := lineage
|
||||
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := $(LOCAL_PATH)/source.properties
|
||||
|
||||
# Increase Partition size: 8G+8M
|
||||
BOARD_SUPER_PARTITION_SIZE ?= 8598323200
|
||||
BOARD_EMULATOR_DYNAMIC_PARTITIONS_SIZE ?= 8589934592
|
||||
|
||||
# Packaging sdk_addon target
|
||||
PRODUCT_SDK_ADDON_COPY_FILES += \
|
||||
device/generic/goldfish/data/etc/advancedFeatures.ini:images/x86_64/advancedFeatures.ini \
|
||||
device/generic/goldfish/data/etc/encryptionkey.img:images/x86_64/encryptionkey.img \
|
||||
$(EMULATOR_KERNEL_FILE):images/x86_64/kernel-ranchu
|
@@ -1,29 +0,0 @@
|
||||
# Copyright (C) 2022 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_tv_target.mk
|
||||
|
||||
$(call inherit-product, device/google/atv/products/sdk_atv_armv7.mk)
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
# Enable mainline checking
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
|
||||
|
||||
# Overrides
|
||||
PRODUCT_NAME := lineage_sdk_tv_arm
|
||||
PRODUCT_MODEL := LineageOS Android TV SDK built for ARM
|
||||
|
||||
PRODUCT_SDK_ADDON_NAME := lineage
|
||||
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := $(LOCAL_PATH)/source.properties
|
@@ -1,30 +0,0 @@
|
||||
# Copyright (C) 2022 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_tv_target.mk
|
||||
|
||||
$(call inherit-product, device/google/atv/products/sdk_atv_x86.mk)
|
||||
|
||||
TARGET_KERNEL_USE := 6.1
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
# Enable mainline checking
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
|
||||
|
||||
# Overrides
|
||||
PRODUCT_NAME := lineage_sdk_tv_x86
|
||||
PRODUCT_MODEL := LineageOS Android TV SDK built for x86
|
||||
|
||||
PRODUCT_SDK_ADDON_NAME := lineage
|
||||
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := $(LOCAL_PATH)/source.properties
|
@@ -1,29 +0,0 @@
|
||||
# Copyright (C) 2024 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
include vendor/lineage/build/target/product/lineage_generic_tv_target.mk
|
||||
|
||||
$(call inherit-product, device/google/atv/products/sdk_atv64_x86_64.mk)
|
||||
|
||||
TARGET_NO_KERNEL_OVERRIDE := true
|
||||
|
||||
# Enable mainline checking
|
||||
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
|
||||
|
||||
# Overrides
|
||||
PRODUCT_NAME := lineage_sdk_tv_x86_64
|
||||
PRODUCT_MODEL := LineageOS Android TV SDK built for x86_64
|
||||
|
||||
PRODUCT_SDK_ADDON_NAME := lineage
|
||||
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := $(LOCAL_PATH)/source.properties
|
@@ -1,23 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDszCCApugAwIBAgIJAOEEE8dzw8VPMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
|
||||
BAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMRIw
|
||||
EAYDVQQKDAlMaW5lYWdlT1MxEjAQBgNVBAsMCUxpbmVhZ2VPUzESMBAGA1UEAwwJ
|
||||
TGluZWFnZU9TMB4XDTE3MDEwNzA0MjEyNVoXDTQ0MDUyNTA0MjEyNVowcDELMAkG
|
||||
A1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUx
|
||||
EjAQBgNVBAoMCUxpbmVhZ2VPUzESMBAGA1UECwwJTGluZWFnZU9TMRIwEAYDVQQD
|
||||
DAlMaW5lYWdlT1MwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmTdPh
|
||||
+EIDj/A/Z7jpvwlTD8KRPLU+NlTHjsINvIsecRNijKWrwIYFYMtELBtR+Yttzl5Z
|
||||
xJA38n9k9IrvBJCrmRBvCAeiEw4aizqs2DTmVvCFS2Amd7ZsAHsUwtDCjQ3GE0He
|
||||
ZI2HnbWannnhKIhzGjuxxh+1j3JawHHeErYQk97MVoWsJHTO4s8i8ORL8ghBDZHF
|
||||
0fYKp5RVSIIrrXVqcOD+F8g/NeX6Wb5N0rRGBI+bQjMhhv8KpH7TnCEN6f2YHFVx
|
||||
nsjzDKrEQVwhYF8T9X0OzfBoLEhOlFZ0jevoDi8uCxz0f7ldkv/0Zz4W9jeB87LH
|
||||
zUuQQEGr6134UFmZAgMBAAGjUDBOMB0GA1UdDgQWBBRyljIn1mxMTV+gkWrCLHk8
|
||||
1F9DXDAfBgNVHSMEGDAWgBRyljIn1mxMTV+gkWrCLHk81F9DXDAMBgNVHRMEBTAD
|
||||
AQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCKJH4ByccucWfewkmT8j9TnAdhjCgZ7k0+
|
||||
rpbSgxc66+ESRpQFxMSAUu8exy8pSawGd7SerFBVvqL+dajdPfyLPM+I+xDEoMJ3
|
||||
ncKGHoC0RRKMGEhc4rS090/wOJJHZZtThlcjdND5vybMwmHngzl8o4CNWhneJvjb
|
||||
hNkqxocrC9vGCsdo5Kx00ULn8sXVwcq7yl0bqtuSMlKxm6CVA3DVVnB8N8OZyTam
|
||||
fgj9F0jOpWVtit1/ohd+1jB5bY3g+ulXCydKBFkJhNXAZf4welNG61SWLkH1gNGk
|
||||
SEYxEuLV9JGjm7n5oqDKxYVcKKNfvbGtSmrqsq6i+QVuc/xIdzfr
|
||||
-----END CERTIFICATE-----
|
||||
|
@@ -1,7 +0,0 @@
|
||||
Pkg.Desc=LineageOS System Image API ${PLATFORM_VERSION} ${TARGET_CPU_ABI}
|
||||
Pkg.Revision=1
|
||||
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
|
||||
SystemImage.Abi=${TARGET_CPU_ABI}
|
||||
SystemImage.TagId=lineage
|
||||
SystemImage.TagDisplay=LineageOS
|
||||
|
@@ -14,16 +14,16 @@
|
||||
# limitations under the License.
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# Lineage OTA update package
|
||||
# Minus OTA update package
|
||||
|
||||
LINEAGE_TARGET_PACKAGE := $(PRODUCT_OUT)/lineage-$(LINEAGE_VERSION).zip
|
||||
MINUS_TARGET_PACKAGE := $(PRODUCT_OUT)/MinusOS-$(MINUS_VERSION).zip
|
||||
|
||||
SHA256 := prebuilts/build-tools/path/$(HOST_PREBUILT_TAG)/sha256sum
|
||||
|
||||
$(LINEAGE_TARGET_PACKAGE): $(INTERNAL_OTA_PACKAGE_TARGET)
|
||||
$(hide) ln -f $(INTERNAL_OTA_PACKAGE_TARGET) $(LINEAGE_TARGET_PACKAGE)
|
||||
$(hide) $(SHA256) $(LINEAGE_TARGET_PACKAGE) | sed "s|$(PRODUCT_OUT)/||" > $(LINEAGE_TARGET_PACKAGE).sha256sum
|
||||
@echo "Package Complete: $(LINEAGE_TARGET_PACKAGE)" >&2
|
||||
$(MINUS_TARGET_PACKAGE): $(INTERNAL_OTA_PACKAGE_TARGET)
|
||||
$(hide) ln -f $(INTERNAL_OTA_PACKAGE_TARGET) $(MINUS_TARGET_PACKAGE)
|
||||
$(hide) $(SHA256) $(MINUS_TARGET_PACKAGE) | sed "s|$(PRODUCT_OUT)/||" > $(MINUS_TARGET_PACKAGE).sha256sum
|
||||
@echo "Package Complete: $(MINUS_TARGET_PACKAGE)" >&2
|
||||
|
||||
.PHONY: bacon
|
||||
bacon: $(LINEAGE_TARGET_PACKAGE) $(DEFAULT_GOAL)
|
||||
bacon: $(MINUS_TARGET_PACKAGE) $(DEFAULT_GOAL)
|
||||
|
@@ -8,7 +8,7 @@ INSTALLED_DTIMAGE_TARGET := $(PRODUCT_OUT)/dt.img
|
||||
ifeq ($(strip $(BOARD_KERNEL_PREBUILT_DT)),)
|
||||
|
||||
ifeq ($(strip $(TARGET_CUSTOM_DTBTOOL)),)
|
||||
DTBTOOL_NAME := dtbToolLineage
|
||||
DTBTOOL_NAME := dtbToolMinus
|
||||
else
|
||||
DTBTOOL_NAME := $(TARGET_CUSTOM_DTBTOOL)
|
||||
endif
|
||||
@@ -16,7 +16,7 @@ endif
|
||||
DTBTOOL := $(HOST_OUT_EXECUTABLES)/$(DTBTOOL_NAME)$(HOST_EXECUTABLE_SUFFIX)
|
||||
|
||||
ifeq ($(strip $(TARGET_CUSTOM_DTBTOOL)),)
|
||||
# dtbToolLineage will search subdirectories
|
||||
# dtbToolMinus will search subdirectories
|
||||
possible_dtb_dirs = $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/
|
||||
else
|
||||
# Most specific paths must come first in possible_dtb_dirs
|
||||
|
@@ -1,77 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2010 The Android Open Source Project
|
||||
# Copyright (C) 2016 The CyanogenMod Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
# Makefile for producing lineage sdk coverage reports.
|
||||
# Run "make lineage-sdk-test-coverage" in the $ANDROID_BUILD_TOP directory.
|
||||
|
||||
lineage_sdk_api_coverage_exe := $(HOST_OUT_EXECUTABLES)/lineage-sdk-api-coverage
|
||||
dexdeps_exe := $(HOST_OUT_EXECUTABLES)/dexdeps
|
||||
|
||||
coverage_out := $(HOST_OUT)/lineage-sdk-api-coverage
|
||||
|
||||
api_text_description := lineage-sdk/api/lineage_current.txt
|
||||
api_xml_description := $(coverage_out)/api.xml
|
||||
$(api_xml_description) : $(api_text_description) $(APICHECK)
|
||||
$(hide) echo "Converting API file to XML: $@"
|
||||
$(hide) mkdir -p $(dir $@)
|
||||
$(hide) $(APICHECK_COMMAND) -convert2xml $< $@
|
||||
|
||||
lineage-sdk-test-coverage-report := $(coverage_out)/lineage-sdk-test-coverage.html
|
||||
|
||||
lineage_sdk_tests_apk := $(call intermediates-dir-for,APPS,LineagePlatformTests)/package.apk
|
||||
lineagesettingsprovider_tests_apk := $(call intermediates-dir-for,APPS,LineageSettingsProviderTests)/package.apk
|
||||
lineage_sdk_api_coverage_dependencies := $(lineage_sdk_api_coverage_exe) $(dexdeps_exe) $(api_xml_description)
|
||||
|
||||
$(lineage-sdk-test-coverage-report): PRIVATE_TEST_CASES := $(lineage_sdk_tests_apk) $(lineagesettingsprovider_tests_apk)
|
||||
$(lineage-sdk-test-coverage-report): PRIVATE_LINEAGE_SDK_API_COVERAGE_EXE := $(lineage_sdk_api_coverage_exe)
|
||||
$(lineage-sdk-test-coverage-report): PRIVATE_DEXDEPS_EXE := $(dexdeps_exe)
|
||||
$(lineage-sdk-test-coverage-report): PRIVATE_API_XML_DESC := $(api_xml_description)
|
||||
$(lineage-sdk-test-coverage-report): $(lineage_sdk_tests_apk) $(lineagesettingsprovider_tests_apk) $(lineage_sdk_api_coverage_dependencies) | $(ACP)
|
||||
$(call generate-lineage-coverage-report,"LINEAGE-SDK API Coverage Report",\
|
||||
$(PRIVATE_TEST_CASES),html)
|
||||
|
||||
.PHONY: lineage-sdk-test-coverage
|
||||
lineage-sdk-test-coverage : $(lineage-sdk-test-coverage-report)
|
||||
|
||||
# Put the test coverage report in the dist dir if "lineage-sdk" is among the build goals.
|
||||
ifneq ($(filter lineage-sdk, $(MAKECMDGOALS)),)
|
||||
$(call dist-for-goals, lineage-sdk, $(lineage-sdk-test-coverage-report):lineage-sdk-test-coverage-report.html)
|
||||
endif
|
||||
|
||||
# Arguments;
|
||||
# 1 - Name of the report printed out on the screen
|
||||
# 2 - List of apk files that will be scanned to generate the report
|
||||
# 3 - Format of the report
|
||||
define generate-lineage-coverage-report
|
||||
$(hide) mkdir -p $(dir $@)
|
||||
$(hide) $(PRIVATE_LINEAGE_SDK_API_COVERAGE_EXE) -d $(PRIVATE_DEXDEPS_EXE) -a $(PRIVATE_API_XML_DESC) -f $(3) -o $@ $(2) -cm
|
||||
@ echo $(1): file://$@
|
||||
endef
|
||||
|
||||
# Reset temp vars
|
||||
lineage_sdk_api_coverage_dependencies :=
|
||||
lineage-sdk-combined-coverage-report :=
|
||||
lineage-sdk-combined-xml-coverage-report :=
|
||||
lineage-sdk-verifier-coverage-report :=
|
||||
lineage-sdk-test-coverage-report :=
|
||||
api_xml_description :=
|
||||
api_text_description :=
|
||||
coverage_out :=
|
||||
dexdeps_exe :=
|
||||
lineage_sdk_api_coverage_exe :=
|
||||
lineage_sdk_verifier_apk :=
|
||||
android_lineage_sdk_zip :=
|
@@ -181,22 +181,18 @@ else
|
||||
$(error "NO KERNEL CONFIG")
|
||||
else
|
||||
ifneq ($(TARGET_FORCE_PREBUILT_KERNEL),)
|
||||
ifneq ($(filter RELEASE NIGHTLY SNAPSHOT EXPERIMENTAL,$(LINEAGE_BUILDTYPE)),)
|
||||
$(error "PREBUILT KERNEL IS NOT ALLOWED ON OFFICIAL BUILDS!")
|
||||
else
|
||||
$(warning **********************************************************)
|
||||
$(warning * Kernel source found and configuration was defined, *)
|
||||
$(warning * but prebuilt kernel is being forced. *)
|
||||
$(warning * While this is likely intentional, *)
|
||||
$(warning * it is NOT SUPPORTED WHATSOEVER. *)
|
||||
$(warning * Generated kernel headers may not align with *)
|
||||
$(warning * the ABI of kernel you're including. *)
|
||||
$(warning * Please unset TARGET_FORCE_PREBUILT_KERNEL *)
|
||||
$(warning * to build the kernel from source. *)
|
||||
$(warning **********************************************************)
|
||||
FULL_KERNEL_BUILD := false
|
||||
KERNEL_BIN := $(TARGET_PREBUILT_KERNEL)
|
||||
endif
|
||||
$(warning **********************************************************)
|
||||
$(warning * Kernel source found and configuration was defined, *)
|
||||
$(warning * but prebuilt kernel is being forced. *)
|
||||
$(warning * While this is likely intentional, *)
|
||||
$(warning * it is NOT SUPPORTED WHATSOEVER. *)
|
||||
$(warning * Generated kernel headers may not align with *)
|
||||
$(warning * the ABI of kernel you're including. *)
|
||||
$(warning * Please unset TARGET_FORCE_PREBUILT_KERNEL *)
|
||||
$(warning * to build the kernel from source. *)
|
||||
$(warning **********************************************************)
|
||||
FULL_KERNEL_BUILD := false
|
||||
KERNEL_BIN := $(TARGET_PREBUILT_KERNEL)
|
||||
else
|
||||
FULL_KERNEL_BUILD := true
|
||||
KERNEL_BIN := $(TARGET_PREBUILT_INT_KERNEL)
|
||||
@@ -370,7 +366,7 @@ endef
|
||||
# $(7): partition image intermediates file list
|
||||
# $(8): external dependency module intermediates dir
|
||||
# Depmod requires a well-formed kernel version so 0.0 is used as a placeholder.
|
||||
define build-image-kernel-modules-lineage
|
||||
define build-image-kernel-modules-minus
|
||||
mkdir -p $(2)/lib/modules$(6)
|
||||
cp $(1) $(2)/lib/modules$(6)
|
||||
rm -rf $(4)
|
||||
@@ -536,19 +532,19 @@ $(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_CONFIG) $(DEPMOD) $(DTC) $(KERNEL_MODULE
|
||||
if [ -n "$$p" ]; then echo $$p; else echo "ERROR: $$m from SYSTEM_KERNEL_MODULES was not found" 1>&2 && exit 1; fi; \
|
||||
done); \
|
||||
[ $$? -ne 0 ] && exit 1; \
|
||||
($(call build-image-kernel-modules-lineage,$$gki_modules,$(SYSTEM_KERNEL_MODULES_OUT),$(SYSTEM_KERNEL_MODULE_MOUNTPOINT)/,$(SYSTEM_KERNEL_DEPMOD_STAGING_DIR),$(BOARD_SYSTEM_KERNEL_MODULES_LOAD),/$(GKI_SUFFIX),$(SYSTEM_KERNEL_MODULES_PARTITION_FILE_LIST),)) || exit "$$?"; \
|
||||
($(call build-image-kernel-modules-minus,$$gki_modules,$(SYSTEM_KERNEL_MODULES_OUT),$(SYSTEM_KERNEL_MODULE_MOUNTPOINT)/,$(SYSTEM_KERNEL_DEPMOD_STAGING_DIR),$(BOARD_SYSTEM_KERNEL_MODULES_LOAD),/$(GKI_SUFFIX),$(SYSTEM_KERNEL_MODULES_PARTITION_FILE_LIST))) || exit "$$?"; \
|
||||
filtered_modules=$$(for n in $$all_modules; do \
|
||||
module_name=$$(basename $$n); \
|
||||
if [[ ! "$(SYSTEM_KERNEL_MODULES)" =~ "$$module_name" ]]; then echo $$n; fi; \
|
||||
done); \
|
||||
($(call build-image-kernel-modules-lineage,$$filtered_modules,$(KERNEL_MODULES_OUT),$(KERNEL_MODULE_MOUNTPOINT)/,$(KERNEL_DEPMOD_STAGING_DIR),$(BOARD_VENDOR_KERNEL_MODULES_LOAD),,$(KERNEL_MODULES_PARTITION_FILE_LIST),$(SYSTEM_KERNEL_DEPMOD_STAGING_DIR)/lib/modules/0.0/$(SYSTEM_KERNEL_MODULE_MOUNTPOINT))) || exit "$$?"; \
|
||||
($(call build-image-kernel-modules-minus,$$filtered_modules,$(KERNEL_MODULES_OUT),$(KERNEL_MODULE_MOUNTPOINT)/,$(KERNEL_DEPMOD_STAGING_DIR),$(BOARD_VENDOR_KERNEL_MODULES_LOAD),,$(KERNEL_MODULES_PARTITION_FILE_LIST),$(SYSTEM_KERNEL_DEPMOD_STAGING_DIR)/lib/modules/0.0/$(SYSTEM_KERNEL_MODULE_MOUNTPOINT))) || exit "$$?"; \
|
||||
(for m in $$(find $(SYSTEM_KERNEL_MODULES_OUT) -type f -name "*.ko"); do \
|
||||
$(KERNEL_OUT)/scripts/sign-file sha1 \
|
||||
$(KERNEL_OUT)/certs/signing_key.pem \
|
||||
$(KERNEL_OUT)/certs/signing_key.x509 "$$m"; \
|
||||
done) || exit "$$?"; \
|
||||
,\
|
||||
($(call build-image-kernel-modules-lineage,$$all_modules,$(KERNEL_MODULES_OUT),$(KERNEL_MODULE_MOUNTPOINT)/,$(KERNEL_DEPMOD_STAGING_DIR),$(BOARD_VENDOR_KERNEL_MODULES_LOAD),,$(KERNEL_MODULES_PARTITION_FILE_LIST),)) || exit "$$?"; \
|
||||
($(call build-image-kernel-modules-minus,$$all_modules,$(KERNEL_MODULES_OUT),$(KERNEL_MODULE_MOUNTPOINT)/,$(KERNEL_DEPMOD_STAGING_DIR),$(BOARD_VENDOR_KERNEL_MODULES_LOAD),,$(KERNEL_MODULES_PARTITION_FILE_LIST),)) || exit "$$?"; \
|
||||
) \
|
||||
$(if $(BOOT_KERNEL_MODULES),\
|
||||
vendor_boot_modules=$$(for m in $(BOOT_KERNEL_MODULES); do \
|
||||
@@ -556,7 +552,7 @@ $(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_CONFIG) $(DEPMOD) $(DTC) $(KERNEL_MODULE
|
||||
if [ -n "$$p" ]; then echo $$p; else echo "ERROR: $$m from BOOT_KERNEL_MODULES was not found" 1>&2 && exit 1; fi; \
|
||||
done); \
|
||||
[ $$? -ne 0 ] && exit 1; \
|
||||
($(call build-image-kernel-modules-lineage,$$vendor_boot_modules,$(KERNEL_VENDOR_RAMDISK_MODULES_OUT),,$(KERNEL_VENDOR_RAMDISK_DEPMOD_STAGING_DIR),$(KERNEL_VENDOR_RAMDISK_KERNEL_MODULES_LOAD),,,)) || exit "$$?"; \
|
||||
($(call build-image-kernel-modules-minus,$$vendor_boot_modules,$(KERNEL_VENDOR_RAMDISK_MODULES_OUT),,$(KERNEL_VENDOR_RAMDISK_DEPMOD_STAGING_DIR),$(KERNEL_VENDOR_RAMDISK_KERNEL_MODULES_LOAD),,)) || exit "$$?"; \
|
||||
) \
|
||||
$(if $(RECOVERY_KERNEL_MODULES),\
|
||||
recovery_modules=$$(for m in $(RECOVERY_KERNEL_MODULES); do \
|
||||
@@ -564,7 +560,7 @@ $(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_CONFIG) $(DEPMOD) $(DTC) $(KERNEL_MODULE
|
||||
if [ -n "$$p" ]; then echo $$p; else echo "ERROR: $$m from RECOVERY_KERNEL_MODULES was not found" 1>&2 && exit 1; fi; \
|
||||
done); \
|
||||
[ $$? -ne 0 ] && exit 1; \
|
||||
($(call build-image-kernel-modules-lineage,$$recovery_modules,$(KERNEL_RECOVERY_MODULES_OUT),,$(KERNEL_RECOVERY_DEPMOD_STAGING_DIR),$(BOARD_RECOVERY_KERNEL_MODULES_LOAD),,,)) || exit "$$?"; \
|
||||
($(call build-image-kernel-modules-minus,$$recovery_modules,$(KERNEL_RECOVERY_MODULES_OUT),,$(KERNEL_RECOVERY_DEPMOD_STAGING_DIR),$(BOARD_RECOVERY_KERNEL_MODULES_LOAD),,,)) || exit "$$?"; \
|
||||
) \
|
||||
fi
|
||||
|
||||
@@ -666,7 +662,7 @@ ifeq ($(BOARD_USES_QCOM_MERGE_DTBS_SCRIPT),true)
|
||||
$(hide) find $(DTBS_BASE) -type f -name "*.dtb*" | xargs rm -f
|
||||
$(hide) find $(DTBS_OUT) -type f -name "*.dtb*" | xargs rm -f
|
||||
mv $(DTB_OUT)/arch/$(KERNEL_ARCH)/boot/dts/vendor/*/*.dtb $(DTB_OUT)/arch/$(KERNEL_ARCH)/boot/dts/vendor/*/*.dtbo $(DTBS_BASE)/
|
||||
PATH=$(abspath $(HOST_OUT_EXECUTABLES)):$${PATH} python3 $(BUILD_TOP)/vendor/lineage/build/tools/merge_dtbs.py --base $(DTBS_BASE) --techpack $(DTB_OUT)/arch/$(KERNEL_ARCH)/boot/dts/vendor/qcom --out $(DTBS_OUT)
|
||||
PATH=$(abspath $(HOST_OUT_EXECUTABLES)):$${PATH} python3 $(BUILD_TOP)/vendor/minus/build/tools/merge_dtbs.py --base $(DTBS_BASE) --techpack $(DTB_OUT)/arch/$(KERNEL_ARCH)/boot/dts/vendor/qcom --out $(DTBS_OUT)
|
||||
cat $(shell find $(DTBS_OUT) -type f -name "${TARGET_MERGE_DTBS_WILDCARD}.dtb" | sort) > $@
|
||||
else
|
||||
cat $(shell find $(DTB_OUT)/arch/$(KERNEL_ARCH)/boot/dts -type f -name "*.dtb" | sort) > $@
|
||||
|
@@ -1,208 +0,0 @@
|
||||
|
||||
/* =============================================================================
|
||||
Columns
|
||||
========================================================================== */
|
||||
/* Applied to body to debug layout alignments
|
||||
.grid {
|
||||
width:100%;
|
||||
height:100%;
|
||||
background:url(../images/grid.png) center repeat-y;
|
||||
top:0px;
|
||||
margin:auto;
|
||||
position:absolute;
|
||||
}
|
||||
*/
|
||||
|
||||
@media screen, projection, print {
|
||||
.full {
|
||||
padding: 2.5em 0;
|
||||
border-top: solid 1px #ddd;
|
||||
border-bottom: solid 1px #ddd;
|
||||
background: #f7f7f7;
|
||||
}
|
||||
.wrap {
|
||||
margin: 0 auto;
|
||||
width: 100%;
|
||||
min-width:600px;
|
||||
clear: both;
|
||||
}
|
||||
.cols {
|
||||
height: 1%;
|
||||
margin: 0 -1.533742331288343558282%;
|
||||
width: 103.06748466257669%}
|
||||
*+html .cols {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.cols:after {
|
||||
clear: both;
|
||||
content: ' ';
|
||||
display: block;
|
||||
height: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12,
|
||||
.col-13, .col-14, .col-15, .col-16 {
|
||||
float: left;
|
||||
margin: 0 1.063829787234% 20px 1.063829787234%;
|
||||
}
|
||||
* html .col-1, * html .col-2, * html .col-3, * html .col-4, * html .col-5, * html .col-6, * html
|
||||
.col-7, * html .col-8, * html .col-9, * html .col-10, * html .col-11, * html .col-12, * html
|
||||
.col-13, * html .col-14, * html .col-15, * html .col-16 {
|
||||
margin: 0;
|
||||
margin: 0 1.063829787234% 20px 1.063829787234%;
|
||||
}
|
||||
[dir='rtl'] .col-1, [dir='rtl'] .col-2, [dir='rtl'] .col-3, [dir='rtl'] .col-4, [dir='rtl'] .col-5,
|
||||
[dir='rtl'] .col-6, [dir='rtl'] .col-7, [dir='rtl'] .col-8, [dir='rtl'] .col-9, [dir='rtl'] .col-10,
|
||||
[dir='rtl'] .col-11, [dir='rtl'] .col-12 {
|
||||
float: right;
|
||||
}
|
||||
.col-1 {
|
||||
width: 4.16666666666667%;
|
||||
}
|
||||
.col-2 {
|
||||
width: 10.4166666666667%;
|
||||
}
|
||||
.col-3 {
|
||||
width: 16.6666666666667%;
|
||||
}
|
||||
.col-4 {
|
||||
width: 22.9166666666667%;
|
||||
}
|
||||
.col-5 {
|
||||
width: 29.1666666666667%;
|
||||
}
|
||||
.col-6 {
|
||||
width: 35.4166666666667%;
|
||||
}
|
||||
.col-7 {
|
||||
width: 41.6666666666667%;
|
||||
}
|
||||
.col-8 {
|
||||
width: 47.9166666666667%;
|
||||
}
|
||||
.col-9 {
|
||||
width: 55.3333333333333%;
|
||||
}
|
||||
.col-10 {
|
||||
width: 60.4166666666667%;
|
||||
}
|
||||
.col-11 {
|
||||
width: 66.6666666666667%;
|
||||
}
|
||||
.col-12 {
|
||||
width: 72.9166666666667%;
|
||||
}
|
||||
.col-13 {
|
||||
width: 79.1666666666667%;
|
||||
}
|
||||
.col-14 {
|
||||
width: 85.4166666666667%;
|
||||
}
|
||||
.col-15 {
|
||||
width: 91.6666666666667%;
|
||||
}
|
||||
.col-16 {
|
||||
width: 97.9166666666667%;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#header .col-1,
|
||||
#nav-x .col-1 { width: 40px }
|
||||
#header .col-2,
|
||||
#nav-x .col-2 { width: 100px }
|
||||
#header .col-3,
|
||||
#nav-x .col-3 { width: 160px }
|
||||
#header .col-4,
|
||||
#nav-x .col-4 { width: 220px }
|
||||
#header .col-5,
|
||||
#nav-x .col-5 { width: 280px }
|
||||
#header .col-6,
|
||||
#nav-x .col-6 { width: 340px }
|
||||
#header .col-7,
|
||||
#nav-x .col-7 { width: 400px }
|
||||
#header .col-8,
|
||||
#nav-x .col-8 { width: 460px }
|
||||
#header .col-9,
|
||||
#nav-x .col-9 { width: 520px }
|
||||
#header .col-10,
|
||||
#nav-x .col-10 { width: 580px }
|
||||
#header .col-11,
|
||||
#nav-x .col-11 { width: 640px }
|
||||
#header .col-12,
|
||||
#nav-x .col-12 { width: 700px }
|
||||
#header .col-13,
|
||||
#nav-x .col-13 { width: 760px }
|
||||
#header .col-14,
|
||||
#nav-x .col-14 { width: 820px }
|
||||
#header .col-15,
|
||||
#nav-x .col-15 { width: 880px }
|
||||
#header .col-16,
|
||||
#nav-x .col-16 { width: 940px }
|
||||
|
||||
|
||||
|
||||
body {
|
||||
padding:0 20px;
|
||||
}
|
||||
#header,
|
||||
#searchResults,
|
||||
#nav-x {
|
||||
margin:0;
|
||||
}
|
||||
#body-content {
|
||||
margin:0;
|
||||
}
|
||||
#body-content > .col-12 {
|
||||
width:77.9804965%;
|
||||
margin:0 0 0 0.97%; /* this percentage chosen to make IE9 happy */
|
||||
}
|
||||
#side-nav {
|
||||
width: 19.9804965%;
|
||||
margin:0 1.063829787234% 0 0;
|
||||
}
|
||||
|
||||
#header .wrap {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
#header-wrapper #nav-x div.wrap,
|
||||
#searchResults.wrap {
|
||||
max-width:100%;
|
||||
}
|
||||
|
||||
.nav-x {
|
||||
margin:-2px 0 0 0;
|
||||
}
|
||||
|
||||
#devdoc-nav.fixed,
|
||||
#devdoc-nav.fixed a.totop {
|
||||
left:20px; /* !important ... for IE i think */
|
||||
}
|
||||
|
||||
#sticky-header {
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
#sticky-header > div {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.sticky-menu {
|
||||
width:100%;
|
||||
left:-20px;
|
||||
}
|
||||
|
||||
.col-right {
|
||||
margin-right:0px;
|
||||
}
|
||||
|
||||
@media screen and (max-width:772px) {
|
||||
.col-5, .col-6, .col-7 {
|
||||
clear: both;
|
||||
width: 97.0238096%}
|
||||
}
|
@@ -1,14 +0,0 @@
|
||||
#masthead-title {
|
||||
color: #373332;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
#headerLeft a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#header {
|
||||
border-bottom: 4px solid rgb(22, 124, 128);
|
||||
}
|
@@ -1,188 +0,0 @@
|
||||
$(document).ready(function() {
|
||||
// prep nav expandos
|
||||
var pagePath = document.location.pathname;
|
||||
if (pagePath.indexOf(SITE_ROOT) == 0) {
|
||||
pagePath = pagePath.substr(SITE_ROOT.length);
|
||||
if (pagePath == '' || pagePath.charAt(pagePath.length - 1) == '/') {
|
||||
pagePath += 'index.html';
|
||||
}
|
||||
}
|
||||
|
||||
if (SITE_ROOT.match(/\.\.\//) || SITE_ROOT == '') {
|
||||
// If running locally, SITE_ROOT will be a relative path, so account for that by
|
||||
// finding the relative URL to this page. This will allow us to find links on the page
|
||||
// leading back to this page.
|
||||
var pathParts = pagePath.split('/');
|
||||
var relativePagePathParts = [];
|
||||
var upDirs = (SITE_ROOT.match(/(\.\.\/)+/) || [''])[0].length / 3;
|
||||
for (var i = 0; i < upDirs; i++) {
|
||||
relativePagePathParts.push('..');
|
||||
}
|
||||
for (var i = 0; i < upDirs; i++) {
|
||||
relativePagePathParts.push(pathParts[pathParts.length - (upDirs - i) - 1]);
|
||||
}
|
||||
relativePagePathParts.push(pathParts[pathParts.length - 1]);
|
||||
pagePath = relativePagePathParts.join('/');
|
||||
} else {
|
||||
// Otherwise the page path should be an absolute URL.
|
||||
pagePath = SITE_ROOT + pagePath;
|
||||
}
|
||||
|
||||
// select current page in sidenav and set up prev/next links if they exist
|
||||
var $selNavLink = $('.nav-y').find('a[href="' + pagePath + '"]');
|
||||
if ($selNavLink.length) {
|
||||
$selListItem = $selNavLink.closest('li');
|
||||
|
||||
$selListItem.addClass('selected');
|
||||
$selListItem.closest('li>ul').addClass('expanded');
|
||||
|
||||
// set up prev links
|
||||
var $prevLink = [];
|
||||
var $prevListItem = $selListItem.prev('li');
|
||||
if ($prevListItem.length) {
|
||||
if ($prevListItem.hasClass('nav-section')) {
|
||||
// jump to last topic of previous section
|
||||
$prevLink = $prevListItem.find('a:last');
|
||||
} else {
|
||||
// jump to previous topic in this section
|
||||
$prevLink = $prevListItem.find('a:eq(0)');
|
||||
}
|
||||
} else {
|
||||
// jump to this section's index page (if it exists)
|
||||
$prevLink = $selListItem.parents('li').find('a');
|
||||
}
|
||||
|
||||
if ($prevLink.length) {
|
||||
var prevHref = $prevLink.attr('href');
|
||||
if (prevHref == SITE_ROOT + 'index.html') {
|
||||
// Don't show Previous when it leads to the homepage
|
||||
$('.prev-page-link').hide();
|
||||
} else {
|
||||
$('.prev-page-link').attr('href', prevHref).show();
|
||||
}
|
||||
} else {
|
||||
$('.prev-page-link').hide();
|
||||
}
|
||||
|
||||
// set up next links
|
||||
var $nextLink = [];
|
||||
if ($selListItem.hasClass('nav-section')) {
|
||||
// we're on an index page, jump to the first topic
|
||||
$nextLink = $selListItem.find('ul').find('a:eq(0)')
|
||||
} else {
|
||||
// jump to the next topic in this section (if it exists)
|
||||
$nextLink = $selListItem.next('li').find('a:eq(0)');
|
||||
if (!$nextLink.length) {
|
||||
// no more topics in this section, jump to the first topic in the next section
|
||||
$nextLink = $selListItem.parents('li').next('li.nav-section').find('a:eq(0)');
|
||||
}
|
||||
}
|
||||
if ($nextLink.length) {
|
||||
$('.next-page-link').attr('href', $nextLink.attr('href')).show();
|
||||
} else {
|
||||
$('.next-page-link').hide();
|
||||
}
|
||||
}
|
||||
|
||||
// Set up expand/collapse behavior
|
||||
$('.nav-y li').has('ul').click(function() {
|
||||
if ($(this).hasClass('expanded')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// hide other
|
||||
var $old = $('.nav-y li.expanded');
|
||||
if ($old.length) {
|
||||
var $oldUl = $old.children('ul');
|
||||
$oldUl.css('height', $oldUl.height() + 'px');
|
||||
window.setTimeout(function() {
|
||||
$oldUl
|
||||
.addClass('animate-height')
|
||||
.css('height', '');
|
||||
}, 0);
|
||||
$old.removeClass('expanded');
|
||||
}
|
||||
|
||||
// show me
|
||||
$(this).addClass('expanded');
|
||||
var $ul = $(this).children('ul');
|
||||
var expandedHeight = $ul.height();
|
||||
$ul
|
||||
.removeClass('animate-height')
|
||||
.css('height', 0);
|
||||
window.setTimeout(function() {
|
||||
$ul
|
||||
.addClass('animate-height')
|
||||
.css('height', expandedHeight + 'px');
|
||||
}, 0);
|
||||
});
|
||||
|
||||
// Stop expand/collapse behavior when clicking on nav section links (since we're navigating away
|
||||
// from the page)
|
||||
$('.nav-y li').has('ul').find('a:eq(0)').click(function(evt) {
|
||||
window.location.href = $(this).attr('href');
|
||||
return false;
|
||||
});
|
||||
|
||||
// Set up play-on-hover <video> tags.
|
||||
$('video.play-on-hover').bind('click', function(){
|
||||
$(this).get(0).load(); // in case the video isn't seekable
|
||||
$(this).get(0).play();
|
||||
});
|
||||
|
||||
// Set up tooltips
|
||||
var TOOLTIP_MARGIN = 10;
|
||||
$('acronym').each(function() {
|
||||
var $target = $(this);
|
||||
var $tooltip = $('<div>')
|
||||
.addClass('tooltip-box')
|
||||
.text($target.attr('title'))
|
||||
.hide()
|
||||
.appendTo('body');
|
||||
$target.removeAttr('title');
|
||||
|
||||
$target.hover(function() {
|
||||
// in
|
||||
var targetRect = $target.offset();
|
||||
targetRect.width = $target.width();
|
||||
targetRect.height = $target.height();
|
||||
|
||||
$tooltip.css({
|
||||
left: targetRect.left,
|
||||
top: targetRect.top + targetRect.height + TOOLTIP_MARGIN
|
||||
});
|
||||
$tooltip.addClass('below');
|
||||
$tooltip.show();
|
||||
}, function() {
|
||||
// out
|
||||
$tooltip.hide();
|
||||
});
|
||||
});
|
||||
|
||||
// Set up <h2> deeplinks
|
||||
$('h2').click(function() {
|
||||
var id = $(this).attr('id');
|
||||
if (id) {
|
||||
document.location.hash = id;
|
||||
}
|
||||
});
|
||||
|
||||
// Set up fixed navbar
|
||||
var navBarIsFixed = false;
|
||||
$(window).scroll(function() {
|
||||
var scrollTop = $(window).scrollTop();
|
||||
var navBarShouldBeFixed = (scrollTop > (100 - 40));
|
||||
if (navBarIsFixed != navBarShouldBeFixed) {
|
||||
if (navBarShouldBeFixed) {
|
||||
$('#nav')
|
||||
.addClass('fixed')
|
||||
.prependTo('#page-container');
|
||||
} else {
|
||||
$('#nav')
|
||||
.removeClass('fixed')
|
||||
.prependTo('#nav-container');
|
||||
}
|
||||
navBarIsFixed = navBarShouldBeFixed;
|
||||
}
|
||||
});
|
||||
});
|
Before Width: | Height: | Size: 894 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 238 B |
Before Width: | Height: | Size: 229 B |
Before Width: | Height: | Size: 228 B |
Before Width: | Height: | Size: 221 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 144 72"><defs><style>.cls-1{fill:#167c80;}</style></defs><title>lineage_logo_mark_ltrbox_teal_144x72</title><g id="mark_-_letterbox" data-name="mark - letterbox"><path class="cls-1" d="M112,36a10,10,0,0,0-7.78,3.72l-.38-.15A73.82,73.82,0,0,0,92,36s0,0,0,0a20,20,0,0,0-40,0v0l-.43.09a73.47,73.47,0,0,0-11.42,3.44l-.38.15a10.1,10.1,0,1,0,1.84,3.57h0A69.34,69.34,0,0,1,52.41,40a20,20,0,0,0,39.18,0,69.32,69.32,0,0,1,10.78,3.24h0A10,10,0,1,0,112,36ZM32,52a6,6,0,1,1,6-6A6,6,0,0,1,32,52Zm40,0A16,16,0,1,1,88,36,16,16,0,0,1,72,52Zm40,0a6,6,0,1,1,6-6A6,6,0,0,1,112,52ZM80,36a8,8,0,1,1-8-8A8,8,0,0,1,80,36Z"/></g></svg>
|
Before Width: | Height: | Size: 664 B |
@@ -1,679 +0,0 @@
|
||||
<?cs include:"doctype.cs" ?>
|
||||
<?cs include:"macros.cs" ?>
|
||||
<?cs include:"macros_override.cs" ?>
|
||||
<html<?cs if:devsite ?> devsite<?cs /if ?>>
|
||||
<?cs include:"head_tag.cs" ?>
|
||||
<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
|
||||
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
|
||||
if:reference ?> reference<?cs
|
||||
/if ?><?cs
|
||||
elif:design ?>design<?cs
|
||||
elif:distribute ?>distribute<?cs
|
||||
/if ?>" itemscope itemtype="http://schema.org/Article">
|
||||
<div id="doc-api-level" class="<?cs var:class.since ?>" style="display:none"></div>
|
||||
<a name="top"></a>
|
||||
<?cs include:"header.cs" ?>
|
||||
|
||||
<div class="col-12" id="doc-col">
|
||||
|
||||
<div id="api-info-block">
|
||||
|
||||
<?cs # are there inherited members ?>
|
||||
<?cs each:cl=class.inherited ?>
|
||||
<?cs if:subcount(cl.methods) ?>
|
||||
<?cs set:inhmethods = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:subcount(cl.constants) ?>
|
||||
<?cs set:inhconstants = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:subcount(cl.fields) ?>
|
||||
<?cs set:inhfields = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:subcount(cl.attrs) ?>
|
||||
<?cs set:inhattrs = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs /each ?>
|
||||
|
||||
<div class="sum-details-links">
|
||||
<?cs if:inhattrs || inhconstants || inhfields || inhmethods || (!class.subclasses.hidden &&
|
||||
(subcount(class.subclasses.direct) || subcount(class.subclasses.indirect))) ?>
|
||||
Summary:
|
||||
<?cs if:subcount(class.inners) ?>
|
||||
<a href="#nestedclasses">Nested Classes</a>
|
||||
<?cs set:linkcount = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:subcount(class.attrs) ?>
|
||||
<?cs if:linkcount ?>| <?cs /if ?><a href="#lattrs">XML Attrs</a>
|
||||
<?cs set:linkcount = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:inhattrs ?>
|
||||
<?cs if:linkcount ?>| <?cs /if ?><a href="#inhattrs">Inherited XML Attrs</a>
|
||||
<?cs set:linkcount = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:subcount(class.enumConstants) ?>
|
||||
<?cs if:linkcount ?>| <?cs /if ?><a href="#enumconstants">Enums</a>
|
||||
<?cs set:linkcount = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:subcount(class.constants) ?>
|
||||
<?cs if:linkcount ?>| <?cs /if ?><a href="#constants">Constants</a>
|
||||
<?cs set:linkcount = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:inhconstants ?>
|
||||
<?cs if:linkcount ?>| <?cs /if ?><a href="#inhconstants">Inherited Constants</a>
|
||||
<?cs set:linkcount = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:subcount(class.fields) ?>
|
||||
<?cs if:linkcount ?>| <?cs /if ?><a href="#lfields">Fields</a>
|
||||
<?cs set:linkcount = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:inhfields ?>
|
||||
<?cs if:linkcount ?>| <?cs /if ?><a href="#inhfields">Inherited Fields</a>
|
||||
<?cs set:linkcount = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:subcount(class.ctors.public) ?>
|
||||
<?cs if:linkcount ?>| <?cs /if ?><a href="#pubctors">Ctors</a>
|
||||
<?cs set:linkcount = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:subcount(class.ctors.protected) ?>
|
||||
<?cs if:linkcount ?>| <?cs /if ?><a href="#proctors">Protected Ctors</a>
|
||||
<?cs set:linkcount = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:subcount(class.methods.public) ?>
|
||||
<?cs if:linkcount ?>| <?cs /if ?><a href="#pubmethods">Methods</a>
|
||||
<?cs set:linkcount = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:subcount(class.methods.protected) ?>
|
||||
<?cs if:linkcount ?>| <?cs /if ?><a href="#promethods">Protected Methods</a>
|
||||
<?cs set:linkcount = #1 ?>
|
||||
<?cs /if ?>
|
||||
<?cs if:inhmethods ?>
|
||||
<?cs if:linkcount ?>| <?cs /if ?><a href="#inhmethods">Inherited Methods</a>
|
||||
<?cs /if ?>
|
||||
| <a href="#" onclick="return toggleAllClassInherited()" id="toggleAllClassInherited">[Expand All]</a>
|
||||
<?cs /if ?>
|
||||
</div><!-- end sum-details-links -->
|
||||
<div class="api-level">
|
||||
<?cs call:since_tags(class) ?><?cs
|
||||
if:class.deprecatedsince
|
||||
?><br>Deprecated since <a href="<?cs var:toroot ?>guide/topics/manifest/uses-sdk-element.html#ApiLevels"
|
||||
>API level <?cs var:class.deprecatedsince ?></a><?cs
|
||||
/if ?>
|
||||
<?cs call:federated_refs(class) ?>
|
||||
</div>
|
||||
</div><!-- end api-info-block -->
|
||||
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ======== START OF CLASS DATA ======== -->
|
||||
|
||||
<div id="jd-header">
|
||||
<?cs var:class.scope ?>
|
||||
<?cs var:class.static ?>
|
||||
<?cs var:class.final ?>
|
||||
<?cs var:class.abstract ?>
|
||||
<?cs var:class.kind ?>
|
||||
<h1 itemprop="name"><?cs var:class.name ?></h1>
|
||||
|
||||
<?cs set:colspan = subcount(class.inheritance) ?>
|
||||
<?cs each:supr = class.inheritance ?>
|
||||
<?cs if:colspan == 2 ?>
|
||||
extends <?cs call:type_link(supr.short_class) ?><br/>
|
||||
<?cs /if ?>
|
||||
<?cs if:last(supr) && subcount(supr.interfaces) ?>
|
||||
implements
|
||||
<?cs each:t=supr.interfaces ?>
|
||||
<?cs call:type_link(t) ?>
|
||||
<?cs /each ?>
|
||||
<?cs /if ?>
|
||||
<?cs set:colspan = colspan-1 ?>
|
||||
<?cs /each ?>
|
||||
<?cs call:show_annotations_list(class) ?>
|
||||
|
||||
</div><!-- end header -->
|
||||
|
||||
<div id="naMessage"></div>
|
||||
|
||||
<div id="jd-content" class="api apilevel-<?cs var:class.since ?>">
|
||||
<table class="jd-inheritance-table">
|
||||
<?cs set:colspan = subcount(class.inheritance) ?>
|
||||
<?cs each:supr = class.inheritance ?>
|
||||
<tr>
|
||||
<?cs loop:i = 1, (subcount(class.inheritance)-colspan), 1 ?>
|
||||
<td class="jd-inheritance-space"> <?cs if:(subcount(class.inheritance)-colspan) == i ?> ↳<?cs /if ?></td>
|
||||
<?cs /loop ?>
|
||||
<td colspan="<?cs var:colspan ?>" class="jd-inheritance-class-cell"><?cs
|
||||
if:colspan == 1
|
||||
?><?cs call:class_name(class.qualifiedType) ?><?cs
|
||||
else
|
||||
?><?cs call:type_link(supr.class) ?><?cs
|
||||
/if ?></td>
|
||||
</tr>
|
||||
<?cs set:colspan = colspan-1 ?>
|
||||
<?cs /each ?>
|
||||
</table>
|
||||
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
|
||||
<?cs if:subcount(class.subclasses.direct) && !class.subclasses.hidden ?>
|
||||
<table class="jd-sumtable jd-sumtable-subclasses"><tr><td colspan="12" style="border:none;margin:0;padding:0;">
|
||||
<?cs call:expando_trigger("subclasses-direct", "closed") ?>Known Direct Subclasses
|
||||
<?cs call:expandable_class_list("subclasses-direct", class.subclasses.direct, "list") ?>
|
||||
</td></tr></table>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs if:subcount(class.subclasses.indirect) && !class.subclasses.hidden ?>
|
||||
<table class="jd-sumtable jd-sumtable-subclasses"><tr><td colspan="12" style="border:none;margin:0;padding:0;">
|
||||
<?cs call:expando_trigger("subclasses-indirect", "closed") ?>Known Indirect Subclasses
|
||||
<?cs call:expandable_class_list("subclasses-indirect", class.subclasses.indirect, "list") ?>
|
||||
</td></tr></table>
|
||||
<?cs /if ?>
|
||||
|
||||
<div class="jd-descr">
|
||||
<?cs call:deprecated_warning(class) ?>
|
||||
<?cs if:subcount(class.descr) ?>
|
||||
<h2>Class Overview</h2>
|
||||
<p itemprop="articleBody"><?cs call:tag_list(class.descr) ?></p>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs call:see_also_tags(class.seeAlso) ?>
|
||||
|
||||
</div><!-- jd-descr -->
|
||||
|
||||
|
||||
<?cs # summary macros ?>
|
||||
|
||||
<?cs def:write_method_summary(methods, included) ?>
|
||||
<?cs set:count = #1 ?>
|
||||
<?cs each:method = methods ?>
|
||||
<?cs # The apilevel-N class MUST BE LAST in the sequence of class names ?>
|
||||
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:method.since ?>" >
|
||||
<td class="jd-typecol"><nobr>
|
||||
<?cs var:method.abstract ?>
|
||||
<?cs var:method.synchronized ?>
|
||||
<?cs var:method.final ?>
|
||||
<?cs var:method.static ?>
|
||||
<?cs call:type_link(method.generic) ?>
|
||||
<?cs call:type_link(method.returnType) ?></nobr>
|
||||
</td>
|
||||
<td class="jd-linkcol" width="100%"><nobr>
|
||||
<span class="sympad"><?cs call:cond_link(method.name, toroot, method.href, included) ?></span>(<?cs call:parameter_list(method.params) ?>)</nobr>
|
||||
<?cs if:subcount(method.shortDescr) || subcount(method.deprecated) ?>
|
||||
<div class="jd-descrdiv">
|
||||
<?cs call:short_descr(method) ?>
|
||||
<?cs call:show_annotations_list(method) ?>
|
||||
</div>
|
||||
<?cs /if ?>
|
||||
</td></tr>
|
||||
<?cs set:count = count + #1 ?>
|
||||
<?cs /each ?>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs def:write_field_summary(fields, included) ?>
|
||||
<?cs set:count = #1 ?>
|
||||
<?cs each:field=fields ?>
|
||||
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:field.since ?>" >
|
||||
<td class="jd-typecol"><nobr>
|
||||
<?cs var:field.scope ?>
|
||||
<?cs var:field.static ?>
|
||||
<?cs var:field.final ?>
|
||||
<?cs call:type_link(field.type) ?></nobr></td>
|
||||
<td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, included) ?></td>
|
||||
<td class="jd-descrcol" width="100%">
|
||||
<?cs call:short_descr(field) ?>
|
||||
<?cs call:show_annotations_list(field) ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?cs set:count = count + #1 ?>
|
||||
<?cs /each ?>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs def:write_constant_summary(fields, included) ?>
|
||||
<?cs set:count = #1 ?>
|
||||
<?cs each:field=fields ?>
|
||||
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:field.since ?>" >
|
||||
<td class="jd-typecol"><?cs call:type_link(field.type) ?></td>
|
||||
<td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, included) ?></td>
|
||||
<td class="jd-descrcol" width="100%">
|
||||
<?cs call:short_descr(field) ?>
|
||||
<?cs call:show_annotations_list(field) ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?cs set:count = count + #1 ?>
|
||||
<?cs /each ?>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs def:write_attr_summary(attrs, included) ?>
|
||||
<?cs set:count = #1 ?>
|
||||
<tr>
|
||||
<td><nobr><em>Attribute Name</em></nobr></td>
|
||||
<td><nobr><em>Related Method</em></nobr></td>
|
||||
<td><nobr><em>Description</em></nobr></td>
|
||||
</tr>
|
||||
<?cs each:attr=attrs ?>
|
||||
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:attr.since ?>" >
|
||||
<td class="jd-linkcol"><?cs if:included ?><a href="<?cs var:toroot ?><?cs var:attr.href ?>"><?cs /if ?><?cs var:attr.name ?><?cs if:included ?></a><?cs /if ?></td>
|
||||
<td class="jd-linkcol"><?cs each:m=attr.methods ?>
|
||||
<?cs call:cond_link(m.name, toroot, m.href, included) ?>
|
||||
<?cs /each ?>
|
||||
</td>
|
||||
<td class="jd-descrcol" width="100%">
|
||||
<?cs call:short_descr(attr) ?>
|
||||
<?cs call:show_annotations_list(attr) ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?cs set:count = count + #1 ?>
|
||||
<?cs /each ?>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs def:write_inners_summary(classes) ?>
|
||||
<?cs set:count = #1 ?>
|
||||
<?cs each:cl=class.inners ?>
|
||||
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:cl.since ?>" >
|
||||
<td class="jd-typecol"><nobr>
|
||||
<?cs var:cl.scope ?>
|
||||
<?cs var:cl.static ?>
|
||||
<?cs var:cl.final ?>
|
||||
<?cs var:cl.abstract ?>
|
||||
<?cs var:cl.kind ?></nobr></td>
|
||||
<td class="jd-linkcol"><?cs call:type_link(cl.type) ?></td>
|
||||
<td class="jd-descrcol" width="100%">
|
||||
<?cs call:short_descr(cl) ?>
|
||||
<?cs call:show_annotations_list(cl) ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?cs set:count = count + #1 ?>
|
||||
<?cs /each ?>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs # end macros ?>
|
||||
|
||||
<div class="jd-descr">
|
||||
<?cs # make sure there's a summary view to display ?>
|
||||
<?cs if:subcount(class.inners)
|
||||
|| subcount(class.attrs)
|
||||
|| inhattrs
|
||||
|| subcount(class.enumConstants)
|
||||
|| subcount(class.constants)
|
||||
|| inhconstants
|
||||
|| subcount(class.fields)
|
||||
|| inhfields
|
||||
|| subcount(class.ctors.public)
|
||||
|| subcount(class.ctors.protected)
|
||||
|| subcount(class.methods.public)
|
||||
|| subcount(class.methods.protected)
|
||||
|| inhmethods ?>
|
||||
<h2>Summary</h2>
|
||||
|
||||
<?cs if:subcount(class.inners) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ======== NESTED CLASS SUMMARY ======== -->
|
||||
<table id="nestedclasses" class="jd-sumtable"><tr><th colspan="12">Nested Classes</th></tr>
|
||||
<?cs call:write_inners_summary(class.inners) ?>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<?cs if:subcount(class.attrs) ?>
|
||||
<!-- =========== FIELD SUMMARY =========== -->
|
||||
<table id="lattrs" class="jd-sumtable"><tr><th colspan="12">XML Attributes</th></tr>
|
||||
<?cs call:write_attr_summary(class.attrs, 1) ?>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs # if there are inherited attrs, write the table ?>
|
||||
<?cs if:inhattrs ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- =========== FIELD SUMMARY =========== -->
|
||||
<table id="inhattrs" class="jd-sumtable"><tr><th>
|
||||
<a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a>
|
||||
<div style="clear:left;">Inherited XML Attributes</div></th></tr>
|
||||
<?cs each:cl=class.inherited ?>
|
||||
<?cs if:subcount(cl.attrs) ?>
|
||||
<tr class="api apilevel-<?cs var:cl.since ?>" >
|
||||
<td colspan="12">
|
||||
<?cs call:expando_trigger("inherited-attrs-"+cl.qualified, "closed") ?>From <?cs var:cl.kind ?>
|
||||
<?cs call:cond_link(cl.qualified, toroot, cl.link, cl.included) ?>
|
||||
<div id="inherited-attrs-<?cs var:cl.qualified ?>">
|
||||
<div id="inherited-attrs-<?cs var:cl.qualified ?>-list"
|
||||
class="jd-inheritedlinks">
|
||||
</div>
|
||||
<div id="inherited-attrs-<?cs var:cl.qualified ?>-summary" style="display: none;">
|
||||
<table class="jd-sumtable-expando">
|
||||
<?cs call:write_attr_summary(cl.attrs, cl.included) ?></table>
|
||||
</div>
|
||||
</div>
|
||||
</td></tr>
|
||||
<?cs /if ?>
|
||||
<?cs /each ?>
|
||||
</table>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs if:subcount(class.enumConstants) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- =========== ENUM CONSTANT SUMMARY =========== -->
|
||||
<table id="enumconstants" class="jd-sumtable"><tr><th colspan="12">Enum Values</th></tr>
|
||||
<?cs set:count = #1 ?>
|
||||
<?cs each:field=class.enumConstants ?>
|
||||
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:field.since ?>" >
|
||||
<td class="jd-descrcol"><?cs call:type_link(field.type) ?> </td>
|
||||
<td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, cl.included) ?> </td>
|
||||
<td class="jd-descrcol" width="100%">
|
||||
<?cs call:short_descr(field) ?>
|
||||
<?cs call:show_annotations_list(field) ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?cs set:count = count + #1 ?>
|
||||
<?cs /each ?>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs if:subcount(class.constants) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- =========== ENUM CONSTANT SUMMARY =========== -->
|
||||
<table id="constants" class="jd-sumtable"><tr><th colspan="12">Constants</th></tr>
|
||||
<?cs call:write_constant_summary(class.constants, 1) ?>
|
||||
</table>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs # if there are inherited constants, write the table ?>
|
||||
<?cs if:inhconstants ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- =========== ENUM CONSTANT SUMMARY =========== -->
|
||||
<table id="inhconstants" class="jd-sumtable"><tr><th>
|
||||
<a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a>
|
||||
<div style="clear:left;">Inherited Constants</div></th></tr>
|
||||
<?cs each:cl=class.inherited ?>
|
||||
<?cs if:subcount(cl.constants) ?>
|
||||
<tr class="api apilevel-<?cs var:cl.since ?>" >
|
||||
<td colspan="12">
|
||||
<?cs call:expando_trigger("inherited-constants-"+cl.qualified, "closed") ?>From <?cs var:cl.kind ?>
|
||||
<?cs call:cond_link(cl.qualified, toroot, cl.link, cl.included) ?>
|
||||
<div id="inherited-constants-<?cs var:cl.qualified ?>">
|
||||
<div id="inherited-constants-<?cs var:cl.qualified ?>-list"
|
||||
class="jd-inheritedlinks">
|
||||
</div>
|
||||
<div id="inherited-constants-<?cs var:cl.qualified ?>-summary" style="display: none;">
|
||||
<table class="jd-sumtable-expando">
|
||||
<?cs call:write_constant_summary(cl.constants, cl.included) ?></table>
|
||||
</div>
|
||||
</div>
|
||||
</td></tr>
|
||||
<?cs /if ?>
|
||||
<?cs /each ?>
|
||||
</table>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs if:subcount(class.fields) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- =========== FIELD SUMMARY =========== -->
|
||||
<table id="lfields" class="jd-sumtable"><tr><th colspan="12">Fields</th></tr>
|
||||
<?cs call:write_field_summary(class.fields, 1) ?>
|
||||
</table>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs # if there are inherited fields, write the table ?>
|
||||
<?cs if:inhfields ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- =========== FIELD SUMMARY =========== -->
|
||||
<table id="inhfields" class="jd-sumtable"><tr><th>
|
||||
<a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a>
|
||||
<div style="clear:left;">Inherited Fields</div></th></tr>
|
||||
<?cs each:cl=class.inherited ?>
|
||||
<?cs if:subcount(cl.fields) ?>
|
||||
<tr class="api apilevel-<?cs var:cl.since ?>" >
|
||||
<td colspan="12">
|
||||
<?cs call:expando_trigger("inherited-fields-"+cl.qualified, "closed") ?>From <?cs var:cl.kind ?>
|
||||
<?cs call:cond_link(cl.qualified, toroot, cl.link, cl.included) ?>
|
||||
<div id="inherited-fields-<?cs var:cl.qualified ?>">
|
||||
<div id="inherited-fields-<?cs var:cl.qualified ?>-list"
|
||||
class="jd-inheritedlinks">
|
||||
</div>
|
||||
<div id="inherited-fields-<?cs var:cl.qualified ?>-summary" style="display: none;">
|
||||
<table class="jd-sumtable-expando">
|
||||
<?cs call:write_field_summary(cl.fields, cl.included) ?></table>
|
||||
</div>
|
||||
</div>
|
||||
</td></tr>
|
||||
<?cs /if ?>
|
||||
<?cs /each ?>
|
||||
</table>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs if:subcount(class.ctors.public) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
|
||||
<table id="pubctors" class="jd-sumtable"><tr><th colspan="12">Public Constructors</th></tr>
|
||||
<?cs call:write_method_summary(class.ctors.public, 1) ?>
|
||||
</table>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs if:subcount(class.ctors.protected) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
|
||||
<table id="proctors" class="jd-sumtable"><tr><th colspan="12">Protected Constructors</th></tr>
|
||||
<?cs call:write_method_summary(class.ctors.protected, 1) ?>
|
||||
</table>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs if:subcount(class.methods.public) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ========== METHOD SUMMARY =========== -->
|
||||
<table id="pubmethods" class="jd-sumtable"><tr><th colspan="12">Public Methods</th></tr>
|
||||
<?cs call:write_method_summary(class.methods.public, 1) ?>
|
||||
</table>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs if:subcount(class.methods.protected) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ========== METHOD SUMMARY =========== -->
|
||||
<table id="promethods" class="jd-sumtable"><tr><th colspan="12">Protected Methods</th></tr>
|
||||
<?cs call:write_method_summary(class.methods.protected, 1) ?>
|
||||
</table>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs # if there are inherited methods, write the table ?>
|
||||
<?cs if:inhmethods ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ========== METHOD SUMMARY =========== -->
|
||||
<table id="inhmethods" class="jd-sumtable"><tr><th>
|
||||
<a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a>
|
||||
<div style="clear:left;">Inherited Methods</div></th></tr>
|
||||
<?cs each:cl=class.inherited ?>
|
||||
<?cs if:subcount(cl.methods) ?>
|
||||
<tr class="api apilevel-<?cs var:cl.since ?>" >
|
||||
<td colspan="12"><?cs call:expando_trigger("inherited-methods-"+cl.qualified, "closed") ?>
|
||||
From <?cs var:cl.kind ?>
|
||||
<?cs if:cl.included ?>
|
||||
<a href="<?cs var:toroot ?><?cs var:cl.link ?>"><?cs var:cl.qualified ?></a>
|
||||
<?cs elif:cl.federated ?>
|
||||
<a href="<?cs var:cl.link ?>"><?cs var:cl.qualified ?></a>
|
||||
<?cs else ?>
|
||||
<?cs var:cl.qualified ?>
|
||||
<?cs /if ?>
|
||||
<div id="inherited-methods-<?cs var:cl.qualified ?>">
|
||||
<div id="inherited-methods-<?cs var:cl.qualified ?>-list"
|
||||
class="jd-inheritedlinks">
|
||||
</div>
|
||||
<div id="inherited-methods-<?cs var:cl.qualified ?>-summary" style="display: none;">
|
||||
<table class="jd-sumtable-expando">
|
||||
<?cs call:write_method_summary(cl.methods, cl.included) ?></table>
|
||||
</div>
|
||||
</div>
|
||||
</td></tr>
|
||||
<?cs /if ?>
|
||||
<?cs /each ?>
|
||||
</table>
|
||||
<?cs /if ?>
|
||||
<?cs /if ?>
|
||||
</div><!-- jd-descr (summary) -->
|
||||
|
||||
<!-- Details -->
|
||||
|
||||
<?cs def:write_field_details(fields) ?>
|
||||
<?cs each:field=fields ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<?cs # the A tag in the next line must remain where it is, so that Eclipse can parse the docs ?>
|
||||
<A NAME="<?cs var:field.anchor ?>"></A>
|
||||
<?cs # The apilevel-N class MUST BE LAST in the sequence of class names ?>
|
||||
<div class="jd-details api apilevel-<?cs var:field.since ?>">
|
||||
<h4 class="jd-details-title">
|
||||
<span class="normal">
|
||||
<?cs var:field.scope ?>
|
||||
<?cs var:field.static ?>
|
||||
<?cs var:field.final ?>
|
||||
<?cs call:type_link(field.type) ?>
|
||||
</span>
|
||||
<?cs var:field.name ?>
|
||||
</h4>
|
||||
<div class="api-level">
|
||||
<?cs call:since_tags(field) ?>
|
||||
<?cs call:federated_refs(field) ?>
|
||||
</div>
|
||||
<div class="jd-details-descr">
|
||||
<?cs call:show_annotations_list(field) ?>
|
||||
<?cs call:description(field) ?>
|
||||
<?cs if:subcount(field.constantValue) ?>
|
||||
<div class="jd-tagdata">
|
||||
<span class="jd-tagtitle">Constant Value: </span>
|
||||
<span>
|
||||
<?cs if:field.constantValue.isString ?>
|
||||
<?cs var:field.constantValue.str ?>
|
||||
<?cs else ?>
|
||||
<?cs var:field.constantValue.dec ?>
|
||||
(<?cs var:field.constantValue.hex ?>)
|
||||
<?cs /if ?>
|
||||
</span>
|
||||
</div>
|
||||
<?cs /if ?>
|
||||
</div>
|
||||
</div>
|
||||
<?cs /each ?>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs def:write_method_details(methods) ?>
|
||||
<?cs each:method=methods ?>
|
||||
<?cs # the A tag in the next line must remain where it is, so that Eclipse can parse the docs ?>
|
||||
<A NAME="<?cs var:method.anchor ?>"></A>
|
||||
<?cs # The apilevel-N class MUST BE LAST in the sequence of class names ?>
|
||||
<div class="jd-details api apilevel-<?cs var:method.since ?>">
|
||||
<h4 class="jd-details-title">
|
||||
<span class="normal">
|
||||
<?cs var:method.scope ?>
|
||||
<?cs var:method.static ?>
|
||||
<?cs var:method.final ?>
|
||||
<?cs var:method.abstract ?>
|
||||
<?cs var:method.synchronized ?>
|
||||
<?cs call:type_link(method.returnType) ?>
|
||||
</span>
|
||||
<span class="sympad"><?cs var:method.name ?></span>
|
||||
<span class="normal">(<?cs call:parameter_list(method.params) ?>)</span>
|
||||
</h4>
|
||||
<div class="api-level">
|
||||
<div><?cs call:since_tags(method) ?></div>
|
||||
<?cs call:federated_refs(method) ?>
|
||||
</div>
|
||||
<div class="jd-details-descr">
|
||||
<?cs call:show_annotations_list(method) ?>
|
||||
<?cs call:description(method) ?>
|
||||
</div>
|
||||
</div>
|
||||
<?cs /each ?>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs def:write_attr_details(attrs) ?>
|
||||
<?cs each:attr=attrs ?>
|
||||
<?cs # the A tag in the next line must remain where it is, so that Eclipse can parse the docs ?>
|
||||
<A NAME="<?cs var:attr.anchor ?>"></A>
|
||||
<div class="jd-details">
|
||||
<h4 class="jd-details-title"><?cs var:attr.name ?>
|
||||
</h4>
|
||||
<div class="jd-details-descr">
|
||||
<?cs call:show_annotations_list(attr) ?>
|
||||
<?cs call:description(attr) ?>
|
||||
|
||||
<div class="jd-tagdata">
|
||||
<h5 class="jd-tagtitle">Related Methods</h5>
|
||||
<ul class="nolist">
|
||||
<?cs each:m=attr.methods ?>
|
||||
<li><a href="<?cs var:toroot ?><?cs var:m.href ?>"><?cs var:m.name ?></a></li>
|
||||
<?cs /each ?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?cs /each ?>
|
||||
<?cs /def ?>
|
||||
|
||||
|
||||
<!-- XML Attributes -->
|
||||
<?cs if:subcount(class.attrs) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ========= FIELD DETAIL ======== -->
|
||||
<h2>XML Attributes</h2>
|
||||
<?cs call:write_attr_details(class.attrs) ?>
|
||||
<?cs /if ?>
|
||||
|
||||
<!-- Enum Values -->
|
||||
<?cs if:subcount(class.enumConstants) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ========= ENUM CONSTANTS DETAIL ======== -->
|
||||
<h2>Enum Values</h2>
|
||||
<?cs call:write_field_details(class.enumConstants) ?>
|
||||
<?cs /if ?>
|
||||
|
||||
<!-- Constants -->
|
||||
<?cs if:subcount(class.constants) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ========= ENUM CONSTANTS DETAIL ======== -->
|
||||
<h2>Constants</h2>
|
||||
<?cs call:write_field_details(class.constants) ?>
|
||||
<?cs /if ?>
|
||||
|
||||
<!-- Fields -->
|
||||
<?cs if:subcount(class.fields) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ========= FIELD DETAIL ======== -->
|
||||
<h2>Fields</h2>
|
||||
<?cs call:write_field_details(class.fields) ?>
|
||||
<?cs /if ?>
|
||||
|
||||
<!-- Public ctors -->
|
||||
<?cs if:subcount(class.ctors.public) ?>
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ========= CONSTRUCTOR DETAIL ======== -->
|
||||
<h2>Public Constructors</h2>
|
||||
<?cs call:write_method_details(class.ctors.public) ?>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ========= CONSTRUCTOR DETAIL ======== -->
|
||||
<!-- Protected ctors -->
|
||||
<?cs if:subcount(class.ctors.protected) ?>
|
||||
<h2>Protected Constructors</h2>
|
||||
<?cs call:write_method_details(class.ctors.protected) ?>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ========= METHOD DETAIL ======== -->
|
||||
<!-- Public methdos -->
|
||||
<?cs if:subcount(class.methods.public) ?>
|
||||
<h2>Public Methods</h2>
|
||||
<?cs call:write_method_details(class.methods.public) ?>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs # this next line must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ========= METHOD DETAIL ======== -->
|
||||
<?cs if:subcount(class.methods.protected) ?>
|
||||
<h2>Protected Methods</h2>
|
||||
<?cs call:write_method_details(class.methods.protected) ?>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs # the next two lines must be exactly like this to be parsed by eclipse ?>
|
||||
<!-- ========= END OF CLASS DATA ========= -->
|
||||
<A NAME="navbar_top"></A>
|
||||
|
||||
<?cs include:"footer.cs" ?>
|
||||
</div> <!-- jd-content -->
|
||||
|
||||
</div><!-- end doc-content -->
|
||||
|
||||
<?cs include:"trailer.cs" ?>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1,53 +0,0 @@
|
||||
<?cs include:"doctype.cs" ?>
|
||||
<?cs include:"macros.cs" ?>
|
||||
<?cs include:"macros_override.cs" ?>
|
||||
<html<?cs if:devsite ?> devsite<?cs /if ?>>
|
||||
<?cs include:"head_tag.cs" ?>
|
||||
<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
|
||||
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
|
||||
if:reference ?> reference<?cs
|
||||
/if ?><?cs
|
||||
elif:design ?>design<?cs
|
||||
elif:distribute ?>distribute<?cs
|
||||
/if ?>" itemscope itemtype="http://schema.org/Article">
|
||||
<a name="top"></a>
|
||||
<?cs include:"header.cs" ?>
|
||||
|
||||
<div class="col-12" id="doc-col">
|
||||
|
||||
<div id="jd-header">
|
||||
<h1><?cs var:page.title ?></h1>
|
||||
</div>
|
||||
|
||||
<div id="jd-content">
|
||||
<p>These are the LineageOS Platform API classes. See all <a href="packages.html">API packages</a>.</p>
|
||||
<div class="jd-letterlist"><?cs each:letter=docs.classes ?>
|
||||
<a href="#letter_<?cs name:letter ?>"><?cs name:letter ?></a> <?cs /each?>
|
||||
</div>
|
||||
|
||||
<?cs each:letter=docs.classes ?>
|
||||
<?cs set:count = #1 ?>
|
||||
<h2 id="letter_<?cs name:letter ?>"><?cs name:letter ?></h2>
|
||||
<table class="jd-sumtable">
|
||||
<?cs set:cur_row = #0 ?>
|
||||
<?cs each:cl = letter ?>
|
||||
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:cl.since ?>" >
|
||||
<td class="jd-linkcol"><?cs call:type_link(cl.type) ?></td>
|
||||
<td class="jd-descrcol" width="100%">
|
||||
<?cs call:short_descr(cl) ?>
|
||||
<?cs call:show_annotations_list(cl) ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?cs set:count = count + #1 ?>
|
||||
<?cs /each ?>
|
||||
</table>
|
||||
<?cs /each ?>
|
||||
|
||||
<?cs include:"footer.cs" ?>
|
||||
</div><!-- end jd-content -->
|
||||
</div><!-- end doc-content -->
|
||||
|
||||
<?cs include:"trailer.cs" ?>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1,10 +0,0 @@
|
||||
<?cs def:custom_masthead() ?>
|
||||
<div id="header">
|
||||
<div id="headerLeft">
|
||||
<a href="<?cs var:toroot ?>reference/packages.html" tabindex="-1"><img
|
||||
src="<?cs var:toroot ?>assets/lineage_logo.svg" alt="CID" width="144" height="72"/>
|
||||
<span id="masthead-title" style="font-size: 28px;">LineageOS Platform SDK</span></a>
|
||||
</div>
|
||||
</div><!-- header --><?cs
|
||||
/def ?>
|
||||
|
@@ -1,516 +0,0 @@
|
||||
<?cs
|
||||
def:fullpage() ?>
|
||||
<div id="body-content">
|
||||
<?cs /def ?>
|
||||
<?cs
|
||||
def:sdk_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/sdk/sdk_toc.cs" ?>
|
||||
|
||||
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<?cs /def ?><?cs
|
||||
|
||||
def:no_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<?cs /def ?><?cs
|
||||
|
||||
def:tools_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/tools/tools_toc.cs" ?>
|
||||
|
||||
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?>
|
||||
<?cs
|
||||
def:training_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/training/training_toc.cs" ?>
|
||||
|
||||
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?><?cs
|
||||
|
||||
def:googleplay_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<?cs include:"../../../../frameworks/base/docs/html/distribute/googleplay/googleplay_toc.cs" ?>
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?><?cs
|
||||
|
||||
def:essentials_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<?cs include:"../../../../frameworks/base/docs/html/distribute/essentials/essentials_toc.cs" ?>
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?><?cs
|
||||
|
||||
def:users_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<?cs include:"../../../../frameworks/base/docs/html/distribute/users/users_toc.cs" ?>
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?><?cs
|
||||
|
||||
def:engage_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<?cs include:"../../../../frameworks/base/docs/html/distribute/engage/engage_toc.cs" ?>
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?><?cs
|
||||
|
||||
def:analyze_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<?cs include:"../../../../frameworks/base/docs/html/distribute/analyze/analyze_toc.cs" ?>
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?><?cs
|
||||
|
||||
def:monetize_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<?cs include:"../../../../frameworks/base/docs/html/distribute/monetize/monetize_toc.cs" ?>
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?><?cs
|
||||
|
||||
def:disttools_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<?cs include:"../../../../frameworks/base/docs/html/distribute/tools/disttools_toc.cs" ?>
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?><?cs
|
||||
|
||||
def:stories_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<?cs include:"../../../../frameworks/base/docs/html/distribute/stories/stories_toc.cs" ?>
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?><?cs
|
||||
|
||||
def:guide_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/guide/guide_toc.cs" ?>
|
||||
|
||||
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?>
|
||||
<?cs
|
||||
def:design_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/design/design_toc.cs" ?>
|
||||
|
||||
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?>
|
||||
<?cs
|
||||
def:distribute_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/distribute/distribute_toc.cs" ?>
|
||||
|
||||
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs
|
||||
def:samples_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/samples/samples_toc.cs" ?>
|
||||
|
||||
</div>
|
||||
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs
|
||||
def:google_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/google/google_toc.cs" ?>
|
||||
|
||||
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
showGoogleRefTree();
|
||||
|
||||
</script>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs
|
||||
def:about_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/about/about_toc.cs" ?>
|
||||
|
||||
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?>
|
||||
|
||||
|
||||
<?cs
|
||||
def:wear_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/wear/wear_toc.cs" ?>
|
||||
|
||||
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs
|
||||
def:preview_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/preview/preview_toc.cs" ?>
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs # The default side navigation for the reference docs ?><?cs
|
||||
def:default_left_nav() ?>
|
||||
<?cs if:reference.gcm || reference.gms ?>
|
||||
<?cs call:google_nav() ?>
|
||||
<?cs else ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav">
|
||||
<div id="api-nav-header">
|
||||
<div id="api-level-toggle">
|
||||
<label for="apiLevelCheckbox" class="disabled"
|
||||
title="Select your target API level to dim unavailable APIs">API level: </label>
|
||||
<div class="select-wrapper">
|
||||
<select id="apiLevelSelector">
|
||||
<!-- option elements added by buildApiLevelSelector() -->
|
||||
</select>
|
||||
</div>
|
||||
</div><!-- end toggle -->
|
||||
<div id="api-nav-title">LineageOS APIs</div>
|
||||
</div><!-- end nav header -->
|
||||
<script>
|
||||
var SINCE_DATA = [ <?cs
|
||||
each:since = since ?>'<?cs
|
||||
var:since.name ?>'<?cs
|
||||
if:!last(since) ?>, <?cs /if ?><?cs
|
||||
/each
|
||||
?> ];
|
||||
buildApiLevelSelector();
|
||||
</script>
|
||||
|
||||
<div id="swapper">
|
||||
<div id="nav-panels">
|
||||
<div id="resize-packages-nav">
|
||||
<div id="packages-nav" class="scroll-pane">
|
||||
|
||||
<ul>
|
||||
<?cs call:package_link_list(docs.packages) ?>
|
||||
</ul><br/>
|
||||
|
||||
</div> <!-- end packages-nav -->
|
||||
</div> <!-- end resize-packages -->
|
||||
<div id="classes-nav" class="scroll-pane">
|
||||
|
||||
|
||||
<?cs
|
||||
if:subcount(class.package) ?>
|
||||
<ul>
|
||||
<?cs call:list("Annotations", class.package.annotations) ?>
|
||||
<?cs call:list("Interfaces", class.package.interfaces) ?>
|
||||
<?cs call:list("Classes", class.package.classes) ?>
|
||||
<?cs call:list("Enums", class.package.enums) ?>
|
||||
<?cs call:list("Exceptions", class.package.exceptions) ?>
|
||||
<?cs call:list("Errors", class.package.errors) ?>
|
||||
</ul><?cs
|
||||
elif:subcount(package) ?>
|
||||
<ul>
|
||||
<?cs call:class_link_list("Annotations", package.annotations) ?>
|
||||
<?cs call:class_link_list("Interfaces", package.interfaces) ?>
|
||||
<?cs call:class_link_list("Classes", package.classes) ?>
|
||||
<?cs call:class_link_list("Enums", package.enums) ?>
|
||||
<?cs call:class_link_list("Exceptions", package.exceptions) ?>
|
||||
<?cs call:class_link_list("Errors", package.errors) ?>
|
||||
</ul><?cs
|
||||
else ?>
|
||||
<p style="padding:10px">Select a package to view its members</p><?cs
|
||||
/if ?><br/>
|
||||
|
||||
|
||||
</div><!-- end classes -->
|
||||
</div><!-- end nav-panels -->
|
||||
<div id="nav-tree" style="display:none" class="scroll-pane">
|
||||
<div id="tree-list"></div>
|
||||
</div><!-- end nav-tree -->
|
||||
</div><!-- end swapper -->
|
||||
<div id="nav-swap">
|
||||
<a class="fullscreen">fullscreen</a>
|
||||
<a href='#' onclick='swapNav();return false;'><span id='tree-link'>Use Tree Navigation</span><span id='panel-link' style='display:none'>Use Panel Navigation</span></a>
|
||||
</div>
|
||||
</div> <!-- end devdoc-nav -->
|
||||
</div> <!-- end side-nav -->
|
||||
<script type="text/javascript">
|
||||
// init fullscreen based on user pref
|
||||
var fullscreen = readCookie("fullscreen");
|
||||
if (fullscreen != 0) {
|
||||
if (fullscreen == "false") {
|
||||
toggleFullscreen(false);
|
||||
} else {
|
||||
toggleFullscreen(true);
|
||||
}
|
||||
}
|
||||
// init nav version for mobile
|
||||
if (isMobile) {
|
||||
swapNav(); // tree view should be used on mobile
|
||||
$('#nav-swap').hide();
|
||||
} else {
|
||||
chooseDefaultNav();
|
||||
if ($("#nav-tree").is(':visible')) {
|
||||
init_default_navtree("<?cs var:toroot ?>");
|
||||
}
|
||||
}
|
||||
// scroll the selected page into view
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("packages-nav");
|
||||
scrollIntoView("classes-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /if ?>
|
||||
<?cs
|
||||
/def ?>
|
||||
|
||||
<?cs
|
||||
def:custom_left_nav() ?><?cs
|
||||
if:fullpage ?><?cs
|
||||
call:fullpage() ?><?cs
|
||||
elif:nonavpage ?><?cs
|
||||
call:no_nav() ?><?cs
|
||||
elif:guide ?><?cs
|
||||
call:guide_nav() ?><?cs
|
||||
elif:design ?><?cs
|
||||
call:design_nav() ?><?cs
|
||||
elif:training ?><?cs
|
||||
call:training_nav() ?><?cs
|
||||
elif:tools ?><?cs
|
||||
call:tools_nav() ?><?cs
|
||||
elif:google ?><?cs
|
||||
call:google_nav() ?><?cs
|
||||
elif:samples ?><?cs
|
||||
call:samples_nav() ?><?cs
|
||||
elif:distribute ?><?cs
|
||||
if:googleplay ?><?cs
|
||||
call:googleplay_nav() ?><?cs
|
||||
elif:essentials ?><?cs
|
||||
call:essentials_nav() ?><?cs
|
||||
elif:users ?><?cs
|
||||
call:users_nav() ?><?cs
|
||||
elif:engage ?><?cs
|
||||
call:engage_nav() ?><?cs
|
||||
elif:monetize ?><?cs
|
||||
call:monetize_nav() ?><?cs
|
||||
elif:analyze ?><?cs
|
||||
call:analyze_nav() ?><?cs
|
||||
elif:disttools ?><?cs
|
||||
call:disttools_nav() ?><?cs
|
||||
elif:stories ?><?cs
|
||||
call:stories_nav() ?><?cs
|
||||
/if ?><?cs
|
||||
elif:about ?><?cs
|
||||
call:about_nav() ?><?cs
|
||||
elif:distribute ?><?cs
|
||||
call:distribute_nav() ?><?cs
|
||||
elif:wear ?><?cs
|
||||
call:wear_nav() ?><?cs
|
||||
elif:preview ?><?cs
|
||||
call:preview_nav() ?><?cs
|
||||
else ?><?cs
|
||||
call:default_left_nav() ?> <?cs
|
||||
/if ?><?cs
|
||||
/def ?>
|
||||
|
||||
<?cs # appears at the bottom of every page ?><?cs
|
||||
def:custom_cc_copyright() ?>
|
||||
Except as noted, this content is
|
||||
licensed under <a href="http://creativecommons.org/licenses/by/2.5/">
|
||||
Creative Commons Attribution 2.5</a>. For details and
|
||||
restrictions, see the <a href="<?cs var:toroot ?>license.html">Content
|
||||
License</a>.<?cs
|
||||
/def ?>
|
||||
|
||||
<?cs
|
||||
def:custom_copyright() ?>
|
||||
Except as noted, this content is licensed under <a
|
||||
href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>.
|
||||
For details and restrictions, see the <a href="<?cs var:toroot ?>license.html">
|
||||
Content License</a>.<?cs
|
||||
/def ?>
|
||||
|
||||
<?cs
|
||||
def:custom_footerlinks() ?>
|
||||
<p>
|
||||
<a href="<?cs var:toroot ?>about/index.html">About Android</a> |
|
||||
<a href="<?cs var:toroot ?>legal.html">Legal</a> |
|
||||
<a href="<?cs var:toroot ?>support.html">Support</a>
|
||||
</p><?cs
|
||||
/def ?>
|
||||
|
||||
<?cs # appears on the right side of the blue bar at the bottom off every page ?><?cs
|
||||
def:custom_buildinfo() ?><?cs
|
||||
if:!google && !reference.gcm && !reference.gms ?>
|
||||
Android <?cs var:sdk.version ?> r<?cs var:sdk.rel.id ?> — <?cs
|
||||
/if ?>
|
||||
<script src="<?cs var:toroot ?>timestamp.js" type="text/javascript"></script>
|
||||
<script>document.write(BUILD_TIMESTAMP)</script>
|
||||
<?cs /def ?>
|
||||
|
@@ -1,87 +0,0 @@
|
||||
<head>
|
||||
<?cs
|
||||
####### If building devsite, add some meta data needed for when generating the top nav ######### ?>
|
||||
<?cs
|
||||
if:devsite ?><?cs
|
||||
if:guide||develop||training||reference||tools||sdk||google||samples
|
||||
?><meta name="top_category" value="develop" /><?cs
|
||||
elif:google
|
||||
?><meta name="top_category" value="google" /><?cs
|
||||
elif:reference && !(reference.gms || reference.gcm)
|
||||
?><meta name="top_category" value="css-fullscreen" /><?cs
|
||||
/if ?>
|
||||
<?cs
|
||||
/if
|
||||
?><?cs
|
||||
# END if/else devsite ?>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=<?cs
|
||||
if:page.viewport_width ?><?cs
|
||||
var:page.viewport_width ?><?cs
|
||||
else ?>device-width<?cs /if ?>" />
|
||||
<?cs
|
||||
if:page.metaDescription ?>
|
||||
<meta name="Description" content="<?cs var:page.metaDescription ?>"><?cs
|
||||
/if ?>
|
||||
<link rel="shortcut icon" type="image/x-icon" href="<?cs var:toroot ?>assets/favicon.ico" />
|
||||
<title><?cs
|
||||
if:page.title ?><?cs
|
||||
var:page.title ?> | <?cs
|
||||
/if ?>Android Developers</title>
|
||||
|
||||
<!-- STYLESHEETS -->
|
||||
<link rel="stylesheet"
|
||||
href="<?cs
|
||||
if:android.whichdoc != 'online' ?>http:<?cs
|
||||
/if ?>//fonts.googleapis.com/css?family=Roboto+Condensed">
|
||||
<link rel="stylesheet" href="<?cs
|
||||
if:android.whichdoc != 'online' ?>http:<?cs
|
||||
/if ?>//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold"
|
||||
title="roboto">
|
||||
<link href="<?cs var:toroot ?>assets/css/default.css?v=5" rel="stylesheet" type="text/css">
|
||||
|
||||
<?cs if:reference && !(reference.gms || reference.gcm || preview) ?>
|
||||
<!-- FULLSCREEN STYLESHEET -->
|
||||
<link href="<?cs var:toroot ?>assets/css/fullscreen.css" rel="stylesheet" class="fullscreen"
|
||||
type="text/css">
|
||||
<?cs /if ?>
|
||||
|
||||
<!-- JAVASCRIPT -->
|
||||
<script src="<?cs if:android.whichdoc != 'online' ?>http:<?cs /if ?>//www.google.com/jsapi" type="text/javascript"></script>
|
||||
<?cs
|
||||
if:devsite
|
||||
?><script src="<?cs var:toroot ?>_static/js/android_3p-bundle.js" type="text/javascript"></script><?cs
|
||||
else
|
||||
?><script src="<?cs var:toroot ?>assets/js/android_3p-bundle.js" type="text/javascript"></script><?cs
|
||||
/if ?><?cs
|
||||
if:page.customHeadTag ?>
|
||||
<?cs var:page.customHeadTag ?><?cs
|
||||
/if ?>
|
||||
<script type="text/javascript">
|
||||
var toRoot = "<?cs var:toroot ?>";
|
||||
var metaTags = [<?cs var:meta.tags ?>];
|
||||
var devsite = <?cs if:devsite ?>true<?cs else ?>false<?cs /if ?>;
|
||||
</script>
|
||||
|
||||
<?cs if:helpoutsWidget ?>
|
||||
<script type="text/javascript" src="https://helpouts.google.com/ps/res/embed.js" defer async
|
||||
data-helpouts-embed data-helpouts-vertical="programming"
|
||||
data-helpouts-tags="<?cs var:page.tags ?>" data-helpouts-prefix="android"
|
||||
data-helpouts-standalone="true"></script>
|
||||
<?cs /if ?>
|
||||
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||
|
||||
ga('create', 'UA-5831155-1', 'android.com');
|
||||
ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'}); // New tracker);
|
||||
ga('send', 'pageview');
|
||||
ga('universal.send', 'pageview'); // Send page view for new tracker.
|
||||
</script>
|
||||
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
|
||||
<script src="<?cs var:toroot ?>assets/docs.js?v=3" type="text/javascript"></script>
|
||||
</head>
|
@@ -1,36 +0,0 @@
|
||||
<?cs # Create a comma separated list of annotations on obj that were in showAnnotations in Doclava ?>
|
||||
<?cs # pre is an HTML string to start the list, post is an HTML string to close the list ?>
|
||||
<?cs # for example call:show_annotations_list(cl, "<td>Annotations: ", "</td>") ?>
|
||||
<?cs # if obj has nothing on obj.showAnnotations, nothing will be output ?>
|
||||
<?cs def:show_annotations_list(obj) ?>
|
||||
<?cs each:anno = obj.showAnnotations ?>
|
||||
<?cs if:first(anno) ?>
|
||||
<span class='annotation-message'>
|
||||
Included in documentation by the annotations:
|
||||
<?cs /if ?>
|
||||
@<?cs var:anno.type.label ?>
|
||||
<?cs if:last(anno) == 0 ?>
|
||||
,
|
||||
<?cs /if ?>
|
||||
<?cs if:last(anno)?>
|
||||
</span>
|
||||
<?cs /if ?>
|
||||
<?cs /each ?>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs # Override default class_link_table to display annotations ?>
|
||||
<?cs def:class_link_table(classes) ?>
|
||||
<?cs set:count = #1 ?>
|
||||
<table class="jd-sumtable-expando">
|
||||
<?cs each:cl=classes ?>
|
||||
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:cl.type.since ?>" >
|
||||
<td class="jd-linkcol"><?cs call:type_link(cl.type) ?></td>
|
||||
<td class="jd-descrcol" width="100%">
|
||||
<?cs call:short_descr(cl) ?>
|
||||
<?cs call:show_annotations_list(cl) ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?cs set:count = count + #1 ?>
|
||||
<?cs /each ?>
|
||||
</table>
|
||||
<?cs /def ?>
|
@@ -1,65 +0,0 @@
|
||||
<?cs include:"doctype.cs" ?>
|
||||
<?cs include:"macros.cs" ?>
|
||||
<?cs include:"macros_override.cs" ?>
|
||||
<html<?cs if:devsite ?> devsite<?cs /if ?>>
|
||||
<?cs include:"head_tag.cs" ?>
|
||||
|
||||
<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
|
||||
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
|
||||
if:reference ?> reference<?cs
|
||||
/if ?><?cs
|
||||
elif:design ?>design<?cs
|
||||
elif:distribute ?>distribute<?cs
|
||||
/if ?>">
|
||||
<div id="doc-api-level" class="<?cs var:package.since ?>" style="display:none"></div>
|
||||
<a name="top"></a>
|
||||
<?cs include:"header.cs" ?>
|
||||
|
||||
<div class="col-12" id="doc-col">
|
||||
|
||||
<div id="api-info-block">
|
||||
<div class="api-level">
|
||||
<?cs call:since_tags(package) ?>
|
||||
<?cs call:federated_refs(package) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="jd-header">
|
||||
package
|
||||
<h1><?cs var:package.name ?></h1>
|
||||
</div><!-- end header -->
|
||||
|
||||
<div id="naMessage"></div>
|
||||
|
||||
<div id="jd-content" class="api apilevel-<?cs var:package.since ?>">
|
||||
|
||||
<?cs if:subcount(package.descr) ?>
|
||||
<div class="jd-descr">
|
||||
<?cs call:tag_list(package.descr) ?>
|
||||
</div>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs def:class_table(label, classes) ?>
|
||||
<?cs if:subcount(classes) ?>
|
||||
<h2><?cs var:label ?></h2>
|
||||
<div class="jd-sumtable">
|
||||
<?cs call:class_link_table(classes) ?>
|
||||
</div>
|
||||
<?cs /if ?>
|
||||
<?cs /def ?>
|
||||
|
||||
<?cs call:class_table("Annotations", package.annotations) ?>
|
||||
<?cs call:class_table("Interfaces", package.interfaces) ?>
|
||||
<?cs call:class_table("Classes", package.classes) ?>
|
||||
<?cs call:class_table("Enums", package.enums) ?>
|
||||
<?cs call:class_table("Exceptions", package.exceptions) ?>
|
||||
<?cs call:class_table("Errors", package.errors) ?>
|
||||
|
||||
<?cs include:"footer.cs" ?>
|
||||
</div><!-- end jd-content -->
|
||||
</div><!-- doc-content -->
|
||||
|
||||
<?cs include:"trailer.cs" ?>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1,45 +0,0 @@
|
||||
<?cs include:"doctype.cs" ?>
|
||||
<?cs include:"macros.cs" ?>
|
||||
<html<?cs if:devsite ?> devsite<?cs /if ?>>
|
||||
<?cs include:"head_tag.cs" ?>
|
||||
<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
|
||||
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
|
||||
if:reference ?> reference<?cs
|
||||
/if ?><?cs
|
||||
elif:design ?>design<?cs
|
||||
elif:distribute ?>distribute<?cs
|
||||
/if ?>">
|
||||
<a name="top"></a>
|
||||
<?cs include:"header.cs" ?>
|
||||
|
||||
<div class="col-12" id="doc-col">
|
||||
|
||||
<div id="jd-header">
|
||||
<h1><?cs var:page.title ?></h1>
|
||||
</div>
|
||||
|
||||
<div id="jd-content">
|
||||
|
||||
<div class="jd-descr">
|
||||
<p><?cs call:tag_list(root.descr) ?></p>
|
||||
</div>
|
||||
|
||||
<?cs set:count = #1 ?>
|
||||
<table class="jd-sumtable">
|
||||
<?cs each:pkg = docs.packages ?>
|
||||
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:pkg.since ?>" >
|
||||
<td class="jd-linkcol"><?cs call:package_link(pkg) ?></td>
|
||||
<td class="jd-descrcol" width="100%"><?cs call:tag_list(pkg.shortDescr) ?></td>
|
||||
</tr>
|
||||
<?cs set:count = count + #1 ?>
|
||||
<?cs /each ?>
|
||||
</table>
|
||||
|
||||
<?cs include:"footer.cs" ?>
|
||||
</div><!-- end jd-content -->
|
||||
</div> <!-- end doc-content -->
|
||||
|
||||
<?cs include:"trailer.cs" ?>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1 +0,0 @@
|
||||
var BUILD_TIMESTAMP = "<?cs var:page.now ?>";
|
@@ -1,754 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Copyright (C) 2013-2015 The CyanogenMod Project
|
||||
# (C) 2017-2025 The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
#
|
||||
# Run repopick.py -h for a description of this utility.
|
||||
#
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import textwrap
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
from collections import defaultdict
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from functools import cmp_to_key, partial
|
||||
from xml.etree import ElementTree
|
||||
|
||||
|
||||
# cmp() is not available in Python 3, define it manually
|
||||
# See https://docs.python.org/3.0/whatsnew/3.0.html#ordering-comparisons
|
||||
def cmp(a, b):
|
||||
return (a > b) - (a < b)
|
||||
|
||||
|
||||
# Verifies whether pathA is a subdirectory (or the same) as pathB
|
||||
def is_subdir(a, b):
|
||||
a = os.path.realpath(a) + "/"
|
||||
b = os.path.realpath(b) + "/"
|
||||
return b == a[: len(b)]
|
||||
|
||||
|
||||
def fetch_query_via_ssh(remote_url, query):
|
||||
"""Given a remote_url and a query, return the list of changes that fit it
|
||||
This function is slightly messy - the ssh api does not return data in the same structure as the HTTP REST API
|
||||
We have to get the data, then transform it to match what we're expecting from the HTTP RESET API
|
||||
"""
|
||||
if remote_url.count(":") == 2:
|
||||
(_, userhost, port) = remote_url.split(":")
|
||||
userhost = userhost[2:]
|
||||
elif remote_url.count(":") == 1:
|
||||
(_, userhost) = remote_url.split(":")
|
||||
userhost = userhost[2:]
|
||||
port = "29418"
|
||||
else:
|
||||
raise Exception("Malformed URI: Expecting ssh://[user@]host[:port]")
|
||||
|
||||
out = subprocess.check_output(
|
||||
[
|
||||
"ssh",
|
||||
"-x",
|
||||
"-p",
|
||||
port,
|
||||
userhost,
|
||||
"gerrit",
|
||||
"query",
|
||||
"--format",
|
||||
"JSON",
|
||||
"--patch-sets",
|
||||
"--current-patch-set",
|
||||
query,
|
||||
],
|
||||
text=True,
|
||||
)
|
||||
reviews = []
|
||||
for line in out.split("\n"):
|
||||
try:
|
||||
data = json.loads(line)
|
||||
# make our data look like the http rest api data
|
||||
review = {
|
||||
"branch": data["branch"],
|
||||
"change_id": data["id"],
|
||||
"current_revision": data["currentPatchSet"]["revision"],
|
||||
"number": int(data["number"]),
|
||||
"revisions": {
|
||||
patch_set["revision"]: {
|
||||
"_number": int(patch_set["number"]),
|
||||
"fetch": {
|
||||
"ssh": {
|
||||
"ref": patch_set["ref"],
|
||||
"url": "ssh://{0}:{1}/{2}".format(
|
||||
userhost, port, data["project"]
|
||||
),
|
||||
}
|
||||
},
|
||||
"commit": {
|
||||
"parents": [
|
||||
{"commit": parent} for parent in patch_set["parents"]
|
||||
]
|
||||
},
|
||||
}
|
||||
for patch_set in data["patchSets"]
|
||||
},
|
||||
"subject": data["subject"],
|
||||
"project": data["project"],
|
||||
"status": data["status"],
|
||||
}
|
||||
reviews.append(review)
|
||||
except Exception:
|
||||
pass
|
||||
return reviews
|
||||
|
||||
|
||||
def build_query_url(remote_url, query, auth, start=0):
|
||||
p = urllib.parse.urlparse(remote_url)._asdict()
|
||||
p["path"] = ("/a" if auth else "") + "/changes"
|
||||
p["query"] = urllib.parse.urlencode(
|
||||
{
|
||||
"q": query,
|
||||
"o": ["CURRENT_REVISION", "ALL_REVISIONS", "ALL_COMMITS"],
|
||||
"start": start,
|
||||
},
|
||||
doseq=True,
|
||||
)
|
||||
return urllib.parse.unquote(urllib.parse.urlunparse(urllib.parse.ParseResult(**p)))
|
||||
|
||||
|
||||
def fetch_query_via_http(remote_url, query, auth=True, start=0):
|
||||
"""Given a query, fetch the change numbers via http"""
|
||||
all_reviews = []
|
||||
start_index = start
|
||||
has_more_changes = True
|
||||
username = password = ""
|
||||
if auth:
|
||||
gerritrc = os.path.expanduser("~/.gerritrc")
|
||||
if os.path.isfile(gerritrc):
|
||||
with open(gerritrc, "r") as f:
|
||||
for line in f:
|
||||
parts = line.rstrip().split("|")
|
||||
if parts[0] in remote_url:
|
||||
username, password = parts[1], parts[2]
|
||||
|
||||
while has_more_changes:
|
||||
if auth:
|
||||
if username and password:
|
||||
url = build_query_url(remote_url, query, auth, start_index)
|
||||
password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
|
||||
password_mgr.add_password(None, url, username, password)
|
||||
auth_handler = urllib.request.HTTPBasicAuthHandler(password_mgr)
|
||||
opener = urllib.request.build_opener(auth_handler)
|
||||
response = opener.open(url)
|
||||
if response.getcode() != 200:
|
||||
# They didn't get good authorization or data, Let's try the old way
|
||||
return fetch_query_via_http(remote_url, query, False, start_index)
|
||||
else:
|
||||
return fetch_query_via_http(remote_url, query, False, start_index)
|
||||
else:
|
||||
url = build_query_url(remote_url, query, auth, start_index)
|
||||
response = urllib.request.urlopen(url)
|
||||
|
||||
data = response.read().decode("utf-8")
|
||||
reviews = json.loads(data[5:])
|
||||
for review in reviews:
|
||||
review["number"] = review.pop("_number")
|
||||
all_reviews.extend(reviews)
|
||||
if not reviews[-1].get("_more_changes"):
|
||||
has_more_changes = False
|
||||
start_index += len(reviews)
|
||||
|
||||
return all_reviews
|
||||
|
||||
|
||||
def fetch_query(remote_url, query):
|
||||
"""Wrapper for fetch_query_via_proto functions"""
|
||||
if remote_url[0:3] == "ssh":
|
||||
return fetch_query_via_ssh(remote_url, query)
|
||||
elif remote_url[0:4] == "http":
|
||||
return fetch_query_via_http(remote_url, query)
|
||||
else:
|
||||
raise Exception(
|
||||
"Gerrit URL should be in the form http[s]://hostname/ or ssh://[user@]host[:port]"
|
||||
)
|
||||
|
||||
|
||||
def is_closed(status):
|
||||
return status not in ("OPEN", "NEW", "DRAFT")
|
||||
|
||||
|
||||
def is_lineage_gerrit(remote_url):
|
||||
p = urllib.parse.urlparse(remote_url)
|
||||
return p.hostname == "review.lineageos.org"
|
||||
|
||||
|
||||
def commit_exists(project_path, revision):
|
||||
return (
|
||||
subprocess.call(
|
||||
["git", "cat-file", "-e", revision],
|
||||
cwd=project_path,
|
||||
stderr=subprocess.DEVNULL,
|
||||
)
|
||||
== 0
|
||||
)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
description=textwrap.dedent(
|
||||
"""\
|
||||
repopick.py is a utility to simplify the process of cherry picking
|
||||
patches from LineageOS's Gerrit instance (or any gerrit instance of your choosing)
|
||||
|
||||
Given a list of change numbers, repopick will cd into the project path
|
||||
and cherry pick the latest patch available.
|
||||
|
||||
With the --start-branch argument, the user can specify that a branch
|
||||
should be created before cherry picking. This is useful for
|
||||
cherry-picking many patches into a common branch which can be easily
|
||||
abandoned later (good for testing other's changes.)
|
||||
|
||||
The --abandon-first argument, when used in conjunction with the
|
||||
--start-branch option, will cause repopick to abandon the specified
|
||||
branch in all repos first before performing any cherry picks."""
|
||||
),
|
||||
)
|
||||
parser.add_argument(
|
||||
"change_number",
|
||||
nargs="*",
|
||||
help="change number to cherry pick. Use {change number}/{patchset number} to get a specific revision.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-i",
|
||||
"--ignore-missing",
|
||||
action="store_true",
|
||||
help="do not error out if a patch applies to a missing directory",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-s",
|
||||
"--start-branch",
|
||||
nargs=1,
|
||||
metavar="",
|
||||
help="start the specified branch before cherry picking",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-r",
|
||||
"--reset",
|
||||
action="store_true",
|
||||
help="reset to initial state (abort cherry-pick) if there is a conflict",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-a",
|
||||
"--abandon-first",
|
||||
action="store_true",
|
||||
help="before cherry picking, abandon the branch specified in --start-branch",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-b",
|
||||
"--auto-branch",
|
||||
action="store_true",
|
||||
help='shortcut to "--start-branch auto --abandon-first --ignore-missing"',
|
||||
)
|
||||
group = parser.add_mutually_exclusive_group()
|
||||
group.add_argument(
|
||||
"-q", "--quiet", action="store_true", help="print as little as possible"
|
||||
)
|
||||
group.add_argument(
|
||||
"-v",
|
||||
"--verbose",
|
||||
action="store_true",
|
||||
help="print extra information to aid in debug",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-f",
|
||||
"--force",
|
||||
action="store_true",
|
||||
help="force cherry pick even if change is closed",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-p", "--pull", action="store_true", help="execute pull instead of cherry-pick"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-P", "--path", metavar="", help="use the specified path for the change"
|
||||
)
|
||||
group = parser.add_mutually_exclusive_group()
|
||||
group.add_argument(
|
||||
"-t", "--topic", metavar="", help="pick all commits from a specified topic"
|
||||
)
|
||||
group.add_argument(
|
||||
"-H", "--hashtag", metavar="", help="pick all commits from a specified hashtag"
|
||||
)
|
||||
group.add_argument(
|
||||
"-Q", "--query", metavar="", help="pick all commits using the specified query"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-g",
|
||||
"--gerrit",
|
||||
default="https://review.lineageos.org",
|
||||
metavar="",
|
||||
help="Gerrit Instance to use. Form proto://[user@]host[:port]",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-e",
|
||||
"--exclude",
|
||||
nargs=1,
|
||||
metavar="",
|
||||
help="exclude a list of commit numbers separated by a ,",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-c",
|
||||
"--check-picked",
|
||||
type=int,
|
||||
default=10,
|
||||
metavar="",
|
||||
help="pass the amount of commits to check for already picked changes",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-j",
|
||||
"--jobs",
|
||||
type=int,
|
||||
default=4,
|
||||
metavar="",
|
||||
help="max number of changes to pick in parallel",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
if not args.start_branch and args.abandon_first:
|
||||
parser.error(
|
||||
"if --abandon-first is set, you must also give the branch name with --start-branch"
|
||||
)
|
||||
if args.auto_branch:
|
||||
args.abandon_first = True
|
||||
args.ignore_missing = True
|
||||
if not args.start_branch:
|
||||
args.start_branch = ["auto"]
|
||||
|
||||
# Change current directory to the top of the tree
|
||||
if "ANDROID_BUILD_TOP" in os.environ:
|
||||
top = os.environ["ANDROID_BUILD_TOP"]
|
||||
|
||||
if not is_subdir(os.getcwd(), top):
|
||||
sys.stderr.write(
|
||||
"ERROR: You must run this tool from within $ANDROID_BUILD_TOP!\n"
|
||||
)
|
||||
sys.exit(1)
|
||||
os.chdir(os.environ["ANDROID_BUILD_TOP"])
|
||||
|
||||
# Sanity check that we are being run from the top level of the tree
|
||||
if not os.path.isdir(".repo"):
|
||||
sys.stderr.write(
|
||||
"ERROR: No .repo directory found. Please run this from the top of your tree.\n"
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
# If --abandon-first is given, abandon the branch before starting
|
||||
if args.abandon_first:
|
||||
# Determine if the branch already exists; skip the abandon if it does not
|
||||
plist = subprocess.check_output(["repo", "info"], text=True)
|
||||
needs_abandon = False
|
||||
for pline in plist.splitlines():
|
||||
matchObj = re.match(r"Local Branches.*\[(.*)\]", pline)
|
||||
if matchObj:
|
||||
local_branches = re.split(r"\s*,\s*", matchObj.group(1))
|
||||
if any(args.start_branch[0] in s for s in local_branches):
|
||||
needs_abandon = True
|
||||
|
||||
if needs_abandon:
|
||||
# Perform the abandon only if the branch already exists
|
||||
if not args.quiet:
|
||||
print("Abandoning branch: %s" % args.start_branch[0])
|
||||
subprocess.run(["repo", "abandon", args.start_branch[0]])
|
||||
if not args.quiet:
|
||||
print("")
|
||||
|
||||
# Get the main manifest from repo
|
||||
# - convert project name and revision to a path
|
||||
project_name_to_data = {}
|
||||
manifest = subprocess.check_output(["repo", "manifest"], text=True)
|
||||
xml_root = ElementTree.fromstring(manifest)
|
||||
projects = xml_root.findall("project")
|
||||
remotes = xml_root.findall("remote")
|
||||
default_revision = xml_root.findall("default")[0].get("revision")
|
||||
if not default_revision:
|
||||
raise ValueError("Failed to get revision from manifest")
|
||||
|
||||
# dump project data into the a list of dicts with the following data:
|
||||
# {project: {path, revision}}
|
||||
|
||||
for project in projects:
|
||||
name = project.get("name")
|
||||
# when name and path are equal, "repo manifest" doesn't return a path at all, so fall back to name
|
||||
path = project.get("path", name)
|
||||
revision = project.get("upstream")
|
||||
if revision is None:
|
||||
for remote in remotes:
|
||||
if remote.get("name") == project.get("remote"):
|
||||
revision = remote.get("revision")
|
||||
if revision is None:
|
||||
revision = project.get("revision", default_revision)
|
||||
|
||||
if name not in project_name_to_data:
|
||||
project_name_to_data[name] = {}
|
||||
revision = revision.split("refs/heads/")[-1]
|
||||
project_name_to_data[name][revision] = path
|
||||
|
||||
def cmp_reviews(review_a, review_b):
|
||||
current_a = review_a["current_revision"]
|
||||
parents_a = [
|
||||
r["commit"] for r in review_a["revisions"][current_a]["commit"]["parents"]
|
||||
]
|
||||
current_b = review_b["current_revision"]
|
||||
parents_b = [
|
||||
r["commit"] for r in review_b["revisions"][current_b]["commit"]["parents"]
|
||||
]
|
||||
if current_a in parents_b:
|
||||
return -1
|
||||
elif current_b in parents_a:
|
||||
return 1
|
||||
else:
|
||||
return cmp(review_a["number"], review_b["number"])
|
||||
|
||||
# get data on requested changes
|
||||
if args.topic:
|
||||
reviews = fetch_query(args.gerrit, "topic:{0}".format(args.topic))
|
||||
change_numbers = [
|
||||
str(r["number"]) for r in sorted(reviews, key=cmp_to_key(cmp_reviews))
|
||||
]
|
||||
elif args.hashtag:
|
||||
reviews = fetch_query(args.gerrit, "hashtag:{0}".format(args.hashtag))
|
||||
change_numbers = [
|
||||
str(r["number"]) for r in sorted(reviews, key=cmp_to_key(cmp_reviews))
|
||||
]
|
||||
elif args.query:
|
||||
reviews = fetch_query(args.gerrit, args.query)
|
||||
change_numbers = [
|
||||
str(r["number"]) for r in sorted(reviews, key=cmp_to_key(cmp_reviews))
|
||||
]
|
||||
else:
|
||||
change_url_re = re.compile(r"https?://.+?/([0-9]+(?:/[0-9]+)?)/?")
|
||||
change_numbers = []
|
||||
for c in args.change_number:
|
||||
change_number = change_url_re.findall(c)
|
||||
if change_number:
|
||||
change_numbers.extend(change_number)
|
||||
elif "-" in c:
|
||||
templist = c.split("-")
|
||||
for i in range(int(templist[0]), int(templist[1]) + 1):
|
||||
change_numbers.append(str(i))
|
||||
else:
|
||||
change_numbers.append(c)
|
||||
reviews = fetch_query(
|
||||
args.gerrit,
|
||||
" OR ".join("change:{0}".format(x.split("/")[0]) for x in change_numbers),
|
||||
)
|
||||
|
||||
# make list of things to actually merge
|
||||
mergables = defaultdict(list)
|
||||
|
||||
# If --exclude is given, create the list of commits to ignore
|
||||
exclude = []
|
||||
if args.exclude:
|
||||
exclude = args.exclude[0].split(",")
|
||||
|
||||
for change in change_numbers:
|
||||
patchset = None
|
||||
if "/" in change:
|
||||
(change, patchset) = change.split("/")
|
||||
|
||||
if change in exclude:
|
||||
continue
|
||||
|
||||
change = int(change)
|
||||
|
||||
if patchset:
|
||||
patchset = int(patchset)
|
||||
|
||||
review = next((x for x in reviews if x["number"] == change), None)
|
||||
if review is None:
|
||||
print("Change %d not found, skipping" % change)
|
||||
continue
|
||||
|
||||
# Check if change is open and exit if it's not, unless -f is specified
|
||||
if is_closed(review["status"]) and not args.force:
|
||||
print(
|
||||
"Change {} status is {}. Skipping the cherry pick.\nUse -f to force this pick.".format(
|
||||
change, review["status"]
|
||||
)
|
||||
)
|
||||
continue
|
||||
|
||||
# Convert the project name to a project path
|
||||
# - check that the project path exists
|
||||
if (
|
||||
review["project"] in project_name_to_data
|
||||
and review["branch"] in project_name_to_data[review["project"]]
|
||||
):
|
||||
project_path = project_name_to_data[review["project"]][review["branch"]]
|
||||
elif args.path:
|
||||
project_path = args.path
|
||||
elif (
|
||||
review["project"] in project_name_to_data
|
||||
and len(project_name_to_data[review["project"]]) == 1
|
||||
):
|
||||
local_branch = list(project_name_to_data[review["project"]])[0]
|
||||
project_path = project_name_to_data[review["project"]][local_branch]
|
||||
print(
|
||||
'WARNING: Project {0} has a different branch ("{1}" != "{2}")'.format(
|
||||
project_path, local_branch, review["branch"]
|
||||
)
|
||||
)
|
||||
elif args.ignore_missing:
|
||||
print(
|
||||
"WARNING: Skipping {0} since there is no project directory for: {1}\n".format(
|
||||
review["number"], review["project"]
|
||||
)
|
||||
)
|
||||
continue
|
||||
else:
|
||||
sys.stderr.write(
|
||||
"ERROR: For {0}, could not determine the project path for project {1}\n".format(
|
||||
review["number"], review["project"]
|
||||
)
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
item = {
|
||||
"subject": review["subject"],
|
||||
"project_path": project_path,
|
||||
"branch": review["branch"],
|
||||
"change_id": review["change_id"],
|
||||
"change_number": review["number"],
|
||||
"status": review["status"],
|
||||
"patchset": review["revisions"][review["current_revision"]]["_number"],
|
||||
"fetch": review["revisions"][review["current_revision"]]["fetch"],
|
||||
"id": change,
|
||||
"revision": review["current_revision"],
|
||||
}
|
||||
|
||||
if patchset:
|
||||
for x in review["revisions"]:
|
||||
if review["revisions"][x]["_number"] == patchset:
|
||||
item["fetch"] = review["revisions"][x]["fetch"]
|
||||
item["id"] = "{0}/{1}".format(change, patchset)
|
||||
item["patchset"] = patchset
|
||||
item["revision"] = x
|
||||
break
|
||||
else:
|
||||
if not args.quiet:
|
||||
print(
|
||||
"ERROR: The patch set {0}/{1} could not be found, using CURRENT_REVISION instead.".format(
|
||||
change, patchset
|
||||
)
|
||||
)
|
||||
|
||||
mergables[project_path].append(item)
|
||||
|
||||
# round 1: start branch and drop picked changes
|
||||
for project_path in mergables:
|
||||
# If --start-branch is given, create the branch (more than once per path is okay; repo ignores gracefully)
|
||||
if args.start_branch:
|
||||
subprocess.run(["repo", "start", args.start_branch[0], project_path])
|
||||
|
||||
# Determine the maximum commits to check already picked changes
|
||||
check_picked_count = args.check_picked
|
||||
branch_commits_count = int(
|
||||
subprocess.check_output(
|
||||
[
|
||||
"git",
|
||||
"rev-list",
|
||||
"--count",
|
||||
"--max-count",
|
||||
str(check_picked_count + 1),
|
||||
"HEAD",
|
||||
],
|
||||
cwd=project_path,
|
||||
text=True,
|
||||
)
|
||||
)
|
||||
if branch_commits_count <= check_picked_count:
|
||||
check_picked_count = branch_commits_count - 1
|
||||
|
||||
picked_change_ids = []
|
||||
for i in range(check_picked_count):
|
||||
if not commit_exists(project_path, "HEAD~{0}".format(i)):
|
||||
continue
|
||||
output = subprocess.check_output(
|
||||
["git", "show", "-q", f"HEAD~{i}"], cwd=project_path, text=True
|
||||
)
|
||||
output = output.split()
|
||||
if "Change-Id:" in output:
|
||||
for j, t in enumerate(reversed(output)):
|
||||
if t == "Change-Id:":
|
||||
head_change_id = output[len(output) - j]
|
||||
picked_change_ids.append(head_change_id.strip())
|
||||
break
|
||||
|
||||
def filter_picked(item):
|
||||
# Check if change is already picked to HEAD...HEAD~check_picked_count
|
||||
if item["change_id"] in picked_change_ids:
|
||||
print(
|
||||
"Skipping {0} - already picked in {1}".format(
|
||||
item["id"], project_path
|
||||
)
|
||||
)
|
||||
return False
|
||||
return True
|
||||
|
||||
mergables[project_path] = list(filter(filter_picked, mergables[project_path]))
|
||||
|
||||
# round 2: fetch changes in parallel if not pull
|
||||
if not args.pull:
|
||||
with ThreadPoolExecutor(max_workers=args.jobs) as e:
|
||||
for per_path_mergables in mergables.values():
|
||||
# changes are sorted so loop in reversed order to fetch top commits first
|
||||
for item in reversed(per_path_mergables):
|
||||
e.submit(partial(do_git_fetch_pull, args), item)
|
||||
|
||||
# round 3: apply changes in parallel for different projects, but sequential
|
||||
# within each project
|
||||
with ThreadPoolExecutor(max_workers=args.jobs) as e:
|
||||
|
||||
def bulk_pick_change(per_path_mergables):
|
||||
for item in per_path_mergables:
|
||||
apply_change(args, item)
|
||||
|
||||
for per_path_mergables in mergables.values():
|
||||
e.submit(bulk_pick_change, per_path_mergables)
|
||||
|
||||
|
||||
def do_git_fetch_pull(args, item):
|
||||
project_path = item["project_path"]
|
||||
|
||||
# commit object already exists, no need to fetch
|
||||
if not args.pull and commit_exists(project_path, item["revision"]):
|
||||
return
|
||||
|
||||
if "anonymous http" in item["fetch"]:
|
||||
method = "anonymous http"
|
||||
else:
|
||||
method = "ssh"
|
||||
|
||||
if args.pull:
|
||||
cmd = ["git", "pull", "--no-edit"]
|
||||
else:
|
||||
cmd = ["git", "fetch"]
|
||||
if args.quiet:
|
||||
cmd.append("--quiet")
|
||||
cmd.extend(["", item["fetch"][method]["ref"]])
|
||||
|
||||
# Try fetching from GitHub first if using lineage gerrit
|
||||
if is_lineage_gerrit(args.gerrit):
|
||||
if args.verbose:
|
||||
print("Trying to fetch the change from GitHub")
|
||||
|
||||
cmd[-2] = "github"
|
||||
if not args.quiet:
|
||||
print(cmd)
|
||||
result = subprocess.call(cmd, cwd=project_path)
|
||||
# Check if it worked
|
||||
if result == 0 or commit_exists(project_path, item["revision"]):
|
||||
return
|
||||
print("ERROR: git command failed")
|
||||
|
||||
# If not using the lineage gerrit or github failed, fetch from gerrit.
|
||||
if args.verbose:
|
||||
if is_lineage_gerrit(args.gerrit):
|
||||
print(
|
||||
"Fetching from GitHub didn't work, trying to fetch the change from Gerrit"
|
||||
)
|
||||
else:
|
||||
print("Fetching from {0}".format(args.gerrit))
|
||||
|
||||
cmd[-2] = item["fetch"][method]["url"]
|
||||
if not args.quiet:
|
||||
print(cmd)
|
||||
result = subprocess.call(cmd, cwd=project_path)
|
||||
if result != 0 and not commit_exists(project_path, item["revision"]):
|
||||
print("ERROR: git command failed")
|
||||
sys.exit(result)
|
||||
|
||||
|
||||
def apply_change(args, item):
|
||||
if not args.quiet:
|
||||
print("Applying change number {0}...".format(item["id"]))
|
||||
if is_closed(item["status"]):
|
||||
print("!! Force-picking a closed change !!\n")
|
||||
|
||||
project_path = item["project_path"]
|
||||
|
||||
# Print out some useful info
|
||||
if not args.quiet:
|
||||
print('--> Subject: "{0}"'.format(item["subject"]))
|
||||
print("--> Project path: {0}".format(project_path))
|
||||
print(
|
||||
"--> Change number: {0} (Patch Set {1})".format(
|
||||
item["id"], item["patchset"]
|
||||
)
|
||||
)
|
||||
|
||||
if args.pull:
|
||||
do_git_fetch_pull(args, item)
|
||||
else:
|
||||
# Perform the cherry-pick
|
||||
if args.quiet:
|
||||
cmd_out = subprocess.DEVNULL
|
||||
else:
|
||||
cmd_out = None
|
||||
result = subprocess.call(
|
||||
["git", "cherry-pick", "--ff", item["revision"]],
|
||||
cwd=project_path,
|
||||
stdout=cmd_out,
|
||||
stderr=cmd_out,
|
||||
)
|
||||
if result != 0:
|
||||
result = subprocess.call(
|
||||
["git", "diff-index", "--quiet", "HEAD", "--"],
|
||||
cwd=project_path,
|
||||
stdout=cmd_out,
|
||||
stderr=cmd_out,
|
||||
)
|
||||
if result == 0:
|
||||
print(
|
||||
"WARNING: git command resulted with an empty commit, aborting cherry-pick"
|
||||
)
|
||||
subprocess.call(
|
||||
["git", "cherry-pick", "--abort"],
|
||||
cwd=project_path,
|
||||
stdout=cmd_out,
|
||||
stderr=cmd_out,
|
||||
)
|
||||
elif args.reset:
|
||||
print("ERROR: git command failed, aborting cherry-pick")
|
||||
subprocess.call(
|
||||
["git", "cherry-pick", "--abort"],
|
||||
cwd=project_path,
|
||||
stdout=cmd_out,
|
||||
stderr=cmd_out,
|
||||
)
|
||||
sys.exit(result)
|
||||
else:
|
||||
print("ERROR: git command failed")
|
||||
sys.exit(result)
|
||||
if not args.quiet:
|
||||
print("")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
@@ -1,314 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright (C) 2012-2013, The CyanogenMod Project
|
||||
# (C) 2017-2018,2020-2021, The LineageOS Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import glob
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import urllib.error
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
|
||||
from xml.etree import ElementTree
|
||||
|
||||
dryrun = os.getenv('ROOMSERVICE_DRYRUN') == "true"
|
||||
if dryrun:
|
||||
print("Dry run roomservice, no change will be made.")
|
||||
|
||||
product = sys.argv[1]
|
||||
|
||||
if len(sys.argv) > 2:
|
||||
depsonly = sys.argv[2]
|
||||
else:
|
||||
depsonly = None
|
||||
|
||||
try:
|
||||
device = product[product.index("_") + 1:]
|
||||
except:
|
||||
device = product
|
||||
|
||||
if not depsonly:
|
||||
print("Device %s not found. Attempting to retrieve device repository from LineageOS Github (http://github.com/LineageOS)." % device)
|
||||
|
||||
repositories = []
|
||||
|
||||
if not depsonly:
|
||||
githubreq = urllib.request.Request("https://raw.githubusercontent.com/LineageOS/mirror/main/default.xml")
|
||||
try:
|
||||
result = ElementTree.fromstring(urllib.request.urlopen(githubreq, timeout=10).read().decode())
|
||||
except urllib.error.URLError:
|
||||
print("Failed to fetch data from GitHub")
|
||||
sys.exit(1)
|
||||
except ValueError:
|
||||
print("Failed to parse return data from GitHub")
|
||||
sys.exit(1)
|
||||
for res in result.findall('.//project'):
|
||||
repositories.append(res.attrib['name'][10:])
|
||||
|
||||
local_manifests = r'.repo/local_manifests'
|
||||
if not os.path.exists(local_manifests): os.makedirs(local_manifests)
|
||||
|
||||
def exists_in_tree(lm, path):
|
||||
for child in lm.getchildren():
|
||||
if child.attrib['path'] == path:
|
||||
return True
|
||||
return False
|
||||
|
||||
# in-place prettyprint formatter
|
||||
def indent(elem, level=0):
|
||||
i = "\n" + level*" "
|
||||
if len(elem):
|
||||
if not elem.text or not elem.text.strip():
|
||||
elem.text = i + " "
|
||||
if not elem.tail or not elem.tail.strip():
|
||||
elem.tail = i
|
||||
for elem in elem:
|
||||
indent(elem, level+1)
|
||||
if not elem.tail or not elem.tail.strip():
|
||||
elem.tail = i
|
||||
else:
|
||||
if level and (not elem.tail or not elem.tail.strip()):
|
||||
elem.tail = i
|
||||
|
||||
def get_manifest_path():
|
||||
'''Find the current manifest path
|
||||
In old versions of repo this is at .repo/manifest.xml
|
||||
In new versions, .repo/manifest.xml includes an include
|
||||
to some arbitrary file in .repo/manifests'''
|
||||
|
||||
m = ElementTree.parse(".repo/manifest.xml")
|
||||
try:
|
||||
m.findall('default')[0]
|
||||
return '.repo/manifest.xml'
|
||||
except IndexError:
|
||||
return ".repo/manifests/{}".format(m.find("include").get("name"))
|
||||
|
||||
def get_default_revision():
|
||||
m = ElementTree.parse(get_manifest_path())
|
||||
d = m.findall('default')[0]
|
||||
r = d.get('revision')
|
||||
return r.replace('refs/heads/', '').replace('refs/tags/', '')
|
||||
|
||||
def get_from_manifest(devicename):
|
||||
for path in glob.glob(".repo/local_manifests/*.xml"):
|
||||
try:
|
||||
lm = ElementTree.parse(path)
|
||||
lm = lm.getroot()
|
||||
except:
|
||||
lm = ElementTree.Element("manifest")
|
||||
|
||||
for localpath in lm.findall("project"):
|
||||
if re.search("android_device_.*_%s$" % device, localpath.get("name")):
|
||||
return localpath.get("path")
|
||||
|
||||
return None
|
||||
|
||||
def is_in_manifest(projectpath):
|
||||
for path in glob.glob(".repo/local_manifests/*.xml"):
|
||||
try:
|
||||
lm = ElementTree.parse(path)
|
||||
lm = lm.getroot()
|
||||
except:
|
||||
lm = ElementTree.Element("manifest")
|
||||
|
||||
for localpath in lm.findall("project"):
|
||||
if localpath.get("path") == projectpath:
|
||||
return True
|
||||
|
||||
# Search in main manifest, too
|
||||
try:
|
||||
lm = ElementTree.parse(get_manifest_path())
|
||||
lm = lm.getroot()
|
||||
except:
|
||||
lm = ElementTree.Element("manifest")
|
||||
|
||||
for localpath in lm.findall("project"):
|
||||
if localpath.get("path") == projectpath:
|
||||
return True
|
||||
|
||||
# ... and don't forget the lineage snippet
|
||||
try:
|
||||
lm = ElementTree.parse(".repo/manifests/snippets/lineage.xml")
|
||||
lm = lm.getroot()
|
||||
except:
|
||||
lm = ElementTree.Element("manifest")
|
||||
|
||||
for localpath in lm.findall("project"):
|
||||
if localpath.get("path") == projectpath:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def add_to_manifest(repositories):
|
||||
if dryrun:
|
||||
return
|
||||
|
||||
try:
|
||||
lm = ElementTree.parse(".repo/local_manifests/roomservice.xml")
|
||||
lm = lm.getroot()
|
||||
except:
|
||||
lm = ElementTree.Element("manifest")
|
||||
|
||||
for repository in repositories:
|
||||
repo_name = repository['repository']
|
||||
repo_target = repository['target_path']
|
||||
repo_revision = repository['branch']
|
||||
print('Checking if %s is fetched from %s' % (repo_target, repo_name))
|
||||
if is_in_manifest(repo_target):
|
||||
print('LineageOS/%s already fetched to %s' % (repo_name, repo_target))
|
||||
continue
|
||||
|
||||
project = ElementTree.Element("project", attrib = {
|
||||
"path": repo_target,
|
||||
"remote": "github",
|
||||
"name": "LineageOS/%s" % repo_name,
|
||||
"revision": repo_revision })
|
||||
if repo_remote := repository.get("remote", None):
|
||||
# aosp- remotes are only used for kernel prebuilts, thus they
|
||||
# don't let you customize clone-depth/revision.
|
||||
if repo_remote.startswith("aosp-"):
|
||||
project.attrib["name"] = repo_name
|
||||
project.attrib["remote"] = repo_remote
|
||||
project.attrib["clone-depth"] = "1"
|
||||
del project.attrib["revision"]
|
||||
if project.attrib.get("revision", None) == get_default_revision():
|
||||
del project.attrib["revision"]
|
||||
print("Adding dependency: %s -> %s" % (project.attrib["name"], project.attrib["path"]))
|
||||
lm.append(project)
|
||||
|
||||
indent(lm, 0)
|
||||
raw_xml = ElementTree.tostring(lm).decode()
|
||||
raw_xml = '<?xml version="1.0" encoding="UTF-8"?>\n' + raw_xml
|
||||
|
||||
f = open('.repo/local_manifests/roomservice.xml', 'w')
|
||||
f.write(raw_xml)
|
||||
f.close()
|
||||
|
||||
def fetch_dependencies(repo_path):
|
||||
print('Looking for dependencies in %s' % repo_path)
|
||||
dependencies_path = repo_path + '/lineage.dependencies'
|
||||
syncable_repos = []
|
||||
verify_repos = []
|
||||
|
||||
if os.path.exists(dependencies_path):
|
||||
dependencies_file = open(dependencies_path, 'r')
|
||||
dependencies = json.loads(dependencies_file.read())
|
||||
fetch_list = []
|
||||
|
||||
for dependency in dependencies:
|
||||
if not is_in_manifest(dependency['target_path']):
|
||||
fetch_list.append(dependency)
|
||||
syncable_repos.append(dependency['target_path'])
|
||||
if 'branch' not in dependency:
|
||||
if dependency.get('remote', 'github') == 'github':
|
||||
dependency['branch'] = get_default_or_fallback_revision(dependency['repository'])
|
||||
if not dependency['branch']:
|
||||
sys.exit(1)
|
||||
else:
|
||||
dependency['branch'] = None
|
||||
verify_repos.append(dependency['target_path'])
|
||||
|
||||
if not os.path.isdir(dependency['target_path']):
|
||||
syncable_repos.append(dependency['target_path'])
|
||||
|
||||
dependencies_file.close()
|
||||
|
||||
if len(fetch_list) > 0:
|
||||
print('Adding dependencies to manifest')
|
||||
add_to_manifest(fetch_list)
|
||||
else:
|
||||
print('%s has no additional dependencies.' % repo_path)
|
||||
|
||||
if len(syncable_repos) > 0:
|
||||
print('Syncing dependencies')
|
||||
if not dryrun:
|
||||
os.system('repo sync --force-sync %s' % ' '.join(syncable_repos))
|
||||
|
||||
for deprepo in verify_repos:
|
||||
fetch_dependencies(deprepo)
|
||||
|
||||
def get_default_or_fallback_revision(repo_name):
|
||||
default_revision = get_default_revision()
|
||||
print("Default revision: %s" % default_revision)
|
||||
print("Checking branch info")
|
||||
|
||||
try:
|
||||
stdout = subprocess.run(
|
||||
["git", "ls-remote", "-h", "https://:@github.com/LineageOS/" + repo_name],
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
).stdout.decode()
|
||||
branches = [x.split("refs/heads/")[-1] for x in stdout.splitlines()]
|
||||
except:
|
||||
return ""
|
||||
|
||||
if default_revision in branches:
|
||||
return default_revision
|
||||
|
||||
if os.getenv('ROOMSERVICE_BRANCHES'):
|
||||
fallbacks = list(filter(bool, os.getenv('ROOMSERVICE_BRANCHES').split(' ')))
|
||||
for fallback in fallbacks:
|
||||
if fallback in branches:
|
||||
print("Using fallback branch: %s" % fallback)
|
||||
return fallback
|
||||
|
||||
print("Default revision %s not found in %s. Bailing." % (default_revision, repo_name))
|
||||
print("Branches found:")
|
||||
for branch in branches:
|
||||
print(branch)
|
||||
print("Use the ROOMSERVICE_BRANCHES environment variable to specify a list of fallback branches.")
|
||||
return ""
|
||||
|
||||
if depsonly:
|
||||
repo_path = get_from_manifest(device)
|
||||
if repo_path:
|
||||
fetch_dependencies(repo_path)
|
||||
else:
|
||||
print("Trying dependencies-only mode on a non-existing device tree?")
|
||||
|
||||
sys.exit()
|
||||
|
||||
else:
|
||||
for repo_name in repositories:
|
||||
if re.match(r"^android_device_[^_]*_" + device + "$", repo_name):
|
||||
print("Found repository: %s" % repo_name)
|
||||
|
||||
manufacturer = repo_name.replace("android_device_", "").replace("_" + device, "")
|
||||
repo_path = "device/%s/%s" % (manufacturer, device)
|
||||
revision = get_default_or_fallback_revision(repo_name)
|
||||
if revision == "":
|
||||
# Some devices have the same codename but shipped a long time ago and may not have
|
||||
# a current branch set up.
|
||||
# Continue looking up all repositories until a match is found or no repos are left
|
||||
# to check.
|
||||
continue
|
||||
|
||||
device_repository = {'repository':repo_name,'target_path':repo_path,'branch':revision}
|
||||
add_to_manifest([device_repository])
|
||||
|
||||
print("Syncing repository to retrieve project.")
|
||||
os.system('repo sync --force-sync %s' % repo_path)
|
||||
print("Repository synced!")
|
||||
|
||||
fetch_dependencies(repo_path)
|
||||
print("Done")
|
||||
sys.exit()
|
||||
|
||||
print("Repository for %s not found in the LineageOS Github repository list. If this is in error, you may need to manually add it to your local_manifests/roomservice.xml." % device)
|
@@ -16,89 +16,89 @@
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
# Set lineage_charger_density to the density bucket of the device.
|
||||
lineage_charger_density := mdpi
|
||||
# Set minus_charger_density to the density bucket of the device.
|
||||
minus_charger_density := mdpi
|
||||
ifneq (,$(TARGET_SCREEN_DENSITY))
|
||||
lineage_charger_density := $(strip \
|
||||
minus_charger_density := $(strip \
|
||||
$(or $(if $(filter $(shell echo $$(($(TARGET_SCREEN_DENSITY) >= 560))),1),xxxhdpi),\
|
||||
$(if $(filter $(shell echo $$(($(TARGET_SCREEN_DENSITY) >= 400))),1),xxhdpi),\
|
||||
$(if $(filter $(shell echo $$(($(TARGET_SCREEN_DENSITY) >= 280))),1),xhdpi),\
|
||||
$(if $(filter $(shell echo $$(($(TARGET_SCREEN_DENSITY) >= 200))),1),hdpi,mdpi)))
|
||||
else ifneq (,$(filter mdpi hdpi xhdpi xxhdpi xxxhdpi,$(PRODUCT_AAPT_PREF_CONFIG)))
|
||||
# If PRODUCT_AAPT_PREF_CONFIG includes a dpi bucket, then use that value.
|
||||
lineage_charger_density := $(PRODUCT_AAPT_PREF_CONFIG)
|
||||
minus_charger_density := $(PRODUCT_AAPT_PREF_CONFIG)
|
||||
endif
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := lineage_charger_battery_scale
|
||||
LOCAL_MODULE := minus_charger_battery_scale
|
||||
LOCAL_MODULE_STEM := battery_scale.png
|
||||
LOCAL_SRC_FILES := $(lineage_charger_density)/battery_scale.png
|
||||
LOCAL_SRC_FILES := $(minus_charger_density)/battery_scale.png
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_CLASS := ETC
|
||||
LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_ETC)/res/images/charger
|
||||
include $(BUILD_PREBUILT)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := lineage_charger_battery_scale_vendor
|
||||
LOCAL_MODULE := minus_charger_battery_scale_vendor
|
||||
LOCAL_MODULE_STEM := battery_scale.png
|
||||
LOCAL_SRC_FILES := $(lineage_charger_density)/battery_scale.png
|
||||
LOCAL_SRC_FILES := $(minus_charger_density)/battery_scale.png
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_CLASS := ETC
|
||||
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/res/images/charger
|
||||
include $(BUILD_PREBUILT)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := lineage_charger_battery_fail
|
||||
LOCAL_MODULE := minus_charger_battery_fail
|
||||
LOCAL_MODULE_STEM := battery_fail.png
|
||||
LOCAL_SRC_FILES := $(lineage_charger_density)/battery_fail.png
|
||||
LOCAL_SRC_FILES := $(minus_charger_density)/battery_fail.png
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_CLASS := ETC
|
||||
LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_ETC)/res/images/charger
|
||||
include $(BUILD_PREBUILT)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := lineage_charger_battery_fail_vendor
|
||||
LOCAL_MODULE := minus_charger_battery_fail_vendor
|
||||
LOCAL_MODULE_STEM := battery_fail.png
|
||||
LOCAL_SRC_FILES := $(lineage_charger_density)/battery_fail.png
|
||||
LOCAL_SRC_FILES := $(minus_charger_density)/battery_fail.png
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_CLASS := ETC
|
||||
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/res/images/charger
|
||||
include $(BUILD_PREBUILT)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := lineage_charger_font
|
||||
LOCAL_MODULE := minus_charger_font
|
||||
LOCAL_MODULE_STEM := percent_font.png
|
||||
LOCAL_SRC_FILES := $(lineage_charger_density)/percent_font.png
|
||||
LOCAL_SRC_FILES := $(minus_charger_density)/percent_font.png
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_CLASS := ETC
|
||||
LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_ETC)/res/images/charger
|
||||
include $(BUILD_PREBUILT)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := lineage_charger_font_vendor
|
||||
LOCAL_MODULE := minus_charger_font_vendor
|
||||
LOCAL_MODULE_STEM := percent_font.png
|
||||
LOCAL_SRC_FILES := $(lineage_charger_density)/percent_font.png
|
||||
LOCAL_SRC_FILES := $(minus_charger_density)/percent_font.png
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_CLASS := ETC
|
||||
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/res/images/charger
|
||||
include $(BUILD_PREBUILT)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := lineage_charger_animation
|
||||
LOCAL_MODULE := minus_charger_animation
|
||||
LOCAL_MODULE_STEM := animation.txt
|
||||
LOCAL_SRC_FILES := animation.txt
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_CLASS := ETC
|
||||
LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_ETC)/res/values/charger
|
||||
LOCAL_REQUIRED_MODULES := lineage_charger_battery_scale lineage_charger_battery_fail lineage_charger_font
|
||||
LOCAL_REQUIRED_MODULES := minus_charger_battery_scale minus_charger_battery_fail minus_charger_font
|
||||
include $(BUILD_PREBUILT)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := lineage_charger_animation_vendor
|
||||
LOCAL_MODULE := minus_charger_animation_vendor
|
||||
LOCAL_MODULE_STEM := animation.txt
|
||||
LOCAL_SRC_FILES := animation.txt
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_CLASS := ETC
|
||||
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/res/values/charger
|
||||
LOCAL_REQUIRED_MODULES := lineage_charger_battery_scale_vendor lineage_charger_battery_fail_vendor lineage_charger_font_vendor
|
||||
LOCAL_REQUIRED_MODULES := minus_charger_battery_scale_vendor minus_charger_battery_fail_vendor minus_charger_font_vendor
|
||||
include $(BUILD_PREBUILT)
|
||||
|
@@ -4,10 +4,10 @@
|
||||
# Recovery
|
||||
BOARD_USES_FULL_RECOVERY_IMAGE ?= true
|
||||
|
||||
include vendor/lineage/config/BoardConfigKernel.mk
|
||||
include vendor/minus/config/BoardConfigKernel.mk
|
||||
|
||||
ifeq ($(BOARD_USES_QCOM_HARDWARE),true)
|
||||
include hardware/qcom-caf/common/BoardConfigQcom.mk
|
||||
endif
|
||||
|
||||
include vendor/lineage/config/BoardConfigSoong.mk
|
||||
include vendor/minus/config/BoardConfigSoong.mk
|
@@ -16,62 +16,5 @@ EXPORT_TO_SOONG := \
|
||||
# Documentation here:
|
||||
# https://github.com/LineageOS/android_build_soong/commit/8328367c44085b948c003116c0ed74a047237a69
|
||||
|
||||
$(call add_soong_config_namespace,lineageVarsPlugin)
|
||||
$(foreach v,$(EXPORT_TO_SOONG),$(eval $(call add_soong_config_var,lineageVarsPlugin,$(v))))
|
||||
|
||||
# Camera
|
||||
ifneq ($(TARGET_CAMERA_OVERRIDE_FORMAT_FROM_RESERVED),)
|
||||
$(warning TARGET_CAMERA_OVERRIDE_FORMAT_FROM_RESERVED is deprecated, please migrate to soong_config_set,camera,override_format_from_reserved)
|
||||
$(call soong_config_set,camera,override_format_from_reserved,$(TARGET_CAMERA_OVERRIDE_FORMAT_FROM_RESERVED))
|
||||
endif
|
||||
|
||||
# Libui
|
||||
ifneq ($(TARGET_ADDITIONAL_GRALLOC_10_USAGE_BITS),)
|
||||
$(call soong_config_set,libui,additional_gralloc_10_usage_bits,$(TARGET_ADDITIONAL_GRALLOC_10_USAGE_BITS))
|
||||
endif
|
||||
|
||||
# Lineage Health HAL
|
||||
ifneq ($(TARGET_HEALTH_CHARGING_CONTROL_CHARGING_PATH),)
|
||||
$(warning TARGET_HEALTH_CHARGING_CONTROL_CHARGING_PATH is deprecated, please migrate to soong_config_set,lineage_health,charging_control_charging_path)
|
||||
$(call soong_config_set,lineage_health,charging_control_charging_path,$(TARGET_HEALTH_CHARGING_CONTROL_CHARGING_PATH))
|
||||
endif
|
||||
ifneq ($(TARGET_HEALTH_CHARGING_CONTROL_DEADLINE_PATH),)
|
||||
$(warning TARGET_HEALTH_CHARGING_CONTROL_DEADLINE_PATH is deprecated, please migrate to soong_config_set,lineage_health,charging_control_deadline_path)
|
||||
$(call soong_config_set,lineage_health,charging_control_deadline_path,$(TARGET_HEALTH_CHARGING_CONTROL_DEADLINE_PATH))
|
||||
endif
|
||||
ifneq ($(TARGET_HEALTH_CHARGING_CONTROL_CHARGING_ENABLED),)
|
||||
$(warning TARGET_HEALTH_CHARGING_CONTROL_CHARGING_ENABLED is deprecated, please migrate to soong_config_set,lineage_health,charging_control_charging_enabled)
|
||||
$(call soong_config_set,lineage_health,charging_control_charging_enabled,$(TARGET_HEALTH_CHARGING_CONTROL_CHARGING_ENABLED))
|
||||
endif
|
||||
ifneq ($(TARGET_HEALTH_CHARGING_CONTROL_CHARGING_DISABLED),)
|
||||
$(warning TARGET_HEALTH_CHARGING_CONTROL_CHARGING_DISABLED is deprecated, please migrate to soong_config_set,lineage_health,charging_control_charging_disabled)
|
||||
$(call soong_config_set,lineage_health,charging_control_charging_disabled,$(TARGET_HEALTH_CHARGING_CONTROL_CHARGING_DISABLED))
|
||||
endif
|
||||
ifneq ($(TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_BYPASS),)
|
||||
$(warning TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_BYPASS is deprecated, please migrate to soong_config_set,lineage_health,charging_control_supports_bypass)
|
||||
$(call soong_config_set,lineage_health,charging_control_supports_bypass,$(TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_BYPASS))
|
||||
endif
|
||||
ifneq ($(TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_DEADLINE),)
|
||||
$(warning TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_DEADLINE is deprecated, please migrate to soong_config_set,lineage_health,charging_control_supports_deadline)
|
||||
$(call soong_config_set,lineage_health,charging_control_supports_deadline,$(TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_DEADLINE))
|
||||
endif
|
||||
ifneq ($(TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_LIMIT),)
|
||||
$(warning TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_LIMIT is deprecated, please migrate to soong_config_set,lineage_health,charging_control_supports_limit)
|
||||
$(call soong_config_set,lineage_health,charging_control_supports_limit,$(TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_LIMIT))
|
||||
endif
|
||||
ifneq ($(TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_TOGGLE),)
|
||||
$(warning TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_TOGGLE is deprecated, please migrate to soong_config_set,lineage_health,charging_control_supports_toggle)
|
||||
$(call soong_config_set,lineage_health,charging_control_supports_toggle,$(TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_TOGGLE))
|
||||
endif
|
||||
|
||||
# Surfaceflinger
|
||||
ifneq ($(TARGET_SURFACEFLINGER_UDFPS_LIB),)
|
||||
$(warning TARGET_SURFACEFLINGER_UDFPS_LIB is deprecated, please migrate to soong_config_set,surfaceflinger,udfps_lib)
|
||||
$(call soong_config_set,surfaceflinger,udfps_lib,$(TARGET_SURFACEFLINGER_UDFPS_LIB))
|
||||
endif
|
||||
|
||||
# Vendor init
|
||||
ifneq ($(TARGET_INIT_VENDOR_LIB),)
|
||||
$(warning TARGET_INIT_VENDOR_LIB is deprecated, please migrate to soong_config_set,libinit,vendor_init_lib)
|
||||
$(call soong_config_set,libinit,vendor_init_lib,$(TARGET_INIT_VENDOR_LIB))
|
||||
endif
|
||||
$(call add_soong_config_namespace,minusVarsPlugin)
|
||||
$(foreach v,$(EXPORT_TO_SOONG),$(eval $(call add_soong_config_var,minusVarsPlugin,$(v))))
|
@@ -24,13 +24,13 @@ PRODUCT_COPY_FILES += \
|
||||
$(LOCAL_PATH)/alarms/ogg/Barium.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Barium.ogg \
|
||||
$(LOCAL_PATH)/alarms/ogg/Hassium.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Hassium.ogg \
|
||||
$(LOCAL_PATH)/alarms/ogg/Scandium.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Scandium.ogg \
|
||||
vendor/lineage/prebuilt/common/media/audio/alarms/Argon-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Argon-old.ogg \
|
||||
vendor/lineage/prebuilt/common/media/audio/alarms/Carbon-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Carbon-old.ogg \
|
||||
vendor/lineage/prebuilt/common/media/audio/alarms/Krypton-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Krypton-old.ogg \
|
||||
vendor/lineage/prebuilt/common/media/audio/alarms/Neon-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Neon-old.ogg \
|
||||
vendor/lineage/prebuilt/common/media/audio/alarms/Osmium-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Osmium-old.ogg \
|
||||
vendor/lineage/prebuilt/common/media/audio/alarms/Oxygen-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Oxygen-old.ogg \
|
||||
vendor/lineage/prebuilt/common/media/audio/alarms/Platinum-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Platinum-old.ogg
|
||||
vendor/minus/prebuilt/common/media/audio/alarms/Argon-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Argon-old.ogg \
|
||||
vendor/minus/prebuilt/common/media/audio/alarms/Carbon-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Carbon-old.ogg \
|
||||
vendor/minus/prebuilt/common/media/audio/alarms/Krypton-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Krypton-old.ogg \
|
||||
vendor/minus/prebuilt/common/media/audio/alarms/Neon-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Neon-old.ogg \
|
||||
vendor/minus/prebuilt/common/media/audio/alarms/Osmium-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Osmium-old.ogg \
|
||||
vendor/minus/prebuilt/common/media/audio/alarms/Oxygen-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Oxygen-old.ogg \
|
||||
vendor/minus/prebuilt/common/media/audio/alarms/Platinum-old.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Platinum-old.ogg
|
||||
|
||||
PRODUCT_COPY_FILES += \
|
||||
$(LOCAL_PATH)/F1_New_SMS.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/notifications/F1_New_SMS.ogg \
|
||||
|
132
config/common.mk
@@ -1,7 +1,7 @@
|
||||
# Allow vendor/extra to override any property by setting it first
|
||||
$(call inherit-product-if-exists, vendor/extra/product.mk)
|
||||
|
||||
PRODUCT_BRAND ?= LineageOS
|
||||
PRODUCT_BRAND ?= MinusOS
|
||||
|
||||
ifeq ($(PRODUCT_GMS_CLIENTID_BASE),)
|
||||
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||
@@ -11,16 +11,6 @@ PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||
ro.com.google.clientidbase=$(PRODUCT_GMS_CLIENTID_BASE)
|
||||
endif
|
||||
|
||||
ifeq ($(PRODUCT_IS_ATV),true)
|
||||
ifeq ($(PRODUCT_ATV_CLIENTID_BASE),)
|
||||
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||
ro.oem.key1=ATV00100020
|
||||
else
|
||||
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||
ro.oem.key1=$(PRODUCT_ATV_CLIENTID_BASE)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET_BUILD_VARIANT),eng)
|
||||
# Disable ADB authentication
|
||||
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += ro.adb.secure=0
|
||||
@@ -39,18 +29,18 @@ endif
|
||||
|
||||
# Backup Tool
|
||||
PRODUCT_COPY_FILES += \
|
||||
vendor/lineage/prebuilt/common/bin/backuptool.sh:install/bin/backuptool.sh \
|
||||
vendor/lineage/prebuilt/common/bin/backuptool.functions:install/bin/backuptool.functions \
|
||||
vendor/lineage/prebuilt/common/bin/50-lineage.sh:$(TARGET_COPY_OUT_SYSTEM)/addon.d/50-lineage.sh
|
||||
vendor/minus/prebuilt/common/bin/backuptool.sh:install/bin/backuptool.sh \
|
||||
vendor/minus/prebuilt/common/bin/backuptool.functions:install/bin/backuptool.functions \
|
||||
vendor/minus/prebuilt/common/bin/50-minus.sh:$(TARGET_COPY_OUT_SYSTEM)/addon.d/50-minus.sh
|
||||
|
||||
PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \
|
||||
system/addon.d/50-lineage.sh
|
||||
system/addon.d/50-minus.sh
|
||||
|
||||
ifneq ($(strip $(AB_OTA_PARTITIONS) $(AB_OTA_POSTINSTALL_CONFIG)),)
|
||||
PRODUCT_COPY_FILES += \
|
||||
vendor/lineage/prebuilt/common/bin/backuptool_ab.sh:$(TARGET_COPY_OUT_SYSTEM)/bin/backuptool_ab.sh \
|
||||
vendor/lineage/prebuilt/common/bin/backuptool_ab.functions:$(TARGET_COPY_OUT_SYSTEM)/bin/backuptool_ab.functions \
|
||||
vendor/lineage/prebuilt/common/bin/backuptool_postinstall.sh:$(TARGET_COPY_OUT_SYSTEM)/bin/backuptool_postinstall.sh
|
||||
vendor/minus/prebuilt/common/bin/backuptool_ab.sh:$(TARGET_COPY_OUT_SYSTEM)/bin/backuptool_ab.sh \
|
||||
vendor/minus/prebuilt/common/bin/backuptool_ab.functions:$(TARGET_COPY_OUT_SYSTEM)/bin/backuptool_ab.functions \
|
||||
vendor/minus/prebuilt/common/bin/backuptool_postinstall.sh:$(TARGET_COPY_OUT_SYSTEM)/bin/backuptool_postinstall.sh
|
||||
|
||||
PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \
|
||||
system/bin/backuptool_ab.sh \
|
||||
@@ -63,13 +53,13 @@ PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||
endif
|
||||
endif
|
||||
|
||||
# Lineage-specific broadcast actions whitelist
|
||||
# minus-specific broadcast actions whitelist
|
||||
PRODUCT_COPY_FILES += \
|
||||
vendor/lineage/config/permissions/lineage-sysconfig.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/sysconfig/lineage-sysconfig.xml
|
||||
vendor/minus/config/permissions/minus-sysconfig.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/sysconfig/minus-sysconfig.xml
|
||||
|
||||
# Lineage-specific init rc file
|
||||
# minus-specific init rc file
|
||||
PRODUCT_COPY_FILES += \
|
||||
vendor/lineage/prebuilt/common/etc/init/init.lineage-system_ext.rc:$(TARGET_COPY_OUT_SYSTEM_EXT)/etc/init/init.lineage-system_ext.rc
|
||||
vendor/minus/prebuilt/common/etc/init/init.minus-system_ext.rc:$(TARGET_COPY_OUT_SYSTEM_EXT)/etc/init/init.minus-system_ext.rc
|
||||
|
||||
# Enable SIP+VoIP on all targets
|
||||
PRODUCT_COPY_FILES += \
|
||||
@@ -83,23 +73,10 @@ PRODUCT_PACKAGES += \
|
||||
PRODUCT_COPY_FILES += \
|
||||
frameworks/base/data/keyboards/Vendor_045e_Product_028e.kl:$(TARGET_COPY_OUT_PRODUCT)/usr/keylayout/Vendor_045e_Product_0719.kl
|
||||
|
||||
# Component overrides
|
||||
PRODUCT_PACKAGES += \
|
||||
lineage-component-overrides.xml
|
||||
|
||||
# This is Lineage!
|
||||
PRODUCT_COPY_FILES += \
|
||||
vendor/lineage/config/permissions/org.lineageos.android.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/org.lineageos.android.xml
|
||||
|
||||
# Enforce privapp-permissions whitelist
|
||||
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||
ro.control_privapp_permissions=enforce
|
||||
|
||||
ifneq ($(TARGET_DISABLE_LINEAGE_SDK), true)
|
||||
# Lineage SDK
|
||||
include vendor/lineage/config/lineage_sdk_common.mk
|
||||
endif
|
||||
|
||||
# Do not include art debug targets
|
||||
PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD := false
|
||||
|
||||
@@ -113,61 +90,25 @@ PRODUCT_RESTRICT_VENDOR_FILES := false
|
||||
|
||||
ifneq ($(TARGET_DISABLE_EPPE),true)
|
||||
# Require all requested packages to exist
|
||||
$(call enforce-product-packages-exist-internal,$(wildcard device/*/$(LINEAGE_BUILD)/$(TARGET_PRODUCT).mk),product_manifest.xml rild Calendar android.hidl.memory@1.0-impl.vendor vndk_apex_snapshot_package)
|
||||
$(call enforce-product-packages-exist-internal,$(wildcard device/*/$(MINUS_BUILD)/$(TARGET_PRODUCT).mk),product_manifest.xml rild Calendar android.hidl.memory@1.0-impl.vendor vndk_apex_snapshot_package)
|
||||
endif
|
||||
|
||||
# Bootanimation
|
||||
TARGET_SCREEN_WIDTH ?= 1080
|
||||
TARGET_SCREEN_HEIGHT ?= 1920
|
||||
PRODUCT_PACKAGES += \
|
||||
bootanimation.zip
|
||||
|
||||
# Build Manifest
|
||||
PRODUCT_PACKAGES += \
|
||||
build-manifest
|
||||
|
||||
# Lineage packages
|
||||
ifeq ($(PRODUCT_IS_ATV),)
|
||||
PRODUCT_PACKAGES += \
|
||||
ExactCalculator \
|
||||
Jelly
|
||||
endif
|
||||
|
||||
ifeq ($(PRODUCT_IS_AUTOMOTIVE),)
|
||||
PRODUCT_PACKAGES += \
|
||||
LineageParts \
|
||||
LineageSetupWizard
|
||||
endif
|
||||
|
||||
PRODUCT_PACKAGES += \
|
||||
LineageSettingsProvider \
|
||||
Updater
|
||||
|
||||
PRODUCT_COPY_FILES += \
|
||||
vendor/lineage/prebuilt/common/etc/init/init.lineage-updater.rc:$(TARGET_COPY_OUT_SYSTEM_EXT)/etc/init/init.lineage-updater.rc
|
||||
|
||||
# Config
|
||||
PRODUCT_PACKAGES += \
|
||||
SimpleDeviceConfig \
|
||||
SimpleSettingsConfig
|
||||
|
||||
# Extra tools in Lineage
|
||||
# Extra tools
|
||||
PRODUCT_PACKAGES += \
|
||||
bash \
|
||||
curl \
|
||||
getcap \
|
||||
htop \
|
||||
nano \
|
||||
setcap \
|
||||
vim
|
||||
|
||||
PRODUCT_PACKAGES += \
|
||||
nano_recovery
|
||||
getcap
|
||||
|
||||
PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \
|
||||
system/bin/curl \
|
||||
system/bin/getcap \
|
||||
system/bin/setcap
|
||||
system/bin/getcap
|
||||
|
||||
# Filesystems tools
|
||||
PRODUCT_PACKAGES += \
|
||||
@@ -184,7 +125,7 @@ PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \
|
||||
|
||||
# FRP
|
||||
PRODUCT_COPY_FILES += \
|
||||
vendor/lineage/prebuilt/common/bin/wipe-frp.sh:$(TARGET_COPY_OUT_RECOVERY)/root/system/bin/wipe-frp
|
||||
vendor/minus/prebuilt/common/bin/wipe-frp.sh:$(TARGET_COPY_OUT_RECOVERY)/root/system/bin/wipe-frp
|
||||
|
||||
# Openssh
|
||||
PRODUCT_PACKAGES += \
|
||||
@@ -197,11 +138,7 @@ PRODUCT_PACKAGES += \
|
||||
start-ssh
|
||||
|
||||
PRODUCT_COPY_FILES += \
|
||||
vendor/lineage/prebuilt/common/etc/init/init.openssh.rc:$(TARGET_COPY_OUT_PRODUCT)/etc/init/init.openssh.rc
|
||||
|
||||
# rsync
|
||||
PRODUCT_PACKAGES += \
|
||||
rsync
|
||||
vendor/minus/prebuilt/common/etc/init/init.openssh.rc:$(TARGET_COPY_OUT_PRODUCT)/etc/init/init.openssh.rc
|
||||
|
||||
# Storage manager
|
||||
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||
@@ -216,22 +153,10 @@ PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \
|
||||
system/bin/procmem
|
||||
endif
|
||||
|
||||
# Root
|
||||
PRODUCT_PACKAGES += \
|
||||
adb_root
|
||||
ifneq ($(TARGET_BUILD_VARIANT),user)
|
||||
ifeq ($(WITH_SU),true)
|
||||
PRODUCT_PACKAGES += \
|
||||
su
|
||||
|
||||
PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \
|
||||
system/xbin/su
|
||||
endif
|
||||
endif
|
||||
|
||||
# SystemUI
|
||||
PRODUCT_DEXPREOPT_SPEED_APPS += \
|
||||
CarSystemUI \
|
||||
Launcher3QuickStep \
|
||||
Settings \
|
||||
SystemUI
|
||||
|
||||
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||
@@ -247,10 +172,9 @@ PRODUCT_PRODUCT_PROPERTIES += \
|
||||
setupwizard.theme=glif_v4 \
|
||||
setupwizard.feature.day_night_mode_enabled=true
|
||||
|
||||
PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS += vendor/lineage/overlay/no-rro
|
||||
PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS += vendor/minus/overlay/no-rro
|
||||
PRODUCT_PACKAGE_OVERLAYS += \
|
||||
vendor/lineage/overlay/common \
|
||||
vendor/lineage/overlay/no-rro
|
||||
vendor/minus/overlay/common
|
||||
|
||||
PRODUCT_PACKAGES += \
|
||||
DocumentsUIOverlay \
|
||||
@@ -264,15 +188,9 @@ CUSTOM_LOCALES += \
|
||||
cy_GB \
|
||||
fur_IT
|
||||
|
||||
PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS += vendor/crowdin/overlay
|
||||
PRODUCT_PACKAGE_OVERLAYS += vendor/crowdin/overlay
|
||||
include vendor/minus/config/version.mk
|
||||
|
||||
PRODUCT_EXTRA_RECOVERY_KEYS += \
|
||||
vendor/lineage/build/target/product/security/lineage
|
||||
|
||||
include vendor/lineage/config/version.mk
|
||||
|
||||
-include vendor/lineage-priv/keys/keys.mk
|
||||
-include vendor/minus-priv/keys/keys.mk
|
||||
|
||||
-include $(WORKSPACE)/build_env/image-auto-bits.mk
|
||||
-include vendor/lineage/config/partner_gms.mk
|
||||
|
||||
|
@@ -1,5 +0,0 @@
|
||||
# Inherit common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common.mk)
|
||||
|
||||
# Inherit Lineage car device tree
|
||||
$(call inherit-product, device/lineage/car/lineage_car.mk)
|
@@ -1,13 +1,13 @@
|
||||
# Inherit mobile full common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_mobile_full.mk)
|
||||
# Inherit mobile full common MinusOS stuff
|
||||
$(call inherit-product, vendor/minus/config/common_mobile_full.mk)
|
||||
|
||||
# Enable support of one-handed mode
|
||||
PRODUCT_PRODUCT_PROPERTIES += \
|
||||
ro.support_one_handed_mode?=true
|
||||
|
||||
# Inherit tablet common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/tablet.mk)
|
||||
# Inherit tablet common MinusOS stuff
|
||||
$(call inherit-product, vendor/minus/config/tablet.mk)
|
||||
|
||||
$(call inherit-product, vendor/lineage/config/telephony.mk)
|
||||
$(call inherit-product, vendor/minus/config/telephony.mk)
|
||||
|
||||
PRODUCT_PACKAGE_OVERLAYS += vendor/lineage/overlay/foldable_book
|
||||
PRODUCT_PACKAGE_OVERLAYS += vendor/minus/overlay/foldable_book
|
||||
|
@@ -1,5 +0,0 @@
|
||||
# Set Lineage specific identifier for Android Go enabled products
|
||||
PRODUCT_TYPE := go
|
||||
|
||||
# Inherit full common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_full_phone.mk)
|
@@ -1,8 +1,8 @@
|
||||
# Inherit mobile full common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_mobile_full.mk)
|
||||
# Inherit mobile full common MinusOS stuff
|
||||
$(call inherit-product, vendor/minus/config/common_mobile_full.mk)
|
||||
|
||||
# Enable support of one-handed mode
|
||||
PRODUCT_PRODUCT_PROPERTIES += \
|
||||
ro.support_one_handed_mode?=true
|
||||
|
||||
$(call inherit-product, vendor/lineage/config/telephony.mk)
|
||||
$(call inherit-product, vendor/minus/config/telephony.mk)
|
||||
|
@@ -1,7 +1,7 @@
|
||||
# Inherit mobile full common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_mobile_full.mk)
|
||||
# Inherit mobile full common MinusOS
|
||||
$(call inherit-product, vendor/minus/config/common_mobile_full.mk)
|
||||
|
||||
# Inherit tablet common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/tablet.mk)
|
||||
# Inherit tablet common MinusOS
|
||||
$(call inherit-product, vendor/minus/config/tablet.mk)
|
||||
|
||||
$(call inherit-product, vendor/lineage/config/telephony.mk)
|
||||
$(call inherit-product, vendor/minus/config/telephony.mk)
|
||||
|
@@ -1,7 +1,7 @@
|
||||
# Inherit mobile full common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_mobile_full.mk)
|
||||
# Inherit mobile full common MinusOS
|
||||
$(call inherit-product, vendor/minus/config/common_mobile_full.mk)
|
||||
|
||||
# Inherit tablet common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/tablet.mk)
|
||||
# Inherit tablet common MinusOS
|
||||
$(call inherit-product, vendor/minus/config/tablet.mk)
|
||||
|
||||
$(call inherit-product, vendor/lineage/config/wifionly.mk)
|
||||
$(call inherit-product, vendor/minus/config/wifionly.mk)
|
||||
|
@@ -1,4 +0,0 @@
|
||||
# This config is for legacy purposes, there are no atv product size variants
|
||||
|
||||
# Inherit common atv Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_tv.mk)
|
@@ -1,5 +0,0 @@
|
||||
# Set Lineage specific identifier for Android Go enabled products
|
||||
PRODUCT_TYPE := go
|
||||
|
||||
# Inherit mini common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_mini_phone.mk)
|
@@ -1,4 +1,4 @@
|
||||
# Inherit mobile mini common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_mobile_mini.mk)
|
||||
# Inherit mobile mini common MinusOS
|
||||
$(call inherit-product, vendor/minus/config/common_mobile_mini.mk)
|
||||
|
||||
$(call inherit-product, vendor/lineage/config/telephony.mk)
|
||||
$(call inherit-product, vendor/minus/config/telephony.mk)
|
||||
|
@@ -1,7 +0,0 @@
|
||||
# Inherit mobile mini common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_mobile_mini.mk)
|
||||
|
||||
# Inherit tablet common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/tablet.mk)
|
||||
|
||||
$(call inherit-product, vendor/lineage/config/telephony.mk)
|
@@ -1,7 +0,0 @@
|
||||
# Inherit mobile mini common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_mobile_mini.mk)
|
||||
|
||||
# Inherit tablet common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/tablet.mk)
|
||||
|
||||
$(call inherit-product, vendor/lineage/config/wifionly.mk)
|
@@ -1,4 +0,0 @@
|
||||
# This config is for legacy purposes, there are no atv product size variants
|
||||
|
||||
# Inherit common atv Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_tv.mk)
|
@@ -1,89 +1,9 @@
|
||||
# Inherit common mobile Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common.mk)
|
||||
# Inherit common mobile MinusOS stuff
|
||||
$(call inherit-product, vendor/minus/config/common.mk)
|
||||
|
||||
# Include AOSP audio files
|
||||
$(call inherit-product-if-exists, frameworks/base/data/sounds/AudioPackage14.mk)
|
||||
include vendor/lineage/config/aosp_audio.mk
|
||||
|
||||
# Include Lineage audio files
|
||||
include vendor/lineage/config/lineage_audio.mk
|
||||
|
||||
# Default notification/alarm sounds
|
||||
PRODUCT_PRODUCT_PROPERTIES += \
|
||||
ro.config.notification_sound=Argon.ogg \
|
||||
ro.config.alarm_alert=Hassium.ogg
|
||||
|
||||
# Apps
|
||||
PRODUCT_PACKAGES += \
|
||||
AvatarPicker \
|
||||
Backgrounds \
|
||||
Glimpse \
|
||||
LatinIME
|
||||
|
||||
ifeq ($(PRODUCT_TYPE), go)
|
||||
PRODUCT_PACKAGES += \
|
||||
Launcher3QuickStepGo
|
||||
|
||||
PRODUCT_DEXPREOPT_SPEED_APPS += \
|
||||
Launcher3QuickStepGo
|
||||
else
|
||||
PRODUCT_PACKAGES += \
|
||||
Launcher3QuickStep
|
||||
|
||||
PRODUCT_DEXPREOPT_SPEED_APPS += \
|
||||
Launcher3QuickStep
|
||||
endif
|
||||
|
||||
PRODUCT_PACKAGES += \
|
||||
Launcher3Overlay
|
||||
|
||||
# Charger
|
||||
PRODUCT_PACKAGES += \
|
||||
charger_res_images
|
||||
|
||||
ifneq ($(WITH_LINEAGE_CHARGER),false)
|
||||
PRODUCT_PACKAGES += \
|
||||
lineage_charger_animation \
|
||||
lineage_charger_animation_vendor
|
||||
endif
|
||||
|
||||
# Customizations
|
||||
PRODUCT_PACKAGES += \
|
||||
IconPackCircularAndroidOverlay \
|
||||
IconPackCircularLauncherOverlay \
|
||||
IconPackCircularSettingsOverlay \
|
||||
IconPackCircularSystemUIOverlay \
|
||||
IconPackFilledAndroidOverlay \
|
||||
IconPackFilledLauncherOverlay \
|
||||
IconPackFilledSettingsOverlay \
|
||||
IconPackFilledSystemUIOverlay \
|
||||
IconPackKaiAndroidOverlay \
|
||||
IconPackKaiLauncherOverlay \
|
||||
IconPackKaiSettingsOverlay \
|
||||
IconPackKaiSystemUIOverlay \
|
||||
IconPackRoundedAndroidOverlay \
|
||||
IconPackRoundedLauncherOverlay \
|
||||
IconPackRoundedSettingsOverlay \
|
||||
IconPackRoundedSystemUIOverlay \
|
||||
IconPackSamAndroidOverlay \
|
||||
IconPackSamLauncherOverlay \
|
||||
IconPackSamSettingsOverlay \
|
||||
IconPackSamSystemUIOverlay \
|
||||
IconPackVictorAndroidOverlay \
|
||||
IconPackVictorLauncherOverlay \
|
||||
IconPackVictorSettingsOverlay \
|
||||
IconPackVictorSystemUIOverlay \
|
||||
IconShapePebbleOverlay \
|
||||
IconShapeRoundedRectOverlay \
|
||||
IconShapeSquareOverlay \
|
||||
IconShapeSquircleOverlay \
|
||||
IconShapeTaperedRectOverlay \
|
||||
IconShapeTeardropOverlay \
|
||||
IconShapeVesselOverlay
|
||||
|
||||
# Legal
|
||||
PRODUCT_SYSTEM_PROPERTIES += \
|
||||
ro.lineagelegal.url=https://lineageos.org/legal
|
||||
include vendor/minus/config/aosp_audio.mk
|
||||
|
||||
# Media
|
||||
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||
@@ -108,6 +28,9 @@ PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \
|
||||
|
||||
# Themes
|
||||
PRODUCT_PACKAGES += \
|
||||
LineageBlackTheme \
|
||||
ThemePicker \
|
||||
ThemesStub
|
||||
|
||||
# WallpaperPicker
|
||||
PRODUCT_PACKAGES += \
|
||||
WallpaperPicker2
|
@@ -1,5 +1,5 @@
|
||||
# Inherit common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_mobile.mk)
|
||||
# Inherit common Minus stuff
|
||||
$(call inherit-product, vendor/minus/config/common_mobile.mk)
|
||||
|
||||
PRODUCT_SIZE := full
|
||||
|
||||
@@ -9,34 +9,9 @@ $(call inherit-product-if-exists, external/google-fonts/rubik/fonts.mk)
|
||||
|
||||
# Apps
|
||||
PRODUCT_PACKAGES += \
|
||||
Camelot \
|
||||
Etar \
|
||||
Profiles \
|
||||
Recorder \
|
||||
Seedvault \
|
||||
Twelve
|
||||
|
||||
ifneq ($(PRODUCT_NO_CAMERA),true)
|
||||
PRODUCT_PACKAGES += \
|
||||
Aperture
|
||||
endif
|
||||
|
||||
ifneq ($(TARGET_EXCLUDES_AUDIOFX),true)
|
||||
PRODUCT_PACKAGES += \
|
||||
AudioFX
|
||||
endif
|
||||
Camelot
|
||||
|
||||
# Extra cmdline tools
|
||||
PRODUCT_PACKAGES += \
|
||||
unrar \
|
||||
zstd
|
||||
|
||||
# Fonts
|
||||
PRODUCT_PACKAGES += \
|
||||
fonts_customization.xml \
|
||||
FontLatoOverlay \
|
||||
FontRubikOverlay
|
||||
|
||||
# Include Lineage LatinIME dictionaries
|
||||
PRODUCT_PACKAGE_OVERLAYS += vendor/lineage/overlay/dictionaries
|
||||
PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS += vendor/lineage/overlay/dictionaries
|
||||
zstd
|
@@ -1,4 +1,4 @@
|
||||
# Inherit mini common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common_mobile.mk)
|
||||
# Inherit mini common Minus stuff
|
||||
$(call inherit-product, vendor/minus/config/common_mobile.mk)
|
||||
|
||||
PRODUCT_SIZE := mini
|
||||
|
@@ -1,19 +0,0 @@
|
||||
# Inherit common Lineage stuff
|
||||
$(call inherit-product, vendor/lineage/config/common.mk)
|
||||
|
||||
# Include AOSP audio files
|
||||
$(call inherit-product-if-exists, frameworks/base/data/sounds/AudioTv.mk)
|
||||
|
||||
# Inherit Lineage atv device tree
|
||||
$(call inherit-product, device/lineage/atv/lineage_atv.mk)
|
||||
|
||||
# AOSP packages
|
||||
PRODUCT_PACKAGES += \
|
||||
LeanbackIME
|
||||
|
||||
# Lineage packages
|
||||
PRODUCT_PACKAGES += \
|
||||
Catapult \
|
||||
LineageCustomizer
|
||||
|
||||
PRODUCT_PACKAGE_OVERLAYS += vendor/lineage/overlay/tv
|
@@ -1,22 +0,0 @@
|
||||
# Permissions for lineage sdk services
|
||||
PRODUCT_COPY_FILES += \
|
||||
vendor/lineage/config/permissions/org.lineageos.globalactions.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/org.lineageos.globalactions.xml \
|
||||
vendor/lineage/config/permissions/org.lineageos.hardware.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/org.lineageos.hardware.xml \
|
||||
vendor/lineage/config/permissions/org.lineageos.health.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/org.lineageos.health.xml \
|
||||
vendor/lineage/config/permissions/org.lineageos.livedisplay.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/org.lineageos.livedisplay.xml \
|
||||
vendor/lineage/config/permissions/org.lineageos.profiles.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/org.lineageos.profiles.xml \
|
||||
vendor/lineage/config/permissions/org.lineageos.settings.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/org.lineageos.settings.xml \
|
||||
vendor/lineage/config/permissions/org.lineageos.trust.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/org.lineageos.trust.xml
|
||||
|
||||
# Lineage Platform Library
|
||||
PRODUCT_PACKAGES += \
|
||||
org.lineageos.platform-res \
|
||||
org.lineageos.platform
|
||||
|
||||
# AOSP has no support of loading framework resources from /system_ext
|
||||
# so the SDK has to stay in /system for now
|
||||
PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \
|
||||
system/framework/oat/%/org.lineageos.platform.odex \
|
||||
system/framework/oat/%/org.lineageos.platform.vdex \
|
||||
system/framework/org.lineageos.platform-res.apk \
|
||||
system/framework/org.lineageos.platform.jar
|
@@ -1,10 +1,10 @@
|
||||
#
|
||||
# Lineage Audio Files
|
||||
# Minus Audio Files
|
||||
#
|
||||
|
||||
ALARM_PATH := vendor/lineage/prebuilt/common/media/audio/alarms
|
||||
NOTIFICATION_PATH := vendor/lineage/prebuilt/common/media/audio/notifications
|
||||
RINGTONE_PATH := vendor/lineage/prebuilt/common/media/audio/ringtones
|
||||
ALARM_PATH := vendor/minus/prebuilt/common/media/audio/alarms
|
||||
NOTIFICATION_PATH := vendor/minus/prebuilt/common/media/audio/notifications
|
||||
RINGTONE_PATH := vendor/minus/prebuilt/common/media/audio/ringtones
|
||||
|
||||
# Alarms
|
||||
PRODUCT_COPY_FILES += \
|
@@ -1,51 +0,0 @@
|
||||
ifeq ($(WITH_GMS),true)
|
||||
# Special handling for Android TV
|
||||
ifeq ($(PRODUCT_IS_ATV),true)
|
||||
ifneq (,$(wildcard vendor/partner_gms-tv))
|
||||
ifneq ($(GMS_MAKEFILE),)
|
||||
# Specify the GMS makefile you want to use, for example:
|
||||
# - gms.mk - default Android TV GMS
|
||||
# - gms_gtv.mk - default Google TV GMS
|
||||
# - gms_minimal.mk - minimal Android TV GMS
|
||||
$(call inherit-product, vendor/partner_gms-tv/products/$(GMS_MAKEFILE))
|
||||
else
|
||||
$(call inherit-product-if-exists, vendor/partner_gms-tv/products/gms.mk)
|
||||
endif
|
||||
$(call inherit-product-if-exists, vendor/partner_gms-tv/products/mainline_modules.mk)
|
||||
endif
|
||||
# Special handling for Android Automotive
|
||||
else ifeq ($(PRODUCT_IS_AUTOMOTIVE),true)
|
||||
ifneq (,$(wildcard vendor/partner_gms-car))
|
||||
ifneq ($(GMS_MAKEFILE),)
|
||||
$(call inherit-product, vendor/partner_gms-car/products/$(GMS_MAKEFILE))
|
||||
else
|
||||
$(call inherit-product-if-exists, vendor/partner_gms-car/products/gms.mk)
|
||||
endif
|
||||
endif
|
||||
else
|
||||
ifneq (,$(wildcard vendor/partner_gms))
|
||||
# Specify the GMS makefile you want to use, for example:
|
||||
# - fi.mk - Project Fi
|
||||
# - gms.mk - default GMS
|
||||
# - gms_go.mk - low ram devices
|
||||
# - gms_go_2gb.mk - low ram devices (2GB)
|
||||
# - gms_64bit_only.mk - devices supporting 64-bit only
|
||||
# - gms_minimal.mk - minimal GMS
|
||||
ifneq ($(GMS_MAKEFILE),)
|
||||
$(call inherit-product, vendor/partner_gms/products/$(GMS_MAKEFILE))
|
||||
else
|
||||
$(call inherit-product-if-exists, vendor/partner_gms/products/gms.mk)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq (,$(wildcard vendor/partner_modules))
|
||||
# Specify the mainline module makefile you want to use, for example:
|
||||
# - mainline_modules.mk - updatable apex
|
||||
# - mainline_modules_flatten_apex.mk - flatten apex
|
||||
# - mainline_modules_low_ram.mk - low ram devices
|
||||
ifneq ($(MAINLINE_MODULES_MAKEFILE),)
|
||||
$(call inherit-product, vendor/partner_modules/build/$(MAINLINE_MODULES_MAKEFILE))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
@@ -19,7 +19,7 @@
|
||||
<!-- Broadcast actions that are currently exempted from O+ background
|
||||
delivery restrictions. -->
|
||||
<allow-implicit-broadcast action="android.intent.action.CAMERA_BUTTON" />
|
||||
<allow-implicit-broadcast action="lineageos.intent.action.INITIALIZE_LINEAGE_HARDWARE" />
|
||||
<allow-implicit-broadcast action="lineageos.intent.action.LID_STATE_CHANGED" />
|
||||
<allow-implicit-broadcast action="minusos.intent.action.INITIALIZE_LINEAGE_HARDWARE" />
|
||||
<allow-implicit-broadcast action="minusos.intent.action.LID_STATE_CHANGED" />
|
||||
|
||||
</config>
|