diff --git a/README.mkdn b/README.mkdn index 524d15d64..2e28780db 100644 --- a/README.mkdn +++ b/README.mkdn @@ -1,26 +1,12 @@ -LineageOS +crDroid Android =========== Getting started --------------- -Please see the [LineageOS Wiki](https://wiki.lineageos.org/) for building instructions, by device. +Please see the [crDroid Project](https://github.com/crdroidandroid/android/blob/15.0/README.mkdn) 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/). +Patches are always welcome! Please submit your patches via pull request. diff --git a/bootanimation/Android.mk b/bootanimation/Android.mk deleted file mode 100644 index 97948f38c..000000000 --- a/bootanimation/Android.mk +++ /dev/null @@ -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) diff --git a/bootanimation/bootanimation.tar b/bootanimation/bootanimation.tar deleted file mode 100644 index 14d560621..000000000 Binary files a/bootanimation/bootanimation.tar and /dev/null differ diff --git a/bootanimation/desc.txt b/bootanimation/desc.txt deleted file mode 100644 index 4aecc8ed1..000000000 --- a/bootanimation/desc.txt +++ /dev/null @@ -1,3 +0,0 @@ -c 1 0 part0 -c 0 0 part1 -c 1 0 part2 diff --git a/build/envsetup.sh b/build/envsetup.sh index f1d44b2ed..c5d68c3bc 100644 --- a/build/envsetup.sh +++ b/build/envsetup.sh @@ -921,3 +921,9 @@ function fixup_common_out_dir() { mkdir -p ${common_out_dir} fi } + +export USE_THINLTO_CACHE=true + +# Override host metadata to make builds more reproducible and avoid leaking info +export BUILD_USERNAME=nobody +export BUILD_HOSTNAME=android-build diff --git a/build/soong/Android.bp b/build/soong/Android.bp index c11853eec..8f84675cb 100644 --- a/build/soong/Android.bp +++ b/build/soong/Android.bp @@ -77,6 +77,48 @@ cc_library_headers { } // Target platform agnostic config modules +soong_config_module_type { + name: "camera_needs_client_info_lib", + module_type: "cc_defaults", + config_namespace: "lineageGlobalVars", + bool_variables: ["camera_needs_client_info_lib"], + properties: [ + "cppflags", + "shared_libs", + ], +} + +camera_needs_client_info_lib { + name: "camera_needs_client_info_lib_defaults", + soong_config_variables: { + camera_needs_client_info_lib: { + cppflags: ["-DCAMERA_NEEDS_CLIENT_INFO_LIB"], + shared_libs: ["//hardware/oneplus:vendor.oneplus.hardware.camera@1.0"], + }, + }, +} + +soong_config_module_type { + name: "camera_needs_client_info_lib_oplus", + module_type: "cc_defaults", + config_namespace: "lineageGlobalVars", + bool_variables: ["camera_needs_client_info_lib_oplus"], + properties: [ + "cppflags", + "shared_libs", + ], +} + +camera_needs_client_info_lib_oplus { + name: "camera_needs_client_info_lib_oplus_defaults", + soong_config_variables: { + camera_needs_client_info_lib_oplus: { + cppflags: ["-DCAMERA_NEEDS_CLIENT_INFO_LIB_OPLUS"], + shared_libs: ["vendor.oplus.hardware.cameraMDM@2.0"], + }, + }, +} + soong_config_module_type { name: "camera_override_format_from_reserved", module_type: "cc_defaults", @@ -284,6 +326,23 @@ egl_display_array { }, } +soong_config_module_type { + name: "target_camera_package_name", + module_type: "cc_defaults", + config_namespace: "lineageGlobalVars", + value_variables: ["target_camera_package_name"], + properties: ["cppflags"], +} + +target_camera_package_name { + name: "camera_package_name_defaults", + soong_config_variables: { + target_camera_package_name: { + cppflags: ["-DCAMERA_PACKAGE_NAME=\"%s\""], + }, + }, +} + soong_config_module_type { name: "health_charging_control", module_type: "cc_defaults", diff --git a/build/tasks/bacon.mk b/build/tasks/bacon.mk index 272a4b8ef..dcbf33231 100644 --- a/build/tasks/bacon.mk +++ b/build/tasks/bacon.mk @@ -16,13 +16,15 @@ # ----------------------------------------------------------------- # Lineage OTA update package -LINEAGE_TARGET_PACKAGE := $(PRODUCT_OUT)/lineage-$(LINEAGE_VERSION).zip +LINEAGE_TARGET_PACKAGE := $(PRODUCT_OUT)/$(LINEAGE_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) mv -f $(INTERNAL_OTA_PACKAGE_TARGET) $(LINEAGE_TARGET_PACKAGE) $(hide) $(SHA256) $(LINEAGE_TARGET_PACKAGE) | sed "s|$(PRODUCT_OUT)/||" > $(LINEAGE_TARGET_PACKAGE).sha256sum + $(hide) ./vendor/lineage/build/tools/createjson.sh $(TARGET_DEVICE) $(PRODUCT_OUT) $(LINEAGE_VERSION).zip + $(hide) rm -rf $(call intermediates-dir-for,PACKAGING,target_files) @echo "Package Complete: $(LINEAGE_TARGET_PACKAGE)" >&2 .PHONY: bacon diff --git a/build/tasks/updatepackage.mk b/build/tasks/updatepackage.mk new file mode 100644 index 000000000..8104d87e5 --- /dev/null +++ b/build/tasks/updatepackage.mk @@ -0,0 +1,26 @@ +# Copyright (C) 2017 Unlegacy-Android +# Copyright (C) 2017,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. + +# ----------------------------------------------------------------- +# Lineage OTA update package + +MATRIXX_TARGET_UPDATEPACKAGE := $(PRODUCT_OUT)/$(LINEAGE_VERSION)-fastboot.zip + +.PHONY: updatepackage dinner +updatepackage: $(INTERNAL_UPDATE_PACKAGE_TARGET) + $(hide) ln -f $(INTERNAL_UPDATE_PACKAGE_TARGET) $(MATRIXX_TARGET_UPDATEPACKAGE) + $(hide) ./vendor/lineage/build/tools/createjson.sh $(TARGET_DEVICE) $(PRODUCT_OUT) $(LINEAGE_VERSION)-fastboot.zip + $(hide) rm -rf $(call intermediates-dir-for,PACKAGING,target_files) + @echo "Package Complete: $(MATRIXX_TARGET_UPDATEPACKAGE)" >&2 diff --git a/build/tools/changelog.sh b/build/tools/changelog.sh new file mode 100755 index 000000000..6faaa7a41 --- /dev/null +++ b/build/tools/changelog.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# +# Copyright (C) 2017-2024 crDroid Android 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. +# + +Changelog=Changelog.txt + +DEVICE=$1 + +# Lock file to ensure only one instance runs at a time +LOCKFILE=/tmp/changelog_${DEVICE}_lock + +# Acquire the lock or exit if already running +exec 9>"$LOCKFILE" +if ! flock -n 9; then + echo "Changelog generation is already running." + exit 0 +fi + +# Remove old changelog if it exists +[ -f "$Changelog" ] && rm -f "$Changelog" + +# define changelog_days using 'export changelog_days=10' +# this can be done before intiate build environment (. build/envsetup.sh) +if [ -z $changelog_days ];then + changelog_days=10 +else + if (($changelog_days > 30 )); then + echo "Changelog can not generated for more than 30 days. For how many days do you want to generate changelog again? (🕑 timeout 15 seconds - default to 10 days)" + read -r -t 15 changelog_days || changelog_days=10 + fi +fi + +REPO_LIST="$(cat .repo/project.list | sed '\?^vendor/crDroidOTA?d')" +for i in $(seq $changelog_days); do + After_Date=`date --date="$i days ago" +%m-%d-%Y` + k=$(expr $i - 1) + Until_Date=`date --date="$k days ago" +%m-%d-%Y` + + # Line with after --- until was too long for a small ListView + echo '====================' >> $Changelog + echo " "$Until_Date >> $Changelog + echo '====================' >> $Changelog + + # Cycle through all available repos + for repo_path in $REPO_LIST; do + # Find commits between 2 dates + GIT_LOG="$(git -C "$repo_path" log --oneline --after="$After_Date" --until="$Until_Date")" + [ -n "$GIT_LOG" ] && { + printf '\n * '; echo "$repo_path" + echo "$GIT_LOG" + } >> $Changelog + done + echo >> $Changelog +done + +if [ -f "$Changelog" ]; then + if cp "$Changelog" "$OUT_DIR/target/product/$DEVICE/system/etc/"; then + mv "$Changelog" "$OUT_DIR/target/product/$DEVICE/${DEVICE}_changelog.txt" || echo "Failed to move changelog file to $OUT_DIR/target/product/$DEVICE/${DEVICE}_changelog.txt" + else + echo "Failed to copy changelog file to $OUT_DIR/target/product/$DEVICE/system/etc/" + fi +else + echo "Changelog file does not exist" +fi + +# Release the lock +flock -u 9 +rm -f $LOCKFILE diff --git a/build/tools/createjson.sh b/build/tools/createjson.sh new file mode 100755 index 000000000..510074955 --- /dev/null +++ b/build/tools/createjson.sh @@ -0,0 +1,87 @@ +#!/bin/bash +# +# Copyright (C) 2024-25 Matrixx Android 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. +# + +#$1=TARGET_DEVICE, $2=PRODUCT_OUT, $3=LINEAGE_VERSION +existingOTAjson="./vendor/MatrixxOTA/$1.json" +output="./vendor/MatrixxOTA/$1.json" + +buildprop="$2/system/build.prop" + +# Ensure the directory exists +mkdir -p "./vendor/MatrixxOTA" + +if [ -f "$existingOTAjson" ]; then + # Get data from already existing device JSON + maintainer=$(grep -n "\"maintainer\"" "$existingOTAjson" | cut -d ":" -f 3 | sed 's/"//g' | sed 's/,//g' | xargs) + oem=$(grep -n "\"oem\"" "$existingOTAjson" | cut -d ":" -f 3 | sed 's/"//g' | xargs) + device=$(grep -n "\"device\"" "$existingOTAjson" | cut -d ":" -f 3 | sed 's/"//g' | xargs) +else + # Fetch Basic details from build.prop if JSON doesn't exist + oem=$(grep "ro.product.system.manufacturer" "$buildprop" | cut -d'=' -f2 | xargs) + device=$(basename "$2") +fi + +maintainer="" +support_group="" + +filename=$3 +download="https://sourceforge.net/projects/projectmatrixx/files/Android-15/$1/$filename/download" +linenr=$(grep -n "ro.system.build.date.utc" "$buildprop" | cut -d':' -f1) +timestamp=$(sed -n "$linenr"p < "$buildprop" | cut -d'=' -f2) +md5=$(md5sum "$2/$3" | cut -d' ' -f1) +size=$(stat -c "%s" "$2/$3") + +# Get version +VERSION=$(echo "$3" | cut -d'-' -f2 | sed 's/v//') +IFS='.' read -r V_MAX V_MIN V_PATCH <<< "$VERSION" +if [[ -z "$V_PATCH" ]]; then + VERSION="$V_MAX.$V_MIN" +else + VERSION="$V_MAX.$V_MIN.$V_PATCH" +fi + +# Cleanup old file +if [ -f "$output" ]; then + rm "$output" +fi + +# Create JSON output +echo '{ + "response": [ + { + "maintainer": "'$maintainer'", + "support_group":"'$support_group'", + "oem": "'$oem'", + "device": "'$device'", + "filename": "'$filename'", + "download": "'$download'", + "timestamp": '$timestamp', + "md5": "'$md5'", + "size": '$size', + "version": "'$VERSION'" + } + ] +}' >> "$output" + +echo "vendor/MatrixxOTA/$1.json" + +# Handle case when device is not officially supported +if [ ! -f "$existingOTAjson" ]; then + echo 'There is no official support for this device yet' >> "$output" +fi + +echo "" diff --git a/build/tools/merge_dtbs.py b/build/tools/merge_dtbs.py index 898be4ccc..a54093174 100755 --- a/build/tools/merge_dtbs.py +++ b/build/tools/merge_dtbs.py @@ -44,10 +44,11 @@ def split_array(array, cells): return frozenset(tuple(array[i*cells:(i*cells)+cells]) for i in range(len(array) // cells)) class DeviceTreeInfo(object): - def __init__(self, plat, board, pmic): + def __init__(self, plat, board, pmic, miboard): self.plat_id = plat self.board_id = board self.pmic_id = pmic + self.miboard_id = miboard def __str__(self): s = "" @@ -57,13 +58,15 @@ def __str__(self): s += " board-id = <{}>;".format(" ".join(map(str, self.board_id))) if self.pmic_id is not None: s += " pmic-id = <{}>;".format(" ".join(map(str, self.pmic_id))) + if self.miboard_id is not None: + s += " miboard-id = <{}>;".format(" ".join(map(str, self.miboard_id))) return s.strip() def __repr__(self): return "<{} {}>".format(self.__class__.__name__, str(self)) def has_any_properties(self): - return self.plat_id is not None or self.board_id is not None or self.pmic_id is not None + return self.plat_id is not None or self.board_id is not None or self.pmic_id is not None or self.miboard_id is not None def __sub__(self, other): """ @@ -71,11 +74,13 @@ def __sub__(self, other): msm-id = , board-id = , pmic-id = <0, 1> + miboard-id = , Other has plat, board, pmic are: msm-id = , board-id = pmic-id = <0> + miboard-id = , (self - other) will split self into a set of devicetrees with different identifers and meets the following requirements: @@ -86,11 +91,13 @@ def __sub__(self, other): assert self.plat_id is None or isinstance(self.plat_id, (set, frozenset)) assert self.board_id is None or isinstance(self.board_id, (set, frozenset)) assert self.pmic_id is None or isinstance(self.pmic_id, (set, frozenset)) + assert self.miboard_id is None or isinstance(self.miboard_id, (set, frozenset)) assert other in self new_plat = other.plat_id is not None and self.plat_id != other.plat_id new_board = other.board_id is not None and self.board_id != other.board_id new_pmic = other.pmic_id is not None and self.pmic_id != other.pmic_id + new_miboard = other.miboard_id is not None and self.miboard_id != other.miboard_id res = set() # Create the devicetree that matches other exactly @@ -101,13 +108,15 @@ def __sub__(self, other): s.board_id = other.board_id if new_pmic: s.pmic_id = other.pmic_id + if new_miboard: + s.miboard_id = other.miboard_id res.add(s) # now create the other possibilities by removing any combination of # other's plat, board, and/or pmic. Set logic (unique elemnts) handles # duplicate devicetrees IDs spit out by this loop - for combo in combinations_with_replacement([True, False], 3): - if not any((c and n) for (c, n) in zip(combo, (new_plat, new_board, new_pmic))): + for combo in combinations_with_replacement([True, False], 4): + if not any((c and n) for (c, n) in zip(combo, (new_plat, new_board, new_pmic, new_miboard))): continue s = copy.deepcopy(self) if combo[0] and new_plat: @@ -116,16 +125,18 @@ def __sub__(self, other): s.board_id -= other.board_id if combo[2] and new_pmic: s.pmic_id -= other.pmic_id + if combo[3] and new_miboard: + s.miboard_id -= other.miboard_id res.add(s) return res def __hash__(self): - # Hash should only consider msm-id/board-id/pmic-id - return hash((self.plat_id, self.board_id, self.pmic_id)) + # Hash should only consider msm-id/board-id/pmic-id/miboard-id + return hash((self.plat_id, self.board_id, self.pmic_id, self.miboard_id)) def __and__(self, other): s = copy.deepcopy(self) - for prop in ['plat_id', 'board_id', 'pmic_id']: + for prop in ['plat_id', 'board_id', 'pmic_id', 'miboard_id']: if getattr(self, prop) is None or getattr(other, prop) is None: setattr(s, prop, None) else: @@ -141,14 +152,14 @@ def _do_equivalent(self, other, property): def __eq__(self, other): """ - Checks whether other plat_id, board_id, pmic_id matches either identically + Checks whether other plat_id, board_id, pmic_id, miboard_id matches either identically or because the property is none """ if not isinstance(other, DeviceTreeInfo): return False if not other.has_any_properties(): return False - return all(map(lambda p: self._do_equivalent(other, p), ['plat_id', 'board_id', 'pmic_id'])) + return all(map(lambda p: self._do_equivalent(other, p), ['plat_id', 'board_id', 'pmic_id', 'miboard_id'])) def _do_gt(self, other, property): @@ -180,7 +191,7 @@ def __gt__(self, other): return False if not other.has_any_properties(): return False - return all(map(lambda p: self._do_gt(other, p), ['plat_id', 'board_id', 'pmic_id'])) + return all(map(lambda p: self._do_gt(other, p), ['plat_id', 'board_id', 'pmic_id', 'miboard_id'])) def _do_contains(self, other, property): @@ -214,7 +225,7 @@ def __contains__(self, other): return False if not other.has_any_properties(): return False - return all(map(lambda p: self._do_contains(other, p), ['plat_id', 'board_id', 'pmic_id'])) + return all(map(lambda p: self._do_contains(other, p), ['plat_id', 'board_id', 'pmic_id', 'miboard_id'])) class DeviceTree(DeviceTreeInfo): def __init__(self, filename): @@ -224,7 +235,8 @@ def __init__(self, filename): # default pmic-id-size is 4 pmic_id_size = self.get_prop('/', 'qcom,pmic-id-size', check_output=False) or 4 pmic_id = split_array(self.get_prop('/', 'qcom,pmic-id', check_output=False), pmic_id_size) - super().__init__(msm_id, board_id, pmic_id) + miboard_id = split_array(self.get_prop('/', 'xiaomi,miboard-id', check_output=False), 2) + super().__init__(msm_id, board_id, pmic_id, miboard_id) if not self.has_any_properties(): print('WARNING! {} has no properties and may match with any other devicetree'.format(self.filename)) @@ -260,10 +272,10 @@ class InnerMergedDeviceTree(DeviceTreeInfo): It has a platform, board, and pmic ID, the "base" devicetree, and some set of add-on devicetrees """ - def __init__(self, filename, plat_id, board_id, pmic_id, techpacks=None): + def __init__(self, filename, plat_id, board_id, pmic_id, miboard_id, techpacks=None): self.base = filename self.techpacks = techpacks or [] - super().__init__(plat_id, board_id, pmic_id) + super().__init__(plat_id, board_id, pmic_id, miboard_id) def try_add(self, techpack): if not isinstance(techpack, DeviceTree): @@ -317,6 +329,12 @@ def save(self, name=None, out_dir='.'): print(' {}'.format(' '.join(cmd))) subprocess.run(cmd, check=True) + if self.miboard_id: + board_iter = self.miboard_id if isinstance(self.miboard_id, tuple) else chain.from_iterable(self.miboard_id) + cmd = ['fdtput', '-t', 'i', out_file, '/', 'xiaomi,miboard-id'] + list(map(str, board_iter)) + print(' {}'.format(' '.join(cmd))) + subprocess.run(cmd, check=True) + return DeviceTree(out_file) def get_name(self): @@ -336,7 +354,7 @@ def __str__(self): class MergedDeviceTree(object): def __init__(self, other): - self.merged_devicetrees = {InnerMergedDeviceTree(other.filename, other.plat_id, other.board_id, other.pmic_id)} + self.merged_devicetrees = {InnerMergedDeviceTree(other.filename, other.plat_id, other.board_id, other.pmic_id, other.miboard_id)} def try_add(self, techpack): did_add = False @@ -395,7 +413,7 @@ def main(): .format(sys.argv[0])) sys.exit(1) - # 1. Parse the devicetrees -- extract the device info (msm-id, board-id, pmic-id) + # 1. Parse the devicetrees -- extract the device info (msm-id, board-id, pmic-id, miboard-id) bases = parse_dt_files(sys.argv[1]) techpacks = parse_dt_files(sys.argv[2]) diff --git a/build/tools/roomservice.py b/build/tools/roomservice.py index 8b3eddfe8..61111d4c4 100755 --- a/build/tools/roomservice.py +++ b/build/tools/roomservice.py @@ -1,6 +1,5 @@ -#!/usr/bin/env python3 -# Copyright (C) 2012-2013, The CyanogenMod Project -# (C) 2017-2018,2020-2021, The LineageOS Project +#!/usr/bin/env python +# Copyright (C) 2023-2025 crDroid Android Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -16,64 +15,69 @@ from __future__ import print_function -import glob +import base64 import json +import netrc 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) + # For python3 + import urllib.error + import urllib.parse + import urllib.request +except ImportError: + # For python2 + import imp + import urllib2 + import urlparse + urllib = imp.new_module('urllib') + urllib.error = urllib2 + urllib.parse = urlparse + urllib.request = urllib2 + +DEBUG = False + +custom_local_manifest = ".repo/local_manifests/roomservice.xml" +custom_default_revision = "15.0" +custom_dependencies = "matrixx.dependencies" +org_manifest = "matrixx" # leave empty if org is provided in manifest +org_display = "Matrixx OS" # needed for displaying + +github_auth = None + +local_manifests = '.repo/local_manifests' +if not os.path.exists(local_manifests): + os.makedirs(local_manifests) + + +def debug(*args, **kwargs): + if DEBUG: + print(*args, **kwargs) + + +def add_auth(g_req): + global github_auth + if github_auth is None: + try: + auth = netrc.netrc().authenticators("api.github.com") + except (netrc.NetrcParseError, IOError): + auth = None + if auth: + github_auth = base64.b64encode( + ('%s:%s' % (auth[0], auth[2])).encode() + ) + else: + github_auth = "" + if github_auth: + g_req.add_header("Authorization", "Basic %s" % github_auth) -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*" " + # in-place prettyprint formatter + i = "\n" + " " * level if len(elem): if not elem.text or not elem.text.strip(): elem.text = i + " " @@ -87,226 +91,217 @@ def indent(elem, level=0): 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") +def load_manifest(manifest): 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") - + man = ElementTree.parse(manifest).getroot() + except (IOError, ElementTree.ParseError): + man = ElementTree.Element("manifest") + return man + +def get_from_manifest(device_name): + if os.path.exists(custom_local_manifest): + man = load_manifest(custom_local_manifest) + for local_path in man.findall("project"): + lp = local_path.get("path").strip('/') + if lp.startswith("device/") and lp.endswith("/" + device_name): + return lp 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: +def is_in_manifest(project_path): + man = load_manifest(custom_local_manifest) + for local_path in man.findall("project"): + if local_path.get("path") == project_path: 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)) +def add_to_manifest(repos, fallback_branch=None): + lm = load_manifest(custom_local_manifest) + + for repo in repos: + repo_name = repo['repository'] + repo_path = repo['target_path'] + if 'branch' in repo: + repo_branch=repo['branch'] + else: + repo_branch=custom_default_revision + if 'remote' in repo: + repo_remote=repo['remote'] + elif "/" not in repo_name: + repo_remote=org_manifest + elif "/" in repo_name: + repo_remote="github" + + if is_in_manifest(repo_path): + print('already exists: %s' % repo_path) 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"] - print("Adding dependency: %s -> %s" % (project.attrib["name"], project.attrib["path"])) + print('Adding dependency:\nRepository: %s\nBranch: %s\nRemote: %s\nPath: %s\n' % (repo_name, repo_branch,repo_remote, repo_path)) + + project = ElementTree.Element( + "project", + attrib={"path": repo_path, + "remote": repo_remote, + "name": "%s" % repo_name} + ) + + if repo_branch is not None: + project.set('revision', repo_branch) + elif fallback_branch: + print("Using branch %s for %s" % + (fallback_branch, repo_name)) + project.set('revision', fallback_branch) + else: + print("Using default branch for %s" % repo_name) lm.append(project) - indent(lm, 0) - raw_xml = ElementTree.tostring(lm).decode() - raw_xml = '\n' + raw_xml + indent(lm) + raw_xml = "\n".join(('', + ElementTree.tostring(lm).decode())) - f = open('.repo/local_manifests/roomservice.xml', 'w') + f = open(custom_local_manifest, '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) +_fetch_dep_cache = [] + + +def fetch_dependencies(repo_path, fallback_branch=None): + global _fetch_dep_cache + if repo_path in _fetch_dep_cache: + return + _fetch_dep_cache.append(repo_path) + + print('Looking for dependencies') + + dep_p = '/'.join((repo_path, custom_dependencies)) + if os.path.exists(dep_p): + with open(dep_p) as dep_f: + dependencies = json.load(dep_f) else: + dependencies = {} print('%s has no additional dependencies.' % repo_path) - if len(syncable_repos) > 0: + fetch_list = [] + syncable_repos = [] + + for dependency in dependencies: + if not is_in_manifest(dependency['target_path']): + if not dependency.get('branch'): + dependency['branch'] = custom_default_revision + + fetch_list.append(dependency) + syncable_repos.append(dependency['target_path']) + else: + print("Dependency already present in manifest: %s => %s" % (dependency['repository'], dependency['target_path'])) + + if fetch_list: + print('Adding dependencies to manifest\n') + add_to_manifest(fetch_list, fallback_branch) + + if syncable_repos: print('Syncing dependencies') - if not dryrun: - os.system('repo sync --force-sync %s' % ' '.join(syncable_repos)) + os.system('repo sync --force-sync --no-tags --current-branch --no-clone-bundle %s' % ' '.join(syncable_repos)) - for deprepo in verify_repos: + for deprepo in syncable_repos: fetch_dependencies(deprepo) -def get_default_or_fallback_revision(repo_name): - default_revision = get_default_revision() - print("Default revision: %s" % default_revision) + +def has_branch(branches, revision): + return revision in (branch['name'] for branch in branches) + + +def detect_revision(repo): + """ + returns None if using the default revision, else return + the branch name if using a different revision + """ print("Checking branch info") + githubreq = urllib.request.Request( + repo['branches_url'].replace('{/branch}', '')) + add_auth(githubreq) + result = json.loads(urllib.request.urlopen(githubreq, timeout=5).read().decode()) - 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?") + print("Calculated revision: %s" % custom_default_revision) + if has_branch(result, custom_default_revision): + return custom_default_revision + + print("Branch %s not found" % custom_default_revision) 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!") +def main(): + global DEBUG + try: + depsonly = bool(sys.argv[2] in ['true', 1]) + except IndexError: + depsonly = False + + if os.getenv('ROOMSERVICE_DEBUG'): + DEBUG = True + + product = sys.argv[1] + device = product[product.find("_") + 1:] or product + + if depsonly: + repo_path = get_from_manifest(device) + if repo_path: fetch_dependencies(repo_path) - print("Done") - sys.exit() + else: + print("Trying dependencies-only mode on a " + "non-existing device tree?") + sys.exit() + + print("Device {0} not found. Attempting to retrieve device repository from " + "{1} Github (http://github.com/{2}).".format(device, org_display, org_manifest)) + + githubreq = urllib.request.Request( + "https://api.github.com/search/repositories?" + "q={0}+user:{1}+in:name+fork:true".format(device, org_manifest)) + add_auth(githubreq) + + repositories = [] + + try: + result = json.loads(urllib.request.urlopen(githubreq, timeout=10).read().decode()) + except urllib.error.URLError: + print("Failed to search GitHub") + sys.exit(1) + except ValueError: + print("Failed to parse return data from GitHub") + sys.exit(1) + for res in result.get('items', []): + repositories.append(res) + + for repository in repositories: + repo_name = repository['name'] + + if not (repo_name.startswith("android_device_") and + repo_name.endswith("_" + device)): + continue + print("Found repository: %s" % repository['name']) + + fallback_branch = detect_revision(repository) + manufacturer = repo_name.replace("android_device_", "").replace("_" + device, "") + repo_path = "device/%s/%s" % (manufacturer, device) + adding = [{'repository': "matrixx-devices/" + repo_name, 'target_path': repo_path}] + + add_to_manifest(adding, fallback_branch) + + print("Syncing repository to retrieve project.") + os.system('repo sync --force-sync --no-tags --current-branch --no-clone-bundle %s' % repo_path) + print("Repository synced!") + + fetch_dependencies(repo_path, fallback_branch) + print("Done") + sys.exit() + + print("Repository for %s not found in the %s Github repository list." + % (device, org_display)) + print("If this is in error, you may need to manually add it to your " + "%s" % custom_local_manifest) -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) +if __name__ == "__main__": + main() diff --git a/charger/Android.mk b/charger/Android.mk index 6843d5a44..ebab7c094 100644 --- a/charger/Android.mk +++ b/charger/Android.mk @@ -1,104 +1,107 @@ # -# Copyright (C) 2021 The LineageOS Project +# Copyright (C) 2020 Raphielscape LLC. and Haruka LLC. # -# Licensed under the Apache License, Version 2.0 (the "License"); +# 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, +# 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. # +# LOCAL_PATH := $(call my-dir) -# Set lineage_charger_density to the density bucket of the device. -lineage_charger_density := mdpi -ifneq (,$(TARGET_SCREEN_DENSITY)) -lineage_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) +### pixel_charger_res_images ### +ifneq ($(strip $(LOCAL_CHARGER_NO_UI)),true) +define _add-product-charger-image +include $$(CLEAR_VARS) +ifeq ($(2),vendor) +LOCAL_MODULE := pixel_charger_res_images_charger_$(notdir $(1))_vendor +else +LOCAL_MODULE := pixel_charger_res_images_charger_$(notdir $(1)) endif - -include $(CLEAR_VARS) -LOCAL_MODULE := lineage_charger_battery_scale -LOCAL_MODULE_STEM := battery_scale.png -LOCAL_SRC_FILES := $(lineage_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_STEM := battery_scale.png -LOCAL_SRC_FILES := $(lineage_charger_density)/battery_scale.png +LOCAL_MODULE_STEM := $(notdir $(1)) +ifeq ($(2),vendor) +_img_modules_vendor += $$(LOCAL_MODULE) +else +_img_modules += $$(LOCAL_MODULE) +endif +LOCAL_SRC_FILES := $1 LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/res/images/charger -include $(BUILD_PREBUILT) +LOCAL_MODULE_RELATIVE_PATH := res/images/charger +ifeq ($(2),vendor) +LOCAL_VENDOR_MODULE := true +else +LOCAL_PRODUCT_MODULE := true +endif +include $$(BUILD_PREBUILT) +endef -include $(CLEAR_VARS) -LOCAL_MODULE := lineage_charger_battery_fail -LOCAL_MODULE_STEM := battery_fail.png -LOCAL_SRC_FILES := $(lineage_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) +_img_modules := +$(foreach _img, $(call find-subdir-subdir-files, "images/charger", "*.png"), \ + $(eval $(call _add-product-charger-image,$(_img)))) +_img_modules_vendor := +$(foreach _img, $(call find-subdir-subdir-files, "images/charger", "*.png"), \ + $(eval $(call _add-product-charger-image,$(_img),vendor))) -include $(CLEAR_VARS) -LOCAL_MODULE := lineage_charger_battery_fail_vendor -LOCAL_MODULE_STEM := battery_fail.png -LOCAL_SRC_FILES := $(lineage_charger_density)/battery_fail.png +### pixel_charger_animation_file ### +define _add-product-charger-animation-file +include $$(CLEAR_VARS) +ifeq ($(2),vendor) +LOCAL_MODULE := pixel_charger_res_values_charger_$(notdir $(1))_vendor +else +LOCAL_MODULE := pixel_charger_res_values_charger_$(notdir $(1)) +endif +LOCAL_MODULE_STEM := $(notdir $(1)) +ifeq ($(2),vendor) +_anim_modules_vendor += $$(LOCAL_MODULE) +else +_anim_modules += $$(LOCAL_MODULE) +endif +LOCAL_SRC_FILES := $1 LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/res/images/charger -include $(BUILD_PREBUILT) +LOCAL_MODULE_RELATIVE_PATH := res/values/charger +ifeq ($(2),vendor) +LOCAL_VENDOR_MODULE := true +LOCAL_OVERRIDES_MODULES := charger_res_images_vendor +else +LOCAL_PRODUCT_MODULE := true +LOCAL_OVERRIDES_MODULES := charger_res_images +endif +include $$(BUILD_PREBUILT) +endef -include $(CLEAR_VARS) -LOCAL_MODULE := lineage_charger_font -LOCAL_MODULE_STEM := percent_font.png -LOCAL_SRC_FILES := $(lineage_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) +_anim_modules := +$(foreach _txt, $(call find-subdir-subdir-files, "values/charger", "*.txt"), \ + $(eval $(call _add-product-charger-animation-file,$(_txt)))) +_anim_modules_vendor := +$(foreach _txt, $(call find-subdir-subdir-files, "values/charger", "*.txt"), \ + $(eval $(call _add-product-charger-animation-file,$(_txt),vendor))) include $(CLEAR_VARS) -LOCAL_MODULE := lineage_charger_font_vendor -LOCAL_MODULE_STEM := percent_font.png -LOCAL_SRC_FILES := $(lineage_charger_density)/percent_font.png +LOCAL_MODULE := product_charger_res_images LOCAL_MODULE_TAGS := optional -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/res/images/charger -include $(BUILD_PREBUILT) +LOCAL_REQUIRED_MODULES := $(_img_modules) $(_anim_modules) +include $(BUILD_PHONY_PACKAGE) include $(CLEAR_VARS) -LOCAL_MODULE := lineage_charger_animation -LOCAL_MODULE_STEM := animation.txt -LOCAL_SRC_FILES := animation.txt +LOCAL_MODULE := product_charger_res_images_vendor 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 -include $(BUILD_PREBUILT) +LOCAL_REQUIRED_MODULES := $(_img_modules_vendor) $(_anim_modules_vendor) +include $(BUILD_PHONY_PACKAGE) -include $(CLEAR_VARS) -LOCAL_MODULE := lineage_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 -include $(BUILD_PREBUILT) +_add-product-charger-image := +_add-product-charger-animation-file := +_img_modules := +_img_modules_vendor := +_anim_modules := +_anim_modules_vendor := +endif # LOCAL_CHARGER_NO_UI diff --git a/charger/animation.txt b/charger/animation.txt deleted file mode 100644 index 62d2bc262..000000000 --- a/charger/animation.txt +++ /dev/null @@ -1,31 +0,0 @@ -# animation: num_cycles, first_frame_repeats, animation_file -animation: 7 1 charger/battery_scale - -# percent_display: text_percent_pos_x, text_percent_pos_y, color_r, color_g, color_b, color_a, font_file -percent_display: c c 255 255 255 255 charger/percent_font - -fail: charger/battery_fail - -# frame: disp_time min_level max_level -frame: 500 0 4 -frame: 500 0 9 -frame: 500 5 14 -frame: 500 10 19 -frame: 500 15 24 -frame: 500 20 29 -frame: 500 25 34 -frame: 500 30 39 -frame: 500 35 44 -frame: 500 40 49 -frame: 500 45 54 -frame: 500 50 59 -frame: 500 55 64 -frame: 500 60 69 -frame: 500 65 74 -frame: 500 70 79 -frame: 500 75 84 -frame: 500 80 89 -frame: 500 85 94 -frame: 500 90 99 -frame: 500 95 99 -frame: 1000 100 100 diff --git a/charger/hdpi/battery_fail.png b/charger/hdpi/battery_fail.png deleted file mode 100644 index cade1574a..000000000 Binary files a/charger/hdpi/battery_fail.png and /dev/null differ diff --git a/charger/hdpi/battery_scale.png b/charger/hdpi/battery_scale.png deleted file mode 100644 index 3d89e66b8..000000000 Binary files a/charger/hdpi/battery_scale.png and /dev/null differ diff --git a/charger/hdpi/percent_font.png b/charger/hdpi/percent_font.png deleted file mode 100644 index 312a1f716..000000000 Binary files a/charger/hdpi/percent_font.png and /dev/null differ diff --git a/charger/images/charger/battery_fail.png b/charger/images/charger/battery_fail.png new file mode 100644 index 000000000..8997d4afe Binary files /dev/null and b/charger/images/charger/battery_fail.png differ diff --git a/charger/images/charger/battery_scale.png b/charger/images/charger/battery_scale.png new file mode 100644 index 000000000..f4960b449 Binary files /dev/null and b/charger/images/charger/battery_scale.png differ diff --git a/charger/images/charger/main_font.png b/charger/images/charger/main_font.png new file mode 100644 index 000000000..b1fad0257 Binary files /dev/null and b/charger/images/charger/main_font.png differ diff --git a/charger/mdpi/battery_fail.png b/charger/mdpi/battery_fail.png deleted file mode 100644 index 575f3aec8..000000000 Binary files a/charger/mdpi/battery_fail.png and /dev/null differ diff --git a/charger/mdpi/battery_scale.png b/charger/mdpi/battery_scale.png deleted file mode 100644 index 3d38a2c80..000000000 Binary files a/charger/mdpi/battery_scale.png and /dev/null differ diff --git a/charger/mdpi/percent_font.png b/charger/mdpi/percent_font.png deleted file mode 100644 index 3043a8895..000000000 Binary files a/charger/mdpi/percent_font.png and /dev/null differ diff --git a/charger/regenerate.sh b/charger/regenerate.sh deleted file mode 100755 index 9e0cef458..000000000 --- a/charger/regenerate.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -if [ -z "$(which convert)" ] || [ -z "$(which pngcrush)" ]; then - echo "Please install imagemagick and pngcrush" - exit 1 -fi - -for DENSITY in mdpi:160 hdpi:240 xhdpi:320 xxhdpi:480 xxxhdpi:640; do - DPI=$(echo $DENSITY | cut -f1 -d ':') - WIDTH=$(echo $DENSITY | cut -f2 -d ':') - - rm $DPI/battery_fail.png - rm $DPI/battery_scale.png - - for SVG in svg/*.svg; do - PNG="$DPI/$(basename $SVG | cut -f1 -d '.').png" - convert -density $WIDTH -resize ${WIDTH}x${WIDTH} $SVG png24:$PNG - done - - SCALEFILE="$DPI/battery_scale.png" - SCALEFILES="$(ls $DPI/battery_scale_*.png)" - FRAMES="$(ls -l $SCALEFILES | wc -l)" - SCALEHEIGHT=$(($WIDTH * $FRAMES)) - - convert -size ${WIDTH}x${SCALEHEIGHT} canvas:black $SCALEFILES -fx "u[j%$FRAMES+1].p{i,int(j/$FRAMES)}" png24:$SCALEFILE.tmp - pngcrush -text b "Frames" "$FRAMES" $SCALEFILE.tmp $SCALEFILE - rm $SCALEFILES $SCALEFILE.tmp -done diff --git a/charger/svg/battery_fail.svg b/charger/svg/battery_fail.svg deleted file mode 100644 index 234914059..000000000 --- a/charger/svg/battery_fail.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/charger/svg/battery_scale_00.svg b/charger/svg/battery_scale_00.svg deleted file mode 100644 index 27af6dcf3..000000000 --- a/charger/svg/battery_scale_00.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/charger/svg/battery_scale_01.svg b/charger/svg/battery_scale_01.svg deleted file mode 100644 index 9d2b54265..000000000 --- a/charger/svg/battery_scale_01.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_02.svg b/charger/svg/battery_scale_02.svg deleted file mode 100644 index 7376b0775..000000000 --- a/charger/svg/battery_scale_02.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_03.svg b/charger/svg/battery_scale_03.svg deleted file mode 100644 index 2bcb70a81..000000000 --- a/charger/svg/battery_scale_03.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_04.svg b/charger/svg/battery_scale_04.svg deleted file mode 100644 index 8711f3984..000000000 --- a/charger/svg/battery_scale_04.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_05.svg b/charger/svg/battery_scale_05.svg deleted file mode 100644 index 796206061..000000000 --- a/charger/svg/battery_scale_05.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_06.svg b/charger/svg/battery_scale_06.svg deleted file mode 100644 index cd0114e37..000000000 --- a/charger/svg/battery_scale_06.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_07.svg b/charger/svg/battery_scale_07.svg deleted file mode 100644 index 6862ff915..000000000 --- a/charger/svg/battery_scale_07.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_08.svg b/charger/svg/battery_scale_08.svg deleted file mode 100644 index d3e200e8a..000000000 --- a/charger/svg/battery_scale_08.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_09.svg b/charger/svg/battery_scale_09.svg deleted file mode 100644 index b2f747305..000000000 --- a/charger/svg/battery_scale_09.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_10.svg b/charger/svg/battery_scale_10.svg deleted file mode 100644 index ba7888361..000000000 --- a/charger/svg/battery_scale_10.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_11.svg b/charger/svg/battery_scale_11.svg deleted file mode 100644 index c7d18b73b..000000000 --- a/charger/svg/battery_scale_11.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_12.svg b/charger/svg/battery_scale_12.svg deleted file mode 100644 index 1981b7434..000000000 --- a/charger/svg/battery_scale_12.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_13.svg b/charger/svg/battery_scale_13.svg deleted file mode 100644 index e7489b21a..000000000 --- a/charger/svg/battery_scale_13.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_14.svg b/charger/svg/battery_scale_14.svg deleted file mode 100644 index c4f002f06..000000000 --- a/charger/svg/battery_scale_14.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_15.svg b/charger/svg/battery_scale_15.svg deleted file mode 100644 index 469ac8c53..000000000 --- a/charger/svg/battery_scale_15.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_16.svg b/charger/svg/battery_scale_16.svg deleted file mode 100644 index b983016ec..000000000 --- a/charger/svg/battery_scale_16.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_17.svg b/charger/svg/battery_scale_17.svg deleted file mode 100644 index c9bf11d01..000000000 --- a/charger/svg/battery_scale_17.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_18.svg b/charger/svg/battery_scale_18.svg deleted file mode 100644 index 6ea6c80b0..000000000 --- a/charger/svg/battery_scale_18.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_19.svg b/charger/svg/battery_scale_19.svg deleted file mode 100644 index 84597c3e8..000000000 --- a/charger/svg/battery_scale_19.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/charger/svg/battery_scale_20.svg b/charger/svg/battery_scale_20.svg deleted file mode 100644 index 69fe8e767..000000000 --- a/charger/svg/battery_scale_20.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/charger/svg/battery_scale_21.svg b/charger/svg/battery_scale_21.svg deleted file mode 100644 index 5421dbedc..000000000 --- a/charger/svg/battery_scale_21.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/charger/values/charger/animation.txt b/charger/values/charger/animation.txt new file mode 100644 index 000000000..fcfc8f4a7 --- /dev/null +++ b/charger/values/charger/animation.txt @@ -0,0 +1,58 @@ +## Google Pixel animation + +# animation: num_cycles, first_frame_repeats, animation_file +animation: 3 1 charger/battery_scale + +# percent_display: text_percent_pos_x, text_percent_pos_y, color_r, color_g, color_b, color_a, font_file +percent_display: c c 255 255 255 255 charger/main_font + +fail: charger/battery_fail + +# frame: disp_time min_level max_level +frame: 300 0 100 # 0 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 # 5 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 # 10 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 # 15 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 # 20 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 # 25 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 # 30 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 # 35 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 # 40 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 +frame: 0 0 100 # 45 +frame: 0 0 100 diff --git a/charger/xhdpi/battery_fail.png b/charger/xhdpi/battery_fail.png deleted file mode 100644 index 47c593f2d..000000000 Binary files a/charger/xhdpi/battery_fail.png and /dev/null differ diff --git a/charger/xhdpi/battery_scale.png b/charger/xhdpi/battery_scale.png deleted file mode 100644 index 61d148227..000000000 Binary files a/charger/xhdpi/battery_scale.png and /dev/null differ diff --git a/charger/xhdpi/percent_font.png b/charger/xhdpi/percent_font.png deleted file mode 100644 index b3b7a324a..000000000 Binary files a/charger/xhdpi/percent_font.png and /dev/null differ diff --git a/charger/xxhdpi/battery_fail.png b/charger/xxhdpi/battery_fail.png deleted file mode 100644 index f722faa12..000000000 Binary files a/charger/xxhdpi/battery_fail.png and /dev/null differ diff --git a/charger/xxhdpi/battery_scale.png b/charger/xxhdpi/battery_scale.png deleted file mode 100644 index dab397286..000000000 Binary files a/charger/xxhdpi/battery_scale.png and /dev/null differ diff --git a/charger/xxhdpi/percent_font.png b/charger/xxhdpi/percent_font.png deleted file mode 100644 index 69284aead..000000000 Binary files a/charger/xxhdpi/percent_font.png and /dev/null differ diff --git a/charger/xxxhdpi/battery_fail.png b/charger/xxxhdpi/battery_fail.png deleted file mode 100644 index 3bee38590..000000000 Binary files a/charger/xxxhdpi/battery_fail.png and /dev/null differ diff --git a/charger/xxxhdpi/battery_scale.png b/charger/xxxhdpi/battery_scale.png deleted file mode 100644 index 8484a2f20..000000000 Binary files a/charger/xxxhdpi/battery_scale.png and /dev/null differ diff --git a/charger/xxxhdpi/percent_font.png b/charger/xxxhdpi/percent_font.png deleted file mode 100644 index 35e1af89c..000000000 Binary files a/charger/xxxhdpi/percent_font.png and /dev/null differ diff --git a/config/BoardConfigSoong.mk b/config/BoardConfigSoong.mk index 4adaa1db9..4ee6da8e8 100644 --- a/config/BoardConfigSoong.mk +++ b/config/BoardConfigSoong.mk @@ -30,10 +30,13 @@ SOONG_CONFIG_NAMESPACES += lineageGlobalVars SOONG_CONFIG_lineageGlobalVars += \ additional_gralloc_10_usage_bits \ bootloader_message_offset \ + camera_needs_client_info_lib \ + camera_needs_client_info_lib_oplus \ camera_override_format_from_reserved \ gralloc_handle_has_custom_content_md_reserved_size \ gralloc_handle_has_reserved_size \ gralloc_handle_has_ubwcp_format \ + target_camera_package_name \ target_health_charging_control_charging_enabled \ target_health_charging_control_charging_disabled \ target_health_charging_control_deadline_path \ @@ -75,6 +78,8 @@ SOONG_CONFIG_lineageQcomVars += \ endif # Soong bool variables +SOONG_CONFIG_lineageGlobalVars_camera_needs_client_info_lib := $(TARGET_CAMERA_NEEDS_CLIENT_INFO_LIB) +SOONG_CONFIG_lineageGlobalVars_camera_needs_client_info_lib_oplus := $(TARGET_CAMERA_NEEDS_CLIENT_INFO_LIB_OPLUS) SOONG_CONFIG_lineageGlobalVars_camera_override_format_from_reserved := $(TARGET_CAMERA_OVERRIDE_FORMAT_FROM_RESERVED) SOONG_CONFIG_lineageGlobalVars_gralloc_handle_has_custom_content_md_reserved_size := $(TARGET_GRALLOC_HANDLE_HAS_CUSTOM_CONTENT_MD_RESERVED_SIZE) SOONG_CONFIG_lineageGlobalVars_gralloc_handle_has_reserved_size := $(TARGET_GRALLOC_HANDLE_HAS_RESERVED_SIZE) @@ -111,6 +116,7 @@ TARGET_TRUST_USB_CONTROL_DISABLE ?= 0 # Soong value variables SOONG_CONFIG_lineageGlobalVars_additional_gralloc_10_usage_bits := $(TARGET_ADDITIONAL_GRALLOC_10_USAGE_BITS) SOONG_CONFIG_lineageGlobalVars_bootloader_message_offset := $(BOOTLOADER_MESSAGE_OFFSET) +SOONG_CONFIG_lineageGlobalVars_target_camera_package_name := $(TARGET_CAMERA_PACKAGE_NAME) ifneq ($(TARGET_HEALTH_CHARGING_CONTROL_CHARGING_PATH),) SOONG_CONFIG_lineageGlobalVars_target_health_charging_control_charging_path := $(TARGET_HEALTH_CHARGING_CONTROL_CHARGING_PATH) endif diff --git a/config/common.mk b/config/common.mk index afc87235c..63dd47b2f 100644 --- a/config/common.mk +++ b/config/common.mk @@ -1,7 +1,10 @@ # Allow vendor/extra to override any property by setting it first $(call inherit-product-if-exists, vendor/extra/product.mk) +$(call inherit-product-if-exists, vendor/lineage/config/matrixx.mk) +$(call inherit-product-if-exists, vendor/addons/config.mk) +$(call inherit-product-if-exists, vendor/pixel-framework/config.mk) -PRODUCT_BRAND ?= LineageOS +PRODUCT_BRAND ?= ProjectMatrixx ifeq ($(PRODUCT_GMS_CLIENTID_BASE),) PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \ @@ -40,11 +43,7 @@ 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 - -PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \ - system/addon.d/50-lineage.sh + vendor/lineage/prebuilt/common/bin/backuptool.functions:install/bin/backuptool.functions ifneq ($(strip $(AB_OTA_PARTITIONS) $(AB_OTA_POSTINSTALL_CONFIG)),) PRODUCT_COPY_FILES += \ @@ -57,11 +56,9 @@ PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \ system/bin/backuptool_ab.functions \ system/bin/backuptool_postinstall.sh -ifneq ($(TARGET_BUILD_VARIANT),user) PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \ ro.ota.allow_downgrade=true endif -endif # Lineage-specific broadcast actions whitelist PRODUCT_COPY_FILES += \ @@ -71,6 +68,13 @@ PRODUCT_COPY_FILES += \ 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 +# Call Recording +TARGET_CALL_RECORDING_SUPPORTED ?= true +ifneq ($(TARGET_CALL_RECORDING_SUPPORTED),false) +PRODUCT_COPY_FILES += \ + vendor/lineage/config/permissions/com.google.android.apps.dialer.call_recording_audio.features.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/com.google.android.apps.dialer.call_recording_audio.features.xml +endif + # Enable SIP+VoIP on all targets PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.software.sip.voip.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/android.software.sip.voip.xml @@ -96,6 +100,13 @@ ifneq ($(TARGET_DISABLE_LINEAGE_SDK), true) include vendor/lineage/config/lineage_sdk_common.mk endif +# Gboard side padding +PRODUCT_PRODUCT_PROPERTIES += \ + ro.com.google.ime.kb_pad_port_l=4 \ + ro.com.google.ime.kb_pad_port_r=4 \ + ro.com.google.ime.kb_pad_land_l=64 \ + ro.com.google.ime.kb_pad_land_r=64 + # Do not include art debug targets PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD := false @@ -104,6 +115,11 @@ PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD := false # leave less information available via JDWP. PRODUCT_MINIMIZE_JAVA_DEBUG_INFO := true +# Enable whole-program R8 Java optimizations for SystemUI and system_server, +# but also allow explicit overriding for testing and development. +SYSTEM_OPTIMIZE_JAVA ?= true +SYSTEMUI_OPTIMIZE_JAVA ?= true + # Disable vendor restrictions PRODUCT_RESTRICT_VENDOR_FILES := false @@ -136,12 +152,17 @@ PRODUCT_PACKAGES += \ endif PRODUCT_PACKAGES += \ - LineageSettingsProvider \ - Updater + LineageSettingsProvider PRODUCT_COPY_FILES += \ vendor/lineage/prebuilt/common/etc/init/init.lineage-updater.rc:$(TARGET_COPY_OUT_SYSTEM_EXT)/etc/init/init.lineage-updater.rc +# Charger +PRODUCT_PACKAGES += \ + charger_res_images \ + product_charger_res_images \ + product_charger_res_images_vendor + # Config PRODUCT_PACKAGES += \ SimpleDeviceConfig \ @@ -223,6 +244,8 @@ endif # SystemUI PRODUCT_DEXPREOPT_SPEED_APPS += \ + Launcher3QuickStep \ + Settings \ CarSystemUI \ SystemUI @@ -245,9 +268,17 @@ PRODUCT_PACKAGE_OVERLAYS += \ vendor/lineage/overlay/no-rro PRODUCT_PACKAGES += \ + CustomFontPixelLauncherOverlay \ DocumentsUIOverlay \ NetworkStackOverlay +# TextClassifier +PRODUCT_PACKAGES += \ + libtextclassifier_annotator_en_model \ + libtextclassifier_annotator_universal_model \ + libtextclassifier_actions_suggestions_universal_model \ + libtextclassifier_lang_id_model + # Translations CUSTOM_LOCALES += \ ast_ES \ diff --git a/config/common_mobile.mk b/config/common_mobile.mk index a09a9ef72..680219e40 100644 --- a/config/common_mobile.mk +++ b/config/common_mobile.mk @@ -15,76 +15,13 @@ PRODUCT_PRODUCT_PROPERTIES += \ # Apps PRODUCT_PACKAGES += \ - AvatarPicker \ Backgrounds \ Glimpse \ LatinIME -ifeq ($(PRODUCT_TYPE), go) -PRODUCT_PACKAGES += \ - TrebuchetQuickStepGo - -PRODUCT_DEXPREOPT_SPEED_APPS += \ - TrebuchetQuickStepGo -else -PRODUCT_PACKAGES += \ - TrebuchetQuickStep - -PRODUCT_DEXPREOPT_SPEED_APPS += \ - TrebuchetQuickStep -endif - -PRODUCT_PACKAGES += \ - TrebuchetOverlay - -# 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 \ - LineageNavigationBarNoHint - # Legal PRODUCT_SYSTEM_PROPERTIES += \ - ro.lineagelegal.url=https://lineageos.org/legal + ro.crdroidlegal.url=https://crdroid.net/legal.php # Media PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \ @@ -109,6 +46,5 @@ PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \ # Themes PRODUCT_PACKAGES += \ - LineageBlackTheme \ ThemePicker \ ThemesStub diff --git a/config/common_mobile_full.mk b/config/common_mobile_full.mk index 22b1acf2f..bf0f432ac 100644 --- a/config/common_mobile_full.mk +++ b/config/common_mobile_full.mk @@ -3,10 +3,6 @@ $(call inherit-product, vendor/lineage/config/common_mobile.mk) PRODUCT_SIZE := full -# Include {Lato,Rubik} fonts -$(call inherit-product-if-exists, external/google-fonts/lato/fonts.mk) -$(call inherit-product-if-exists, external/google-fonts/rubik/fonts.mk) - # Apps PRODUCT_PACKAGES += \ Camelot \ @@ -31,12 +27,6 @@ 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 diff --git a/config/matrixx.mk b/config/matrixx.mk new file mode 100644 index 000000000..c0012a369 --- /dev/null +++ b/config/matrixx.mk @@ -0,0 +1,93 @@ +# Additional props +PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \ + dalvik.vm.debug.alloc=0 \ + ro.url.legal=http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html \ + ro.url.legal.android_privacy=http://www.google.com/intl/%s/mobile/android/basic/privacy.html \ + ro.error.receiver.system.apps=com.google.android.gms \ + ro.setupwizard.enterprise_mode=1 \ + ro.atrace.core.services=com.google.android.gms,com.google.android.gms.ui,com.google.android.gms.persistent \ + ro.setupwizard.rotation_locked=true \ + ro.com.google.ime.theme_id=5 \ + ro.opa.eligible_device=true \ + ro.com.android.wifi-watchlist=GoogleGuest \ + ro.setupwizard.network_required=false \ + ro.setupwizard.gservices_delay=-1 \ + ro.setupwizard.mode=OPTIONAL \ + setupwizard.feature.predeferred_enabled=false \ + drm.service.enabled=true \ + persist.sys.dun.override=0 \ + persist.sys.disable_rescue=true + +# Disable touch video heatmap to reduce latency, motion jitter, and CPU usage +# on supported devices with Deep Press input classifier HALs and models +PRODUCT_PRODUCT_PROPERTIES += \ + ro.input.video_enabled=false + +# Blurs +ifeq ($(TARGET_ENABLE_BLUR), true) +PRODUCT_SYSTEM_EXT_PROPERTIES += \ + ro.sf.blurs_are_expensive=1 \ + ro.surface_flinger.supports_background_blur=1 +endif + +PRODUCT_PRODUCT_PROPERTIES += \ + ro.launcher.blur.appLaunch=0 + +# GAPPS +ifeq ($(WITH_GMS),true) +$(call inherit-product, vendor/gms/products/gms.mk) +endif + +ifeq ($(TARGET_INCLUDE_NEXUS),true) +$(call inherit-product, vendor/google/overlays/ThemeIcons/config.mk) +PRODUCT_PACKAGES += \ + GoogleSettingsOverlayNexus +else + PRODUCT_PACKAGES += \ + SettingsOverlay +endif + +# Cloned app exemption +PRODUCT_COPY_FILES += \ + vendor/lineage/prebuilt/common/etc/sysconfig/preinstalled-packages-platform-crdroid-product.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/sysconfig/preinstalled-packages-platform-crdroid-product.xml \ + vendor/lineage/prebuilt/common/etc/sysconfig/quick_tap.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/sysconfig/quick_tap.xml + +# Disable async MTE on a few processes +PRODUCT_SYSTEM_EXT_PROPERTIES += \ + persist.arm64.memtag.app.com.android.se=off \ + persist.arm64.memtag.app.com.google.android.bluetooth=off \ + persist.arm64.memtag.app.com.android.nfc=off \ + persist.arm64.memtag.process.system_server=off + +# Enable dex2oat64 to do dexopt +PRODUCT_SYSTEM_EXT_PROPERTIES += \ + dalvik.vm.dex2oat64.enabled=true + +# Extra packages +PRODUCT_PACKAGES += \ + BatteryStatsViewer \ + GameSpace \ + LMOFreeform \ + LMOFreeformSidebar \ + OmniJaws \ + OmniStyle + +ifneq ($(TARGET_FACE_UNLOCK_SUPPORTED),false) +PRODUCT_PACKAGES += \ + FaceUnlock + +PRODUCT_SYSTEM_EXT_PROPERTIES += \ + ro.face.sense_service=true + +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.biometrics.face.xml:$(TARGET_COPY_OUT_SYSTEM_EXT)/etc/permissions/android.hardware.biometrics.face.xml +endif + +# DeviceAsWebcam +ifeq ($(TARGET_BUILD_DEVICE_AS_WEBCAM), true) + PRODUCT_PACKAGES += \ + DeviceAsWebcam + + PRODUCT_VENDOR_PROPERTIES += \ + ro.usb.uvc.enabled=true +endif diff --git a/config/permissions/com.google.android.apps.dialer.call_recording_audio.features.xml b/config/permissions/com.google.android.apps.dialer.call_recording_audio.features.xml new file mode 100644 index 000000000..2673d8d54 --- /dev/null +++ b/config/permissions/com.google.android.apps.dialer.call_recording_audio.features.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/bootanimation/CleanSpec.mk b/config/pixel_telephony.mk similarity index 75% rename from bootanimation/CleanSpec.mk rename to config/pixel_telephony.mk index a32a8837e..77bec4a6f 100644 --- a/bootanimation/CleanSpec.mk +++ b/config/pixel_telephony.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2017 The LineageOS Project +# Copyright (C) 2020 Raphielscape LLC. and Haruka LLC. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,4 +14,6 @@ # limitations under the License. # -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/BOOTANIMATION) +# Pixel APNs +PRODUCT_COPY_FILES += \ + vendor/aosp/telephony/apns-full-conf.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/apns-conf.xml diff --git a/config/version.mk b/config/version.mk index 40703940a..4811c2c45 100644 --- a/config/version.mk +++ b/config/version.mk @@ -1,46 +1,48 @@ -PRODUCT_VERSION_MAJOR = 22 -PRODUCT_VERSION_MINOR = 1 +PRODUCT_VERSION_MAJOR = 15 +PRODUCT_VERSION_MINOR = 0 -ifeq ($(LINEAGE_VERSION_APPEND_TIME_OF_DAY),true) - LINEAGE_BUILD_DATE := $(shell date -u +%Y%m%d_%H%M%S) -else - LINEAGE_BUILD_DATE := $(shell date -u +%Y%m%d) -endif +# Increase MATRIXX Version with each major release. +MATRIXX_VERSION := 11.1.0 -# Set LINEAGE_BUILDTYPE from the env RELEASE_TYPE, for jenkins compat +MATRIXX_RELEASE_CODE := Axiom -ifndef LINEAGE_BUILDTYPE - ifdef RELEASE_TYPE - # Starting with "LINEAGE_" is optional - RELEASE_TYPE := $(shell echo $(RELEASE_TYPE) | sed -e 's|^LINEAGE_||g') - LINEAGE_BUILDTYPE := $(RELEASE_TYPE) - endif -endif +MATRIXX_BUILD_TYPE ?= Unofficial -# Filter out random types, so it'll reset to UNOFFICIAL -ifeq ($(filter RELEASE NIGHTLY SNAPSHOT EXPERIMENTAL,$(LINEAGE_BUILDTYPE)),) - LINEAGE_BUILDTYPE := UNOFFICIAL - LINEAGE_EXTRAVERSION := -endif - -ifeq ($(LINEAGE_BUILDTYPE), UNOFFICIAL) - ifneq ($(TARGET_UNOFFICIAL_BUILD_ID),) - LINEAGE_EXTRAVERSION := -$(TARGET_UNOFFICIAL_BUILD_ID) - endif +ifeq ($(WITH_GMS), true) + MATRIXX_BUILD_VARIANT := Gapps +else + MATRIXX_BUILD_VARIANT := Vanilla endif -LINEAGE_VERSION_SUFFIX := $(LINEAGE_BUILD_DATE)-$(LINEAGE_BUILDTYPE)$(LINEAGE_EXTRAVERSION)-$(LINEAGE_BUILD) +#ifeq ($(MATRIXX_BUILD_TYPE), Official) +#-include vendor/lineage-priv/keys/keys.mk +# OFFICIAL_DEVICES = $(shell cat vendor/lineage/matrixx.devices) +# FOUND_DEVICE = $(filter $(LINEAGE_BUILD), $(OFFICIAL_DEVICES)) +# ifeq ($(FOUND_DEVICE),$(LINEAGE_BUILD)) +# MATRIXX_BUILD_TYPE := Official +# else +# MATRIXX_BUILD_TYPE := Unofficial +# endif +#endif # Internal version -LINEAGE_VERSION := $(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR)-$(LINEAGE_VERSION_SUFFIX) +LINEAGE_VERSION := Matrixx$(MATRIXX_VARIANT)-v$(MATRIXX_VERSION)-$(MATRIXX_BUILD_TYPE)-$(LINEAGE_BUILD)-$(MATRIXX_BUILD_VARIANT)-$(shell date +%Y%m%d) # Display version -LINEAGE_DISPLAY_VERSION := $(PRODUCT_VERSION_MAJOR)-$(LINEAGE_VERSION_SUFFIX) +LINEAGE_DISPLAY_VERSION := Matrixx-$(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR)-$(LINEAGE_BUILD)-v$(MATRIXX_VERSION) + +# Build info +MATRIXX_BUILD_INFO := $(LINEAGE_VERSION) -# LineageOS version properties +# Matrixx properties PRODUCT_SYSTEM_PROPERTIES += \ - ro.lineage.version=$(LINEAGE_VERSION) \ - ro.lineage.display.version=$(LINEAGE_DISPLAY_VERSION) \ - ro.lineage.build.version=$(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR) \ - ro.lineage.releasetype=$(LINEAGE_BUILDTYPE) \ - ro.modversion=$(LINEAGE_VERSION) + ro.matrixx.battery?=$(MATRIXX_BATTERY) \ + ro.matrixx.build.variant=$(MATRIXX_BUILD_VARIANT) \ + ro.matrixx.build.version=$(LINEAGE_VERSION) \ + ro.matrixx.chipset?=$(MATRIXX_CHIPSET) \ + ro.matrixx.display_resolution?=$(MATRIXX_DISPLAY) \ + ro.matrixx.display.version=$(LINEAGE_DISPLAY_VERSION) \ + ro.matrixx.release.type=$(MATRIXX_BUILD_TYPE) \ + ro.matrixx.release.code=$(MATRIXX_RELEASE_CODE) \ + ro.matrixx.version=$(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR) \ + ro.modversion=$(MATRIXX_VERSION) diff --git a/overlay/GoogleSettingsOverlayNexus/Android.bp b/overlay/GoogleSettingsOverlayNexus/Android.bp new file mode 100644 index 000000000..267dfc85e --- /dev/null +++ b/overlay/GoogleSettingsOverlayNexus/Android.bp @@ -0,0 +1,4 @@ +runtime_resource_overlay { + name: "GoogleSettingsOverlayNexus", + product_specific: true, +} diff --git a/overlay/GoogleSettingsOverlayNexus/AndroidManifest.xml b/overlay/GoogleSettingsOverlayNexus/AndroidManifest.xml new file mode 100644 index 000000000..4e6ddf4fe --- /dev/null +++ b/overlay/GoogleSettingsOverlayNexus/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + diff --git a/overlay/GoogleSettingsOverlayNexus/res/values/config.xml b/overlay/GoogleSettingsOverlayNexus/res/values/config.xml new file mode 100644 index 000000000..15d2d9843 --- /dev/null +++ b/overlay/GoogleSettingsOverlayNexus/res/values/config.xml @@ -0,0 +1,14 @@ + + + android.intent.action.SET_WALLPAPER + com.android.customization.picker.CustomizationPickerActivity + android.intent.action.MAIN + com.google.android.apps.wallpaper.picker.CategoryPickerActivity + com.google.android.apps.wallpaper + + com.google.android.settings.intelligence.contextualcards.CARD_INTERACTION_RECEIVER + + + com.google.android.settings.intelligence + diff --git a/overlay/SettingsOverlay/Android.bp b/overlay/SettingsOverlay/Android.bp new file mode 100644 index 000000000..5b1f191d0 --- /dev/null +++ b/overlay/SettingsOverlay/Android.bp @@ -0,0 +1,4 @@ +runtime_resource_overlay { + name: "SettingsOverlay", + product_specific: true, +} diff --git a/overlay/SettingsOverlay/AndroidManifest.xml b/overlay/SettingsOverlay/AndroidManifest.xml new file mode 100644 index 000000000..4e6ddf4fe --- /dev/null +++ b/overlay/SettingsOverlay/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + diff --git a/overlay/SettingsOverlay/res/values/config.xml b/overlay/SettingsOverlay/res/values/config.xml new file mode 100644 index 000000000..258089e62 --- /dev/null +++ b/overlay/SettingsOverlay/res/values/config.xml @@ -0,0 +1,10 @@ + + + + com.android.wallpaper + + com.android.customization.picker.CustomizationPickerActivity + + android.intent.action.SET_WALLPAPER + diff --git a/overlay/common/frameworks/base/core/res/res/drawable-hdpi/default_wallpaper.png b/overlay/common/frameworks/base/core/res/res/drawable-hdpi/default_wallpaper.png deleted file mode 100644 index c38e6e0d3..000000000 Binary files a/overlay/common/frameworks/base/core/res/res/drawable-hdpi/default_wallpaper.png and /dev/null differ diff --git a/overlay/common/frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.png b/overlay/common/frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.png deleted file mode 100644 index a60c013e7..000000000 Binary files a/overlay/common/frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.png and /dev/null differ diff --git a/overlay/common/frameworks/base/core/res/res/drawable-nodpi/stat_sys_adb.xml b/overlay/common/frameworks/base/core/res/res/drawable-nodpi/stat_sys_adb.xml deleted file mode 100644 index 549d42f32..000000000 --- a/overlay/common/frameworks/base/core/res/res/drawable-nodpi/stat_sys_adb.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - diff --git a/overlay/common/frameworks/base/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png b/overlay/common/frameworks/base/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png deleted file mode 100644 index 10b06e32d..000000000 Binary files a/overlay/common/frameworks/base/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png and /dev/null differ diff --git a/overlay/common/frameworks/base/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png b/overlay/common/frameworks/base/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png deleted file mode 100644 index 10b06e32d..000000000 Binary files a/overlay/common/frameworks/base/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png and /dev/null differ diff --git a/overlay/common/frameworks/base/core/res/res/drawable-television/default_wallpaper.png b/overlay/common/frameworks/base/core/res/res/drawable-television/default_wallpaper.png deleted file mode 100644 index 21b7d763b..000000000 Binary files a/overlay/common/frameworks/base/core/res/res/drawable-television/default_wallpaper.png and /dev/null differ diff --git a/overlay/common/frameworks/base/core/res/res/drawable-xhdpi/default_wallpaper.png b/overlay/common/frameworks/base/core/res/res/drawable-xhdpi/default_wallpaper.png deleted file mode 100644 index 4134452c2..000000000 Binary files a/overlay/common/frameworks/base/core/res/res/drawable-xhdpi/default_wallpaper.png and /dev/null differ diff --git a/overlay/common/frameworks/base/core/res/res/drawable-xxhdpi/default_wallpaper.png b/overlay/common/frameworks/base/core/res/res/drawable-xxhdpi/default_wallpaper.png deleted file mode 100644 index 10b06e32d..000000000 Binary files a/overlay/common/frameworks/base/core/res/res/drawable-xxhdpi/default_wallpaper.png and /dev/null differ diff --git a/overlay/common/frameworks/base/core/res/res/drawable-xxxhdpi/default_wallpaper.png b/overlay/common/frameworks/base/core/res/res/drawable-xxxhdpi/default_wallpaper.png deleted file mode 100644 index 0eceece7d..000000000 Binary files a/overlay/common/frameworks/base/core/res/res/drawable-xxxhdpi/default_wallpaper.png and /dev/null differ diff --git a/overlay/common/frameworks/base/core/res/res/values/config.xml b/overlay/common/frameworks/base/core/res/res/values/config.xml index 7ab09ba58..fb8826840 100644 --- a/overlay/common/frameworks/base/core/res/res/values/config.xml +++ b/overlay/common/frameworks/base/core/res/res/values/config.xml @@ -53,6 +53,14 @@ com.shannon.imsservice com.mediatek.ims + + org.omnirom.omnijaws + + com.android.systemui + + com.android.networkstack.tethering + + com.google.android.gms.location.history false + + true + + com.google.android.as/com.google.android.apps.miphone.aiai.attention.service.AiAiAttentionService + + com.google.android.as/com.google.android.apps.miphone.aiai.captions.SystemCaptionsManagerService + + com.google.android.as/com.google.android.apps.miphone.aiai.app.AiAiContentSuggestionsService + + com.google.android.as/com.google.android.apps.miphone.aiai.app.AiAiPredictionService + + com.google.android.as + com.google.android.as + com.google.android.as + com.google.android.as + com.google.android.as + com.google.android.as + @@ -113,6 +142,362 @@ org.briarproject.briar.android + + + + app_cloning/cloned_apps_enabled=true + app_cloning/delete_all_app_clones_enabled=true + app_cloning/enable_app_cloning_building_blocks=true + + + privacy/location_access_check_enabled=true + privacy/location_accuracy_enabled=true + privacy/location_indicator_settings_enabled=true + privacy/location_indicators_enabled=true + privacy/location_indicators_show_system=false + privacy/location_indicators_small_enabled=true + + + wifi/shared_connectivity_enabled=true + + + privacy/safety_center_is_enabled=true + + + runtime_native_boot/pin_camera=false + + + storage_native_boot/take_over_get_content=true + + + systemui/use_back_gesture_ml_model=true + systemui/back_gesture_ml_model_name=backgesture + systemui/back_gesture_ml_model_threshold=0.8 + + + systemui/clipboard_overlay_show_actions=true + + + runtime_native/usap_pool_enabled=true + runtime_native/usap_pool_refill_delay_ms=3000 + runtime_native/usap_pool_size_max=10 + runtime_native/usap_pool_size_min=1 + runtime_native/usap_refill_threshold=5 + + + + + device_personalization_services/AdaptiveAudio__enable_adaptive_audio=true + device_personalization_services/AdaptiveAudio__show_promo_notification=false + device_personalization_services/AdaptiveAudio__use_silence_detector_state_bug_fix=true + + + device_personalization_services/Captions__allow_box_x_axis_movement=true + device_personalization_services/Captions__allow_use_public_speech_recognition=true + device_personalization_services/Captions__allow_voip_call_without_audio_recording=true + device_personalization_services/Captions__available_for_download=en-US;en-GB;en-CA;en-IE;en-AU;en-SG;en-IN;fr-FR;fr-CA;fr-BE;fr-CH;it-IT;it-CH;de-DE;de-AT;de-BE;de-CH;ja-JP;es-ES;es-US;cmn-Hant-TW;hi-IN;pt-BR;tr-TR;pl-PL;cmn-Hans-CN;ko-KR;ru-RU;vi-VN + device_personalization_services/Captions__disable_prod=false + + device_personalization_services/Captions__enable_activation_boost=true + device_personalization_services/Captions__enable_adaptive_box_width=true + device_personalization_services/Captions__enable_augmented_modality=true + device_personalization_services/Captions__enable_augmented_modality_input=true + device_personalization_services/Captions__enable_augmented_modality_language_detection=true + device_personalization_services/Captions__enable_augmented_music=true + + device_personalization_services/Captions__enable_drag_and_double_tap_to_resize=true + device_personalization_services/Captions__enable_ec_integration=false + device_personalization_services/Captions__enable_language_detection=true + device_personalization_services/Captions__enable_new_model_version_advanced_2023=true + device_personalization_services/Captions__enable_one_caption_experiment=false + device_personalization_services/Captions__enable_punctuations=true + device_personalization_services/Captions__enable_setting_page=false + device_personalization_services/Captions__enable_survey=false + device_personalization_services/Captions__enable_text_transform=true + device_personalization_services/Captions__enable_westworld_logging=false + device_personalization_services/Captions__enable_zero_day=false + device_personalization_services/Captions__manifest_url_template=https://storage.googleapis.com/captions/%{NAMESPACE}_%{VERSION}_manifest.json + device_personalization_services/Captions__model_version_v1=20190613 + device_personalization_services/Captions__model_version_v1_2=20200112 + device_personalization_services/Captions__new_model_version=20210623 + device_personalization_services/Captions__new_model_version_advanced_2023=20230808 + device_personalization_services/Captions__speech_threshold=0.2 + device_personalization_services/Captions__support_lang_id_disabled_after_dismissals=true + device_personalization_services/Captions__supported_languages=en-US;fr-FR;it-IT;de-DE;ja-JP;es-ES;cmn-Hant-TW;hi-IN;pt-BR;tr-TR;pl-PL;cmn-Hans-CN;ko-KR;ru-RU;vi-VN + device_personalization_services/Captions__supported_languages_beta_quality=ja-JP;pt-BR;tr-TR;pl-PL;cmn-Hans-CN;ko-KR;ru-RU;vi-VN + device_personalization_services/Captions__surface_sound_events=true + device_personalization_services/Captions__text_transform_augmented_input=true + device_personalization_services/Captions__visibility_playing_duration_millis=5000 + device_personalization_services/Captions__visibility_stopped_duration_millis=1500 + + + device_personalization_services/Cell__enable_cell=true + device_personalization_services/Cell__enable_smartspace_events=true + device_personalization_services/Echo__smartspace_dedupe_fast_pair_notification=true + device_personalization_services/Echo__smartspace_doorbell_aiai_loading_screen=true + device_personalization_services/Echo__smartspace_doorbell_loading_screen_state=2 + device_personalization_services/Echo__smartspace_enable_async_icon=true + device_personalization_services/Echo__smartspace_enable_battery_notification_parser=true + device_personalization_services/Echo__smartspace_enable_bedtime_active_predictor=true + device_personalization_services/Echo__smartspace_enable_bedtime_reminder_predictor=true + device_personalization_services/Echo__smartspace_enable_bluetooth_metadata_parser=true + device_personalization_services/Echo__smartspace_enable_cross_device_timer=true + device_personalization_services/Echo__smartspace_enable_dark_launch_outlook_events=true + device_personalization_services/Echo__smartspace_enable_doorbell=true + device_personalization_services/Echo__smartspace_enable_doorbell_context_wrapper=true + device_personalization_services/Echo__smartspace_enable_doorbell_extras=true + device_personalization_services/Echo__smartspace_enable_dwb_bedtime_predictor=true + device_personalization_services/Echo__smartspace_enable_earthquake_alert_predictor=true + device_personalization_services/Echo__smartspace_enable_echo_settings=true + device_personalization_services/Echo__smartspace_enable_echo_unified_settings=true + device_personalization_services/Echo__smartspace_enable_eta_doordash=true + device_personalization_services/Echo__smartspace_enable_eta_lyft=true + device_personalization_services/Echo__smartspace_enable_food_delivery_eta=true + device_personalization_services/Echo__smartspace_enable_grocery=true + device_personalization_services/Echo__smartspace_enable_light_off_predictor=true + device_personalization_services/Echo__smartspace_enable_light_predictor=false + device_personalization_services/Echo__smartspace_enable_media_wake_lock_acquire=true + device_personalization_services/Echo__smartspace_enable_nap=true + device_personalization_services/Echo__smartspace_enable_nudge=true + device_personalization_services/Echo__smartspace_enable_outlook_events=true + device_personalization_services/Echo__smartspace_enable_package_delivery=true + device_personalization_services/Echo__smartspace_enable_paired_device_connections=true + device_personalization_services/Echo__smartspace_enable_paired_device_predictor=true + device_personalization_services/Echo__smartspace_enable_ridesharing_eta=true + device_personalization_services/Echo__smartspace_enable_safety_check_predictor=true + device_personalization_services/Echo__smartspace_enable_score_ranker=WEIGHTED + device_personalization_services/Echo__smartspace_enable_score_ranker=true + device_personalization_services/Echo__smartspace_enable_sensitive_notification_twiddler=true + device_personalization_services/Echo__smartspace_enable_step_predictor=true + device_personalization_services/Echo__smartspace_enable_subcard_logging=true + device_personalization_services/Echo__smartspace_gaia_twiddler=true + device_personalization_services/Echo__smartspace_outlook_event_source_of_truth=TEXT_ONLY + device_personalization_services/Echo__smartspace_package_delivery_card_delay_seconds=0 + device_personalization_services/Echo__smartspace_show_cross_device_timer_label=true + device_personalization_services/Echo__smartspace_use_flashlight_action_chip=true + device_personalization_services/Echo_smartspace__enable_flight_landing_smartspace_aiai=true + device_personalization_services/Echo_smartspace__enable_hotel_smartspace_aiai=true + device_personalization_services/Echo_smartspace__smartspace_enable_daily_forecast=true + device_personalization_services/Echo_smartspace__smartspace_enable_timely_reminder=true + device_personalization_services/EchoSmartspace__check_notification_visibility=true + device_personalization_services/EchoSmartspace__doorbell_when_for_update_time=true + device_personalization_services/EchoSmartspace__enable_add_contextual_feedback_button_on_long_press=false + device_personalization_services/EchoSmartspace__enable_add_internal_feedback_button=true + device_personalization_services/EchoSmartspace__enable_agsa_settings_read=true + device_personalization_services/EchoSmartspace__enable_cross_feature_rank_dedup_twiddler=true + device_personalization_services/EchoSmartspace__enable_dimensional_logging=false + device_personalization_services/EchoSmartspace__enable_encode_subcard_into_smartspace_target_id=true + device_personalization_services/EchoSmartspace__enable_fitbit_notifications=true + device_personalization_services/EchoSmartspace__enable_flight_landing_smartspace_aiai=true + device_personalization_services/EchoSmartspace__enable_hotel_smartspace_aiai=true + device_personalization_services/EchoSmartspace__enable_media_recs_for_driving=true + device_personalization_services/EchoSmartspace__enable_optin_bedtime_adjustment_provider=true + device_personalization_services/EchoSmartspace__enable_predictor_expiration=true + device_personalization_services/EchoSmartspace__enable_ring_channels_regex=true + device_personalization_services/EchoSmartspace__enable_ring_using_ui_template=true + device_personalization_services/EchoSmartspace__enable_travel_features_type_merge=true + device_personalization_services/EchoSmartspace__enable_weather_data_extras=true + device_personalization_services/EchoSmartspace__ring_channels_regex=4_ding_channel_notification\d+ + device_personalization_services/EchoSmartspace__ring_lockscreen_delay_seconds=0 + device_personalization_services/EchoSmartspace__ring_on_aod_only=true + device_personalization_services/EchoSmartspace__runtastic_check_pause_action=true + device_personalization_services/EchoSmartspace__runtastic_is_ongoing_default_true=true + device_personalization_services/EchoSmartspace__smartspace_enable_cross_device_alarm=true + device_personalization_services/EchoSmartspace__smartspace_enable_daily_forecast=true + device_personalization_services/EchoSmartspace__smartspace_enable_timely_reminder=true + device_personalization_services/EchoSmartspace__smartspace_enable_tomorrow_forecast=true + device_personalization_services/EchoSmartspace__strava_check_stop_action=true + + + notification_assistant/generate_actions=true + notification_assistant/generate_replies=true + device_personalization_services/NotificationAssistant__enable_service=true + device_personalization_services/NotificationAssistant__enable_upgrade_importance=true + device_personalization_services/NotificationAssistant__importance_model_download_url=https://www.gstatic.com/android/notifications/importance/v1/manifest.json + device_personalization_services/NotificationAssistant__importance_model_type=channel_stats + device_personalization_services/NotificationAssistant__importance_model_version=1 + device_personalization_services/NotificationAssistant__max_importance_variance=0.5 + + + device_personalization_services/NowPlaying__ambient_music_apk_music_detector_min_score=0.45 + device_personalization_services/NowPlaying__ambient_music_download_album_art_via_astrea=false + device_personalization_services/NowPlaying__ambient_music_enable_resource_download_logging=false + device_personalization_services/NowPlaying__ambient_music_enhanced_metadata_shards_manifest=4003:https://storage.googleapis.com/music-iq-db/updatable_db_v4/20241015-000033/manifest.json + device_personalization_services/NowPlaying__ambient_music_get_model_state_cooldown_seconds_cloud_search=9 + device_personalization_services/NowPlaying__ambient_music_index_manifest_17_09_02=3105:https://storage.googleapis.com/music-iq-db/updatable_db_v3/20241013-030037/manifest.json + device_personalization_services/NowPlaying__ambient_music_matcher_match_threshold_17_09_02=1.0E-6 + device_personalization_services/NowPlaying__ambient_music_on_demand_enabled=true + device_personalization_services/NowPlaying__ambient_music_on_demand_music_confidence=0.48 + device_personalization_services/NowPlaying__ambient_music_on_demand_search_use_new_opt_in_flow=false + device_personalization_services/NowPlaying__ambient_music_show_album_art=false + device_personalization_services/NowPlaying__ambient_music_support_dsp_model_tflite_p6=true + device_personalization_services/NowPlaying__ambient_music_use_enhanced_matches_database=false + device_personalization_services/NowPlaying__ambient_music_use_metadata_shards_database=false + device_personalization_services/NowPlaying__ambient_music_use_yt_domain_fife_urls=false + device_personalization_services/NowPlaying__cloud_api_allowed=true + device_personalization_services/NowPlaying__create_shortcut_on_np_enabled=false + device_personalization_services/NowPlaying__default_music_player_setting=false + device_personalization_services/NowPlaying__dsp_model_checksum_enabled=true + + device_personalization_services/NowPlaying__favorites_enabled=true + device_personalization_services/NowPlaying__feature_users_count_enabled=true + + device_personalization_services/NowPlaying__handle_ambient_music_results_with_history=true + device_personalization_services/NowPlaying__min_training_interval_millis=86400000 + device_personalization_services/NowPlaying__nnfp_v3_model_enabled=true + device_personalization_services/NowPlaying__on_demand_enable_eager_prompt=true + device_personalization_services/NowPlaying__on_demand_fingerprinter_being_setup_warning=true + device_personalization_services/NowPlaying__on_demand_hide_if_fingerprinter_install_not_confirmed=true + device_personalization_services/NowPlaying__on_demand_min_supported_aga_version=12.35.17 + device_personalization_services/NowPlaying__on_demand_retry_fingerprinter_install=true + device_personalization_services/NowPlaying__shortcut_direct_create_enabled=false + device_personalization_services/NowPlaying__youtube_export_enabled=true + + + device_personalization_services/Attention__accel_sensor_enabled=false + device_personalization_services/Attention__accel_sensor_threshold_mss=0.2 + device_personalization_services/Attention__enabled=true + device_personalization_services/Attention__margin_horizontal_px=1000 + device_personalization_services/Attention__margin_vertical_px=1000 + device_personalization_services/Attention__proximity_sensor_enabled=false + + + device_personalization_services/Translate__app_blocklist=com.google.android.talk + device_personalization_services/Translate__blue_chip_translate_enabled=true + device_personalization_services/Translate__characterset_lang_detection_enabled=true + device_personalization_services/Translate__chat_translate_languages=de,en,es,fr,it,ja,hi,zh,ru,pl,pt,ko,th,tr,nl,zh_Hant,sv,da,vi,ar,fa,no,bn,fil + device_personalization_services/Translate__copy_to_translate_enabled=true + device_personalization_services/Translate__differentiate_simplified_and_traditional_chinese=true + device_personalization_services/Translate__disable_translate_without_system_animation=false + device_personalization_services/Translate__enable_chronicle_migration=true + device_personalization_services/Translate__enable_default_langid_model=true + device_personalization_services/Translate__enable_dictionary_langid_detection=true + device_personalization_services/Translate__enable_opmv4_service=true + device_personalization_services/Translate__enable_settings_backup_restore=false + device_personalization_services/Translate__enable_setup_wizard_dialog_v2=false + device_personalization_services/Translate__enable_spa_setting=false + device_personalization_services/Translate__enable_translate_kit_api_migration=false + device_personalization_services/Translate__interpreter_source_languages=de,en,ja,es,fr,it + device_personalization_services/Translate__interpreter_target_languages=de,en,ja,es,fr,it + device_personalization_services/Translate__replace_auto_translate_copied_text_enabled=true + device_personalization_services/Translate__text_to_text_language_list=vi,ja,fa,ro,nl,mr,mt,ar,ms,it,eo,is,et,es,iw,zh,uk,af,id,ur,mk,cy,hi,el,be,pt,lt,hr,lv,hu,ht,te,de,bg,th,bn,tl,pl,tr,kn,sv,gl,ko,sw,cs,da,ta,gu,ka,sl,ca,sk,ga,sq,no,fi,ru,fr,en,zh_Hant,fil + device_personalization_services/Translate__translation_service_enabled=true + device_personalization_services/Translate__translator_expiration_enabled=true + device_personalization_services/Translate__use_translate_kit_streaming_api=true + + + device_personalization_services/SmartRecPixelSearch__enable_gboard_suggestion=true + device_personalization_services/SmartRecPixelSearch__enable_spelling_correction=true + device_personalization_services/SmartRecPixelSearch__spelling_checker_frequency_score_overrides_map={"8":-7} + device_personalization_services/SmartRecCompose__enable_compose_action_filter=true + device_personalization_services/SmartRecCompose__enable_deep_clu_model=true + device_personalization_services/SmartDictation__enable_alternatives_from_past_corrections=true + device_personalization_services/SmartDictation__enable_alternatives_from_speech_hypotheses=true + device_personalization_services/SmartDictation__enable_biasing_for_commands=true + device_personalization_services/SmartDictation__enable_biasing_for_contacts=true + device_personalization_services/SmartDictation__enable_biasing_for_contacts_learned_from_past_corrections=true + device_personalization_services/SmartDictation__enable_biasing_for_interests_model=true + device_personalization_services/SmartDictation__enable_biasing_for_past_correction=true + device_personalization_services/SmartDictation__enable_biasing_for_screen_context=true + device_personalization_services/SmartDictation__enable_selection_filtering=true + + + launcher/enable_keyboard_transition_sync=true + launcher/ENABLE_LOCAL_RECOMMENDED_WIDGETS_FILTER=true + launcher/ENABLE_SMARTSPACE_ENHANCED=true + launcher/ENABLE_WIDGETS_PICKER_AIAI_SEARCH=true + launcher/ENABLE_QUICK_LAUNCH_V2=true + launcher/GBOARD_UPDATE_ENTER_KEY=true + launcher/enable_quick_search=true + launcher/enable_one_search=true + launcher/enable_quick_launch_v2=true + launcher/enable_rich_answer=true + launcher/ENABLE_SEARCH_HAPTIC_HINT=true + launcher/enable_web_suggest_on_default_browser=true + launcher/long_press_home_button_to_search=true + launcher/long_press_home_button_to_search_mpr=true + launcher/press_hold_nav_handle_to_search=true + launcher/press_hold_nav_handle_to_search_mpr=true + launcher/ENABLE_LONG_PRESS_NAV_HANDLE=true + launcher/ENABLE_LONG_PRESS_NAV_HANDLE_MPR=true + launcher/ENABLE_SETTINGS_OSE_CUSTOMIZATIONS=true + launcher/INVOKE_OMNI_LPH=true + launcher/INVOKE_OMNI_LPH_MPR=true + launcher/LPNH_SLOP_PERCENTAGE=71 + launcher/LPNH_TIMEOUT_MS=400 + launcher/show_search_educard_qsb=true + launcher/show_three_dot_menu_qsb=true + launcher/use_app_search_for_web=true + launcher/use_fallback_app_search=true + + + device_personalization_services/Overview__enable_barcode_detection=false + device_personalization_services/Overview__enable_image_search=false + device_personalization_services/Overview__enable_lens_r_overview_long_press=true + device_personalization_services/Overview__enable_lens_r_overview_select_mode=true + device_personalization_services/Overview__enable_lens_r_overview_translate_action=true + device_personalization_services/Overview__enable_image_selection=true + device_personalization_services/Overview__enable_japanese_ocr=true + device_personalization_services/Overview__enable_overview=true + device_personalization_services/Overview__enable_pir_clearcut_logging=true + device_personalization_services/Overview__enable_pir_westworld_logging=true + device_personalization_services/Overview__enable_proactive_hints=false + device_personalization_services/Overview__enable_superpacks_pir_protocol=true + device_personalization_services/Overview__min_lens_agsa_app_version=301084649 + + + device_personalization_services/OverviewFederatedAnalytics__enable_fa=false + device_personalization_services/OverviewFederatedAnalytics__enable_min_training_interval=false + device_personalization_services/OverviewFederatedAnalytics__enable_non_synthetic_logs=false + + + device_personalization_services/Autofill__enable=false + device_personalization_services/Autofill__enable_fa=false + device_personalization_services/Fedex__enable_fedex=false + device_personalization_services/Logging__enable_aiai_clearcut_logging=false + device_personalization_services/NotificationAssistant__enable_service=false + device_personalization_services/VisualCortex__enable=false + + + systemui/quick_access_wallet_enabled=true + systemui/enable_screenshot_corner_flow=true + systemui/enable_screenshot_notification_smart_actions=true + systemui/enable_screenshot_scrolling=true + systemui/volume_separate_notification=true + systemui/tap_to_edit=true + + + privacy/discrete_history_cutoff_millis=604800000 + privacy/permissions_hub_enabled=true + privacy/permissions_hub_2_enabled=true + privacy/privacy_dashboard_7_day_toggle=true + privacy/warning_banner_enabled=true + privacy/safety_protection_enabled=true + + + mediaprovider/cloud_media_feature_enabled=true + mediaprovider/allowed_cloud_providers=com.google.android.apps.photos.cloudpicker + + + device_personalization_services/WallpaperEffects__cinematic_models_mdd_manifest_config=Ct4IEtsICiF3YWxscGFwZXJlZmZlY3RzLWNpbmVtYXRpYy1tb2RlbHMSwgESdWh0dHBzOi8vZGwuZ29vZ2xlLmNvbS9tZGktc2VydmluZy9haWFpLXdhbGxwYXBlcmVmZmVjdHMtY2luZW1hdGljLW1vZGVscy83NDYvNTk2NDgzNDA1MzljOGU2OWRmZGZlYjkzNTk0OTIzYWJmZDBmMGQwNyCM4JQFKig1OTY0ODM0MDUzOWM4ZTY5ZGZkZmViOTM1OTQ5MjNhYmZkMGYwZDA3OhJkZXB0aF9tb2RlbC50ZmxpdGV4AKIBAKoBABLIARJ1aHR0cHM6Ly9kbC5nb29nbGUuY29tL21kaS1zZXJ2aW5nL2FpYWktd2FsbHBhcGVyZWZmZWN0cy1jaW5lbWF0aWMtbW9kZWxzLzc0Ni84NmE3MWYwYTIwYjFhMjhiNTY4MTMwZTliYTZjMTYzZTdhZjQzMTg5IKzsyQQqKDg2YTcxZjBhMjBiMWEyOGI1NjgxMzBlOWJhNmMxNjNlN2FmNDMxODk6GHBlcnNvbl9wb3NlX21vZGVsLnRmbGl0ZXgAogEAqgEAEs0BEnVodHRwczovL2RsLmdvb2dsZS5jb20vbWRpLXNlcnZpbmcvYWlhaS13YWxscGFwZXJlZmZlY3RzLWNpbmVtYXRpYy1tb2RlbHMvNzQ2L2I2NTQxNDFiOTUwNjY3OTVlYjBlNjNlZDRkNzFiZjQxZDQyYjFhNmMgyPPNAiooYjY1NDE0MWI5NTA2Njc5NWViMGU2M2VkNGQ3MWJmNDFkNDJiMWE2YzodcGVyc29uX3NlZ21lbnRlcl9tb2RlbC50ZmxpdGV4AKIBAKoBABLLARJ1aHR0cHM6Ly9kbC5nb29nbGUuY29tL21kaS1zZXJ2aW5nL2FpYWktd2FsbHBhcGVyZWZmZWN0cy1jaW5lbWF0aWMtbW9kZWxzLzc0Ni9lOTllZWJlMDQ2NDk4ZmU2N2MzMzdjZmZkMzkzODM4NTVkMjE0NjM5INCXrwIqKGU5OWVlYmUwNDY0OThmZTY3YzMzN2NmZmQzOTM4Mzg1NWQyMTQ2Mzk6G3JnYmRfaW5wYWludGVyX21vZGVsLnRmbGl0ZXgAogEAqgEAEsQBEnVodHRwczovL2RsLmdvb2dsZS5jb20vbWRpLXNlcnZpbmcvYWlhaS13YWxscGFwZXJlZmZlY3RzLWNpbmVtYXRpYy1tb2RlbHMvNzQ2L2ExNjQ4ZjQ2NDYyZDVmMTExOTVjNmEyYTBhN2M0MTMyZTEwNzJjMDIgsLo6KihhMTY0OGY0NjQ2MmQ1ZjExMTk1YzZhMmEwYTdjNDEzMmUxMDcyYzAyOhVzYWxpZW5jeV9tb2RlbC50ZmxpdGV4AKIBAKoBABgAUABYAGoECAEQAHAAogEAqAEAuAHqBdIBB2RlZmF1bHTaAQDiARsKBwgBEJ+xjRcKBwgCEKCxjRcKBwgDEKGxjRc + device_personalization_services/WallpaperEffects__enable_allow_fg_download_on_cellular=true + device_personalization_services/WallpaperEffects__enable_cinematic_effect=true + device_personalization_services/WallpaperEffects__enable_cinematic_mdd=true + device_personalization_services/WallpaperEffects__enable_foreground_model_download=true + device_personalization_services/WallpaperEffects__enable_person_segment_tpu=false + device_personalization_services/WallpaperEffects__return_texturedmesh_with_error_status=true + device_personalization_services/WallpaperEffects__use_gpu=true + device_personalization_services/WallpaperEffects__use_tpu=false + + + settings_ui/bt_slice_settings_enabled=true + settings_ui/bt_advanced_header_enabled=true + settings_ui/bt_near_by_suggestion_enabled=true + settings_ui/bt_le_audio_contact_sharing_enabled=true + + org.protonaosp.deviceconfig @@ -170,5 +555,24 @@ com.android.contacts - + google-sans-clock + + + google-sans-text + + + google-sans-text-medium + + + google-sans-text + + + google-sans + + + true + + + true + diff --git a/overlay/common/frameworks/base/core/res/res/xml/config_webview_packages.xml b/overlay/common/frameworks/base/core/res/res/xml/config_webview_packages.xml index 5b5039f93..efb041fa2 100644 --- a/overlay/common/frameworks/base/core/res/res/xml/config_webview_packages.xml +++ b/overlay/common/frameworks/base/core/res/res/xml/config_webview_packages.xml @@ -31,6 +31,6 @@ - + diff --git a/overlay/common/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/overlay/common/frameworks/base/packages/SettingsProvider/res/values/defaults.xml index e1b38e8a6..84f397a38 100644 --- a/overlay/common/frameworks/base/packages/SettingsProvider/res/values/defaults.xml +++ b/overlay/common/frameworks/base/packages/SettingsProvider/res/values/defaults.xml @@ -19,7 +19,7 @@ true - com.stevesoltys.seedvault.transport.ConfigurableBackupTransport + com.google.android.gms/.backup.BackupTransportService false + + false + + 30000 + + true + + + true diff --git a/overlay/common/frameworks/base/packages/SystemUI/res/values/config.xml b/overlay/common/frameworks/base/packages/SystemUI/res/values/config.xml index 41fecec89..54f51e32f 100644 --- a/overlay/common/frameworks/base/packages/SystemUI/res/values/config.xml +++ b/overlay/common/frameworks/base/packages/SystemUI/res/values/config.xml @@ -22,7 +22,29 @@ com.android.systemui com.android.systemui.plugin.globalactions.wallet + com.android.systemui.clocks + com.android.systemui.clocks.debug + com.android.systemui.clocks.bignum + com.android.systemui.clocks.calligraphy + com.android.systemui.clocks.flex + com.android.systemui.clocks.growth + com.android.systemui.clocks.handwritten + com.android.systemui.clocks.inflate + com.android.systemui.clocks.metro + com.android.systemui.clocks.numoverlap + com.android.systemui.clocks.weather org.lineageos.settings.device + com.android.systemui.clocks + com.android.systemui.clocks.debug + com.android.systemui.clocks.bignum + com.android.systemui.clocks.calligraphy + com.android.systemui.clocks.flex + com.android.systemui.clocks.growth + com.android.systemui.clocks.handwritten + com.android.systemui.clocks.inflate + com.android.systemui.clocks.metro + com.android.systemui.clocks.numoverlap + com.android.systemui.clocks.weather diff --git a/overlay/common/frameworks/libs/WindowManager/Shell/res/values/config.xml b/overlay/common/frameworks/libs/WindowManager/Shell/res/values/config.xml new file mode 100644 index 000000000..3f6009a74 --- /dev/null +++ b/overlay/common/frameworks/libs/WindowManager/Shell/res/values/config.xml @@ -0,0 +1,22 @@ + + + + + + true + diff --git a/overlay/common/packages/apps/Settings/res/values/config.xml b/overlay/common/packages/apps/Settings/res/values/config.xml index 07f9922fe..e9585067b 100644 --- a/overlay/common/packages/apps/Settings/res/values/config.xml +++ b/overlay/common/packages/apps/Settings/res/values/config.xml @@ -30,10 +30,16 @@ false - - com.android.wallpaper - - com.android.customization.picker.CustomizationPickerActivity - - android.intent.action.SET_WALLPAPER + + true + + + true + + com.google.android.apps.turbo.bluetooth.estimated_time_remaining + content://com.google.android.apps.wearables.maestro.companion/settings_slice?addr=%1$s + com.google.android.gms.nearby.discovery.EXTRA_INTENT + com.google.android.gms.nearby.discovery.EXTRA_PENDING_INTENT + com.google.android.gms.nearby.discovery.ACTION_LOG_SLICE_AND_LAUNCH_INTENT + com.google.android.gms.nearby.discovery.ACTION_LOG_SLICE_AND_SEND_PENDING_INTENT diff --git a/overlay/no-rro/frameworks/base/core/res/res/values/config.xml b/overlay/no-rro/frameworks/base/core/res/res/values/config.xml index e89a0ff12..98f1626f3 100644 --- a/overlay/no-rro/frameworks/base/core/res/res/values/config.xml +++ b/overlay/no-rro/frameworks/base/core/res/res/values/config.xml @@ -27,4 +27,7 @@ android.sensor.light + + + com.google.android.googlequicksearchbox diff --git a/overlay/rro_packages/CustomFontPixelLauncherOverlay/Android.bp b/overlay/rro_packages/CustomFontPixelLauncherOverlay/Android.bp new file mode 100644 index 000000000..684e69693 --- /dev/null +++ b/overlay/rro_packages/CustomFontPixelLauncherOverlay/Android.bp @@ -0,0 +1,6 @@ +runtime_resource_overlay { + name: "CustomFontPixelLauncherOverlay", + certificate: "platform", + sdk_version: "current", + product_specific: true +} diff --git a/overlay/rro_packages/CustomFontPixelLauncherOverlay/AndroidManifest.xml b/overlay/rro_packages/CustomFontPixelLauncherOverlay/AndroidManifest.xml new file mode 100644 index 000000000..3602c0ff2 --- /dev/null +++ b/overlay/rro_packages/CustomFontPixelLauncherOverlay/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/overlay/rro_packages/CustomFontPixelLauncherOverlay/res/values/styles.xml b/overlay/rro_packages/CustomFontPixelLauncherOverlay/res/values/styles.xml new file mode 100644 index 000000000..7a5dabb85 --- /dev/null +++ b/overlay/rro_packages/CustomFontPixelLauncherOverlay/res/values/styles.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/overlay/rro_packages/TrebuchetOverlay/Android.bp b/overlay/rro_packages/TrebuchetOverlay/Android.bp deleted file mode 100644 index 833e0d8f2..000000000 --- a/overlay/rro_packages/TrebuchetOverlay/Android.bp +++ /dev/null @@ -1,9 +0,0 @@ -// -// Copyright (C) 2022 The LineageOS Project -// SPDX-License-Identifier: Apache-2.0 -// - -runtime_resource_overlay { - name: "TrebuchetOverlay", - product_specific: true, -} diff --git a/overlay/rro_packages/TrebuchetOverlay/AndroidManifest.xml b/overlay/rro_packages/TrebuchetOverlay/AndroidManifest.xml deleted file mode 100644 index b87512af0..000000000 --- a/overlay/rro_packages/TrebuchetOverlay/AndroidManifest.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/overlay/rro_packages/TrebuchetOverlay/res/values/config.xml b/overlay/rro_packages/TrebuchetOverlay/res/values/config.xml deleted file mode 100644 index 401fc9d5e..000000000 --- a/overlay/rro_packages/TrebuchetOverlay/res/values/config.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - com.android.wallpaper - - diff --git a/prebuilt/common/bin/50-lineage.sh b/prebuilt/common/bin/50-lineage.sh index 7ee38454f..d1fcf89ee 100755 --- a/prebuilt/common/bin/50-lineage.sh +++ b/prebuilt/common/bin/50-lineage.sh @@ -3,7 +3,7 @@ # ADDOND_VERSION=2 # # /system/addon.d/50-lineage.sh -# During a LineageOS upgrade, this script backs up /system/etc/hosts, +# During a crDroid Android upgrade, this script backs up /system/etc/hosts, # /system is formatted and reinstalled, then the file is restored. # diff --git a/prebuilt/common/bin/backuptool.sh b/prebuilt/common/bin/backuptool.sh index 8cb0ad828..804e8731d 100755 --- a/prebuilt/common/bin/backuptool.sh +++ b/prebuilt/common/bin/backuptool.sh @@ -6,7 +6,7 @@ export C=/tmp/backupdir export SYSDEV="$(readlink -nf "$2")" export SYSFS="$3" -export V=22 +export V=15.0 export ADDOND_VERSION=3 @@ -47,7 +47,7 @@ if [ ! -r $S/build.prop ]; then echo "Backup/restore is not possible. Partition is probably empty" return 1 fi -if ! grep -q "^ro.lineage.version=$V.*" $S/build.prop; then +if ! grep -q "^ro.crdroid.version=$V.*" $S/build.prop; then echo "Backup/restore is not possible. Incompatible ROM version: $V" return 2 fi diff --git a/prebuilt/common/bin/backuptool_ab.sh b/prebuilt/common/bin/backuptool_ab.sh index ef2da79c7..568f048c2 100755 --- a/prebuilt/common/bin/backuptool_ab.sh +++ b/prebuilt/common/bin/backuptool_ab.sh @@ -5,7 +5,7 @@ export S=/system export C=/postinstall/tmp/backupdir -export V=22 +export V=15.0 export ADDOND_VERSION=3 @@ -56,7 +56,7 @@ if [ ! -r /system/build.prop ]; then echo "Backup/restore is not possible. Partition is probably empty" return 1 fi -if ! grep -q "^ro.lineage.version=$V.*" /system/build.prop; then +if ! grep -q "^ro.crdroid.version=$V.*" /system/build.prop; then echo "Backup/restore is not possible. Incompatible ROM version: $V" return 2 fi diff --git a/prebuilt/common/etc/apns-conf.xml b/prebuilt/common/etc/apns-conf.xml index 9d14e4a89..e6602b046 100644 --- a/prebuilt/common/etc/apns-conf.xml +++ b/prebuilt/common/etc/apns-conf.xml @@ -2919,6 +2919,7 @@ + @@ -3507,6 +3508,7 @@ + diff --git a/prebuilt/common/etc/init/init.lineage-updater.rc b/prebuilt/common/etc/init/init.lineage-updater.rc index f1bed8d32..1124490e4 100644 --- a/prebuilt/common/etc/init/init.lineage-updater.rc +++ b/prebuilt/common/etc/init/init.lineage-updater.rc @@ -1,4 +1,4 @@ on post-fs-data # Create an additional OTA package directory that unlike /data/ota_package # will not be touched by GmsCore. - mkdir /data/lineageos_updates 0770 system cache encryption=Require + mkdir /data/matrixx_updates 0770 system cache encryption=Require diff --git a/prebuilt/common/etc/sysconfig/preinstalled-packages-platform-crdroid-product.xml b/prebuilt/common/etc/sysconfig/preinstalled-packages-platform-crdroid-product.xml new file mode 100644 index 000000000..f4a5be8ab --- /dev/null +++ b/prebuilt/common/etc/sysconfig/preinstalled-packages-platform-crdroid-product.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/prebuilt/common/etc/sysconfig/quick_tap.xml b/prebuilt/common/etc/sysconfig/quick_tap.xml new file mode 100644 index 000000000..03220703f --- /dev/null +++ b/prebuilt/common/etc/sysconfig/quick_tap.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/telephony/apns-full-conf.xml b/telephony/apns-full-conf.xml new file mode 100644 index 000000000..36a9721ac --- /dev/null +++ b/telephony/apns-full-conf.xml @@ -0,0 +1,57930 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +