diff --git a/Misc/Features/GrapheneOS.txt b/Misc/Features/GrapheneOS.txt index 0c9f7824..f335b638 100644 --- a/Misc/Features/GrapheneOS.txt +++ b/Misc/Features/GrapheneOS.txt @@ -308,6 +308,7 @@ nojit [implemented] Bluetooth auto turn off (partial CalyxOS) 13 https://github.com/GrapheneOS/platform_frameworks_base/commit/647d5ff84f600579576cacbda2e9ecfa4efaa5ac +13 https://github.com/GrapheneOS/platform_frameworks_base/commit/361852566554d2c362195e31417e8e94f8493586 13 https://github.com/GrapheneOS/platform_packages_apps_Settings/commit/38ba109db0f7e79821c014b199a18f3a1af6e250 12 https://github.com/GrapheneOS/platform_frameworks_base/commit/6577307ef97cfeb4ba951d0c9e2696a21bd1237a 12 https://github.com/GrapheneOS/platform_packages_apps_Settings/commit/cfc5b87c62cc67b5a242a3030eba7fff934871b5 diff --git a/Patches/LineageOS-20.0/android_build/0004-keymaps.patch b/Patches/LineageOS-20.0/android_build/0004-keymaps.patch new file mode 100644 index 00000000..b2b3d716 --- /dev/null +++ b/Patches/LineageOS-20.0/android_build/0004-keymaps.patch @@ -0,0 +1,22 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Daniel Micay +Date: Thu, 18 Aug 2022 13:38:55 -0400 +Subject: [PATCH] add bluetooth/sdk_sandbox to standard key mapping + +--- + tools/releasetools/sign_target_files_apks.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/tools/releasetools/sign_target_files_apks.py b/tools/releasetools/sign_target_files_apks.py +index 6f96d8f6a..732f80251 100755 +--- a/tools/releasetools/sign_target_files_apks.py ++++ b/tools/releasetools/sign_target_files_apks.py +@@ -1150,6 +1150,8 @@ def BuildKeyMap(misc_info, key_mapping_options): + devkeydir + "/shared": d + "/shared", + devkeydir + "/platform": d + "/platform", + devkeydir + "/networkstack": d + "/networkstack", ++ devkeydir + "/bluetooth": d + "/bluetooth", ++ devkeydir + "/sdk_sandbox": d + "/sdk_sandbox", + }) + else: + OPTIONS.key_map[s] = d diff --git a/Patches/LineageOS-20.0/android_frameworks_base/0015-Bluetooth_Timeout-Fix.patch b/Patches/LineageOS-20.0/android_frameworks_base/0015-Bluetooth_Timeout-Fix.patch new file mode 100644 index 00000000..0952851d --- /dev/null +++ b/Patches/LineageOS-20.0/android_frameworks_base/0015-Bluetooth_Timeout-Fix.patch @@ -0,0 +1,62 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Dmitry Muhomor +Date: Tue, 6 Sep 2022 16:48:26 +0300 +Subject: [PATCH] bugfix: Bluetooth auto turn off ignored connected BLE devices + +Previous attempt at fixing this didn't work properly, because getConnectionStateLeAware() didn't +actually report BLE state. +--- + .../android/server/ext/BluetoothAutoOff.java | 20 ++++++++++++++----- + 1 file changed, 15 insertions(+), 5 deletions(-) + +diff --git a/services/core/java/com/android/server/ext/BluetoothAutoOff.java b/services/core/java/com/android/server/ext/BluetoothAutoOff.java +index 4e7dbc042f37..a091b006214f 100644 +--- a/services/core/java/com/android/server/ext/BluetoothAutoOff.java ++++ b/services/core/java/com/android/server/ext/BluetoothAutoOff.java +@@ -3,6 +3,7 @@ package com.android.server.ext; + import android.annotation.Nullable; + import android.bluetooth.BluetoothAdapter; + import android.bluetooth.BluetoothManager; ++import android.bluetooth.BluetoothProfile; + import android.content.BroadcastReceiver; + import android.content.Context; + import android.content.Intent; +@@ -12,12 +13,14 @@ import android.provider.Settings; + import android.util.Slog; + + class BluetoothAutoOff extends DelayedConditionalAction { ++ private final BluetoothManager manager; + @Nullable + private final BluetoothAdapter adapter; + + BluetoothAutoOff(SystemServerExt sse) { + super(sse, sse.bgHandler); +- adapter = sse.context.getSystemService(BluetoothManager.class).getAdapter(); ++ manager = sse.context.getSystemService(BluetoothManager.class); ++ adapter = manager.getAdapter(); + } + + @Override +@@ -51,11 +54,18 @@ class BluetoothAutoOff extends DelayedConditionalAction { + + private boolean isAdapterOnAndDisconnected() { + if (adapter != null) { +- int state = adapter.getLeStateSysApi(); // getState() converts BLE states into STATE_OFF ++ if (adapter.isLeEnabled()) { ++ if (adapter.getConnectionState() == BluetoothAdapter.STATE_DISCONNECTED) { ++ // Bluetooth GATT Profile (Bluetooth LE) connection state is ignored ++ // by getConnectionState() ++ return manager.getConnectedDevices(BluetoothProfile.GATT).size() == 0; ++ } ++ } + +- if (state == BluetoothAdapter.STATE_ON || state == BluetoothAdapter.STATE_BLE_ON) { +- // getConnectionState() converts BLE states into STATE_DISCONNECTED +- return adapter.getConnectionStateLeAware() == BluetoothAdapter.STATE_DISCONNECTED; ++ // isLeEnabled() currently implies isEnabled(), but check again anyway in case ++ // this changes in the future ++ if (adapter.isEnabled()) { ++ return adapter.getConnectionState() == BluetoothAdapter.STATE_DISCONNECTED; + } + } + diff --git a/Scripts/Common/Functions.sh b/Scripts/Common/Functions.sh index e3f031b6..6cc20d23 100644 --- a/Scripts/Common/Functions.sh +++ b/Scripts/Common/Functions.sh @@ -201,7 +201,7 @@ processRelease() { local OUT_DIR="$DOS_BUILD_BASE/out/target/product/$DEVICE/"; local RELEASETOOLS_PREFIX="build/tools/releasetools/"; - if [[ "$DOS_VERSION" == "LineageOS-18.1" ]] || [[ "$DOS_VERSION" == "LineageOS-19.1" ]]; then + if [[ "$DOS_VERSION" == "LineageOS-18.1" ]] || [[ "$DOS_VERSION" == "LineageOS-19.1" ]] || [[ "$DOS_VERSION" == "LineageOS-20.0" ]]; then local RELEASETOOLS_PREFIX=""; fi; @@ -223,17 +223,20 @@ processRelease() { local VERITY_SWITCHES=(--avb_vbmeta_key "$KEY_DIR/avb.pem" --avb_vbmeta_algorithm SHA256_RSA4096); echo -e "\e[0;32m\t+ Verified Boot 2.0 with VBMETA and NOCHAIN\e[0m"; fi; - if [[ "$DOS_VERSION" == "LineageOS-17.1" ]] || [[ "$DOS_VERSION" == "LineageOS-18.1" ]] || [[ "$DOS_VERSION" == "LineageOS-19.1" ]]; then - local APEX_SWITCHES=(--extra_apks AdServicesApk.apk="$KEY_DIR/releasekey" \ - --extra_apks Bluetooth.apk="$KEY_DIR/bluetooth" \ - --extra_apks HalfSheetUX.apk="$KEY_DIR/releasekey" \ - --extra_apks OsuLogin.apk="$KEY_DIR/releasekey" \ - --extra_apks SafetyCenterResources.apk="$KEY_DIR/releasekey" \ - --extra_apks ServiceConnectivityResources.apk="$KEY_DIR/releasekey" \ - --extra_apks ServiceUwbResources.apk="$KEY_DIR/releasekey" \ - --extra_apks ServiceWifiResources.apk="$KEY_DIR/releasekey" \ - --extra_apks WifiDialog.apk="$KEY_DIR/releasekey" \ - --extra_apks com.android.adbd.apex="$KEY_DIR/releasekey" \ + + local APK_SWITCHES=(--extra_apks AdServicesApk.apk="$KEY_DIR/releasekey" \ + --extra_apks HalfSheetUX.apk="$KEY_DIR/releasekey" \ + --extra_apks OsuLogin.apk="$KEY_DIR/releasekey" \ + --extra_apks SafetyCenterResources.apk="$KEY_DIR/releasekey" \ + --extra_apks ServiceConnectivityResources.apk="$KEY_DIR/releasekey" \ + --extra_apks ServiceUwbResources.apk="$KEY_DIR/releasekey" \ + --extra_apks ServiceWifiResources.apk="$KEY_DIR/releasekey" \ + --extra_apks WifiDialog.apk="$KEY_DIR/releasekey"); + if [[ "$DOS_VERSION" == "LineageOS-20.0" ]]; then + local APK_SWITCHES_EXTRA=(--extra_apks Bluetooth.apk="$KEY_DIR/bluetooth"); + fi; + if [[ "$DOS_VERSION" == "LineageOS-17.1" ]] || [[ "$DOS_VERSION" == "LineageOS-18.1" ]] || [[ "$DOS_VERSION" == "LineageOS-19.1" ]] || [[ "$DOS_VERSION" == "LineageOS-20.0" ]]; then + local APEX_SWITCHES=(--extra_apks com.android.adbd.apex="$KEY_DIR/releasekey" \ --extra_apex_payload_key com.android.adbd.apex="$KEY_DIR/avb.pem" \ --extra_apks com.android.adservices.apex="$KEY_DIR/releasekey" \ --extra_apex_payload_key com.android.adservices.apex="$KEY_DIR/avb.pem" \ @@ -310,7 +313,8 @@ processRelease() { #Target Files echo -e "\e[0;32mSigning target files\e[0m"; "$RELEASETOOLS_PREFIX"sign_target_files_apks -o -d "$KEY_DIR" \ - --extra_apks OsuLogin.apk,ServiceConnectivityResources.apk,ServiceWifiResources.apk="$KEY_DIR/releasekey" \ + "${APK_SWITCHES[@]}" \ + "${APK_SWITCHES_EXTRA[@]}" \ "${APEX_SWITCHES[@]}" \ "${VERITY_SWITCHES[@]}" \ $OUT_DIR/obj/PACKAGING/target_files_intermediates/*$DEVICE-target_files-*.zip \ diff --git a/Scripts/Generate_Signing_Keys.sh b/Scripts/Generate_Signing_Keys.sh index 1159a6d8..522d5ad7 100644 --- a/Scripts/Generate_Signing_Keys.sh +++ b/Scripts/Generate_Signing_Keys.sh @@ -36,6 +36,8 @@ sed -i 's/4096/2048/' "$DOS_BUILD_BASE"/development/tools/make_key; "$DOS_BUILD_BASE"/development/tools/make_key releasekey "$desc" "$type"; sed -i 's/2048/4096/' "$DOS_BUILD_BASE"/development/tools/make_key; "$DOS_BUILD_BASE"/development/tools/make_key extra "$desc" "$type"; +"$DOS_BUILD_BASE"/development/tools/make_key bluetooth "$desc" "$type"; +"$DOS_BUILD_BASE"/development/tools/make_key sdk_sandbox "$desc" "$type"; "$DOS_BUILD_BASE"/development/tools/make_key future-1 "$desc" "$type"; "$DOS_BUILD_BASE"/development/tools/make_key future-2 "$desc" "$type"; "$DOS_BUILD_BASE"/development/tools/make_key media "$desc" "$type"; diff --git a/Scripts/LineageOS-20.0/Patch.sh b/Scripts/LineageOS-20.0/Patch.sh index f7e59c9d..0c54f000 100644 --- a/Scripts/LineageOS-20.0/Patch.sh +++ b/Scripts/LineageOS-20.0/Patch.sh @@ -93,6 +93,7 @@ git revert --no-edit 9b41333a849d14683f9c4ac30fcfd48a27945018; #Re-enable the do applyPatch "$DOS_PATCHES/android_build/0001-Enable_fwrapv.patch"; #Use -fwrapv at a minimum (GrapheneOS) applyPatch "$DOS_PATCHES/android_build/0002-OTA_Keys.patch"; #Add correct keys to recovery for OTA verification (DivestOS) if [ "$DOS_GRAPHENE_EXEC" = true ]; then applyPatch "$DOS_PATCHES/android_build/0003-Exec_Based_Spawning.patch"; fi; #Add exec-based spawning support (GrapheneOS) #XXX: most devices override this +applyPatch "$DOS_PATCHES/android_build/0004-keymaps.patch"; #Add bluetooth/sdk_sandbox to standard key mapping (GrapheneOS) sed -i '75i$(my_res_package): PRIVATE_AAPT_FLAGS += --auto-add-overlay' core/aapt2.mk; #Enable auto-add-overlay for packages, this allows the vendor overlay to easily work across all branches. awk -i inplace '!/updatable_apex.mk/' target/product/generic_system.mk; #Disable APEX sed -i 's/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 23/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 28/' core/version_util.mk; #Set the minimum supported target SDK to Pie (GrapheneOS) @@ -137,6 +138,7 @@ applyPatch "$DOS_PATCHES/android_frameworks_base/0014-Automatic_Reboot.patch"; # applyPatch "$DOS_PATCHES/android_frameworks_base/0015-System_Server_Extensions.patch"; #Timeout for Bluetooth (GrapheneOS) applyPatch "$DOS_PATCHES/android_frameworks_base/0015-WiFi_Timeout.patch"; #Timeout for Wi-Fi (GrapheneOS) applyPatch "$DOS_PATCHES/android_frameworks_base/0015-Bluetooth_Timeout.patch"; #Timeout for Bluetooth (GrapheneOS) +applyPatch "$DOS_PATCHES/android_frameworks_base/0015-Bluetooth_Timeout-Fix.patch"; #bugfix: Bluetooth auto turn off ignored connected BLE devices (GrapheneOS) if [ "$DOS_GRAPHENE_CONSTIFY" = true ]; then applyPatch "$DOS_PATCHES/android_frameworks_base/0017-constify_JNINativeMethod.patch"; fi; #Constify JNINativeMethod tables (GrapheneOS) if [ "$DOS_GRAPHENE_EXEC" = true ]; then applyPatch "$DOS_PATCHES/android_frameworks_base/0018-Exec_Based_Spawning-1.patch"; #Add exec-based spawning support (GrapheneOS)