february
parent
6645e3fc31
commit
c754105c58
|
@ -0,0 +1,26 @@
|
||||||
|
From 0dae4aea85adf5af6c2fc34d0fa933eafbac0d60 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sat, 10 Feb 2024 16:25:53 +0100
|
||||||
|
Subject: [PATCH] cts_captiveportal
|
||||||
|
|
||||||
|
Change-Id: I8a2e47b175087ed27917978e2fd7bf22cd11a194
|
||||||
|
---
|
||||||
|
.../com/android/cts/deviceandprofileowner/AlwaysOnVpnTest.java | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/AlwaysOnVpnTest.java b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/AlwaysOnVpnTest.java
|
||||||
|
index a764358194d..c42c22c06be 100644
|
||||||
|
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/AlwaysOnVpnTest.java
|
||||||
|
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/AlwaysOnVpnTest.java
|
||||||
|
@@ -46,7 +46,7 @@ public class AlwaysOnVpnTest extends BaseDeviceAdminTest {
|
||||||
|
private static final String RESTRICTION_ALLOWED = "vpn.allowed";
|
||||||
|
private static final String RESTRICTION_DISALLOWED = "vpn.disallowed";
|
||||||
|
private static final String RESTRICTION_DONT_ESTABLISH = "vpn.dont_establish";
|
||||||
|
- private static final String CONNECTIVITY_CHECK_HOST = "connectivitycheck.gstatic.com";
|
||||||
|
+ private static final String CONNECTIVITY_CHECK_HOST = "captiveportal.kuketz.de";
|
||||||
|
private static final int VPN_ON_START_TIMEOUT_MS = 5_000;
|
||||||
|
private static final long CONNECTIVITY_WAIT_TIME_NS = 30_000_000_000L;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
From d4cc93290c5fb257a2530b0f5665f0ef44761a99 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sun, 11 Feb 2024 13:06:22 +0100
|
||||||
|
Subject: [PATCH] device_lineage_Sepolicy
|
||||||
|
|
||||||
|
Change-Id: I207bc96ee4db91a165dad4f0d366379523c5a35b
|
||||||
|
---
|
||||||
|
.gitlab-ci.yml | 7 +++++++
|
||||||
|
common/private/netd.te | 1 +
|
||||||
|
common/private/platform_app.te | 11 +++++++++++
|
||||||
|
common/private/service.te | 1 +
|
||||||
|
common/private/service_contexts | 1 +
|
||||||
|
common/private/untrusted_app.te | 1 +
|
||||||
|
common/private/updater_app.te | 1 +
|
||||||
|
7 files changed, 23 insertions(+)
|
||||||
|
create mode 100644 .gitlab-ci.yml
|
||||||
|
create mode 100644 common/private/netd.te
|
||||||
|
|
||||||
|
diff --git a/common/private/netd.te b/common/private/netd.te
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..bc71718
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/common/private/netd.te
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+allow netd platform_app:unix_stream_socket connectto;
|
||||||
|
diff --git a/common/private/platform_app.te b/common/private/platform_app.te
|
||||||
|
index 07183e7..acbc623 100644
|
||||||
|
--- a/common/private/platform_app.te
|
||||||
|
+++ b/common/private/platform_app.te
|
||||||
|
@@ -9,3 +9,14 @@ hal_client_domain(platform_app, hal_lineage_livedisplay)
|
||||||
|
|
||||||
|
# Allow PowerShare HAL service to be found
|
||||||
|
hal_client_domain(platform_app, hal_lineage_powershare)
|
||||||
|
+
|
||||||
|
+# allow platform_app to create named pipes (used for realm support)
|
||||||
|
+allow platform_app fuse:fifo_file create;
|
||||||
|
+allow platform_app app_data_file:fifo_file create_file_perms;
|
||||||
|
+allow platform_app app_data_file:fifo_file open;
|
||||||
|
+allow platform_app rs_exec:file rx_file_perms;
|
||||||
|
+
|
||||||
|
+# Allow platform apps to execute files in /data
|
||||||
|
+allow platform_app app_data_file:file execute;
|
||||||
|
+
|
||||||
|
+allow platform_app app_data_file:{ lnk_file sock_file fifo_file } create_file_perms;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
From 6443b911354cf60c0c3f099a879f1616a638187a Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sat, 1 Jul 2023 08:58:28 +0200
|
||||||
|
Subject: [PATCH] eOS1
|
||||||
|
|
||||||
|
---
|
||||||
|
common/private/netd.te | 1 +
|
||||||
|
common/private/platform_app.te | 11 ++++++
|
||||||
|
common/private/service.te | 1 +
|
||||||
|
common/private/service_contexts | 1 +
|
||||||
|
common/private/untrusted_app.te | 1 +
|
||||||
|
common/private/updater_app.te | 1 +
|
||||||
|
sepolicy-patch | 59 +++++++++++++++++++++++++++++++++
|
||||||
|
7 files changed, 75 insertions(+)
|
||||||
|
create mode 100644 common/private/netd.te
|
||||||
|
|
||||||
|
diff --git a/common/private/netd.te b/common/private/netd.te
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..bc71718
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/common/private/netd.te
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+allow netd platform_app:unix_stream_socket connectto;
|
||||||
|
diff --git a/common/private/platform_app.te b/common/private/platform_app.te
|
||||||
|
index 07183e7..acbc623 100644
|
||||||
|
--- a/common/private/platform_app.te
|
||||||
|
+++ b/common/private/platform_app.te
|
||||||
|
@@ -9,3 +9,14 @@ hal_client_domain(platform_app, hal_lineage_livedisplay)
|
||||||
|
|
||||||
|
# Allow PowerShare HAL service to be found
|
||||||
|
hal_client_domain(platform_app, hal_lineage_powershare)
|
||||||
|
+
|
||||||
|
+# allow platform_app to create named pipes (used for realm support)
|
||||||
|
+allow platform_app fuse:fifo_file create;
|
||||||
|
+allow platform_app app_data_file:fifo_file create_file_perms;
|
||||||
|
+allow platform_app app_data_file:fifo_file open;
|
||||||
|
+allow platform_app rs_exec:file rx_file_perms;
|
||||||
|
+
|
||||||
|
+# Allow platform apps to execute files in /data
|
||||||
|
+allow platform_app app_data_file:file execute;
|
||||||
|
+
|
||||||
|
+allow platform_app app_data_file:{ lnk_file sock_file fifo_file } create_file_perms;
|
||||||
|
diff --git a/common/private/service.te b/common/private/service.te
|
||||||
|
index 86f6e4c..8f0e1e0 100644
|
||||||
|
--- a/common/private/service.te
|
||||||
|
+++ b/common/private/service.te
|
||||||
|
@@ -5,3 +5,4 @@ type lineage_globalactions_service, system_api_service, system_server_service, s
|
||||||
|
type lineage_livedisplay_service, system_api_service, system_server_service, service_manager_type;
|
||||||
|
type lineage_profile_service, system_api_service, system_server_service, service_manager_type;
|
||||||
|
type lineage_trust_service, system_api_service, system_server_service, service_manager_type;
|
||||||
|
+type lineage_weather_service, system_api_service, system_server_service, service_manager_type;
|
||||||
|
diff --git a/common/private/service_contexts b/common/private/service_contexts
|
||||||
|
index cd984cb..a93527d 100644
|
||||||
|
--- a/common/private/service_contexts
|
||||||
|
+++ b/common/private/service_contexts
|
||||||
|
@@ -3,6 +3,7 @@ lineagehardware u:object_r:lineage_hardware_service:s0
|
||||||
|
lineagehealth u:object_r:lineage_health_interface_service:s0
|
||||||
|
lineagelivedisplay u:object_r:lineage_livedisplay_service:s0
|
||||||
|
lineagetrust u:object_r:lineage_trust_service:s0
|
||||||
|
+lineageweather u:object_r:lineage_weather_service:s0
|
||||||
|
profile u:object_r:lineage_profile_service:s0
|
||||||
|
|
||||||
|
adbroot_service u:object_r:adbroot_service:s0
|
||||||
|
diff --git a/common/private/untrusted_app.te b/common/private/untrusted_app.te
|
||||||
|
index 77959f6..39d2b4b 100644
|
||||||
|
--- a/common/private/untrusted_app.te
|
||||||
|
+++ b/common/private/untrusted_app.te
|
||||||
|
@@ -1 +1,2 @@
|
||||||
|
allow untrusted_app_all lineage_profile_service:service_manager find;
|
||||||
|
+allow untrusted_app_all lineage_weather_service:service_manager find;
|
||||||
|
diff --git a/common/private/updater_app.te b/common/private/updater_app.te
|
||||||
|
index 91b63a0..373c97a 100644
|
||||||
|
--- a/common/private/updater_app.te
|
||||||
|
+++ b/common/private/updater_app.te
|
||||||
|
@@ -9,6 +9,7 @@ binder_call(updater_app, update_engine)
|
||||||
|
allow updater_app app_api_service:service_manager find;
|
||||||
|
allow updater_app recovery_service:service_manager find;
|
||||||
|
allow updater_app system_api_service:service_manager find;
|
||||||
|
+allow updater_app system_update_service:service_manager find;
|
||||||
|
allow updater_app update_engine_service:service_manager find;
|
||||||
|
|
||||||
|
allow updater_app app_data_file:dir create_dir_perms;
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
From eda5a305da60f3e10b1d9173d5812738a72ecb07 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Wed, 10 Jan 2024 12:08:02 +0100
|
||||||
|
Subject: [PATCH] generate_sh
|
||||||
|
|
||||||
|
---
|
||||||
|
generate.sh | 30 ++++++------------------------
|
||||||
|
1 file changed, 6 insertions(+), 24 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/generate.sh b/generate.sh
|
||||||
|
index 461eff1..b3d80c4 100644
|
||||||
|
--- a/generate.sh
|
||||||
|
+++ b/generate.sh
|
||||||
|
@@ -15,8 +15,8 @@ fi
|
||||||
|
echo 'PRODUCT_MAKEFILES := \' > AndroidProducts.mk
|
||||||
|
|
||||||
|
for part in a ab;do
|
||||||
|
- for apps in vanilla gapps foss gapps-go;do
|
||||||
|
- for arch in arm64 arm a64;do
|
||||||
|
+ for apps in vanilla;do
|
||||||
|
+ for arch in arm64 a64;do
|
||||||
|
for su in yes no;do
|
||||||
|
apps_suffix=""
|
||||||
|
apps_script=""
|
||||||
|
@@ -24,29 +24,11 @@ for part in a ab;do
|
||||||
|
extra_packages=""
|
||||||
|
vndk="vndk.mk"
|
||||||
|
optional_base=""
|
||||||
|
- if [ "$apps" == "gapps" ];then
|
||||||
|
- apps_suffix="g"
|
||||||
|
- apps_script='$(call inherit-product, device/phh/treble/gapps.mk)'
|
||||||
|
- apps_name="with GApps"
|
||||||
|
- fi
|
||||||
|
- if [ "$apps" == "gapps-go" ];then
|
||||||
|
- apps_suffix="o"
|
||||||
|
- apps_script='$(call inherit-product, device/phh/treble/gapps-go.mk)'
|
||||||
|
- apps_name="Go"
|
||||||
|
- fi
|
||||||
|
- if [ "$apps" == "foss" ];then
|
||||||
|
- apps_suffix="f"
|
||||||
|
- apps_script='$(call inherit-product, vendor/foss/foss.mk)'
|
||||||
|
- apps_name="with FOSS apps"
|
||||||
|
- fi
|
||||||
|
if [ "$apps" == "vanilla" ];then
|
||||||
|
apps_suffix="v"
|
||||||
|
apps_script=''
|
||||||
|
apps_name="vanilla"
|
||||||
|
fi
|
||||||
|
- if [ "$arch" == "arm" ];then
|
||||||
|
- vndk="vndk-binder32.mk"
|
||||||
|
- fi
|
||||||
|
if [ "$arch" == "a64" ];then
|
||||||
|
vndk="vndk32.mk"
|
||||||
|
fi
|
||||||
|
@@ -64,7 +46,7 @@ for part in a ab;do
|
||||||
|
optional_base='$(call inherit-product, device/phh/treble/base-sas.mk)'
|
||||||
|
fi
|
||||||
|
|
||||||
|
- target="treble_${arch}_${part_suffix}${apps_suffix}${su_suffix}"
|
||||||
|
+ target="leos_${arch}_${part_suffix}${apps_suffix}${su_suffix}"
|
||||||
|
|
||||||
|
baseArch="$arch"
|
||||||
|
if [ "$arch" = "a64" ];then
|
||||||
|
@@ -77,18 +59,18 @@ for part in a ab;do
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat > ${target}.mk << EOF
|
||||||
|
-TARGET_GAPPS_ARCH := ${baseArch}
|
||||||
|
include build/make/target/product/aosp_${baseArch}.mk
|
||||||
|
\$(call inherit-product, device/phh/treble/base.mk)
|
||||||
|
+\$(call inherit-product, vendor/LeOS/leos.mk)
|
||||||
|
$optional_base
|
||||||
|
$apps_script
|
||||||
|
$rom_script
|
||||||
|
|
||||||
|
PRODUCT_NAME := $target
|
||||||
|
-PRODUCT_DEVICE := tdgsi_${arch}_$part
|
||||||
|
+PRODUCT_DEVICE := leos_${arch}_$part
|
||||||
|
PRODUCT_BRAND := google
|
||||||
|
PRODUCT_SYSTEM_BRAND := google
|
||||||
|
-PRODUCT_MODEL := TrebleDroid $apps_name
|
||||||
|
+PRODUCT_MODEL := LeOS-A14
|
||||||
|
|
||||||
|
# Overwrite the inherited "emulator" characteristics
|
||||||
|
PRODUCT_CHARACTERISTICS := device
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
From d5f70e02277ae0389693651b7d62ac5dcb1ea9d6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Mon, 11 Dec 2023 17:20:55 +0100
|
||||||
|
Subject: [PATCH] LeOS-Stuff
|
||||||
|
|
||||||
|
---
|
||||||
|
generate.sh | 31 +++++--------------
|
||||||
|
{tdgsi_a64_ab => leos_a64_ab}/BoardConfig.mk | 0
|
||||||
|
.../BoardConfig.mk | 0
|
||||||
|
tdgsi_a64_a/BoardConfig.mk | 8 -----
|
||||||
|
tdgsi_arm64_a/BoardConfig.mk | 7 -----
|
||||||
|
tdgsi_arm_a/BoardConfig.mk | 11 -------
|
||||||
|
tdgsi_arm_ab/BoardConfig.mk | 7 -----
|
||||||
|
7 files changed, 8 insertions(+), 56 deletions(-)
|
||||||
|
rename {tdgsi_a64_ab => leos_a64_ab}/BoardConfig.mk (100%)
|
||||||
|
rename {tdgsi_arm64_ab => leos_arm64_ab}/BoardConfig.mk (100%)
|
||||||
|
delete mode 100644 tdgsi_a64_a/BoardConfig.mk
|
||||||
|
delete mode 100644 tdgsi_arm64_a/BoardConfig.mk
|
||||||
|
delete mode 100644 tdgsi_arm_a/BoardConfig.mk
|
||||||
|
delete mode 100644 tdgsi_arm_ab/BoardConfig.mk
|
||||||
|
|
||||||
|
diff --git a/tdgsi_a64_ab/BoardConfig.mk b/leos_a64_ab/BoardConfig.mk
|
||||||
|
similarity index 100%
|
||||||
|
rename from tdgsi_a64_ab/BoardConfig.mk
|
||||||
|
rename to leos_a64_ab/BoardConfig.mk
|
||||||
|
diff --git a/tdgsi_arm64_ab/BoardConfig.mk b/leos_arm64_ab/BoardConfig.mk
|
||||||
|
similarity index 100%
|
||||||
|
rename from tdgsi_arm64_ab/BoardConfig.mk
|
||||||
|
rename to leos_arm64_ab/BoardConfig.mk
|
||||||
|
diff --git a/tdgsi_a64_a/BoardConfig.mk b/tdgsi_a64_a/BoardConfig.mk
|
||||||
|
deleted file mode 100644
|
||||||
|
index d430bf8..0000000
|
||||||
|
--- a/tdgsi_a64_a/BoardConfig.mk
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,8 +0,0 @@
|
||||||
|
-include build/make/target/board/generic_arm_ab/BoardConfig.mk
|
||||||
|
-include device/phh/treble/board-base.mk
|
||||||
|
-
|
||||||
|
-ifeq ($(BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE),)
|
||||||
|
-BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1572864000
|
||||||
|
-endif
|
||||||
|
-TARGET_USES_64_BIT_BINDER := true
|
||||||
|
-BOARD_SYSTEMIMAGE_AS_SYSTEM := true
|
||||||
|
diff --git a/tdgsi_arm64_a/BoardConfig.mk b/tdgsi_arm64_a/BoardConfig.mk
|
||||||
|
deleted file mode 100644
|
||||||
|
index c9bc831..0000000
|
||||||
|
--- a/tdgsi_arm64_a/BoardConfig.mk
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,7 +0,0 @@
|
||||||
|
-include build/make/target/board/generic_arm64_ab/BoardConfig.mk
|
||||||
|
-include device/phh/treble/board-base.mk
|
||||||
|
-
|
||||||
|
-ifeq ($(BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE),)
|
||||||
|
-BOARD_SYSTEMIMAGE_PARTITION_SIZE := 2080374784
|
||||||
|
-endif
|
||||||
|
-BOARD_SYSTEMIMAGE_AS_SYSTEM := true
|
||||||
|
diff --git a/tdgsi_arm_a/BoardConfig.mk b/tdgsi_arm_a/BoardConfig.mk
|
||||||
|
deleted file mode 100644
|
||||||
|
index 7340fc4..0000000
|
||||||
|
--- a/tdgsi_arm_a/BoardConfig.mk
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,11 +0,0 @@
|
||||||
|
-include build/make/target/board/generic_arm_ab/BoardConfig.mk
|
||||||
|
-include device/phh/treble/board-base.mk
|
||||||
|
-
|
||||||
|
-ifeq ($(BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE),)
|
||||||
|
-BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1313583104
|
||||||
|
-else
|
||||||
|
-BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE := 25165824
|
||||||
|
-endif
|
||||||
|
-
|
||||||
|
-TARGET_USES_64_BIT_BINDER := false
|
||||||
|
-BOARD_SYSTEMIMAGE_AS_SYSTEM := true
|
||||||
|
diff --git a/tdgsi_arm_ab/BoardConfig.mk b/tdgsi_arm_ab/BoardConfig.mk
|
||||||
|
deleted file mode 100644
|
||||||
|
index a9a4fe3..0000000
|
||||||
|
--- a/tdgsi_arm_ab/BoardConfig.mk
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,7 +0,0 @@
|
||||||
|
-include build/make/target/board/generic_arm_ab/BoardConfig.mk
|
||||||
|
-include device/phh/treble/board-base.mk
|
||||||
|
-
|
||||||
|
-ifeq ($(BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE),)
|
||||||
|
-BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1073741824
|
||||||
|
-endif
|
||||||
|
-TARGET_USES_64_BIT_BINDER := false
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
From 1082d6863ee84feb2f1f6bee871b9f8ad069559e Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Fri, 15 Dec 2023 18:04:59 +0100
|
||||||
|
Subject: [PATCH] AdvancedPrivacy
|
||||||
|
|
||||||
|
---
|
||||||
|
sepolicy/netd.te | 1 +
|
||||||
|
sepolicy/platform_app.te | 11 +++++++++++
|
||||||
|
sepolicy/service.te | 8 ++++++++
|
||||||
|
sepolicy/updater_app.te | 22 ++++++++++++++++++++++
|
||||||
|
4 files changed, 207 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
create mode 100644 sepolicy/netd.te
|
||||||
|
create mode 100644 sepolicy/platform_app.te
|
||||||
|
create mode 100644 sepolicy/updater_app.te
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/sepolicy/netd.te b/sepolicy/netd.te
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..bc71718
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/sepolicy/netd.te
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+allow netd platform_app:unix_stream_socket connectto;
|
||||||
|
diff --git a/sepolicy/platform_app.te b/sepolicy/platform_app.te
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..35445a4
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/sepolicy/platform_app.te
|
||||||
|
@@ -0,0 +1,11 @@
|
||||||
|
+
|
||||||
|
+# allow platform_app to create named pipes (used for realm support)
|
||||||
|
+allow platform_app fuse:fifo_file create;
|
||||||
|
+allow platform_app app_data_file:fifo_file create_file_perms;
|
||||||
|
+allow platform_app app_data_file:fifo_file open;
|
||||||
|
+allow platform_app rs_exec:file rx_file_perms;
|
||||||
|
+
|
||||||
|
+# Allow platform apps to execute files in /data
|
||||||
|
+allow platform_app app_data_file:file execute;
|
||||||
|
+
|
||||||
|
+allow platform_app app_data_file:{ lnk_file sock_file fifo_file } create_file_perms;
|
||||||
|
diff --git a/sepolicy/updater_app.te b/sepolicy/updater_app.te
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..ff82e4e
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/sepolicy/updater_app.te
|
||||||
|
@@ -0,0 +1,22 @@
|
||||||
|
+type updater_app, domain, coredomain;
|
||||||
|
+
|
||||||
|
+app_domain(updater_app)
|
||||||
|
+net_domain(updater_app)
|
||||||
|
+
|
||||||
|
+binder_call(updater_app, gpuservice)
|
||||||
|
+binder_call(updater_app, update_engine)
|
||||||
|
+
|
||||||
|
+allow updater_app app_api_service:service_manager find;
|
||||||
|
+allow updater_app recovery_service:service_manager find;
|
||||||
|
+allow updater_app system_api_service:service_manager find;
|
||||||
|
+allow updater_app system_update_service:service_manager find;
|
||||||
|
+allow updater_app update_engine_service:service_manager find;
|
||||||
|
+
|
||||||
|
+allow updater_app app_data_file:dir create_dir_perms;
|
||||||
|
+allow updater_app app_data_file:{ file lnk_file } create_file_perms;
|
||||||
|
+
|
||||||
|
+allow updater_app cache_file:dir r_dir_perms;
|
||||||
|
+
|
||||||
|
+get_prop(updater_app, default_prop)
|
||||||
|
+get_prop(updater_app, build_prop)
|
||||||
|
+
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
From 7972b63ff33a44636cacd55b685f76ddd2686ceb Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Fri, 9 Feb 2024 17:33:58 +0100
|
||||||
|
Subject: [PATCH] selinux
|
||||||
|
|
||||||
|
---
|
||||||
|
sepolicy/updater_app.te | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/sepolicy/updater_app.te b/sepolicy/updater_app.te
|
||||||
|
index ff82e4e..2ed20b9 100644
|
||||||
|
--- a/sepolicy/updater_app.te
|
||||||
|
+++ b/sepolicy/updater_app.te
|
||||||
|
@@ -1,6 +1,5 @@
|
||||||
|
-type updater_app, domain, coredomain;
|
||||||
|
|
||||||
|
-app_domain(updater_app)
|
||||||
|
+
|
||||||
|
net_domain(updater_app)
|
||||||
|
|
||||||
|
binder_call(updater_app, gpuservice)
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
From 9ed7782af7328bb3aa6293d399751df6d15422b7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Fri, 9 Feb 2024 16:00:15 +0100
|
||||||
|
Subject: [PATCH] 0020-adb_and_debugable
|
||||||
|
|
||||||
|
---
|
||||||
|
rw-system.sh | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/rw-system.sh b/rw-system.sh
|
||||||
|
index ce51459..081fb23 100644
|
||||||
|
--- a/rw-system.sh
|
||||||
|
+++ b/rw-system.sh
|
||||||
|
@@ -831,8 +831,8 @@ copyprop() {
|
||||||
|
resetprop_phh ro.boot.veritymode enforcing
|
||||||
|
resetprop_phh ro.boot.warranty_bit 0
|
||||||
|
resetprop_phh ro.warranty_bit 0
|
||||||
|
- resetprop_phh ro.debuggable 0
|
||||||
|
- resetprop_phh ro.secure 1
|
||||||
|
+ resetprop_phh ro.debuggable 1
|
||||||
|
+ resetprop_phh ro.secure 0
|
||||||
|
resetprop_phh ro.build.type user
|
||||||
|
resetprop_phh ro.build.selinux 0
|
||||||
|
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
From 34b75665a46a07799b954f9302b58abadcffc257 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Fri, 9 Feb 2024 16:26:42 +0100
|
||||||
|
Subject: [PATCH] firebase
|
||||||
|
|
||||||
|
Change-Id: I534a93be9d5dce338368881dd873d2ea144661b9
|
||||||
|
---
|
||||||
|
Android.bp | 16 ----------------
|
||||||
|
1 file changed, 16 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Android.bp b/Android.bp
|
||||||
|
index 930124f..10c7b02 100644
|
||||||
|
--- a/Android.bp
|
||||||
|
+++ b/Android.bp
|
||||||
|
@@ -77,14 +77,6 @@ android_library_import {
|
||||||
|
apex_available: ["//apex_available:platform", "com.android.devicelock"],
|
||||||
|
}
|
||||||
|
|
||||||
|
-android_library_import {
|
||||||
|
- name: "firebase-messaging-aar",
|
||||||
|
- aars: ["libs/firebase-messaging-21.0.1.aar"],
|
||||||
|
- sdk_version: "system_current",
|
||||||
|
- min_sdk_version: "14",
|
||||||
|
- apex_available: ["//apex_available:platform", "com.android.devicelock"],
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
android_library_import {
|
||||||
|
name: "play-services-basement-aar",
|
||||||
|
aars: ["libs/play-services-basement-17.0.0.aar"],
|
||||||
|
@@ -93,14 +85,6 @@ android_library_import {
|
||||||
|
apex_available: ["//apex_available:platform", "com.android.devicelock"],
|
||||||
|
}
|
||||||
|
|
||||||
|
-android_library_import {
|
||||||
|
- name: "play-services-cloud-messaging-aar",
|
||||||
|
- aars: ["libs/play-services-cloud-messaging-16.0.0.aar"],
|
||||||
|
- sdk_version: "system_current",
|
||||||
|
- min_sdk_version: "14",
|
||||||
|
- apex_available: ["//apex_available:platform", "com.android.devicelock"],
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
android_library_import {
|
||||||
|
name: "play-services-tasks-aar",
|
||||||
|
aars: ["libs/play-services-tasks-17.0.0.aar"],
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,50 @@
|
||||||
|
From 5d9827041b4014c5abfd64ae72688cadf8a9ab19 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Fri, 20 Oct 2023 18:38:03 +0200
|
||||||
|
Subject: [PATCH] 0001-frameworks_base_easternEgg
|
||||||
|
|
||||||
|
Change-Id: I043be2e11ff2c28150235ee5005c754b45a574f9
|
||||||
|
---
|
||||||
|
tests/BinaryTransparencyHostTest/Android.bp | 29 ---------------------
|
||||||
|
1 file changed, 29 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tests/BinaryTransparencyHostTest/Android.bp b/tests/BinaryTransparencyHostTest/Android.bp
|
||||||
|
index dc6bdff6716c..39162fa5d6e6 100644
|
||||||
|
--- a/tests/BinaryTransparencyHostTest/Android.bp
|
||||||
|
+++ b/tests/BinaryTransparencyHostTest/Android.bp
|
||||||
|
@@ -12,32 +12,3 @@
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
-package {
|
||||||
|
- // See: http://go/android-license-faq
|
||||||
|
- // A large-scale-change added 'default_applicable_licenses' to import
|
||||||
|
- // all of the 'license_kinds' from "frameworks_base_license"
|
||||||
|
- // to get the below license kinds:
|
||||||
|
- // SPDX-license-identifier-Apache-2.0
|
||||||
|
- default_applicable_licenses: ["frameworks_base_license"],
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-java_test_host {
|
||||||
|
- name: "BinaryTransparencyHostTest",
|
||||||
|
- srcs: ["src/**/*.java"],
|
||||||
|
- libs: [
|
||||||
|
- "tradefed",
|
||||||
|
- "compatibility-tradefed",
|
||||||
|
- "compatibility-host-util",
|
||||||
|
- ],
|
||||||
|
- static_libs: [
|
||||||
|
- "truth-prebuilt",
|
||||||
|
- ],
|
||||||
|
- data: [
|
||||||
|
- ":BinaryTransparencyTestApp",
|
||||||
|
- ":EasterEgg",
|
||||||
|
- ":com.android.apex.cts.shim.v2_rebootless_prebuilt",
|
||||||
|
- ],
|
||||||
|
- test_suites: [
|
||||||
|
- "general-tests",
|
||||||
|
- ],
|
||||||
|
-}
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
From ad67a394937b41629a899cbdb43d4c48c1f62af9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sun, 10 Dec 2023 08:59:44 +0100
|
||||||
|
Subject: [PATCH] window manager
|
||||||
|
|
||||||
|
Change-Id: I7fd30851be01418a9eb87395a014882fbd0a0fef
|
||||||
|
---
|
||||||
|
diff --git a/libs/WindowManager/Shell/tests/unittest/Android.bp b/libs/WindowManager/Shell/tests/unittest/Android.bp
|
||||||
|
index c2f184a03380..5935d9d38432 100644
|
||||||
|
--- a/libs/WindowManager/Shell/tests/unittest/Android.bp
|
||||||
|
+++ b/libs/WindowManager/Shell/tests/unittest/Android.bp
|
||||||
|
@@ -12,71 +12,3 @@
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
-package {
|
||||||
|
- // See: http://go/android-license-faq
|
||||||
|
- // A large-scale-change added 'default_applicable_licenses' to import
|
||||||
|
- // all of the 'license_kinds' from "frameworks_base_license"
|
||||||
|
- // to get the below license kinds:
|
||||||
|
- // SPDX-license-identifier-Apache-2.0
|
||||||
|
- default_applicable_licenses: ["frameworks_base_license"],
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-android_test {
|
||||||
|
- name: "WMShellUnitTests",
|
||||||
|
-
|
||||||
|
- srcs: [
|
||||||
|
- "**/*.java",
|
||||||
|
- "**/*.kt",
|
||||||
|
- ],
|
||||||
|
- resource_dirs: [
|
||||||
|
- "res",
|
||||||
|
- ],
|
||||||
|
-
|
||||||
|
- static_libs: [
|
||||||
|
- "WindowManager-Shell",
|
||||||
|
- "junit",
|
||||||
|
- "androidx.test.runner",
|
||||||
|
- "androidx.test.rules",
|
||||||
|
- "androidx.test.ext.junit",
|
||||||
|
- "androidx.dynamicanimation_dynamicanimation",
|
||||||
|
- "dagger2",
|
||||||
|
- "frameworks-base-testutils",
|
||||||
|
- "kotlinx-coroutines-android",
|
||||||
|
- "kotlinx-coroutines-core",
|
||||||
|
- "mockito-kotlin2",
|
||||||
|
- "mockito-target-extended-minus-junit4",
|
||||||
|
- "truth-prebuilt",
|
||||||
|
- "testables",
|
||||||
|
- "platform-test-annotations",
|
||||||
|
- "servicestests-utils",
|
||||||
|
- ],
|
||||||
|
-
|
||||||
|
- libs: [
|
||||||
|
- "android.test.mock",
|
||||||
|
- "android.test.base",
|
||||||
|
- "android.test.runner",
|
||||||
|
- ],
|
||||||
|
-
|
||||||
|
- jni_libs: [
|
||||||
|
- "libdexmakerjvmtiagent",
|
||||||
|
- "libstaticjvmtiagent",
|
||||||
|
- ],
|
||||||
|
-
|
||||||
|
- kotlincflags: ["-Xjvm-default=enable"],
|
||||||
|
-
|
||||||
|
- plugins: ["dagger2-compiler"],
|
||||||
|
-
|
||||||
|
- optimize: {
|
||||||
|
- enabled: false,
|
||||||
|
- },
|
||||||
|
-
|
||||||
|
- test_suites: ["device-tests"],
|
||||||
|
-
|
||||||
|
- platform_apis: true,
|
||||||
|
- certificate: "platform",
|
||||||
|
-
|
||||||
|
- aaptflags: [
|
||||||
|
- "--extra-packages",
|
||||||
|
- "com.android.wm.shell.tests",
|
||||||
|
- ],
|
||||||
|
-}
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
From 53d8a8ade1ee59d72e92838aad75c272d62b8c4d Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Thu, 5 Oct 2023 13:18:17 +0200
|
||||||
|
Subject: [PATCH] frameworks_base_webview
|
||||||
|
|
||||||
|
Change-Id: I103c15fe38d5ff7698e2d0308fdf5d9f65cfaa6e
|
||||||
|
---
|
||||||
|
core/res/res/xml/config_webview_packages.xml | 3 +-
|
||||||
|
1 files changed, 105 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/core/res/res/xml/config_webview_packages.xml b/core/res/res/xml/config_webview_packages.xml
|
||||||
|
index f062b59a008c..33e82bf1e3d2 100644
|
||||||
|
--- a/core/res/res/xml/config_webview_packages.xml
|
||||||
|
+++ b/core/res/res/xml/config_webview_packages.xml
|
||||||
|
@@ -13,9 +13,8 @@
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
-
|
||||||
|
<webviewproviders>
|
||||||
|
<!-- The default WebView implementation -->
|
||||||
|
- <webviewprovider description="Android WebView" packageName="com.android.webview" availableByDefault="true">
|
||||||
|
+ <webviewprovider description="LeOS WebView" packageName="com.leos.ium_wv" availableByDefault="true">
|
||||||
|
</webviewprovider>
|
||||||
|
</webviewproviders>
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
From 260d890365082720cef741a1490a95567d14db15 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Thu, 25 Jan 2024 11:44:45 +0100
|
||||||
|
Subject: [PATCH] 0005-frameworks_base_defaults
|
||||||
|
|
||||||
|
---
|
||||||
|
core/res/res/values/config.xml | 6 +++---
|
||||||
|
packages/SettingsProvider/res/values/defaults.xml | 6 +++---
|
||||||
|
2 files changed, 6 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
|
||||||
|
index d066b13cc37c..b9f2212428ec 100644
|
||||||
|
--- a/core/res/res/values/config.xml
|
||||||
|
+++ b/core/res/res/values/config.xml
|
||||||
|
@@ -473,7 +473,7 @@
|
||||||
|
|
||||||
|
<!-- Flag indicating whether we should enable the automatic brightness.
|
||||||
|
Software implementation will be used if config_hardware_auto_brightness_available is not set -->
|
||||||
|
- <bool name="config_automatic_brightness_available">false</bool>
|
||||||
|
+ <bool name="config_automatic_brightness_available">true</bool>
|
||||||
|
|
||||||
|
<!-- Flag indicating whether we should enable the adaptive sleep.-->
|
||||||
|
<bool name="config_adaptive_sleep_available">false</bool>
|
||||||
|
@@ -859,7 +859,7 @@
|
||||||
|
1 - MODE_NIGHT_NO
|
||||||
|
2 - MODE_NIGHT_YES
|
||||||
|
-->
|
||||||
|
- <integer name="config_defaultNightMode">1</integer>
|
||||||
|
+ <integer name="config_defaultNightMode">2</integer>
|
||||||
|
|
||||||
|
<!-- Boolean indicating whether the HWC setColorTransform function can be performed efficiently
|
||||||
|
in hardware. -->
|
||||||
|
@@ -2538,7 +2538,7 @@
|
||||||
|
Items must be in the form: "ntp://<host>[:port]"
|
||||||
|
This is not a registered IANA URI scheme. -->
|
||||||
|
<string-array translatable="false" name="config_ntpServers">
|
||||||
|
- <item>ntp://pool.ntp.org</item>
|
||||||
|
+ <item>time.grapheneos.org</item>
|
||||||
|
</string-array>
|
||||||
|
<!-- SNTP client config: Timeout to wait for an NTP server response in milliseconds. -->
|
||||||
|
<integer name="config_ntpTimeout">5000</integer>
|
||||||
|
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
|
||||||
|
index 131d5e914141..c4ef352551fc 100644
|
||||||
|
--- a/packages/SettingsProvider/res/values/defaults.xml
|
||||||
|
+++ b/packages/SettingsProvider/res/values/defaults.xml
|
||||||
|
@@ -176,10 +176,10 @@
|
||||||
|
<integer name="def_heads_up_enabled">1</integer>
|
||||||
|
|
||||||
|
<!-- Default for Settings.Global.DEVICE_NAME $1=MANUFACTURER $2=MODEL-->
|
||||||
|
- <string name="def_device_name">%1$s %2$s</string>
|
||||||
|
+ <string name="def_device_name">%1$s LeOS-U</string>
|
||||||
|
|
||||||
|
<!-- Default for Settings.Global.DEVICE_NAME $1=MODEL-->
|
||||||
|
- <string name="def_device_name_simple">%1$s</string>
|
||||||
|
+ <string name="def_device_name_simple">LeOS-U</string>
|
||||||
|
|
||||||
|
<!-- Default for Settings.Secure.WAKE_GESTURE_ENABLED -->
|
||||||
|
<bool name="def_wake_gesture_enabled">true</bool>
|
||||||
|
@@ -259,7 +259,7 @@
|
||||||
|
<integer name="def_accessibility_magnification_capabilities">3</integer>
|
||||||
|
|
||||||
|
<!-- Default for Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW -->
|
||||||
|
- <bool name="def_enable_non_resizable_multi_window">false</bool>
|
||||||
|
+ <bool name="def_enable_non_resizable_multi_window">true</bool>
|
||||||
|
|
||||||
|
<!-- Default for Settings.Secure.ACCESSIBILITY_BUTTON_MODE -->
|
||||||
|
<integer name="def_accessibility_button_mode">1</integer>
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,92 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tad <tad@spotco.us>
|
||||||
|
Date: Fri, 20 Jan 2023 21:45:50 -0500
|
||||||
|
Subject: [PATCH] Replace agnss.goog with the Broadcom PSDS server
|
||||||
|
|
||||||
|
This is heavily based off of the GrapheneOS patch for their server handling:
|
||||||
|
https://github.com/GrapheneOS/platform_frameworks_base/commit/f29bedd2aad471b27d1eb6ec3b49e9751d8e0c5a
|
||||||
|
|
||||||
|
Change-Id: Idd867bcd55d65d4aae7f9744de4807db46cf4374
|
||||||
|
Signed-off-by: Tad <tad@spotco.us>
|
||||||
|
---
|
||||||
|
.../location/gnss/GnssPsdsDownloader.java | 45 ++++++++++++++-----
|
||||||
|
1 file changed, 35 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/core/java/com/android/server/location/gnss/GnssPsdsDownloader.java b/services/core/java/com/android/server/location/gnss/GnssPsdsDownloader.java
|
||||||
|
index 243910dd9541..07f0f8a6a4af 100644
|
||||||
|
--- a/services/core/java/com/android/server/location/gnss/GnssPsdsDownloader.java
|
||||||
|
+++ b/services/core/java/com/android/server/location/gnss/GnssPsdsDownloader.java
|
||||||
|
@@ -18,6 +18,7 @@ package com.android.server.location.gnss;
|
||||||
|
|
||||||
|
import android.annotation.Nullable;
|
||||||
|
import android.net.TrafficStats;
|
||||||
|
+import android.os.Build;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.internal.util.TrafficStatsConstants;
|
||||||
|
@@ -53,20 +54,39 @@ class GnssPsdsDownloader {
|
||||||
|
private static final int REALTIME_PSDS_SERVER_INDEX = 3;
|
||||||
|
private static final int MAX_PSDS_TYPE_INDEX = 3;
|
||||||
|
|
||||||
|
+ // Broadcom GNSS almanac server URLs
|
||||||
|
+ private static final String BROADCOM_LONGTERM_PSDS_SERVER_1 = "https://gllto.glpals.com/7day/v5/latest/lto2.dat";
|
||||||
|
+ private static final String BROADCOM_LONGTERM_PSDS_SERVER_2 = null;
|
||||||
|
+ private static final String BROADCOM_LONGTERM_PSDS_SERVER_3 = null;
|
||||||
|
+ private static final String BROADCOM_NORMAL_PSDS_SERVER = "https://gllto.glpals.com/rto/v1/latest/rto.dat";
|
||||||
|
+ private static final String BROADCOM_REALTIME_PSDS_SERVER = "https://gllto.glpals.com/rtistatus4.dat";
|
||||||
|
+
|
||||||
|
private final String[] mLongTermPsdsServers;
|
||||||
|
private final String[] mPsdsServers;
|
||||||
|
// to load balance our server requests
|
||||||
|
private int mNextServerIndex;
|
||||||
|
|
||||||
|
+ private static boolean shouldUseBroadcomServer() {
|
||||||
|
+ boolean supportedDevice = Build.DEVICE.equals("cheetah") || Build.DEVICE.equals("panther") || Build.DEVICE.equals("raven") || Build.DEVICE.equals("oriole") || Build.DEVICE.equals("bluejay");
|
||||||
|
+ return supportedDevice;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
GnssPsdsDownloader(Properties properties) {
|
||||||
|
// read PSDS servers from the Properties object
|
||||||
|
int count = 0;
|
||||||
|
- String longTermPsdsServer1 = properties.getProperty(
|
||||||
|
- GnssConfiguration.CONFIG_LONGTERM_PSDS_SERVER_1);
|
||||||
|
- String longTermPsdsServer2 = properties.getProperty(
|
||||||
|
- GnssConfiguration.CONFIG_LONGTERM_PSDS_SERVER_2);
|
||||||
|
- String longTermPsdsServer3 = properties.getProperty(
|
||||||
|
- GnssConfiguration.CONFIG_LONGTERM_PSDS_SERVER_3);
|
||||||
|
+ String longTermPsdsServer1;
|
||||||
|
+ String longTermPsdsServer2;
|
||||||
|
+ String longTermPsdsServer3;
|
||||||
|
+
|
||||||
|
+ if (shouldUseBroadcomServer()) {
|
||||||
|
+ longTermPsdsServer1 = BROADCOM_LONGTERM_PSDS_SERVER_1;
|
||||||
|
+ longTermPsdsServer2 = BROADCOM_LONGTERM_PSDS_SERVER_2;
|
||||||
|
+ longTermPsdsServer3 = BROADCOM_LONGTERM_PSDS_SERVER_3;
|
||||||
|
+ } else {
|
||||||
|
+ longTermPsdsServer1 = properties.getProperty(GnssConfiguration.CONFIG_LONGTERM_PSDS_SERVER_1);
|
||||||
|
+ longTermPsdsServer2 = properties.getProperty(GnssConfiguration.CONFIG_LONGTERM_PSDS_SERVER_2);
|
||||||
|
+ longTermPsdsServer3 = properties.getProperty(GnssConfiguration.CONFIG_LONGTERM_PSDS_SERVER_3);
|
||||||
|
+ }
|
||||||
|
if (longTermPsdsServer1 != null) count++;
|
||||||
|
if (longTermPsdsServer2 != null) count++;
|
||||||
|
if (longTermPsdsServer3 != null) count++;
|
||||||
|
@@ -86,10 +106,15 @@ class GnssPsdsDownloader {
|
||||||
|
mNextServerIndex = random.nextInt(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
- String normalPsdsServer = properties.getProperty(
|
||||||
|
- GnssConfiguration.CONFIG_NORMAL_PSDS_SERVER);
|
||||||
|
- String realtimePsdsServer = properties.getProperty(
|
||||||
|
- GnssConfiguration.CONFIG_REALTIME_PSDS_SERVER);
|
||||||
|
+ String normalPsdsServer;
|
||||||
|
+ String realtimePsdsServer;
|
||||||
|
+ if (shouldUseBroadcomServer()) {
|
||||||
|
+ normalPsdsServer = BROADCOM_NORMAL_PSDS_SERVER;
|
||||||
|
+ realtimePsdsServer = BROADCOM_REALTIME_PSDS_SERVER;
|
||||||
|
+ } else {
|
||||||
|
+ normalPsdsServer = properties.getProperty(GnssConfiguration.CONFIG_NORMAL_PSDS_SERVER);
|
||||||
|
+ realtimePsdsServer = properties.getProperty(GnssConfiguration.CONFIG_REALTIME_PSDS_SERVER);
|
||||||
|
+ }
|
||||||
|
mPsdsServers = new String[MAX_PSDS_TYPE_INDEX + 1];
|
||||||
|
mPsdsServers[NORMAL_PSDS_SERVER_INDEX] = normalPsdsServer;
|
||||||
|
mPsdsServers[REALTIME_PSDS_SERVER_INDEX] = realtimePsdsServer;
|
|
@ -0,0 +1,50 @@
|
||||||
|
From 5d9827041b4014c5abfd64ae72688cadf8a9ab19 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Fri, 20 Oct 2023 18:38:03 +0200
|
||||||
|
Subject: [PATCH] 0001-frameworks_base_easternEgg
|
||||||
|
|
||||||
|
Change-Id: I043be2e11ff2c28150235ee5005c754b45a574f9
|
||||||
|
---
|
||||||
|
tests/BinaryTransparencyHostTest/Android.bp | 29 ---------------------
|
||||||
|
1 file changed, 29 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tests/BinaryTransparencyHostTest/Android.bp b/tests/BinaryTransparencyHostTest/Android.bp
|
||||||
|
index dc6bdff6716c..39162fa5d6e6 100644
|
||||||
|
--- a/tests/BinaryTransparencyHostTest/Android.bp
|
||||||
|
+++ b/tests/BinaryTransparencyHostTest/Android.bp
|
||||||
|
@@ -12,32 +12,3 @@
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
-package {
|
||||||
|
- // See: http://go/android-license-faq
|
||||||
|
- // A large-scale-change added 'default_applicable_licenses' to import
|
||||||
|
- // all of the 'license_kinds' from "frameworks_base_license"
|
||||||
|
- // to get the below license kinds:
|
||||||
|
- // SPDX-license-identifier-Apache-2.0
|
||||||
|
- default_applicable_licenses: ["frameworks_base_license"],
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-java_test_host {
|
||||||
|
- name: "BinaryTransparencyHostTest",
|
||||||
|
- srcs: ["src/**/*.java"],
|
||||||
|
- libs: [
|
||||||
|
- "tradefed",
|
||||||
|
- "compatibility-tradefed",
|
||||||
|
- "compatibility-host-util",
|
||||||
|
- ],
|
||||||
|
- static_libs: [
|
||||||
|
- "truth-prebuilt",
|
||||||
|
- ],
|
||||||
|
- data: [
|
||||||
|
- ":BinaryTransparencyTestApp",
|
||||||
|
- ":EasterEgg",
|
||||||
|
- ":com.android.apex.cts.shim.v2_rebootless_prebuilt",
|
||||||
|
- ],
|
||||||
|
- test_suites: [
|
||||||
|
- "general-tests",
|
||||||
|
- ],
|
||||||
|
-}
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
From ad67a394937b41629a899cbdb43d4c48c1f62af9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sun, 10 Dec 2023 08:59:44 +0100
|
||||||
|
Subject: [PATCH] window manager
|
||||||
|
|
||||||
|
Change-Id: I7fd30851be01418a9eb87395a014882fbd0a0fef
|
||||||
|
---
|
||||||
|
diff --git a/libs/WindowManager/Shell/tests/unittest/Android.bp b/libs/WindowManager/Shell/tests/unittest/Android.bp
|
||||||
|
index c2f184a03380..5935d9d38432 100644
|
||||||
|
--- a/libs/WindowManager/Shell/tests/unittest/Android.bp
|
||||||
|
+++ b/libs/WindowManager/Shell/tests/unittest/Android.bp
|
||||||
|
@@ -12,71 +12,3 @@
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
-package {
|
||||||
|
- // See: http://go/android-license-faq
|
||||||
|
- // A large-scale-change added 'default_applicable_licenses' to import
|
||||||
|
- // all of the 'license_kinds' from "frameworks_base_license"
|
||||||
|
- // to get the below license kinds:
|
||||||
|
- // SPDX-license-identifier-Apache-2.0
|
||||||
|
- default_applicable_licenses: ["frameworks_base_license"],
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-android_test {
|
||||||
|
- name: "WMShellUnitTests",
|
||||||
|
-
|
||||||
|
- srcs: [
|
||||||
|
- "**/*.java",
|
||||||
|
- "**/*.kt",
|
||||||
|
- ],
|
||||||
|
- resource_dirs: [
|
||||||
|
- "res",
|
||||||
|
- ],
|
||||||
|
-
|
||||||
|
- static_libs: [
|
||||||
|
- "WindowManager-Shell",
|
||||||
|
- "junit",
|
||||||
|
- "androidx.test.runner",
|
||||||
|
- "androidx.test.rules",
|
||||||
|
- "androidx.test.ext.junit",
|
||||||
|
- "androidx.dynamicanimation_dynamicanimation",
|
||||||
|
- "dagger2",
|
||||||
|
- "frameworks-base-testutils",
|
||||||
|
- "kotlinx-coroutines-android",
|
||||||
|
- "kotlinx-coroutines-core",
|
||||||
|
- "mockito-kotlin2",
|
||||||
|
- "mockito-target-extended-minus-junit4",
|
||||||
|
- "truth-prebuilt",
|
||||||
|
- "testables",
|
||||||
|
- "platform-test-annotations",
|
||||||
|
- "servicestests-utils",
|
||||||
|
- ],
|
||||||
|
-
|
||||||
|
- libs: [
|
||||||
|
- "android.test.mock",
|
||||||
|
- "android.test.base",
|
||||||
|
- "android.test.runner",
|
||||||
|
- ],
|
||||||
|
-
|
||||||
|
- jni_libs: [
|
||||||
|
- "libdexmakerjvmtiagent",
|
||||||
|
- "libstaticjvmtiagent",
|
||||||
|
- ],
|
||||||
|
-
|
||||||
|
- kotlincflags: ["-Xjvm-default=enable"],
|
||||||
|
-
|
||||||
|
- plugins: ["dagger2-compiler"],
|
||||||
|
-
|
||||||
|
- optimize: {
|
||||||
|
- enabled: false,
|
||||||
|
- },
|
||||||
|
-
|
||||||
|
- test_suites: ["device-tests"],
|
||||||
|
-
|
||||||
|
- platform_apis: true,
|
||||||
|
- certificate: "platform",
|
||||||
|
-
|
||||||
|
- aaptflags: [
|
||||||
|
- "--extra-packages",
|
||||||
|
- "com.android.wm.shell.tests",
|
||||||
|
- ],
|
||||||
|
-}
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
From 53d8a8ade1ee59d72e92838aad75c272d62b8c4d Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Thu, 5 Oct 2023 13:18:17 +0200
|
||||||
|
Subject: [PATCH] frameworks_base_webview
|
||||||
|
|
||||||
|
Change-Id: I103c15fe38d5ff7698e2d0308fdf5d9f65cfaa6e
|
||||||
|
---
|
||||||
|
core/res/res/xml/config_webview_packages.xml | 3 +-
|
||||||
|
1 files changed, 105 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/core/res/res/xml/config_webview_packages.xml b/core/res/res/xml/config_webview_packages.xml
|
||||||
|
index f062b59a008c..33e82bf1e3d2 100644
|
||||||
|
--- a/core/res/res/xml/config_webview_packages.xml
|
||||||
|
+++ b/core/res/res/xml/config_webview_packages.xml
|
||||||
|
@@ -13,9 +13,8 @@
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
-
|
||||||
|
<webviewproviders>
|
||||||
|
<!-- The default WebView implementation -->
|
||||||
|
- <webviewprovider description="Android WebView" packageName="com.android.webview" availableByDefault="true">
|
||||||
|
+ <webviewprovider description="LeOS WebView" packageName="com.leos.ium_wv" availableByDefault="true">
|
||||||
|
</webviewprovider>
|
||||||
|
</webviewproviders>
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
From 260d890365082720cef741a1490a95567d14db15 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Thu, 25 Jan 2024 11:44:45 +0100
|
||||||
|
Subject: [PATCH] 0005-frameworks_base_defaults
|
||||||
|
|
||||||
|
---
|
||||||
|
core/res/res/values/config.xml | 6 +++---
|
||||||
|
packages/SettingsProvider/res/values/defaults.xml | 6 +++---
|
||||||
|
2 files changed, 6 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
|
||||||
|
index d066b13cc37c..b9f2212428ec 100644
|
||||||
|
--- a/core/res/res/values/config.xml
|
||||||
|
+++ b/core/res/res/values/config.xml
|
||||||
|
@@ -473,7 +473,7 @@
|
||||||
|
|
||||||
|
<!-- Flag indicating whether we should enable the automatic brightness.
|
||||||
|
Software implementation will be used if config_hardware_auto_brightness_available is not set -->
|
||||||
|
- <bool name="config_automatic_brightness_available">false</bool>
|
||||||
|
+ <bool name="config_automatic_brightness_available">true</bool>
|
||||||
|
|
||||||
|
<!-- Flag indicating whether we should enable the adaptive sleep.-->
|
||||||
|
<bool name="config_adaptive_sleep_available">false</bool>
|
||||||
|
@@ -859,7 +859,7 @@
|
||||||
|
1 - MODE_NIGHT_NO
|
||||||
|
2 - MODE_NIGHT_YES
|
||||||
|
-->
|
||||||
|
- <integer name="config_defaultNightMode">1</integer>
|
||||||
|
+ <integer name="config_defaultNightMode">2</integer>
|
||||||
|
|
||||||
|
<!-- Boolean indicating whether the HWC setColorTransform function can be performed efficiently
|
||||||
|
in hardware. -->
|
||||||
|
@@ -2538,7 +2538,7 @@
|
||||||
|
Items must be in the form: "ntp://<host>[:port]"
|
||||||
|
This is not a registered IANA URI scheme. -->
|
||||||
|
<string-array translatable="false" name="config_ntpServers">
|
||||||
|
- <item>ntp://pool.ntp.org</item>
|
||||||
|
+ <item>time.grapheneos.org</item>
|
||||||
|
</string-array>
|
||||||
|
<!-- SNTP client config: Timeout to wait for an NTP server response in milliseconds. -->
|
||||||
|
<integer name="config_ntpTimeout">5000</integer>
|
||||||
|
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
|
||||||
|
index 131d5e914141..c4ef352551fc 100644
|
||||||
|
--- a/packages/SettingsProvider/res/values/defaults.xml
|
||||||
|
+++ b/packages/SettingsProvider/res/values/defaults.xml
|
||||||
|
@@ -176,10 +176,10 @@
|
||||||
|
<integer name="def_heads_up_enabled">1</integer>
|
||||||
|
|
||||||
|
<!-- Default for Settings.Global.DEVICE_NAME $1=MANUFACTURER $2=MODEL-->
|
||||||
|
- <string name="def_device_name">%1$s %2$s</string>
|
||||||
|
+ <string name="def_device_name">%1$s LeOS-U</string>
|
||||||
|
|
||||||
|
<!-- Default for Settings.Global.DEVICE_NAME $1=MODEL-->
|
||||||
|
- <string name="def_device_name_simple">%1$s</string>
|
||||||
|
+ <string name="def_device_name_simple">LeOS-U</string>
|
||||||
|
|
||||||
|
<!-- Default for Settings.Secure.WAKE_GESTURE_ENABLED -->
|
||||||
|
<bool name="def_wake_gesture_enabled">true</bool>
|
||||||
|
@@ -259,7 +259,7 @@
|
||||||
|
<integer name="def_accessibility_magnification_capabilities">3</integer>
|
||||||
|
|
||||||
|
<!-- Default for Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW -->
|
||||||
|
- <bool name="def_enable_non_resizable_multi_window">false</bool>
|
||||||
|
+ <bool name="def_enable_non_resizable_multi_window">true</bool>
|
||||||
|
|
||||||
|
<!-- Default for Settings.Secure.ACCESSIBILITY_BUTTON_MODE -->
|
||||||
|
<integer name="def_accessibility_button_mode">1</integer>
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,27 @@
|
||||||
|
From 3ec5382388ce6da65d7ce43744af5dd66d918aa4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Thu, 25 Jan 2024 11:52:23 +0100
|
||||||
|
Subject: [PATCH] ImsPhoneCallTracker
|
||||||
|
|
||||||
|
---
|
||||||
|
.../internal/telephony/imsphone/ImsPhoneCallTracker.java | 4 +---
|
||||||
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
|
||||||
|
index 7c24e79079..5721832d36 100644
|
||||||
|
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
|
||||||
|
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
|
||||||
|
@@ -393,9 +393,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
|
||||||
|
} else {
|
||||||
|
// for legacy IMS we want to avoid blocking the binder thread, otherwise
|
||||||
|
// we end up with half dead incoming calls with unattached call session
|
||||||
|
- TelephonyUtils.runWithCleanCallingIdentity(()-> processIncomingCall(
|
||||||
|
- c, callId, extras), mExecutor);
|
||||||
|
- return null;
|
||||||
|
+ return executeAndWaitForReturn(()-> processIncomingCall(c, callId, extras));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
From 7628c97cada65bfc7842094f36a248e50989eb8a Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sun, 10 Sep 2023 16:17:51 +0200
|
||||||
|
Subject: [PATCH] packages_apps_Contacts
|
||||||
|
|
||||||
|
Change-Id: I754341496862595f999df57a08257b212fdcc59e
|
||||||
|
---
|
||||||
|
AndroidManifest.xml | 6 +++++-
|
||||||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
|
||||||
|
index dd7c2cbee..5b337e507 100644
|
||||||
|
--- a/AndroidManifest.xml
|
||||||
|
+++ b/AndroidManifest.xml
|
||||||
|
@@ -61,6 +61,10 @@
|
||||||
|
android:name="android.hardware.telephony"
|
||||||
|
android:required="false"/>
|
||||||
|
|
||||||
|
+ <uses-feature
|
||||||
|
+ android:name="android.software.leanback"
|
||||||
|
+ android:required="true" />
|
||||||
|
+
|
||||||
|
<application
|
||||||
|
android:name="com.android.contacts.ContactsApplication"
|
||||||
|
android:hardwareAccelerated="true"
|
||||||
|
@@ -84,7 +88,7 @@
|
||||||
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
|
||||||
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
- <category android:name="android.intent.category.LAUNCHER"/>
|
||||||
|
+ <category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
|
||||||
|
<category android:name="android.intent.category.BROWSABLE"/>
|
||||||
|
<category android:name="android.intent.category.APP_CONTACTS"/>
|
||||||
|
</intent-filter>
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
From 4cab2078f5c92f04ad073d933d892a9f0d6322c1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Fri, 6 Oct 2023 15:34:12 +0200
|
||||||
|
Subject: [PATCH] packages_apps_DocumentsUI
|
||||||
|
|
||||||
|
Change-Id: I22b2011b408f7c6c7adfb698a00cbf20ddbd1c1e
|
||||||
|
---
|
||||||
|
AndroidManifest.xml | 8 ++++++--
|
||||||
|
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
|
||||||
|
index ef86ab779..e8136be21 100644
|
||||||
|
--- a/AndroidManifest.xml
|
||||||
|
+++ b/AndroidManifest.xml
|
||||||
|
@@ -39,6 +39,10 @@
|
||||||
|
<uses-permission android:name="android.permission.READ_COMPAT_CHANGE_CONFIG"/>
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND"/>
|
||||||
|
+
|
||||||
|
+ <uses-feature
|
||||||
|
+ android:name="android.software.leanback"
|
||||||
|
+ android:required="true" />
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:name=".DocumentsApplication"
|
||||||
|
@@ -52,7 +56,7 @@
|
||||||
|
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.android.backup.api_key"
|
||||||
|
- android:value="AEdPqrEAAAAInBA8ued0O_ZyYUsVhwinUF-x50NIe9K0GzBW4A" />
|
||||||
|
+ android:value="AEdPqrEAAAAInXXBA8ued0O_ZyYUsVhwinUF-x50NIe9K0GzBW4A" />
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name=".picker.PickActivity"
|
||||||
|
@@ -106,7 +110,7 @@
|
||||||
|
android:icon="@drawable/launcher_icon" >
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
- <category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
+ <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
|
||||||
|
<category android:name="android.intent.category.APP_FILES" />
|
||||||
|
</intent-filter>
|
||||||
|
<meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" />
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
From 283bc45ac577e90dca7646dcf3a0eeeefd9d3002 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sun, 20 Aug 2023 10:49:15 +0200
|
||||||
|
Subject: [PATCH] firebase
|
||||||
|
|
||||||
|
Change-Id: I138f0d0daba12bdb9d0ab7565bbbce3af4f8b8df
|
||||||
|
---
|
||||||
|
Android.bp | 2 --
|
||||||
|
1 file changed, 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Android.bp b/Android.bp
|
||||||
|
index 60ba277..e158bd2 100644
|
||||||
|
--- a/Android.bp
|
||||||
|
+++ b/Android.bp
|
||||||
|
@@ -39,9 +39,7 @@ android_library {
|
||||||
|
"firebase-iid-interop-aar",
|
||||||
|
"firebase-installations-aar",
|
||||||
|
"firebase-installations-interop-aar",
|
||||||
|
- "firebase-messaging-aar",
|
||||||
|
"play-services-basement-aar",
|
||||||
|
- "play-services-cloud-messaging-aar",
|
||||||
|
"play-services-tasks-aar",
|
||||||
|
"transport-api-aar",
|
||||||
|
"firebase-measurement-connector-aar",
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,528 @@
|
||||||
|
From eda6d034d7013b17c6c33a3ddea25a8b1435e6b7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Mon, 11 Dec 2023 18:03:06 +0100
|
||||||
|
Subject: [PATCH] remove_fcm
|
||||||
|
|
||||||
|
Change-Id: I71f795a263a5f846ba4c4fe07745e61219381e26
|
||||||
|
---
|
||||||
|
.../fcm/FcmRegistrationReceiver.java | 32 ----
|
||||||
|
.../fcm/FcmRegistrationService.java | 153 ------------------
|
||||||
|
.../imsserviceentitlement/fcm/FcmService.java | 135 ----------------
|
||||||
|
.../fcm/FcmTokenStore.java | 83 ----------
|
||||||
|
.../imsserviceentitlement/fcm/FcmUtils.java | 73 ---------
|
||||||
|
5 files changed, 476 deletions(-)
|
||||||
|
delete mode 100644 src/com/android/imsserviceentitlement/fcm/FcmRegistrationReceiver.java
|
||||||
|
delete mode 100644 src/com/android/imsserviceentitlement/fcm/FcmRegistrationService.java
|
||||||
|
delete mode 100644 src/com/android/imsserviceentitlement/fcm/FcmService.java
|
||||||
|
delete mode 100644 src/com/android/imsserviceentitlement/fcm/FcmTokenStore.java
|
||||||
|
delete mode 100644 src/com/android/imsserviceentitlement/fcm/FcmUtils.java
|
||||||
|
|
||||||
|
diff --git a/src/com/android/imsserviceentitlement/fcm/FcmRegistrationReceiver.java b/src/com/android/imsserviceentitlement/fcm/FcmRegistrationReceiver.java
|
||||||
|
deleted file mode 100644
|
||||||
|
index 9c72f39..0000000
|
||||||
|
--- a/src/com/android/imsserviceentitlement/fcm/FcmRegistrationReceiver.java
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,32 +0,0 @@
|
||||||
|
-/*
|
||||||
|
- * Copyright (C) 2021 The Android Open Source 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.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-package com.android.imsserviceentitlement.fcm;
|
||||||
|
-
|
||||||
|
-import android.content.BroadcastReceiver;
|
||||||
|
-import android.content.Context;
|
||||||
|
-import android.content.Intent;
|
||||||
|
-
|
||||||
|
-/** A {@link BroadcastReceiver} that triggers FCM registration jobs. */
|
||||||
|
-public class FcmRegistrationReceiver extends BroadcastReceiver {
|
||||||
|
- @Override
|
||||||
|
- public void onReceive(Context context, Intent intent) {
|
||||||
|
- String action = intent.getAction();
|
||||||
|
- if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
|
||||||
|
- FcmRegistrationService.enqueueJob(context);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
diff --git a/src/com/android/imsserviceentitlement/fcm/FcmRegistrationService.java b/src/com/android/imsserviceentitlement/fcm/FcmRegistrationService.java
|
||||||
|
deleted file mode 100644
|
||||||
|
index 184740d..0000000
|
||||||
|
--- a/src/com/android/imsserviceentitlement/fcm/FcmRegistrationService.java
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,153 +0,0 @@
|
||||||
|
-/*
|
||||||
|
- * Copyright (C) 2021 The Android Open Source 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.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-package com.android.imsserviceentitlement.fcm;
|
||||||
|
-
|
||||||
|
-import android.app.job.JobParameters;
|
||||||
|
-import android.app.job.JobService;
|
||||||
|
-import android.content.ComponentName;
|
||||||
|
-import android.content.Context;
|
||||||
|
-import android.os.AsyncTask;
|
||||||
|
-import android.telephony.SubscriptionManager;
|
||||||
|
-import android.util.Log;
|
||||||
|
-
|
||||||
|
-import androidx.annotation.VisibleForTesting;
|
||||||
|
-
|
||||||
|
-import com.android.imsserviceentitlement.R;
|
||||||
|
-import com.android.imsserviceentitlement.job.JobManager;
|
||||||
|
-import com.android.imsserviceentitlement.utils.TelephonyUtils;
|
||||||
|
-
|
||||||
|
-import com.google.firebase.FirebaseApp;
|
||||||
|
-import com.google.firebase.FirebaseOptions;
|
||||||
|
-import com.google.firebase.iid.FirebaseInstanceId;
|
||||||
|
-import com.google.firebase.messaging.FirebaseMessaging;
|
||||||
|
-
|
||||||
|
-import java.io.IOException;
|
||||||
|
-
|
||||||
|
-/** A {@link JobService} that gets a FCM tokens for all active SIMs. */
|
||||||
|
-public class FcmRegistrationService extends JobService {
|
||||||
|
- private static final String TAG = "IMSSE-FcmRegistrationService";
|
||||||
|
-
|
||||||
|
- private FirebaseInstanceId mFakeInstanceID = null;
|
||||||
|
- private FirebaseApp mApp = null;
|
||||||
|
-
|
||||||
|
- @VisibleForTesting AsyncTask<JobParameters, Void, Void> mOngoingTask;
|
||||||
|
-
|
||||||
|
- /** Enqueues a job for FCM registration. */
|
||||||
|
- public static void enqueueJob(Context context) {
|
||||||
|
- ComponentName componentName = new ComponentName(context, FcmRegistrationService.class);
|
||||||
|
- // No subscription id associated job, use {@link
|
||||||
|
- // SubscriptionManager#INVALID_SUBSCRIPTION_ID}.
|
||||||
|
- JobManager jobManager =
|
||||||
|
- JobManager.getInstance(
|
||||||
|
- context, componentName, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
|
||||||
|
- jobManager.registerFcmOnceNetworkReady();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @VisibleForTesting
|
||||||
|
- void setFakeInstanceID(FirebaseInstanceId instanceID) {
|
||||||
|
- mFakeInstanceID = instanceID;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- @VisibleForTesting
|
||||||
|
- protected void attachBaseContext(Context base) {
|
||||||
|
- super.attachBaseContext(base);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /** Returns a {@link FirebaseApp} instance, lazily initialized. */
|
||||||
|
- private FirebaseApp getFirebaseApp() {
|
||||||
|
- if (mApp == null) {
|
||||||
|
- try {
|
||||||
|
- mApp = FirebaseApp.getInstance();
|
||||||
|
- } catch (IllegalStateException e) {
|
||||||
|
- Log.d(TAG, "initialize FirebaseApp");
|
||||||
|
- mApp = FirebaseApp.initializeApp(
|
||||||
|
- this,
|
||||||
|
- new FirebaseOptions.Builder()
|
||||||
|
- .setApplicationId(getResources().getString(R.string.fcm_app_id))
|
||||||
|
- .setProjectId(getResources().getString(R.string.fcm_project_id))
|
||||||
|
- .setApiKey(getResources().getString(R.string.fcm_api_key))
|
||||||
|
- .build());
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- return mApp;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- public boolean onStartJob(JobParameters params) {
|
||||||
|
- mOngoingTask = new AsyncTask<JobParameters, Void, Void>() {
|
||||||
|
- @Override
|
||||||
|
- protected Void doInBackground(JobParameters... params) {
|
||||||
|
- onHandleWork(params[0]);
|
||||||
|
- return null;
|
||||||
|
- }
|
||||||
|
- };
|
||||||
|
- mOngoingTask.execute(params);
|
||||||
|
- return true;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- public boolean onStopJob(JobParameters params) {
|
||||||
|
- return true; // Always re-run if job stopped.
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /**
|
||||||
|
- * Registers to receive FCM messages published to subscribe topics under the retrieved token.
|
||||||
|
- * The token changes when the InstanceID becomes invalid (e.g. app data is deleted).
|
||||||
|
- */
|
||||||
|
- protected void onHandleWork(JobParameters params) {
|
||||||
|
- boolean wantsReschedule = false;
|
||||||
|
- for (int subId : TelephonyUtils.getSubIdsWithFcmSupported(this)) {
|
||||||
|
- if (!updateFcmToken(getFirebaseInstanceId(), subId)) {
|
||||||
|
- wantsReschedule = true;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- jobFinished(params, wantsReschedule);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /** Returns {@code false} if failed to get token. */
|
||||||
|
- private boolean updateFcmToken(FirebaseInstanceId instanceID, int subId) {
|
||||||
|
- Log.d(TAG, "FcmRegistrationService.updateFcmToken: subId=" + subId);
|
||||||
|
- String token = getTokenForSubId(instanceID, subId);
|
||||||
|
- if (token == null) {
|
||||||
|
- Log.d(TAG, "getToken null");
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
- Log.d(TAG, "FCM token: " + token + " subId: " + subId);
|
||||||
|
- FcmTokenStore.setToken(this, subId, token);
|
||||||
|
- return true;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- private FirebaseInstanceId getFirebaseInstanceId() {
|
||||||
|
- return (mFakeInstanceID != null)
|
||||||
|
- ? mFakeInstanceID
|
||||||
|
- : FirebaseInstanceId.getInstance(getFirebaseApp());
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- private String getTokenForSubId(FirebaseInstanceId instanceID, int subId) {
|
||||||
|
- String token = null;
|
||||||
|
- try {
|
||||||
|
- token = instanceID.getToken(
|
||||||
|
- TelephonyUtils.getFcmSenderId(this, subId),
|
||||||
|
- FirebaseMessaging.INSTANCE_ID_SCOPE);
|
||||||
|
- } catch (IOException e) {
|
||||||
|
- Log.e(TAG, "Failed to get a new FCM token: " + e);
|
||||||
|
- }
|
||||||
|
- return token;
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
diff --git a/src/com/android/imsserviceentitlement/fcm/FcmService.java b/src/com/android/imsserviceentitlement/fcm/FcmService.java
|
||||||
|
deleted file mode 100644
|
||||||
|
index 9ab33fc..0000000
|
||||||
|
--- a/src/com/android/imsserviceentitlement/fcm/FcmService.java
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,135 +0,0 @@
|
||||||
|
-/*
|
||||||
|
- * Copyright (C) 2021 The Android Open Source 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.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-package com.android.imsserviceentitlement.fcm;
|
||||||
|
-
|
||||||
|
-import android.content.ComponentName;
|
||||||
|
-import android.content.Context;
|
||||||
|
-import android.util.Log;
|
||||||
|
-
|
||||||
|
-import com.android.imsserviceentitlement.ImsEntitlementPollingService;
|
||||||
|
-import com.android.imsserviceentitlement.job.JobManager;
|
||||||
|
-import com.android.imsserviceentitlement.utils.TelephonyUtils;
|
||||||
|
-import com.android.libraries.entitlement.ServiceEntitlement;
|
||||||
|
-
|
||||||
|
-import com.google.common.annotations.VisibleForTesting;
|
||||||
|
-import com.google.firebase.messaging.FirebaseMessagingService;
|
||||||
|
-import com.google.firebase.messaging.RemoteMessage;
|
||||||
|
-
|
||||||
|
-import java.util.Map;
|
||||||
|
-
|
||||||
|
-/** Service for handling Firebase Cloud Messaging.*/
|
||||||
|
-public class FcmService extends FirebaseMessagingService {
|
||||||
|
- private static final String TAG = "IMSSE-FcmService";
|
||||||
|
-
|
||||||
|
- private static final String DATA_APP_KEY = "app";
|
||||||
|
- private static final String DATA_TIMESTAMP_KEY = "timestamp";
|
||||||
|
-
|
||||||
|
- private JobManager mJobManager;
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- @VisibleForTesting
|
||||||
|
- protected void attachBaseContext(Context base) {
|
||||||
|
- super.attachBaseContext(base);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /**
|
||||||
|
- * Called when a new token for the default Firebase project is generated.
|
||||||
|
- *
|
||||||
|
- * @param token the token used for sending messages to this application instance.
|
||||||
|
- */
|
||||||
|
- @Override
|
||||||
|
- public void onNewToken(String token) {
|
||||||
|
- Log.d(TAG, "New token: " + token);
|
||||||
|
-
|
||||||
|
- // TODO(b/182560867): check if we need to update the new token to server.
|
||||||
|
-
|
||||||
|
- // Note we cannot directly save the new token, as we don't know which subId
|
||||||
|
- // it's associated with.
|
||||||
|
- FcmRegistrationService.enqueueJob(this);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /**
|
||||||
|
- * Handles FCM message for entitlement.
|
||||||
|
- *
|
||||||
|
- * @param message holds the message received from Firebase Cloud Messaging.
|
||||||
|
- */
|
||||||
|
- @Override
|
||||||
|
- public void onMessageReceived(RemoteMessage message) {
|
||||||
|
- // Not testable.
|
||||||
|
- onMessageReceived(message.getSenderId(), message.getData());
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @VisibleForTesting
|
||||||
|
- void onMessageReceived(String fcmSenderId, Map<String, String> fcmData) {
|
||||||
|
- Log.d(TAG, "onMessageReceived, SenderId:" + fcmSenderId);
|
||||||
|
- if (!isTs43EntitlementsChangeEvent(fcmData)) {
|
||||||
|
- Log.i(TAG, "Ignore message not related to entitlements change.");
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
- // A corner case: a FCM received after SIM is removed, and SIM inserted back later.
|
||||||
|
- // We missed the FCM in this case.
|
||||||
|
- scheduleEntitlementStatusCheckForSubIdAssociatedWithSenderId(fcmSenderId);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- private static boolean isTs43EntitlementsChangeEvent(Map<String, String> dataMap) {
|
||||||
|
- if (dataMap == null) {
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
- Log.v(TAG, "The payload data: " + dataMap);
|
||||||
|
-
|
||||||
|
- // Based on GSMA TS.43 2.4.2 Messaging Infrastructure-Based Notifications, the notification
|
||||||
|
- // payload for multiple applications follows:
|
||||||
|
- // "data":
|
||||||
|
- // {
|
||||||
|
- // "app": ["ap2003", "ap2004", "ap2005"],
|
||||||
|
- // "timestamp": "2019-01-29T13:15:31-08:00"
|
||||||
|
- // }
|
||||||
|
- if (!dataMap.containsKey(DATA_APP_KEY) || !dataMap.containsKey(DATA_TIMESTAMP_KEY)) {
|
||||||
|
- Log.d(TAG, "data format error");
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
- // Check if APP_VOWIFI i.e. "ap2004" is in notification data.
|
||||||
|
- if (dataMap.get(DATA_APP_KEY).contains(ServiceEntitlement.APP_VOWIFI)) {
|
||||||
|
- return true;
|
||||||
|
- }
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @VisibleForTesting
|
||||||
|
- void setMockJobManager(JobManager jobManager) {
|
||||||
|
- mJobManager = jobManager;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- private JobManager getJobManager(int subId) {
|
||||||
|
- return (mJobManager != null)
|
||||||
|
- ? mJobManager
|
||||||
|
- : JobManager.getInstance(
|
||||||
|
- this,
|
||||||
|
- ImsEntitlementPollingService.COMPONENT_NAME,
|
||||||
|
- subId);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- private void scheduleEntitlementStatusCheckForSubIdAssociatedWithSenderId(String msgSenderId) {
|
||||||
|
- for (int subId : TelephonyUtils.getSubIdsWithFcmSupported(this)) {
|
||||||
|
- String configSenderId = TelephonyUtils.getFcmSenderId(this, subId);
|
||||||
|
- if (msgSenderId.equals(configSenderId)) {
|
||||||
|
- Log.d(TAG, "check entitlement status for subscription id(" + subId + ")");
|
||||||
|
- getJobManager(subId).queryEntitlementStatusOnceNetworkReady();
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
diff --git a/src/com/android/imsserviceentitlement/fcm/FcmTokenStore.java b/src/com/android/imsserviceentitlement/fcm/FcmTokenStore.java
|
||||||
|
deleted file mode 100644
|
||||||
|
index a972fb7..0000000
|
||||||
|
--- a/src/com/android/imsserviceentitlement/fcm/FcmTokenStore.java
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,83 +0,0 @@
|
||||||
|
-/*
|
||||||
|
- * Copyright (C) 2021 The Android Open Source 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.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-package com.android.imsserviceentitlement.fcm;
|
||||||
|
-
|
||||||
|
-import android.content.Context;
|
||||||
|
-import android.content.SharedPreferences;
|
||||||
|
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||||
|
-import android.text.TextUtils;
|
||||||
|
-import android.util.Log;
|
||||||
|
-
|
||||||
|
-import androidx.annotation.WorkerThread;
|
||||||
|
-
|
||||||
|
-/** Stores FCM token. */
|
||||||
|
-public final class FcmTokenStore {
|
||||||
|
- private static final String TAG = "IMSSE-FcmTokenStore";
|
||||||
|
-
|
||||||
|
- private static final String FCM_TOKEN_FILE = "FCM_TOKEN";
|
||||||
|
- private static final String FCM_TOKEN_KEY = "FCM_TOKEN_SUB_";
|
||||||
|
-
|
||||||
|
- private FcmTokenStore() {}
|
||||||
|
-
|
||||||
|
- /** Returns FCM token or empty string if not available. */
|
||||||
|
- public static String getToken(Context context, int subId) {
|
||||||
|
- return getFcmTokenFile(context).getString(FCM_TOKEN_KEY + subId, "");
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /** Returns {@code true} if FCM token available. */
|
||||||
|
- public static boolean hasToken(Context context, int subId) {
|
||||||
|
- return !TextUtils.isEmpty(getToken(context, subId));
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /** Saves the FCM token into data store. */
|
||||||
|
- @WorkerThread
|
||||||
|
- public static boolean setToken(Context context, int subId, String token) {
|
||||||
|
- if (!TextUtils.isEmpty(token)) {
|
||||||
|
- return getFcmTokenFile(context)
|
||||||
|
- .edit()
|
||||||
|
- .putString(FCM_TOKEN_KEY + subId, token)
|
||||||
|
- .commit();
|
||||||
|
- } else {
|
||||||
|
- return getFcmTokenFile(context)
|
||||||
|
- .edit()
|
||||||
|
- .remove(FCM_TOKEN_KEY + subId)
|
||||||
|
- .commit();
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /** Registers a listener for FCM token update. */
|
||||||
|
- public static void registerTokenUpdateListener(
|
||||||
|
- Context context, OnSharedPreferenceChangeListener listener) {
|
||||||
|
- Log.d(TAG, "registerTokenUpdateListener");
|
||||||
|
- // Since FCM_TOKEN_FILE only contains one item FCM_TOKEN_KEY, a change to FCM_TOKEN_FILE
|
||||||
|
- // means a change to FCM_TOKEN_KEY. The listener can ignore its arguments.
|
||||||
|
- getFcmTokenFile(context).registerOnSharedPreferenceChangeListener(listener);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /** Unregisters a listener for FCM token update. */
|
||||||
|
- public static void unregisterTokenUpdateListener(
|
||||||
|
- Context context, OnSharedPreferenceChangeListener listener) {
|
||||||
|
- Log.d(TAG, "unregisterTokenUpdateListener");
|
||||||
|
- // Since FCM_TOKEN_FILE only contains one item FCM_TOKEN_KEY, a change to FCM_TOKEN_FILE
|
||||||
|
- // means a change to FCM_TOKEN_KEY. The listener can ignore its arguments.
|
||||||
|
- getFcmTokenFile(context).unregisterOnSharedPreferenceChangeListener(listener);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- private static SharedPreferences getFcmTokenFile(Context context) {
|
||||||
|
- return context.getSharedPreferences(FCM_TOKEN_FILE, Context.MODE_PRIVATE);
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
diff --git a/src/com/android/imsserviceentitlement/fcm/FcmUtils.java b/src/com/android/imsserviceentitlement/fcm/FcmUtils.java
|
||||||
|
deleted file mode 100644
|
||||||
|
index 70ec276..0000000
|
||||||
|
--- a/src/com/android/imsserviceentitlement/fcm/FcmUtils.java
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,73 +0,0 @@
|
||||||
|
-/*
|
||||||
|
- * Copyright (C) 2021 The Android Open Source 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.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-package com.android.imsserviceentitlement.fcm;
|
||||||
|
-
|
||||||
|
-import static java.util.concurrent.TimeUnit.SECONDS;
|
||||||
|
-
|
||||||
|
-import android.content.Context;
|
||||||
|
-import android.content.SharedPreferences;
|
||||||
|
-import android.util.Log;
|
||||||
|
-
|
||||||
|
-import androidx.annotation.WorkerThread;
|
||||||
|
-
|
||||||
|
-import java.util.concurrent.CountDownLatch;
|
||||||
|
-
|
||||||
|
-/** Convenience methods for FCM. */
|
||||||
|
-public final class FcmUtils {
|
||||||
|
- public static final String LOG_TAG = "IMSSE-FcmUtils";
|
||||||
|
-
|
||||||
|
- private static final long TOKEN_UPDATE_WAITING_SECONDS = 25L;
|
||||||
|
-
|
||||||
|
- private FcmUtils() {}
|
||||||
|
-
|
||||||
|
- /** Fetches FCM token, if it's not available via {@link FcmTokenStore#getToken}. */
|
||||||
|
- @WorkerThread
|
||||||
|
- public static void fetchFcmToken(Context context, int subId) {
|
||||||
|
- if (FcmTokenStore.hasToken(context, subId)) {
|
||||||
|
- Log.d(LOG_TAG, "FCM token available.");
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- Log.d(LOG_TAG, "FCM token unavailable. Try to update...");
|
||||||
|
- final CountDownLatch tokenUpdated = new CountDownLatch(1);
|
||||||
|
- final SharedPreferences.OnSharedPreferenceChangeListener listener =
|
||||||
|
- (s, k) -> {
|
||||||
|
- Log.d(LOG_TAG, "FCM preference changed.");
|
||||||
|
- if (FcmTokenStore.hasToken(context, subId)) {
|
||||||
|
- tokenUpdated.countDown();
|
||||||
|
- }
|
||||||
|
- };
|
||||||
|
- FcmTokenStore.registerTokenUpdateListener(context, listener);
|
||||||
|
-
|
||||||
|
- // Starts a JobIntentService to update FCM token by calling FCM API on a worker thread.
|
||||||
|
- FcmRegistrationService.enqueueJob(context);
|
||||||
|
-
|
||||||
|
- try {
|
||||||
|
- // Wait for 25s. If FCM token update failed/timeout, we will let user see
|
||||||
|
- // the error message returned by server. Then user can manually retry.
|
||||||
|
- if (tokenUpdated.await(TOKEN_UPDATE_WAITING_SECONDS, SECONDS)) {
|
||||||
|
- Log.d(LOG_TAG, "FCM token updated.");
|
||||||
|
- } else {
|
||||||
|
- Log.d(LOG_TAG, "FCM token update failed.");
|
||||||
|
- }
|
||||||
|
- } catch (InterruptedException e) {
|
||||||
|
- // Do nothing
|
||||||
|
- Log.d(LOG_TAG, "FCM token update interrupted.");
|
||||||
|
- }
|
||||||
|
- FcmTokenStore.unregisterTokenUpdateListener(context, listener);
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
From 45848230543a57a3e7aa65f639003cbbb5683dbd Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Tue, 12 Dec 2023 15:39:08 +0100
|
||||||
|
Subject: [PATCH] remove_token
|
||||||
|
|
||||||
|
Change-Id: I818095bf275db4a0f1df223a7ef374e4c38320bb
|
||||||
|
---
|
||||||
|
.../android/imsserviceentitlement/ImsEntitlementApi.java | 7 -------
|
||||||
|
1 file changed, 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/com/android/imsserviceentitlement/ImsEntitlementApi.java b/src/com/android/imsserviceentitlement/ImsEntitlementApi.java
|
||||||
|
index d6ccd65..bb5d17c 100644
|
||||||
|
--- a/src/com/android/imsserviceentitlement/ImsEntitlementApi.java
|
||||||
|
+++ b/src/com/android/imsserviceentitlement/ImsEntitlementApi.java
|
||||||
|
@@ -30,8 +30,6 @@ import com.android.imsserviceentitlement.debug.DebugUtils;
|
||||||
|
import com.android.imsserviceentitlement.entitlement.EntitlementConfiguration;
|
||||||
|
import com.android.imsserviceentitlement.entitlement.EntitlementConfiguration.ClientBehavior;
|
||||||
|
import com.android.imsserviceentitlement.entitlement.EntitlementResult;
|
||||||
|
-import com.android.imsserviceentitlement.fcm.FcmTokenStore;
|
||||||
|
-import com.android.imsserviceentitlement.fcm.FcmUtils;
|
||||||
|
import com.android.imsserviceentitlement.ts43.Ts43Constants.ResponseXmlAttributes;
|
||||||
|
import com.android.imsserviceentitlement.ts43.Ts43Constants.ResponseXmlNode;
|
||||||
|
import com.android.imsserviceentitlement.ts43.Ts43SmsOverIpStatus;
|
||||||
|
@@ -105,14 +103,9 @@ public class ImsEntitlementApi {
|
||||||
|
* unrecoverable network issue or malformed server response. This is blocking call so should
|
||||||
|
* not be called on main thread.
|
||||||
|
*/
|
||||||
|
- @Nullable
|
||||||
|
public EntitlementResult checkEntitlementStatus() {
|
||||||
|
Log.d(TAG, "checkEntitlementStatus subId=" + mSubId);
|
||||||
|
ServiceEntitlementRequest.Builder requestBuilder = ServiceEntitlementRequest.builder();
|
||||||
|
- mLastEntitlementConfiguration.getToken().ifPresent(
|
||||||
|
- token -> requestBuilder.setAuthenticationToken(token));
|
||||||
|
- FcmUtils.fetchFcmToken(mContext, mSubId);
|
||||||
|
- requestBuilder.setNotificationToken(FcmTokenStore.getToken(mContext, mSubId));
|
||||||
|
// Set fake device info to avoid leaking
|
||||||
|
requestBuilder.setTerminalVendor("vendorX");
|
||||||
|
requestBuilder.setTerminalModel("modelY");
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,874 @@
|
||||||
|
From a120d979b43f623f53580e30b993702b8dfebb89 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sat, 27 Jan 2024 15:24:59 +0100
|
||||||
|
Subject: [PATCH] 2-LeOS-Stuff
|
||||||
|
|
||||||
|
---
|
||||||
|
.../ic_launcher_home_foreground.png | Bin 236 -> 10303 bytes
|
||||||
|
.../ic_launcher_home_foreground.png | Bin 339 -> 10189 bytes
|
||||||
|
.../ic_launcher_home_foreground.png | Bin 357 -> 11530 bytes
|
||||||
|
.../ic_launcher_home_foreground.png | Bin 485 -> 13582 bytes
|
||||||
|
res/values/voltage_strings.xml | 26 +++++++++---------
|
||||||
|
.../launcher3/customization/IconDatabase.java | 2 +-
|
||||||
|
.../launcher3/icons/pack/IconPackManager.java | 3 +-
|
||||||
|
.../preference/IconPackPrefSetter.java | 2 +-
|
||||||
|
8 files changed, 17 insertions(+), 16 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/res/mipmap-hdpi/ic_launcher_home_foreground.png b/res/mipmap-hdpi/ic_launcher_home_foreground.png
|
||||||
|
index d068d92361a06550fb1bcdf36fbc4bf56242d54e..6f56658b732a7ea0c99e05e73ff13e6cac45a836 100644
|
||||||
|
GIT binary patch
|
||||||
|
literal 10303
|
||||||
|
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
|
||||||
|
|
||||||
|
delta 219
|
||||||
|
zcmdlV@P=`MWIZzj14ELrb19IL2=EDU1=2vUfB*jf|Noz1U`U(Ez%cWS@z$pYva%|G
|
||||||
|
z5{xB5e!&b5&u*jvIZd7}jv*Dd-d@<q*I>ZWl9=s!|9`J(h}0}^cJafee=fH^l)kY^
|
||||||
|
zhdb!vwdSsFS*O(Nx6;}JRz_{->lJZ28oftAE5k6vX~h{GE)G$_m0|ZY0v&$HUffl*
|
||||||
|
z>i`$8=;<j7*<!D8M^02cADSya+rcfs(P*2>ml%<z6^hymUtE};<P<sW?>%0QKcbR*
|
||||||
|
S8gjWnuJ&~Gb6Mw<&;$V3b5<Py
|
||||||
|
|
||||||
|
diff --git a/res/mipmap-mdpi/ic_launcher_home_foreground.png b/res/mipmap-mdpi/ic_launcher_home_foreground.png
|
||||||
|
index 0ed9f4d814770dbeb83f97d2050b465e2a7f4479..96fd67890d7b88ed503ccf760b5fed68d08127ed 100644
|
||||||
|
GIT binary patch
|
||||||
|
literal 10189
|
||||||
|
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
|
||||||
|
|
||||||
|
delta 298
|
||||||
|
zcmV+_0oDG^PtyXB7)JyH0001eNJ{<y000<JOjJc-Z~y=R0KdP#|NsBY003s0005cH
|
||||||
|
zGqvTP7?^Yb0004WQchC<K<3zH00001VoOIv0Eh)0NRtaA9)IBj0}(SGS6L>l0002A
|
||||||
|
zNkl<ZSi|kq!3n}Z5QSj{3&=z*z!3}3LC+r2fouhW4S2A9XR<{0pav1wcX;1zA^+jA
|
||||||
|
zWG53MBBKAAiZtk%^q?~z)~c>PomVyURjO)cF>ls&N4zW#TU*$QED*EDu*{EeSvkyx
|
||||||
|
zc@0(;!!{|t-dCq`9#A$6OYUTLxP<fQysBBeRjvA}%(I)j_Su_xb+ahvW;@NwZ0z2u
|
||||||
|
wXV11_X0lA>FNc}MHfG;sFF<8PL`1)F2dbd5nG&7YzW@LL07*qoM6N<$f;0Jk$p8QV
|
||||||
|
|
||||||
|
diff --git a/res/mipmap-xhdpi/ic_launcher_home_foreground.png b/res/mipmap-xhdpi/ic_launcher_home_foreground.png
|
||||||
|
index 7a9daf5bfe7a5fcfdf7e772dfe5300373d287389..ebdac95bfdd2fcaed0f9c1249300f4498c8ccc73 100644
|
||||||
|
GIT binary patch
|
||||||
|
literal 11530
|
||||||
|
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
|
||||||
|
a{)ML=F<!G@Xm#@vR82`su~^<Z=>Gw?9P}3e
|
||||||
|
|
||||||
|
delta 316
|
||||||
|
zcmeB*ddf6G!kvYgfq|i#&)^=Ak_hk#aZM}$vKaR7-~a#r|1%5>X)_rZW}Y$L`gFd;
|
||||||
|
zj1r&(V@Z%-FoVOh8)+a;lDE4HLkFv@$7FX!x%!99%z{SDx-QkGK)GX{E{-7;x8B}3
|
||||||
|
z$a_dZqT%AY3!=N4w0AIR?`V2``@)n9S-iKLd~5D^7W}y1D&Tb8bCL=Ky`26k+2F>@
|
||||||
|
zi21C|b31&G39Np1Fd_Al>a;!CJZ#y`w%$A0n@taITQZfs`RcKI-m9f0*;co!YPL*p
|
||||||
|
zd!G4P*;ZoBj|=TPGk@v6X5eSj{$Up7c~ZLfcT8XHW1uNdOfn+2wZ7f^HE{#enh!4y
|
||||||
|
zC+Kc0eEw8flr6je>H81~9=6}nZx$zPsG0$Fisz)VFAP(rp7j^{yR`!7B?eDdKbLh*
|
||||||
|
G2~7YzHHK#Z
|
||||||
|
|
||||||
|
diff --git a/res/mipmap-xxhdpi/ic_launcher_home_foreground.png b/res/mipmap-xxhdpi/ic_launcher_home_foreground.png
|
||||||
|
index 03b493e4a3513a3c688698348ddd64180bdfe33d..3b36de5625124acc4e6cc3f28425edbd76b82e37 100644
|
||||||
|
GIT binary patch
|
||||||
|
literal 13582
|
||||||
|
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
|
||||||
|
|
||||||
|
literal 485
|
||||||
|
zcmeAS@N?(olHy`uVBq!ia0y~yU~~at7G|Kx+9Oe4fs{mmPl#(`0g%P8fB*jf|Noz1
|
||||||
|
zU`U(Ez%cWS@z$sFC1#WWB^XPB{DK)Ap4~_Tagw~<T^Kr8Wj%l#&H|6fVg?3oVGw3y
|
||||||
|
zm^DWND9B#o>Fdh=keOM~z{;U~;(nkWH%}MGkcwMx?>J^PJ213eWT|Rc;>$1K&40mb
|
||||||
|
z)44_F8kUX<;wKhe&*wh3KyqtSr{BZ9OS$TH%ZtY70L?=J5*a(!tx@rsq7nGW-XlgG
|
||||||
|
z%u3qVSr{VMeadY6%!wL-i(EQ&7Yn`WGRin}=CJ!y1(1Nyb8jE_r%U&I6I*xF1E_b=
|
||||||
|
zk(t8PZmOdC)4=LKtMExq-Bg_xCZq~9x$x4FV=MN^)tgwAot)SQH8NPGtmo9mcg9=Z
|
||||||
|
zoWJfTe5MCzrm9zt<kT4w+f_t`_rKEfe3YB+2C_=^+ZMal*?Yy;wyE6vdD9gvRHo7w
|
||||||
|
zAr8_pWrp*k_bZ><#~t?uJ7bNI^lK%s3qdvm-8H)=NY)XoC+**TXC#j^Ff{zEVRl>T
|
||||||
|
U{kpq~Z7)c|)78&qol`;+0B9eraR2}S
|
||||||
|
|
||||||
|
diff --git a/res/values/voltage_strings.xml b/res/values/voltage_strings.xml
|
||||||
|
index e00617ef0c..f086cf853e 100644
|
||||||
|
--- a/res/values/voltage_strings.xml
|
||||||
|
+++ b/res/values/voltage_strings.xml
|
||||||
|
@@ -17,17 +17,17 @@
|
||||||
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
|
||||||
|
<!-- Application name -->
|
||||||
|
- <string name="voltage_app_name" translatable="false">Voltage Home</string>
|
||||||
|
+ <string name="voltage_app_name" translatable="false">LeOS Home</string>
|
||||||
|
|
||||||
|
<!-- Folder titles -->
|
||||||
|
- <string name="google_folder_title" translatable="false">Google</string>
|
||||||
|
+ <string name="google_folder_title" translatable="false">G__gle</string>
|
||||||
|
|
||||||
|
<!-- General -->
|
||||||
|
<string name="settings_title">Home settings</string>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
<string name="home_category_title">Home screen</string>
|
||||||
|
- <string name="home_category_summary">Set Google now panel and more</string>
|
||||||
|
+ <string name="home_category_summary">Set G__gle now panel and more</string>
|
||||||
|
<string name="icons_category_title">Icons</string>
|
||||||
|
<string name="icons_category_summary">Set icon size and more</string>
|
||||||
|
<string name="app_drawer_category_title">App drawer</string>
|
||||||
|
@@ -57,7 +57,7 @@
|
||||||
|
<string name="drawer_show_labels">Icon labels in drawer</string>
|
||||||
|
|
||||||
|
<!-- Settings title to show Google Now at -1 screen on launcher. [CHAR LIMIT=50] -->
|
||||||
|
- <string name="title_show_google_app">Swipe to access Google app</string>
|
||||||
|
+ <string name="title_show_google_app">Swipe to access G__gle app</string>
|
||||||
|
<string name="pref_show_google_now_summary" translatable="false">@string/msg_minus_one_on_left</string>
|
||||||
|
<!-- Settings message explaining when the -1 screen is available on an LTR device. [CHAR LIMIT=100] -->
|
||||||
|
<string name="msg_minus_one_on_left">When you swipe right from main home screen</string>
|
||||||
|
@@ -115,11 +115,11 @@
|
||||||
|
|
||||||
|
<!-- Hotseat searchbar -->
|
||||||
|
<string name="label_search">Search</string>
|
||||||
|
- <string name="label_lens">Google Lens</string>
|
||||||
|
+ <string name="label_lens">G__gle Lens</string>
|
||||||
|
<string name="label_voice_search">Voice search</string>
|
||||||
|
<string name="dock_music_search_title">Music search</string>
|
||||||
|
<string name="dock_music_search_summary">Start music search on pressing mic icon</string>
|
||||||
|
- <string name="dock_search_title">Google search bar</string>
|
||||||
|
+ <string name="dock_search_title">G__gle search bar</string>
|
||||||
|
<string name="dock_search_summary">Search bar in the bottom dock</string>
|
||||||
|
<string name="dock_theme_title">Themed hotseat search bar</string>
|
||||||
|
<string name="dock_theme_summary">Use themed icons style for search bar</string>
|
||||||
|
@@ -213,16 +213,16 @@
|
||||||
|
<string name="quickspace_date_format_minimalistic" translatable="false">EEEE, MMMM d</string>
|
||||||
|
|
||||||
|
<!-- QuickSpace: QuickEvent: Device Intro Event -->
|
||||||
|
- <string name="quick_event_rom_intro_welcome">Welcome to VoltageOS!</string>
|
||||||
|
- <string name="quick_event_rom_intro_welcome_ext">VoltageOS time!</string>
|
||||||
|
+ <string name="quick_event_rom_intro_welcome">Welcome to LeOS!</string>
|
||||||
|
+ <string name="quick_event_rom_intro_welcome_ext">LeOS time!</string>
|
||||||
|
<string-array name="welcome_message_variants">
|
||||||
|
<item>Have a great day</item>
|
||||||
|
<item>#Electrified 🦑</item>
|
||||||
|
- <item>Say hi to us on Telegram</item>
|
||||||
|
- <item>Pls gapps build?</item>
|
||||||
|
- <item>Welcome to VoltageOS</item>
|
||||||
|
- <item>Enjoy your toxic rom!</item>
|
||||||
|
- <item>Almost like pixel launcher</item>
|
||||||
|
+ <item>FCK AfD</item>
|
||||||
|
+ <item>Make Love not Waste?</item>
|
||||||
|
+ <item>Welcome to LeOS</item>
|
||||||
|
+ <item>FCK NZS</item>
|
||||||
|
+ <item>Almost like LeOS launcher</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
<!-- QuickSpace: QuickEvent: Greetings -->
|
||||||
|
diff --git a/src/com/android/launcher3/customization/IconDatabase.java b/src/com/android/launcher3/customization/IconDatabase.java
|
||||||
|
index 0673471fff..0c20d51675 100644
|
||||||
|
--- a/src/com/android/launcher3/customization/IconDatabase.java
|
||||||
|
+++ b/src/com/android/launcher3/customization/IconDatabase.java
|
||||||
|
@@ -14,7 +14,7 @@ public class IconDatabase {
|
||||||
|
|
||||||
|
private static final String PREF_FILE_NAME = BuildConfig.APPLICATION_ID + ".ICON_DATABASE";
|
||||||
|
public static final String KEY_ICON_PACK = "pref_icon_pack";
|
||||||
|
- public static final String VALUE_DEFAULT = "";
|
||||||
|
+ public static final String VALUE_DEFAULT = "com.leos.icons";
|
||||||
|
|
||||||
|
public static String getGlobal(Context context) {
|
||||||
|
return LauncherPrefs.getPrefs(context).getString(KEY_ICON_PACK, VALUE_DEFAULT);
|
||||||
|
diff --git a/src/com/android/launcher3/icons/pack/IconPackManager.java b/src/com/android/launcher3/icons/pack/IconPackManager.java
|
||||||
|
index 8c54880e52..eb7a41d631 100644
|
||||||
|
--- a/src/com/android/launcher3/icons/pack/IconPackManager.java
|
||||||
|
+++ b/src/com/android/launcher3/icons/pack/IconPackManager.java
|
||||||
|
@@ -38,7 +38,8 @@ public class IconPackManager extends BroadcastReceiver {
|
||||||
|
"com.gau.go.launcherex.theme",
|
||||||
|
"org.adw.launcher.THEMES",
|
||||||
|
"net.oneplus.launcher.icons.ACTION_PICK_ICON",
|
||||||
|
- "org.adw.launcher.icons.ACTION_PICK_ICON"
|
||||||
|
+ "org.adw.launcher.icons.ACTION_PICK_ICON",
|
||||||
|
+ "com.leos.icons"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Intent[] ICON_INTENTS = new Intent[ICON_INTENT_ACTIONS.length];
|
||||||
|
diff --git a/src/com/android/launcher3/settings/preference/IconPackPrefSetter.java b/src/com/android/launcher3/settings/preference/IconPackPrefSetter.java
|
||||||
|
index 04eb869c0a..5cd2fd28c0 100644
|
||||||
|
--- a/src/com/android/launcher3/settings/preference/IconPackPrefSetter.java
|
||||||
|
+++ b/src/com/android/launcher3/settings/preference/IconPackPrefSetter.java
|
||||||
|
@@ -50,7 +50,7 @@ public class IconPackPrefSetter implements ReloadingListPreference.OnReloadListe
|
||||||
|
|
||||||
|
// First value, system default, or the current icon pack if that has no icon yet.
|
||||||
|
keys[i] = mContext.getResources().getString(R.string.icon_pack_default_label);
|
||||||
|
- values[i++] = packList.containsKey(globalPack) ? "" : globalPack;
|
||||||
|
+ values[i++] = packList.containsKey(globalPack) ? "com.leos.icons" : globalPack;
|
||||||
|
|
||||||
|
// List of available icon packs
|
||||||
|
List<Map.Entry<String, CharSequence>> packs = new ArrayList<>(packList.entrySet());
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
From d1dc9cab99c61c3bb2351f72a9a5343bf145f519 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sat, 10 Feb 2024 16:45:40 +0100
|
||||||
|
Subject: [PATCH] packages_apps_ManagedProvisioning_Google
|
||||||
|
|
||||||
|
Change-Id: Ia16e1ef6013aecbc4c7e21fec42079975ed5e1cb
|
||||||
|
---
|
||||||
|
.../EstablishNetworkConnectionViewModelTest.java | 4 ++--
|
||||||
|
.../parser/ExtrasProvisioningDataParserTest.java | 10 +++++-----
|
||||||
|
2 files changed, 7 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tests/instrumentation/src/com/android/managedprovisioning/networkconnection/EstablishNetworkConnectionViewModelTest.java b/tests/instrumentation/src/com/android/managedprovisioning/networkconnection/EstablishNetworkConnectionViewModelTest.java
|
||||||
|
index 9f0b0f04..9960f627 100644
|
||||||
|
--- a/tests/instrumentation/src/com/android/managedprovisioning/networkconnection/EstablishNetworkConnectionViewModelTest.java
|
||||||
|
+++ b/tests/instrumentation/src/com/android/managedprovisioning/networkconnection/EstablishNetworkConnectionViewModelTest.java
|
||||||
|
@@ -79,9 +79,9 @@ public final class EstablishNetworkConnectionViewModelTest {
|
||||||
|
private static final Context sContext = ApplicationProvider.getApplicationContext();
|
||||||
|
private static final String TEST_SSID = "\"test ssid\"";
|
||||||
|
private static final String TEST_SECURITY_TYPE_EAP = "EAP";
|
||||||
|
- private static final String TEST_PROXY_HOST = "www.google.com";
|
||||||
|
+ private static final String TEST_PROXY_HOST = "LeOS-GSI.de";
|
||||||
|
private static final int TEST_PROXY_PORT = 1234;
|
||||||
|
- private static final String TEST_PROXY_BYPASS = "www.android.com";
|
||||||
|
+ private static final String TEST_PROXY_BYPASS = "LeOS-GSI.de";
|
||||||
|
private static final String ADMIN_PACKAGE = "com.test.admin";
|
||||||
|
private static final ComponentName ADMIN = new ComponentName(ADMIN_PACKAGE, ".Receiver");
|
||||||
|
private static final Intent INVALID_INTENT =
|
||||||
|
diff --git a/tests/instrumentation/src/com/android/managedprovisioning/parser/ExtrasProvisioningDataParserTest.java b/tests/instrumentation/src/com/android/managedprovisioning/parser/ExtrasProvisioningDataParserTest.java
|
||||||
|
index ec2bbcc8..9536d571 100644
|
||||||
|
--- a/tests/instrumentation/src/com/android/managedprovisioning/parser/ExtrasProvisioningDataParserTest.java
|
||||||
|
+++ b/tests/instrumentation/src/com/android/managedprovisioning/parser/ExtrasProvisioningDataParserTest.java
|
||||||
|
@@ -174,7 +174,7 @@ public class ExtrasProvisioningDataParserTest extends AndroidTestCase {
|
||||||
|
private static final boolean TEST_KEEP_ACCOUNT_MIGRATED = true;
|
||||||
|
private static final long TEST_PROVISIONING_ID = 1000L;
|
||||||
|
private static final Account TEST_ACCOUNT_TO_MIGRATE =
|
||||||
|
- new Account("user@gmail.com", "com.google");
|
||||||
|
+ new Account("user@gmail.com", "com.g**gle");
|
||||||
|
private static final String TEST_ORGANIZATION_NAME = "TestOrganizationName";
|
||||||
|
private static final String TEST_SUPPORT_URL = "https://www.support.url/";
|
||||||
|
private static final String TEST_ILL_FORMED_LOCALE = "aaa_";
|
||||||
|
@@ -184,7 +184,7 @@ public class ExtrasProvisioningDataParserTest extends AndroidTestCase {
|
||||||
|
private static final boolean TEST_HIDDEN = true;
|
||||||
|
private static final String TEST_SECURITY_TYPE = "WPA2";
|
||||||
|
private static final String TEST_SECURITY_TYPE_EAP = "EAP";
|
||||||
|
- private static final String TEST_PASSWORD = "GoogleRock";
|
||||||
|
+ private static final String TEST_PASSWORD = "G**gleRock";
|
||||||
|
private static final String TEST_PROXY_HOST = "testhost.com";
|
||||||
|
private static final int TEST_PROXY_PORT = 7689;
|
||||||
|
private static final String TEST_PROXY_BYPASS_HOSTS = "http://host1.com;https://host2.com";
|
||||||
|
@@ -195,7 +195,7 @@ public class ExtrasProvisioningDataParserTest extends AndroidTestCase {
|
||||||
|
private static final String TEST_USER_CERT = "certificate";
|
||||||
|
private static final String TEST_IDENTITY = "TestUser";
|
||||||
|
private static final String TEST_ANONYMOUS_IDENTITY = "TestAUser";
|
||||||
|
- private static final String TEST_DOMAIN = "google.com";
|
||||||
|
+ private static final String TEST_DOMAIN = "LeOS-GSI";
|
||||||
|
private static final WifiInfo TEST_WIFI_INFO = WifiInfo.Builder.builder()
|
||||||
|
.setSsid(TEST_SSID)
|
||||||
|
.setHidden(TEST_HIDDEN)
|
||||||
|
@@ -225,8 +225,8 @@ public class ExtrasProvisioningDataParserTest extends AndroidTestCase {
|
||||||
|
.setMinVersion(TEST_MIN_SUPPORT_VERSION)
|
||||||
|
.build();
|
||||||
|
private static final boolean TEST_USE_MOBILE_DATA = true;
|
||||||
|
- private static final Uri TEST_URI = Uri.parse("https://www.google.com/");
|
||||||
|
- private static final String TEST_DISCLAMER_HEADER = "Google";
|
||||||
|
+ private static final Uri TEST_URI = Uri.parse("https://LeOS-GSI.de/");
|
||||||
|
+ private static final String TEST_DISCLAMER_HEADER = "LeOS";
|
||||||
|
private static final int INVALID_SUPPORTED_MODES = 123;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,847 @@
|
||||||
|
From 03249f13eb61fc8b5685034a11b39ca7d3792374 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Thu, 25 Jan 2024 11:58:25 +0100
|
||||||
|
Subject: [PATCH] 0001-AdvancedPrivacy
|
||||||
|
|
||||||
|
---
|
||||||
|
0001-AdvancedPrivacy.patch | 32 +-
|
||||||
|
res/drawable/ic_homepage_advanced_privacy.xml | 41 +++
|
||||||
|
...een.xml => ic_illustration_fullscreen.xml} | 0
|
||||||
|
..._switch.xml => ic_illustration_switch.xml} | 0
|
||||||
|
..._window.xml => ic_illustration_window.xml} | 0
|
||||||
|
res/drawable/ic_launcher_background.xml | 37 +++
|
||||||
|
res/values/arrays.xml | 21 ++
|
||||||
|
res/values/cm_strings.xml | 196 ++++++++++++
|
||||||
|
res/values/strings.xml | 5 +
|
||||||
|
.../advanced_privacy_dashboard_settings.xml | 28 ++
|
||||||
|
res/xml/bubble_notification_settings.xml | 5 +-
|
||||||
|
res/xml/top_level_settings.xml | 10 +-
|
||||||
|
...ConnectivityCheckPreferenceController.java | 295 ++++++++++++++++++
|
||||||
|
.../network/NetworkDashboardFragment.java | 3 +
|
||||||
|
.../AdvancedPrivacyDashboardFragment.java | 52 +++
|
||||||
|
15 files changed, 689 insertions(+), 36 deletions(-)
|
||||||
|
create mode 100644 res/drawable/ic_homepage_advanced_privacy.xml
|
||||||
|
rename res/drawable/{accessibility_magnification_mode_fullscreen.xml => ic_illustration_fullscreen.xml} (100%)
|
||||||
|
rename res/drawable/{accessibility_magnification_mode_switch.xml => ic_illustration_switch.xml} (100%)
|
||||||
|
rename res/drawable/{accessibility_magnification_mode_window.xml => ic_illustration_window.xml} (100%)
|
||||||
|
create mode 100644 res/drawable/ic_launcher_background.xml
|
||||||
|
create mode 100644 res/values/cm_strings.xml
|
||||||
|
create mode 100644 res/xml/advanced_privacy_dashboard_settings.xml
|
||||||
|
create mode 100644 src/com/android/settings/network/ConnectivityCheckPreferenceController.java
|
||||||
|
create mode 100644 src/com/android/settings/privacy/AdvancedPrivacyDashboardFragment.java
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/res/drawable/ic_homepage_advanced_privacy.xml b/res/drawable/ic_homepage_advanced_privacy.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..3786ebb858
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/res/drawable/ic_homepage_advanced_privacy.xml
|
||||||
|
@@ -0,0 +1,41 @@
|
||||||
|
+<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
+<!--
|
||||||
|
+ ~ Copyright ECORP SAS 2022
|
||||||
|
+ ~ This program is free software: you can redistribute it and/or modify
|
||||||
|
+ ~ it under the terms of the GNU General Public License as published by
|
||||||
|
+ ~ the Free Software Foundation, either version 3 of the License, or
|
||||||
|
+ ~ (at your option) any later version.
|
||||||
|
+ ~
|
||||||
|
+ ~ This program is distributed in the hope that it will be useful,
|
||||||
|
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+ ~ GNU General Public License for more details.
|
||||||
|
+ ~
|
||||||
|
+ ~ You should have received a copy of the GNU General Public License
|
||||||
|
+ ~ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
+ -->
|
||||||
|
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
+ android:width="36dp"
|
||||||
|
+ android:height="36dp"
|
||||||
|
+ android:viewportWidth="32"
|
||||||
|
+ android:viewportHeight="32">
|
||||||
|
+ <group>
|
||||||
|
+ <clip-path
|
||||||
|
+ android:pathData="M0,0h32v32h-32z"/>
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M7,0L25,0A7,7 0,0 1,32 7L32,25A7,7 0,0 1,25 32L7,32A7,7 0,0 1,0 25L0,7A7,7 0,0 1,7 0z"
|
||||||
|
+ android:fillColor="#2CCF69"/>
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M15.983,6.667V6.667C15.917,6.666 15.85,6.675 15.785,6.693L7.869,10.044C7.815,10.069 7.765,10.111 7.727,10.168C7.689,10.228 7.667,10.301 7.667,10.377L7.667,10.379C7.667,18.181 12.058,23.35 15.862,24.975L15.865,24.977C15.902,24.992 15.94,25 15.978,25C16.016,25 16.054,24.992 16.091,24.977L16.097,24.974L16.097,24.974C19.126,23.687 24.324,19.049 24.333,10.402C24.33,10.323 24.305,10.248 24.263,10.186C24.22,10.122 24.162,10.075 24.099,10.049C24.099,10.049 24.099,10.049 24.099,10.049L16.169,6.691C16.112,6.675 16.053,6.667 15.994,6.667L15.983,6.667ZM16.75,5.127L24.75,8.514C25.114,8.669 25.425,8.927 25.647,9.258C25.869,9.589 25.992,9.979 26,10.379C26,19.777 20.332,24.986 16.749,26.508C16.505,26.613 16.243,26.667 15.978,26.667C15.713,26.667 15.451,26.613 15.207,26.508C10.749,24.603 6,18.803 6,10.379C5.999,9.982 6.114,9.594 6.328,9.262C6.543,8.931 6.849,8.671 7.208,8.514L15.207,5.127C15.463,5.041 15.73,4.998 15.999,5C16.255,5.001 16.508,5.044 16.75,5.127Z"
|
||||||
|
+ android:fillColor="#ffffff"
|
||||||
|
+ android:fillType="evenOdd"/>
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M13.672,11.986C13.998,12.312 13.998,12.84 13.672,13.165C13.03,13.808 12.708,14.649 12.708,15.493C12.708,16.336 13.03,17.177 13.672,17.82C14.315,18.463 15.156,18.784 16,18.784C16.844,18.784 17.684,18.463 18.327,17.82C18.97,17.177 19.291,16.336 19.291,15.493C19.291,14.649 18.97,13.808 18.327,13.165C18.002,12.84 18.002,12.312 18.327,11.986C18.653,11.661 19.18,11.661 19.506,11.986C20.474,12.955 20.958,14.225 20.958,15.493C20.958,16.76 20.474,18.03 19.506,18.998C18.538,19.966 17.267,20.451 16,20.451C14.732,20.451 13.462,19.966 12.494,18.998C11.526,18.03 11.042,16.76 11.042,15.493C11.042,14.225 11.526,12.955 12.494,11.986C12.819,11.661 13.347,11.661 13.672,11.986Z"
|
||||||
|
+ android:fillColor="#ffffff"
|
||||||
|
+ android:fillType="evenOdd"/>
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M16.085,11C16.545,11 16.918,11.373 16.918,11.833L16.918,15.554C16.918,16.014 16.545,16.387 16.085,16.387C15.624,16.387 15.251,16.014 15.251,15.554L15.251,11.833C15.251,11.373 15.624,11 16.085,11Z"
|
||||||
|
+ android:fillColor="#ffffff"
|
||||||
|
+ android:fillType="evenOdd"/>
|
||||||
|
+ </group>
|
||||||
|
+</vector>
|
||||||
|
diff --git a/res/drawable/accessibility_magnification_mode_fullscreen.xml b/res/drawable/ic_illustration_fullscreen.xml
|
||||||
|
similarity index 100%
|
||||||
|
rename from res/drawable/accessibility_magnification_mode_fullscreen.xml
|
||||||
|
rename to res/drawable/ic_illustration_fullscreen.xml
|
||||||
|
diff --git a/res/drawable/accessibility_magnification_mode_switch.xml b/res/drawable/ic_illustration_switch.xml
|
||||||
|
similarity index 100%
|
||||||
|
rename from res/drawable/accessibility_magnification_mode_switch.xml
|
||||||
|
rename to res/drawable/ic_illustration_switch.xml
|
||||||
|
diff --git a/res/drawable/accessibility_magnification_mode_window.xml b/res/drawable/ic_illustration_window.xml
|
||||||
|
similarity index 100%
|
||||||
|
rename from res/drawable/accessibility_magnification_mode_window.xml
|
||||||
|
rename to res/drawable/ic_illustration_window.xml
|
||||||
|
diff --git a/res/drawable/ic_launcher_background.xml b/res/drawable/ic_launcher_background.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..b91ae32786
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/res/drawable/ic_launcher_background.xml
|
||||||
|
@@ -0,0 +1,37 @@
|
||||||
|
+<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
+<!--
|
||||||
|
+ ~ Copyright ECORP SAS 2022
|
||||||
|
+ ~ This program is free software: you can redistribute it and/or modify
|
||||||
|
+ ~ it under the terms of the GNU General Public License as published by
|
||||||
|
+ ~ the Free Software Foundation, either version 3 of the License, or
|
||||||
|
+ ~ (at your option) any later version.
|
||||||
|
+ ~
|
||||||
|
+ ~ This program is distributed in the hope that it will be useful,
|
||||||
|
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+ ~ GNU General Public License for more details.
|
||||||
|
+ ~
|
||||||
|
+ ~ You should have received a copy of the GNU General Public License
|
||||||
|
+ ~ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
+ -->
|
||||||
|
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
+ xmlns:aapt="http://schemas.android.com/aapt"
|
||||||
|
+ android:width="108dp"
|
||||||
|
+ android:height="108dp"
|
||||||
|
+ android:viewportWidth="108"
|
||||||
|
+ android:viewportHeight="108">
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M0,0h108v108h-108z">
|
||||||
|
+ <aapt:attr name="android:fillColor">
|
||||||
|
+ <gradient
|
||||||
|
+ android:startX="54"
|
||||||
|
+ android:startY="7.15"
|
||||||
|
+ android:endX="54"
|
||||||
|
+ android:endY="208.35"
|
||||||
|
+ android:type="linear">
|
||||||
|
+ <item android:offset="0" android:color="#FFD8DDDF"/>
|
||||||
|
+ <item android:offset="1" android:color="#FF949DA1"/>
|
||||||
|
+ </gradient>
|
||||||
|
+ </aapt:attr>
|
||||||
|
+ </path>
|
||||||
|
+</vector>
|
||||||
|
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
|
||||||
|
index 1ab9876720..169a7bfb21 100644
|
||||||
|
--- a/res/values/arrays.xml
|
||||||
|
+++ b/res/values/arrays.xml
|
||||||
|
@@ -82,6 +82,27 @@
|
||||||
|
<item>10 minutes</item>
|
||||||
|
<item>30 minutes</item>
|
||||||
|
</string-array>
|
||||||
|
+
|
||||||
|
+ <string-array name="connectivity_check_entries">
|
||||||
|
+ <item>Disabled</item>
|
||||||
|
+ <item>DivestOS (US)</item>
|
||||||
|
+ <item>Kuketz (DE) [default]</item>
|
||||||
|
+ <item>openSUSE (DE)</item>
|
||||||
|
+ <item>Ubuntu (UK)</item>
|
||||||
|
+ <item>Graphene (US)</item>
|
||||||
|
+ <item>Kuketz (DE)</item>
|
||||||
|
+ </string-array>
|
||||||
|
+
|
||||||
|
+ <string-array name="connectivity_check_values" translatable="false">
|
||||||
|
+ <item>0</item>
|
||||||
|
+ <item>1</item>
|
||||||
|
+ <item>2</item>
|
||||||
|
+ <item>3</item>
|
||||||
|
+ <item>4</item>
|
||||||
|
+ <item>5</item>
|
||||||
|
+ <item>6</item>
|
||||||
|
+ </string-array>
|
||||||
|
+
|
||||||
|
|
||||||
|
<!-- Do not translate. -->
|
||||||
|
<string-array name="lock_after_timeout_values" translatable="false">
|
||||||
|
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..4da3fdca8c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/res/values/cm_strings.xml
|
||||||
|
@@ -0,0 +1,196 @@
|
||||||
|
+<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
+<!--
|
||||||
|
+ Copyright (C) 2017-2023 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.
|
||||||
|
+-->
|
||||||
|
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
+ <!-- Private DNS -->
|
||||||
|
+ <string name="private_dns_mode_cloudflare" translatable="false">Cloudflare DNS</string>
|
||||||
|
+ <!-- Alternative: 1dot1dot1dot1.cloudflare-dns.com -->
|
||||||
|
+ <string name="private_dns_hostname_cloudflare" translatable="false">9.9.9.9</string>
|
||||||
|
+
|
||||||
|
+ <!-- Advanced keyboard settings -->
|
||||||
|
+ <string name="keyboard_extras_title">Extras</string>
|
||||||
|
+ <string name="advanced_keyboard_settings_title">Advanced settings</string>
|
||||||
|
+
|
||||||
|
+ <!-- Android debugging as root -->
|
||||||
|
+ <string name="adb_enable_root">Rooted debugging</string>
|
||||||
|
+ <string name="adb_enable_summary_root">Allow running Android debugging as root</string>
|
||||||
|
+
|
||||||
|
+ <!-- Backup Transport selection settings menu and activity title -->
|
||||||
|
+ <string name="backup_transport_setting_label">Change backup provider</string>
|
||||||
|
+ <string name="backup_transport_title">Select backup provider</string>
|
||||||
|
+
|
||||||
|
+ <!-- Black theme for dark mode -->
|
||||||
|
+ <string name="berry_black_theme_title">Pure black</string>
|
||||||
|
+ <string name="berry_black_theme_summary">Pure black background for dark theme</string>
|
||||||
|
+
|
||||||
|
+ <!-- Device Info screen. LineageOS legal. -->
|
||||||
|
+ <string name="lineagelicense_title">LineageOS legal</string>
|
||||||
|
+
|
||||||
|
+ <!-- String for removal of sensitive info on about, depending on tap -->
|
||||||
|
+ <string name="device_info_protected_single_press">Tap to show info</string>
|
||||||
|
+
|
||||||
|
+ <!-- [CHAR LIMIT=NONE] Device Info screen. Countdown for user taps to enable development settings -->
|
||||||
|
+ <plurals name="show_dev_countdown_cm">
|
||||||
|
+ <item quantity="one">You are now <xliff:g id="step_count">%1$d</xliff:g> step away from enabling development settings.</item>
|
||||||
|
+ <item quantity="other">You are now <xliff:g id="step_count">%1$d</xliff:g> steps away from enabling development settings.</item>
|
||||||
|
+ </plurals>
|
||||||
|
+ <!-- [CHAR LIMIT=NONE] Device Info screen. Confirmation that developer settings are enabled -->
|
||||||
|
+ <string name="show_dev_on_cm">You have enabled development settings!</string>
|
||||||
|
+ <!-- [CHAR LIMIT=NONE] Device Info screen. Okay we get it, stop pressing, you already have it on -->
|
||||||
|
+ <string name="show_dev_already_cm">No need, you have already enabled development settings.</string>
|
||||||
|
+
|
||||||
|
+ <!-- Display settings screen, peak refresh rate settings summary [CHAR LIMIT=NONE] -->
|
||||||
|
+ <string name="peak_refresh_rate_summary_custom">Automatically raises the refresh rate from 60 to %1$d Hz for some content. Increases battery usage.</string>
|
||||||
|
+
|
||||||
|
+ <!-- Double tap to sleep on status bar or lockscreen -->
|
||||||
|
+ <string name="status_bar_double_tap_to_sleep_title">Tap to sleep</string>
|
||||||
|
+ <string name="status_bar_double_tap_to_sleep_summary">Double-tap on the status bar or lockscreen to turn off the display</string>
|
||||||
|
+
|
||||||
|
+ <!-- High touch polling rate -->
|
||||||
|
+ <string name="high_touch_polling_rate_title">High touch polling rate</string>
|
||||||
|
+ <string name="high_touch_polling_rate_summary">Increase touchscreen polling rate</string>
|
||||||
|
+
|
||||||
|
+ <!-- Heads-up -->
|
||||||
|
+ <string name="heads_up_notifications_enabled_title">Heads-up</string>
|
||||||
|
+ <string name="heads_up_notifications_enabled_summary">Display priority notifications in a small floating window</string>
|
||||||
|
+
|
||||||
|
+ <!-- High touch sensitivity -->
|
||||||
|
+ <string name="high_touch_sensitivity_title">High touch sensitivity</string>
|
||||||
|
+ <string name="high_touch_sensitivity_summary">Increase touchscreen sensitivity so it can be used while wearing gloves</string>
|
||||||
|
+
|
||||||
|
+ <!-- Hotspot extras -->
|
||||||
|
+ <string name="tethering_allow_vpn_upstreams_title">Allow clients to use VPNs</string>
|
||||||
|
+ <string name="tethering_allow_vpn_upstreams_summary">Permit hotspot clients to use this device\u2019s VPN connections for upstream connectivity</string>
|
||||||
|
+
|
||||||
|
+ <!-- Increasing ring tone volume -->
|
||||||
|
+ <string name="increasing_ring_volume_option_title">Increasing ring volume</string>
|
||||||
|
+ <string name="increasing_ring_min_volume_title">Start volume</string>
|
||||||
|
+ <string name="increasing_ring_ramp_up_time_title">Ramp-up time</string>
|
||||||
|
+
|
||||||
|
+ <!-- Lock screen cover art -->
|
||||||
|
+ <string name="lockscreen_media_art_title">Display media cover art</string>
|
||||||
|
+
|
||||||
|
+ <!-- Lock screen pattern size -->
|
||||||
|
+ <string name="lock_pattern_size_3" translatable="false">3 \u00d7 3</string>
|
||||||
|
+ <string name="lock_pattern_size_4" translatable="false">4 \u00d7 4</string>
|
||||||
|
+ <string name="lock_pattern_size_5" translatable="false">5 \u00d7 5</string>
|
||||||
|
+ <string name="lock_pattern_size_6" translatable="false">6 \u00d7 6</string>
|
||||||
|
+ <string name="lock_settings_picker_pattern_size_message">Choose a pattern size</string>
|
||||||
|
+ <!-- Whether a visible red line will be drawn after the user has drawn the unlock pattern incorrectly -->
|
||||||
|
+ <string name="lockpattern_settings_enable_error_path_title">Show pattern error</string>
|
||||||
|
+ <!-- Whether the dots will be drawn when using the lockscreen pattern -->
|
||||||
|
+ <string name="lockpattern_settings_enable_dots_title">Show pattern dots</string>
|
||||||
|
+
|
||||||
|
+ <!-- Max refresh rate -->
|
||||||
|
+ <string name="max_refresh_rate_title">Peak refresh rate</string>
|
||||||
|
+
|
||||||
|
+ <!-- Min refresh rate -->
|
||||||
|
+ <string name="min_refresh_rate_title">Minimum refresh rate</string>
|
||||||
|
+
|
||||||
|
+ <!-- Message shown in fingerprint enrollment dialog to locate the sensor -->
|
||||||
|
+ <string name="fingerprint_enroll_find_sensor_message_front" product="tablet">Locate the fingerprint sensor on the front of your tablet.</string>
|
||||||
|
+ <string name="fingerprint_enroll_find_sensor_message_front" product="device">Locate the fingerprint sensor on the front of your device.</string>
|
||||||
|
+ <string name="fingerprint_enroll_find_sensor_message_front" product="default">Locate the fingerprint sensor on the front of your phone.</string>
|
||||||
|
+ <string name="fingerprint_enroll_find_sensor_message_rear" product="tablet">Locate the fingerprint sensor on the back of your tablet.</string>
|
||||||
|
+ <string name="fingerprint_enroll_find_sensor_message_rear" product="device">Locate the fingerprint sensor on the back of your device.</string>
|
||||||
|
+ <string name="fingerprint_enroll_find_sensor_message_rear" product="default">Locate the fingerprint sensor on the back of your phone.</string>
|
||||||
|
+ <string name="fingerprint_enroll_find_sensor_message_side" product="tablet">Locate the fingerprint sensor on the side of your tablet.</string>
|
||||||
|
+ <string name="fingerprint_enroll_find_sensor_message_side" product="device">Locate the fingerprint sensor on the side of your device.</string>
|
||||||
|
+ <string name="fingerprint_enroll_find_sensor_message_side" product="default">Locate the fingerprint sensor on the side of your phone.</string>
|
||||||
|
+
|
||||||
|
+ <!-- Message shown when user touches the icon on the screen, instead of the real fingerprint sensor -->
|
||||||
|
+ <string name="fingerprint_enroll_touch_dialog_message_front" product="tablet">Touch the sensor on the front of your tablet.</string>
|
||||||
|
+ <string name="fingerprint_enroll_touch_dialog_message_front" product="device">Touch the sensor on the front of your device.</string>
|
||||||
|
+ <string name="fingerprint_enroll_touch_dialog_message_front" product="default">Touch the sensor on the front of your phone.</string>
|
||||||
|
+ <string name="fingerprint_enroll_touch_dialog_message_rear" product="tablet">Touch the sensor on the back of your tablet.</string>
|
||||||
|
+ <string name="fingerprint_enroll_touch_dialog_message_rear" product="device">Touch the sensor on the back of your device.</string>
|
||||||
|
+ <string name="fingerprint_enroll_touch_dialog_message_rear" product="default">Touch the sensor on the back of your phone.</string>
|
||||||
|
+ <string name="fingerprint_enroll_touch_dialog_message_side" product="tablet">Touch the sensor on the side of your tablet.</string>
|
||||||
|
+ <string name="fingerprint_enroll_touch_dialog_message_side" product="device">Touch the sensor on the side of your device.</string>
|
||||||
|
+ <string name="fingerprint_enroll_touch_dialog_message_side" product="default">Touch the sensor on the side of your phone.</string>
|
||||||
|
+
|
||||||
|
+ <!-- Navigation bar hint -->
|
||||||
|
+ <string name="show_navbar_hint_title">Navigation hint</string>
|
||||||
|
+ <string name="show_navbar_hint_summary">Show navigation hint bar at the bottom of the screen</string>
|
||||||
|
+
|
||||||
|
+ <!-- Notification sound timeout -->
|
||||||
|
+ <string name="app_notification_sound_timeout_title">Minimum time between notification sounds</string>
|
||||||
|
+ <string name="app_notification_sound_timeout_summary_template">Allow sounds or vibration no more than once every <xliff:g id="duration">%1$s</xliff:g></string>
|
||||||
|
+ <string name="app_notification_sound_timeout_value_none">No restriction</string>
|
||||||
|
+ <string name="app_notification_sound_timeout_value_10_seconds">10 seconds</string>
|
||||||
|
+ <string name="app_notification_sound_timeout_value_30_seconds">30 seconds</string>
|
||||||
|
+ <string name="app_notification_sound_timeout_value_1_minute">1 minute</string>
|
||||||
|
+ <string name="app_notification_sound_timeout_value_5_minutes">5 minutes</string>
|
||||||
|
+ <string name="app_notification_sound_timeout_value_15_minutes">10 minutes</string>
|
||||||
|
+ <string name="app_notification_sound_timeout_value_30_minutes">30 minutes</string>
|
||||||
|
+
|
||||||
|
+ <!-- One shot automatic brightness -->
|
||||||
|
+ <string name="auto_brightness_one_shot_title">One shot auto-brightness</string>
|
||||||
|
+ <string name="auto_brightness_one_shot_summary">Brightness adjustment will only occur at the moment the screen is turned on</string>
|
||||||
|
+
|
||||||
|
+ <!-- Per-app data restrictions -->
|
||||||
|
+ <string name="data_usage_app_restrict_all">Allow network access</string>
|
||||||
|
+ <string name="data_usage_app_restrict_all_summary">Enable network usage</string>
|
||||||
|
+ <string name="data_usage_app_restrict_mobile">Mobile data</string>
|
||||||
|
+ <string name="data_usage_app_restrict_mobile_summary">Enable usage of mobile data</string>
|
||||||
|
+ <string name="data_usage_app_restrict_vpn">VPN data</string>
|
||||||
|
+ <string name="data_usage_app_restrict_vpn_summary">Enable usage of VPN data</string>
|
||||||
|
+ <string name="data_usage_app_restrict_wifi">Wi\u2011Fi data</string>
|
||||||
|
+ <string name="data_usage_app_restrict_wifi_summary">Enable usage of Wi\u2011Fi data</string>
|
||||||
|
+
|
||||||
|
+ <!-- PIN scramble -->
|
||||||
|
+ <string name="unlock_scramble_pin_layout_title">Scramble layout</string>
|
||||||
|
+ <string name="unlock_scramble_pin_layout_summary">Scramble PIN layout when unlocking device</string>
|
||||||
|
+
|
||||||
|
+ <!-- Proximity wake -->
|
||||||
|
+ <string name="proximity_wake_title">Prevent accidental wake-up</string>
|
||||||
|
+ <string name="proximity_wake_summary">Check the proximity sensor prior to waking up screen</string>
|
||||||
|
+
|
||||||
|
+ <!-- Touchscreen gesture settings -->
|
||||||
|
+ <string name="touchscreen_gesture_settings_title">Touchscreen gestures</string>
|
||||||
|
+ <string name="touchscreen_gesture_settings_summary">Perform various touchscreen gestures for quick actions</string>
|
||||||
|
+
|
||||||
|
+ <!-- Touchscreen hovering -->
|
||||||
|
+ <string name="touchscreen_hovering_title">Touchscreen hovering</string>
|
||||||
|
+ <string name="touchscreen_hovering_summary">Allows you to hover the screen like a mouse in web browsers, remote desktops, etc</string>
|
||||||
|
+
|
||||||
|
+ <!-- Wake on plug -->
|
||||||
|
+ <string name="wake_when_plugged_or_unplugged_title">Wake on plug</string>
|
||||||
|
+ <string name="wake_when_plugged_or_unplugged_summary">Turn the screen on when connecting or disconnecting a power source</string>
|
||||||
|
+
|
||||||
|
+ <!-- FastCharge feature -->
|
||||||
|
+ <string name="fast_charging_title">Fast charging</string>
|
||||||
|
+ <string name="fast_charging_summary">Disable to reduce the heat produced by the device while charging or to extend the lifespan of the battery</string>
|
||||||
|
+
|
||||||
|
+ <!-- Preference and settings suggestion title text for screen off UDFPS (phone) [CHAR LIMIT=60]-->
|
||||||
|
+ <string name="ambient_display_screen_off_udfps_title" product="default">Long press on fingerprint sensor to unlock phone</string>
|
||||||
|
+ <!-- Preference and settings suggestion title text for screen off UDFPS (tablet) [CHAR LIMIT=60]-->
|
||||||
|
+ <string name="ambient_display_screen_off_udfps_title" product="tablet">Long press on fingerprint sensor to unlock tablet</string>
|
||||||
|
+ <!-- Preference and settings suggestion title text for screen off UDFPS (device) [CHAR LIMIT=60]-->
|
||||||
|
+ <string name="ambient_display_screen_off_udfps_title" product="device">Long press on fingerprint sensor to unlock device</string>
|
||||||
|
+ <!-- Summary text for screen off UDFPS [CHAR LIMIT=NONE]-->
|
||||||
|
+ <string name="ambient_display_screen_off_udfps_summary">To wake up your screen and unlock, long press your under-display fingerprint sensor.</string>
|
||||||
|
+
|
||||||
|
+ <!-- Warning message for the sd card setup -->
|
||||||
|
+ <string name="storage_warning_internal">Warning: This option may not work properly or lead to data loss and is therefore not recommended!</string>
|
||||||
|
+
|
||||||
|
+ <!-- Location settings screen, setting summary for Assisted GPS switch -->
|
||||||
|
+ <string name="assisted_gps_summary">Download satellite assistance data from the internet which can greatly improve the GPS startup performance. For emergency calls, assisted GPS is always allowed.</string>
|
||||||
|
+
|
||||||
|
+ <!-- LeOS Advanced Privacy -->
|
||||||
|
+ <string name="advanced_privacy_dashboard_title" translatable="false">Advanced Privacy</string>
|
||||||
|
+ <string name="advanced_privacy_dashboard_summary">Manage trackers, fake location, hide IP address</string>
|
||||||
|
+</resources>
|
||||||
|
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
||||||
|
index c796551cde..d3b83aa01c 100644
|
||||||
|
--- a/res/values/strings.xml
|
||||||
|
+++ b/res/values/strings.xml
|
||||||
|
@@ -640,6 +640,9 @@
|
||||||
|
<!-- Main Settings screen setting summary for the item that takes you to the privacy and security settings. [CHAR LIMIT=60] -->
|
||||||
|
<string name="safety_center_summary">App security, device lock, permissions</string>
|
||||||
|
|
||||||
|
+ <!-- Summary for e Security settings, explaining a few important settings under it [CHAR LIMIT=NONE] -->
|
||||||
|
+ <string name="security_dashboard_summary_e">Screen lock, app security</string>
|
||||||
|
+
|
||||||
|
<!-- Face enrollment and settings --><skip />
|
||||||
|
<!-- Note: Update FaceEnrollParentalConsent.CONSENT_STRING_RESOURCES when any _consent_ strings are added or removed. -->
|
||||||
|
<!-- Message shown in summary field when face unlock is set up. [CHAR LIMIT=40] -->
|
||||||
|
@@ -12343,6 +12346,8 @@
|
||||||
|
|
||||||
|
<!-- Warning message when we try to dock an app not supporting multiple instances split into multiple sides [CHAR LIMIT=NONE] -->
|
||||||
|
<string name="dock_multi_instances_not_supported_text">"This app can only be opened in 1 window"</string>
|
||||||
|
+ <string name="connectivity_check_title">Internet connectivity check</string>
|
||||||
|
+ <string name="connectivity_check_summary">HTTP endpoints to use for performing internet connectivity checks.</string>
|
||||||
|
<string name="security_settings_fingerprint_settings_use_fingerprint_unlock_phone_title">Allow fingerprint unlocking</string>
|
||||||
|
<string name="security_settings_fingerprint_settings_use_fingerprint_unlock_phone_summary">Allow fingerprints to unlock the screen lock. If this is disabled, fingerprints can still be used in apps.</string>
|
||||||
|
|
||||||
|
diff --git a/res/xml/advanced_privacy_dashboard_settings.xml b/res/xml/advanced_privacy_dashboard_settings.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..8433a4402a
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/res/xml/advanced_privacy_dashboard_settings.xml
|
||||||
|
@@ -0,0 +1,28 @@
|
||||||
|
+<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
+<!--
|
||||||
|
+ Copyright (C) 2019-2022 ECORP SAS
|
||||||
|
+
|
||||||
|
+ 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.
|
||||||
|
+ -->
|
||||||
|
+
|
||||||
|
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||||
|
+ android:key="advanced_privacy"
|
||||||
|
+ android:title="@string/advanced_privacy_dashboard_title">
|
||||||
|
+
|
||||||
|
+ <Preference>
|
||||||
|
+ <intent android:action="android.intent.action.MAIN"
|
||||||
|
+ android:targetPackage="foundation.e.advancedprivacy"
|
||||||
|
+ android:targetClass="foundation.e.privacycentralapp.main.MainActivity" />
|
||||||
|
+ </Preference>
|
||||||
|
+</PreferenceScreen>
|
||||||
|
diff --git a/res/xml/bubble_notification_settings.xml b/res/xml/bubble_notification_settings.xml
|
||||||
|
index 3e137d7001..82a89a3249 100644
|
||||||
|
--- a/res/xml/bubble_notification_settings.xml
|
||||||
|
+++ b/res/xml/bubble_notification_settings.xml
|
||||||
|
@@ -26,10 +26,7 @@
|
||||||
|
<com.android.settingslib.widget.IllustrationPreference
|
||||||
|
android:key="bubbles_illustration"
|
||||||
|
settings:searchable="false"
|
||||||
|
- app:lottie_rawRes="@raw/lottie_bubbles"
|
||||||
|
- app:lottie_cacheComposition="false"
|
||||||
|
- settings:dynamicColor="true"
|
||||||
|
- settings:controller="com.android.settings.notification.BubbleNotificationIllustrationPreferenceController"/>
|
||||||
|
+ app:lottie_rawRes="@raw/lottie_bubbles"/>
|
||||||
|
|
||||||
|
<com.android.settingslib.widget.MainSwitchPreference
|
||||||
|
android:key="global_notification_bubbles"
|
||||||
|
diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml
|
||||||
|
index abb1a7ff3c..8206dc861d 100644
|
||||||
|
--- a/res/xml/top_level_settings.xml
|
||||||
|
+++ b/res/xml/top_level_settings.xml
|
||||||
|
@@ -151,7 +151,7 @@
|
||||||
|
android:key="top_level_security"
|
||||||
|
android:order="-50"
|
||||||
|
android:title="@string/security_settings_title"
|
||||||
|
- android:summary="@string/security_dashboard_summary"
|
||||||
|
+ android:summary="@string/security_dashboard_summary_e"
|
||||||
|
settings:highlightableMenuKey="@string/menu_key_security"
|
||||||
|
settings:controller="com.android.settings.security.TopLevelSecurityEntryPreferenceController"/>
|
||||||
|
|
||||||
|
@@ -165,6 +165,14 @@
|
||||||
|
settings:highlightableMenuKey="@string/menu_key_privacy"
|
||||||
|
settings:controller="com.android.settings.privacy.TopLevelPrivacyEntryPreferenceController"/>
|
||||||
|
|
||||||
|
+ <com.android.settings.widget.HomepagePreference
|
||||||
|
+ android:key="top_level_advanced_privacy"
|
||||||
|
+ android:title="@string/advanced_privacy_dashboard_title"
|
||||||
|
+ android:summary="@string/advanced_privacy_dashboard_summary"
|
||||||
|
+ android:icon="@drawable/ic_homepage_advanced_privacy"
|
||||||
|
+ android:order="-35"
|
||||||
|
+ android:fragment="com.android.settings.privacy.AdvancedPrivacyDashboardFragment"/>
|
||||||
|
+
|
||||||
|
<com.android.settings.widget.HomepagePreference
|
||||||
|
android:fragment="com.android.settings.location.LocationSettings"
|
||||||
|
android:icon="@drawable/ic_settings_location"
|
||||||
|
diff --git a/src/com/android/settings/network/ConnectivityCheckPreferenceController.java b/src/com/android/settings/network/ConnectivityCheckPreferenceController.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..04bcbe3b60
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/com/android/settings/network/ConnectivityCheckPreferenceController.java
|
||||||
|
@@ -0,0 +1,295 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2020 The Android Open Source 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.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+package com.android.settings.network;
|
||||||
|
+
|
||||||
|
+import android.content.ContentResolver;
|
||||||
|
+import android.content.Context;
|
||||||
|
+import android.content.res.Resources;
|
||||||
|
+import android.database.ContentObserver;
|
||||||
|
+import android.net.LinkProperties;
|
||||||
|
+import android.net.Network;
|
||||||
|
+import android.os.Handler;
|
||||||
|
+import android.os.Looper;
|
||||||
|
+import android.os.UserHandle;
|
||||||
|
+import android.os.UserManager;
|
||||||
|
+import android.provider.Settings;
|
||||||
|
+import androidx.preference.ListPreference;
|
||||||
|
+import androidx.preference.Preference;
|
||||||
|
+import androidx.preference.PreferenceScreen;
|
||||||
|
+import com.android.internal.util.ArrayUtils;
|
||||||
|
+import com.android.settings.R;
|
||||||
|
+import com.android.settings.core.BasePreferenceController;
|
||||||
|
+import com.android.settings.core.PreferenceControllerMixin;
|
||||||
|
+import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
||||||
|
+import com.android.settingslib.RestrictedLockUtilsInternal;
|
||||||
|
+import com.android.settingslib.core.lifecycle.events.OnResume;
|
||||||
|
+
|
||||||
|
+public class ConnectivityCheckPreferenceController
|
||||||
|
+ extends BasePreferenceController
|
||||||
|
+ implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener,
|
||||||
|
+ OnResume {
|
||||||
|
+
|
||||||
|
+ // imported defaults from AOSP NetworkStack
|
||||||
|
+ private static final String STANDARD_HTTPS_URL =
|
||||||
|
+ "http://captiveportal.kuketz.de/generate_204";
|
||||||
|
+ private static final String STANDARD_HTTP_URL =
|
||||||
|
+ "http://captiveportal.kuketz.de/generate_204";
|
||||||
|
+ private static final String STANDARD_FALLBACK_URL =
|
||||||
|
+ "http://captiveportal.kuketz.de/gen_204";
|
||||||
|
+ private static final String STANDARD_OTHER_FALLBACK_URLS =
|
||||||
|
+ "http://captiveportal.kuketz.de/generate_204";
|
||||||
|
+
|
||||||
|
+ // GrapheneOS
|
||||||
|
+ private static final String GRAPHENEOS_CAPTIVE_PORTAL_HTTPS_URL =
|
||||||
|
+ "https://connectivitycheck.grapheneos.network/generate_204";
|
||||||
|
+ private static final String GRAPHENEOS_CAPTIVE_PORTAL_HTTP_URL =
|
||||||
|
+ "http://connectivitycheck.grapheneos.network/generate_204";
|
||||||
|
+ private static final String GRAPHENEOS_CAPTIVE_PORTAL_FALLBACK_URL =
|
||||||
|
+ "http://grapheneos.online/gen_204";
|
||||||
|
+ private static final String GRAPHENEOS_CAPTIVE_PORTAL_OTHER_FALLBACK_URL =
|
||||||
|
+ "http://grapheneos.online/generate_204";
|
||||||
|
+
|
||||||
|
+ // DivestOS
|
||||||
|
+ private static final String DIVESTOS_HTTPS_URL =
|
||||||
|
+ "https://divestos.org/generate_204";
|
||||||
|
+ private static final String DIVESTOS_HTTP_URL =
|
||||||
|
+ "http://divestos.org/generate_204";
|
||||||
|
+
|
||||||
|
+ // openSUSE
|
||||||
|
+ private static final String OPENSUSE_HTTPS_URL =
|
||||||
|
+ "https://conncheck.opensuse.org";
|
||||||
|
+ private static final String OPENSUSE_HTTP_URL =
|
||||||
|
+ "http://conncheck.opensuse.org";
|
||||||
|
+
|
||||||
|
+ // Ubuntu
|
||||||
|
+ private static final String UBUNTU_HTTPS_URL =
|
||||||
|
+ "https://connectivity-check.ubuntu.com";
|
||||||
|
+ private static final String UBUNTU_HTTP_URL =
|
||||||
|
+ "http://connectivity-check.ubuntu.com";
|
||||||
|
+
|
||||||
|
+ // Kuketz, https://www.kuketz-blog.de/android-captive-portal-check-204-http-antwort-von-captiveportal-kuketz-de/
|
||||||
|
+ private static final String KUKETZ_HTTPS_URL =
|
||||||
|
+ "https://captiveportal.kuketz.de";
|
||||||
|
+ private static final String KUKETZ_HTTP_URL =
|
||||||
|
+ "http://captiveportal.kuketz.de";
|
||||||
|
+
|
||||||
|
+ private static final int DISABLED_CAPTIVE_PORTAL_INTVAL = 0;
|
||||||
|
+ private static final int DIVESTOS_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 1;
|
||||||
|
+ private static final int STANDARD_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 2;
|
||||||
|
+ private static final int OPENSUSE_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 3;
|
||||||
|
+ private static final int UBUNTU_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 4;
|
||||||
|
+ private static final int GRAPHENEOS_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 5;
|
||||||
|
+ private static final int KUKETZ_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 6;
|
||||||
|
+
|
||||||
|
+ private static final String KEY_CONNECTIVITY_CHECK_SETTINGS =
|
||||||
|
+ "connectivity_check_settings";
|
||||||
|
+
|
||||||
|
+ private ListPreference mConnectivityPreference;
|
||||||
|
+
|
||||||
|
+ public ConnectivityCheckPreferenceController(Context context) {
|
||||||
|
+ super(context, KEY_CONNECTIVITY_CHECK_SETTINGS);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public int getAvailabilityStatus() {
|
||||||
|
+ if (isDisabledByAdmin()) {
|
||||||
|
+ return BasePreferenceController.DISABLED_FOR_USER;
|
||||||
|
+ }
|
||||||
|
+ return BasePreferenceController.AVAILABLE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void displayPreference(PreferenceScreen screen) {
|
||||||
|
+ ListPreference captiveList = new ListPreference(screen.getContext());
|
||||||
|
+ captiveList.setKey(KEY_CONNECTIVITY_CHECK_SETTINGS);
|
||||||
|
+ captiveList.setOrder(30);
|
||||||
|
+ captiveList.setIcon(R.drawable.ic_settings_language);
|
||||||
|
+ captiveList.setTitle(R.string.connectivity_check_title);
|
||||||
|
+ captiveList.setSummary(R.string.connectivity_check_summary);
|
||||||
|
+ captiveList.setEntries(R.array.connectivity_check_entries);
|
||||||
|
+ captiveList.setEntryValues(R.array.connectivity_check_values);
|
||||||
|
+
|
||||||
|
+ if (mConnectivityPreference == null) {
|
||||||
|
+ screen.addPreference(captiveList);
|
||||||
|
+ mConnectivityPreference = captiveList;
|
||||||
|
+ }
|
||||||
|
+ super.displayPreference(screen);
|
||||||
|
+ updatePreferenceState();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public String getPreferenceKey() {
|
||||||
|
+ return KEY_CONNECTIVITY_CHECK_SETTINGS;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ private void updatePreferenceState() {
|
||||||
|
+ if (Settings.Global.getInt(mContext.getContentResolver(),
|
||||||
|
+ Settings.Global.CAPTIVE_PORTAL_MODE, Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT)
|
||||||
|
+ == Settings.Global.CAPTIVE_PORTAL_MODE_IGNORE) {
|
||||||
|
+ mConnectivityPreference.setValueIndex(DISABLED_CAPTIVE_PORTAL_INTVAL);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ String pref = Settings.Global.getString(
|
||||||
|
+ mContext.getContentResolver(), Settings.Global.CAPTIVE_PORTAL_HTTP_URL);
|
||||||
|
+ if (STANDARD_HTTP_URL.equals(pref)) {
|
||||||
|
+ mConnectivityPreference.setValueIndex(
|
||||||
|
+ STANDARD_CAPTIVE_PORTAL_HTTP_URL_INTVAL);
|
||||||
|
+ } else if (GRAPHENEOS_CAPTIVE_PORTAL_HTTP_URL.equals(pref)) {
|
||||||
|
+ mConnectivityPreference.setValueIndex(
|
||||||
|
+ GRAPHENEOS_CAPTIVE_PORTAL_HTTP_URL_INTVAL);
|
||||||
|
+ } else if (DIVESTOS_HTTP_URL.equals(pref)) {
|
||||||
|
+ mConnectivityPreference.setValueIndex(
|
||||||
|
+ DIVESTOS_CAPTIVE_PORTAL_HTTP_URL_INTVAL);
|
||||||
|
+ } else if (OPENSUSE_HTTP_URL.equals(pref)) {
|
||||||
|
+ mConnectivityPreference.setValueIndex(
|
||||||
|
+ OPENSUSE_CAPTIVE_PORTAL_HTTP_URL_INTVAL);
|
||||||
|
+ } else if (UBUNTU_HTTP_URL.equals(pref)) {
|
||||||
|
+ mConnectivityPreference.setValueIndex(
|
||||||
|
+ UBUNTU_CAPTIVE_PORTAL_HTTP_URL_INTVAL);
|
||||||
|
+ } else if (KUKETZ_HTTP_URL.equals(pref)) {
|
||||||
|
+ mConnectivityPreference.setValueIndex(
|
||||||
|
+ KUKETZ_CAPTIVE_PORTAL_HTTP_URL_INTVAL);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void onResume() {
|
||||||
|
+ updatePreferenceState();
|
||||||
|
+ if (mConnectivityPreference != null) {
|
||||||
|
+ setCaptivePortalURLs(
|
||||||
|
+ mContext.getContentResolver(),
|
||||||
|
+ Integer.parseInt(mConnectivityPreference.getValue()));
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ private void setCaptivePortalURLs(ContentResolver cr, int mode) {
|
||||||
|
+ switch (mode) {
|
||||||
|
+ case STANDARD_CAPTIVE_PORTAL_HTTP_URL_INTVAL:
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTP_URL,
|
||||||
|
+ STANDARD_HTTP_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL,
|
||||||
|
+ STANDARD_HTTPS_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL,
|
||||||
|
+ STANDARD_FALLBACK_URL);
|
||||||
|
+ Settings.Global.putString(
|
||||||
|
+ cr, Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS,
|
||||||
|
+ STANDARD_OTHER_FALLBACK_URLS);
|
||||||
|
+ Settings.Global.putInt(cr, Settings.Global.CAPTIVE_PORTAL_MODE,
|
||||||
|
+ Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT);
|
||||||
|
+ break;
|
||||||
|
+ case GRAPHENEOS_CAPTIVE_PORTAL_HTTP_URL_INTVAL:
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTP_URL,
|
||||||
|
+ GRAPHENEOS_CAPTIVE_PORTAL_HTTP_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL,
|
||||||
|
+ GRAPHENEOS_CAPTIVE_PORTAL_HTTPS_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL,
|
||||||
|
+ GRAPHENEOS_CAPTIVE_PORTAL_FALLBACK_URL);
|
||||||
|
+ Settings.Global.putString(
|
||||||
|
+ cr, Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS,
|
||||||
|
+ GRAPHENEOS_CAPTIVE_PORTAL_OTHER_FALLBACK_URL);
|
||||||
|
+ Settings.Global.putInt(cr, Settings.Global.CAPTIVE_PORTAL_MODE,
|
||||||
|
+ Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT);
|
||||||
|
+ break;
|
||||||
|
+ case DIVESTOS_CAPTIVE_PORTAL_HTTP_URL_INTVAL:
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTP_URL,
|
||||||
|
+ DIVESTOS_HTTP_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL,
|
||||||
|
+ DIVESTOS_HTTPS_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL,
|
||||||
|
+ DIVESTOS_HTTP_URL);
|
||||||
|
+ Settings.Global.putString(
|
||||||
|
+ cr, Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS,
|
||||||
|
+ DIVESTOS_HTTP_URL);
|
||||||
|
+ Settings.Global.putInt(cr, Settings.Global.CAPTIVE_PORTAL_MODE,
|
||||||
|
+ Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT);
|
||||||
|
+ break;
|
||||||
|
+ case OPENSUSE_CAPTIVE_PORTAL_HTTP_URL_INTVAL:
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTP_URL,
|
||||||
|
+ OPENSUSE_HTTP_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL,
|
||||||
|
+ OPENSUSE_HTTPS_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL,
|
||||||
|
+ OPENSUSE_HTTP_URL);
|
||||||
|
+ Settings.Global.putString(
|
||||||
|
+ cr, Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS,
|
||||||
|
+ OPENSUSE_HTTP_URL);
|
||||||
|
+ Settings.Global.putInt(cr, Settings.Global.CAPTIVE_PORTAL_MODE,
|
||||||
|
+ Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT);
|
||||||
|
+ break;
|
||||||
|
+ case UBUNTU_CAPTIVE_PORTAL_HTTP_URL_INTVAL:
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTP_URL,
|
||||||
|
+ UBUNTU_HTTP_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL,
|
||||||
|
+ UBUNTU_HTTPS_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL,
|
||||||
|
+ UBUNTU_HTTP_URL);
|
||||||
|
+ Settings.Global.putString(
|
||||||
|
+ cr, Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS,
|
||||||
|
+ UBUNTU_HTTP_URL);
|
||||||
|
+ Settings.Global.putInt(cr, Settings.Global.CAPTIVE_PORTAL_MODE,
|
||||||
|
+ Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT);
|
||||||
|
+ break;
|
||||||
|
+ case KUKETZ_CAPTIVE_PORTAL_HTTP_URL_INTVAL:
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTP_URL,
|
||||||
|
+ KUKETZ_HTTP_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL,
|
||||||
|
+ KUKETZ_HTTPS_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL,
|
||||||
|
+ KUKETZ_HTTP_URL);
|
||||||
|
+ Settings.Global.putString(
|
||||||
|
+ cr, Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS,
|
||||||
|
+ KUKETZ_HTTP_URL);
|
||||||
|
+ Settings.Global.putInt(cr, Settings.Global.CAPTIVE_PORTAL_MODE,
|
||||||
|
+ Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT);
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ // Default URLs as placeholder
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTP_URL,
|
||||||
|
+ STANDARD_HTTP_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL,
|
||||||
|
+ STANDARD_HTTPS_URL);
|
||||||
|
+ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL,
|
||||||
|
+ STANDARD_FALLBACK_URL);
|
||||||
|
+ Settings.Global.putString(
|
||||||
|
+ cr, Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS,
|
||||||
|
+ STANDARD_OTHER_FALLBACK_URLS);
|
||||||
|
+ Settings.Global.putInt(cr, Settings.Global.CAPTIVE_PORTAL_MODE,
|
||||||
|
+ Settings.Global.CAPTIVE_PORTAL_MODE_IGNORE);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public boolean onPreferenceChange(Preference preference, Object value) {
|
||||||
|
+ final String key = preference.getKey();
|
||||||
|
+ if (KEY_CONNECTIVITY_CHECK_SETTINGS.equals(key)) {
|
||||||
|
+ setCaptivePortalURLs(mContext.getContentResolver(),
|
||||||
|
+ Integer.parseInt((String)value));
|
||||||
|
+ return true;
|
||||||
|
+ } else {
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ private EnforcedAdmin getEnforcedAdmin() {
|
||||||
|
+ return RestrictedLockUtilsInternal.checkIfRestrictionEnforced(
|
||||||
|
+ mContext, UserManager.DISALLOW_CONFIG_PRIVATE_DNS,
|
||||||
|
+ UserHandle.myUserId());
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ private boolean isDisabledByAdmin() { return getEnforcedAdmin() != null; }
|
||||||
|
+}
|
||||||
|
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
|
||||||
|
index 4ea3464569..00daadb8dc 100644
|
||||||
|
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
|
||||||
|
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
|
||||||
|
@@ -123,6 +123,9 @@ public class NetworkDashboardFragment extends DashboardFragment implements
|
||||||
|
}
|
||||||
|
controllers.add(privateDnsPreferenceController);
|
||||||
|
controllers.add(new NetworkProviderCallsSmsController(context, lifecycle, lifecycleOwner));
|
||||||
|
+ ConnectivityCheckPreferenceController connectivityCheck =
|
||||||
|
+ new ConnectivityCheckPreferenceController(context);
|
||||||
|
+ controllers.add(connectivityCheck);
|
||||||
|
|
||||||
|
// Start SettingsDumpService after the MobileNetworkRepository is created.
|
||||||
|
Intent intent = new Intent(context, SettingsDumpService.class);
|
||||||
|
diff --git a/src/com/android/settings/privacy/AdvancedPrivacyDashboardFragment.java b/src/com/android/settings/privacy/AdvancedPrivacyDashboardFragment.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..c0564742c3
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/com/android/settings/privacy/AdvancedPrivacyDashboardFragment.java
|
||||||
|
@@ -0,0 +1,52 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2019-2022 ECORP SAS
|
||||||
|
+ *
|
||||||
|
+ * 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.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+package com.android.settings.privacy;
|
||||||
|
+
|
||||||
|
+import android.app.Activity;
|
||||||
|
+import android.content.ComponentName;
|
||||||
|
+import android.content.Intent;
|
||||||
|
+import android.os.Bundle;
|
||||||
|
+
|
||||||
|
+import androidx.fragment.app.Fragment;
|
||||||
|
+
|
||||||
|
+import com.android.settings.R;
|
||||||
|
+import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
|
+import com.android.settingslib.search.SearchIndexable;
|
||||||
|
+
|
||||||
|
+@SearchIndexable
|
||||||
|
+public class AdvancedPrivacyDashboardFragment extends Fragment {
|
||||||
|
+
|
||||||
|
+ private static final String advancedPrivacyPackageName = "foundation.e.advancedprivacy";
|
||||||
|
+ private static final String advancedPrivacyActivityName = "foundation.e.advancedprivacy.main.MainActivity";
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void onCreate(Bundle savedInstanceState) {
|
||||||
|
+ super.onCreate(savedInstanceState);
|
||||||
|
+
|
||||||
|
+ Activity activity = getActivity();
|
||||||
|
+ Intent intent = new Intent().setComponent(new ComponentName(advancedPrivacyPackageName,
|
||||||
|
+ advancedPrivacyActivityName));
|
||||||
|
+ startActivity(intent);
|
||||||
|
+
|
||||||
|
+ if (activity != null) {
|
||||||
|
+ activity.finish();
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
|
+ new BaseSearchIndexProvider(R.xml.advanced_privacy_dashboard_settings);
|
||||||
|
+}
|
||||||
|
\ No newline at end of file
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,251 @@
|
||||||
|
From 03249f13eb61fc8b5685034a11b39ca7d3792374 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Thu, 25 Jan 2024 11:58:25 +0100
|
||||||
|
Subject: [PATCH] 0001-AdvancedPrivacy
|
||||||
|
|
||||||
|
---
|
||||||
|
0001-AdvancedPrivacy.patch | 32 +-
|
||||||
|
res/drawable/ic_homepage_advanced_privacy.xml | 41 +++
|
||||||
|
...een.xml => ic_illustration_fullscreen.xml} | 0
|
||||||
|
..._switch.xml => ic_illustration_switch.xml} | 0
|
||||||
|
..._window.xml => ic_illustration_window.xml} | 0
|
||||||
|
res/drawable/ic_launcher_background.xml | 37 +++
|
||||||
|
res/values/arrays.xml | 21 ++
|
||||||
|
res/values/cm_strings.xml | 196 ++++++++++++
|
||||||
|
res/values/strings.xml | 5 +
|
||||||
|
.../advanced_privacy_dashboard_settings.xml | 28 ++
|
||||||
|
res/xml/bubble_notification_settings.xml | 5 +-
|
||||||
|
res/xml/top_level_settings.xml | 10 +-
|
||||||
|
...ConnectivityCheckPreferenceController.java | 295 ++++++++++++++++++
|
||||||
|
.../network/NetworkDashboardFragment.java | 3 +
|
||||||
|
.../AdvancedPrivacyDashboardFragment.java | 52 +++
|
||||||
|
15 files changed, 689 insertions(+), 36 deletions(-)
|
||||||
|
create mode 100644 res/drawable/ic_homepage_advanced_privacy.xml
|
||||||
|
rename res/drawable/{accessibility_magnification_mode_fullscreen.xml => ic_illustration_fullscreen.xml} (100%)
|
||||||
|
rename res/drawable/{accessibility_magnification_mode_switch.xml => ic_illustration_switch.xml} (100%)
|
||||||
|
rename res/drawable/{accessibility_magnification_mode_window.xml => ic_illustration_window.xml} (100%)
|
||||||
|
create mode 100644 res/drawable/ic_launcher_background.xml
|
||||||
|
create mode 100644 res/values/cm_strings.xml
|
||||||
|
create mode 100644 res/xml/advanced_privacy_dashboard_settings.xml
|
||||||
|
create mode 100644 src/com/android/settings/network/ConnectivityCheckPreferenceController.java
|
||||||
|
create mode 100644 src/com/android/settings/privacy/AdvancedPrivacyDashboardFragment.java
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/res/drawable/ic_homepage_advanced_privacy.xml b/res/drawable/ic_homepage_advanced_privacy.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..3786ebb858
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/res/drawable/ic_homepage_advanced_privacy.xml
|
||||||
|
@@ -0,0 +1,41 @@
|
||||||
|
+<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
+<!--
|
||||||
|
+ ~ Copyright ECORP SAS 2022
|
||||||
|
+ ~ This program is free software: you can redistribute it and/or modify
|
||||||
|
+ ~ it under the terms of the GNU General Public License as published by
|
||||||
|
+ ~ the Free Software Foundation, either version 3 of the License, or
|
||||||
|
+ ~ (at your option) any later version.
|
||||||
|
+ ~
|
||||||
|
+ ~ This program is distributed in the hope that it will be useful,
|
||||||
|
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+ ~ GNU General Public License for more details.
|
||||||
|
+ ~
|
||||||
|
+ ~ You should have received a copy of the GNU General Public License
|
||||||
|
+ ~ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
+ -->
|
||||||
|
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
+ android:width="36dp"
|
||||||
|
+ android:height="36dp"
|
||||||
|
+ android:viewportWidth="32"
|
||||||
|
+ android:viewportHeight="32">
|
||||||
|
+ <group>
|
||||||
|
+ <clip-path
|
||||||
|
+ android:pathData="M0,0h32v32h-32z"/>
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M7,0L25,0A7,7 0,0 1,32 7L32,25A7,7 0,0 1,25 32L7,32A7,7 0,0 1,0 25L0,7A7,7 0,0 1,7 0z"
|
||||||
|
+ android:fillColor="#2CCF69"/>
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M15.983,6.667V6.667C15.917,6.666 15.85,6.675 15.785,6.693L7.869,10.044C7.815,10.069 7.765,10.111 7.727,10.168C7.689,10.228 7.667,10.301 7.667,10.377L7.667,10.379C7.667,18.181 12.058,23.35 15.862,24.975L15.865,24.977C15.902,24.992 15.94,25 15.978,25C16.016,25 16.054,24.992 16.091,24.977L16.097,24.974L16.097,24.974C19.126,23.687 24.324,19.049 24.333,10.402C24.33,10.323 24.305,10.248 24.263,10.186C24.22,10.122 24.162,10.075 24.099,10.049C24.099,10.049 24.099,10.049 24.099,10.049L16.169,6.691C16.112,6.675 16.053,6.667 15.994,6.667L15.983,6.667ZM16.75,5.127L24.75,8.514C25.114,8.669 25.425,8.927 25.647,9.258C25.869,9.589 25.992,9.979 26,10.379C26,19.777 20.332,24.986 16.749,26.508C16.505,26.613 16.243,26.667 15.978,26.667C15.713,26.667 15.451,26.613 15.207,26.508C10.749,24.603 6,18.803 6,10.379C5.999,9.982 6.114,9.594 6.328,9.262C6.543,8.931 6.849,8.671 7.208,8.514L15.207,5.127C15.463,5.041 15.73,4.998 15.999,5C16.255,5.001 16.508,5.044 16.75,5.127Z"
|
||||||
|
+ android:fillColor="#ffffff"
|
||||||
|
+ android:fillType="evenOdd"/>
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M13.672,11.986C13.998,12.312 13.998,12.84 13.672,13.165C13.03,13.808 12.708,14.649 12.708,15.493C12.708,16.336 13.03,17.177 13.672,17.82C14.315,18.463 15.156,18.784 16,18.784C16.844,18.784 17.684,18.463 18.327,17.82C18.97,17.177 19.291,16.336 19.291,15.493C19.291,14.649 18.97,13.808 18.327,13.165C18.002,12.84 18.002,12.312 18.327,11.986C18.653,11.661 19.18,11.661 19.506,11.986C20.474,12.955 20.958,14.225 20.958,15.493C20.958,16.76 20.474,18.03 19.506,18.998C18.538,19.966 17.267,20.451 16,20.451C14.732,20.451 13.462,19.966 12.494,18.998C11.526,18.03 11.042,16.76 11.042,15.493C11.042,14.225 11.526,12.955 12.494,11.986C12.819,11.661 13.347,11.661 13.672,11.986Z"
|
||||||
|
+ android:fillColor="#ffffff"
|
||||||
|
+ android:fillType="evenOdd"/>
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M16.085,11C16.545,11 16.918,11.373 16.918,11.833L16.918,15.554C16.918,16.014 16.545,16.387 16.085,16.387C15.624,16.387 15.251,16.014 15.251,15.554L15.251,11.833C15.251,11.373 15.624,11 16.085,11Z"
|
||||||
|
+ android:fillColor="#ffffff"
|
||||||
|
+ android:fillType="evenOdd"/>
|
||||||
|
+ </group>
|
||||||
|
+</vector>
|
||||||
|
diff --git a/res/drawable/accessibility_magnification_mode_fullscreen.xml b/res/drawable/ic_illustration_fullscreen.xml
|
||||||
|
similarity index 100%
|
||||||
|
rename from res/drawable/accessibility_magnification_mode_fullscreen.xml
|
||||||
|
rename to res/drawable/ic_illustration_fullscreen.xml
|
||||||
|
diff --git a/res/drawable/accessibility_magnification_mode_switch.xml b/res/drawable/ic_illustration_switch.xml
|
||||||
|
similarity index 100%
|
||||||
|
rename from res/drawable/accessibility_magnification_mode_switch.xml
|
||||||
|
rename to res/drawable/ic_illustration_switch.xml
|
||||||
|
diff --git a/res/drawable/accessibility_magnification_mode_window.xml b/res/drawable/ic_illustration_window.xml
|
||||||
|
similarity index 100%
|
||||||
|
rename from res/drawable/accessibility_magnification_mode_window.xml
|
||||||
|
rename to res/drawable/ic_illustration_window.xml
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
||||||
|
index c796551cde..d3b83aa01c 100644
|
||||||
|
--- a/res/values/strings.xml
|
||||||
|
+++ b/res/values/strings.xml
|
||||||
|
@@ -640,6 +640,9 @@
|
||||||
|
<!-- Main Settings screen setting summary for the item that takes you to the privacy and security settings. [CHAR LIMIT=60] -->
|
||||||
|
<string name="safety_center_summary">App security, device lock, permissions</string>
|
||||||
|
|
||||||
|
+ <!-- Summary for e Security settings, explaining a few important settings under it [CHAR LIMIT=NONE] -->
|
||||||
|
+ <string name="security_dashboard_summary_e">Screen lock, app security</string>
|
||||||
|
+
|
||||||
|
<!-- Face enrollment and settings --><skip />
|
||||||
|
<!-- Note: Update FaceEnrollParentalConsent.CONSENT_STRING_RESOURCES when any _consent_ strings are added or removed. -->
|
||||||
|
<!-- Message shown in summary field when face unlock is set up. [CHAR LIMIT=40] -->
|
||||||
|
|
||||||
|
diff --git a/res/xml/advanced_privacy_dashboard_settings.xml b/res/xml/advanced_privacy_dashboard_settings.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..8433a4402a
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/res/xml/advanced_privacy_dashboard_settings.xml
|
||||||
|
@@ -0,0 +1,28 @@
|
||||||
|
+<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
+<!--
|
||||||
|
+ Copyright (C) 2019-2022 ECORP SAS
|
||||||
|
+
|
||||||
|
+ 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.
|
||||||
|
+ -->
|
||||||
|
+
|
||||||
|
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||||
|
+ android:key="advanced_privacy"
|
||||||
|
+ android:title="@string/advanced_privacy_dashboard_title">
|
||||||
|
+
|
||||||
|
+ <Preference>
|
||||||
|
+ <intent android:action="android.intent.action.MAIN"
|
||||||
|
+ android:targetPackage="foundation.e.advancedprivacy"
|
||||||
|
+ android:targetClass="foundation.e.privacycentralapp.main.MainActivity" />
|
||||||
|
+ </Preference>
|
||||||
|
+</PreferenceScreen>
|
||||||
|
diff --git a/res/xml/bubble_notification_settings.xml b/res/xml/bubble_notification_settings.xml
|
||||||
|
index 3e137d7001..82a89a3249 100644
|
||||||
|
--- a/res/xml/bubble_notification_settings.xml
|
||||||
|
+++ b/res/xml/bubble_notification_settings.xml
|
||||||
|
@@ -26,10 +26,7 @@
|
||||||
|
<com.android.settingslib.widget.IllustrationPreference
|
||||||
|
android:key="bubbles_illustration"
|
||||||
|
settings:searchable="false"
|
||||||
|
- app:lottie_rawRes="@raw/lottie_bubbles"
|
||||||
|
- app:lottie_cacheComposition="false"
|
||||||
|
- settings:dynamicColor="true"
|
||||||
|
- settings:controller="com.android.settings.notification.BubbleNotificationIllustrationPreferenceController"/>
|
||||||
|
+ app:lottie_rawRes="@raw/lottie_bubbles"/>
|
||||||
|
|
||||||
|
<com.android.settingslib.widget.MainSwitchPreference
|
||||||
|
android:key="global_notification_bubbles"
|
||||||
|
diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml
|
||||||
|
index abb1a7ff3c..8206dc861d 100644
|
||||||
|
--- a/res/xml/top_level_settings.xml
|
||||||
|
+++ b/res/xml/top_level_settings.xml
|
||||||
|
@@ -151,7 +151,7 @@
|
||||||
|
android:key="top_level_security"
|
||||||
|
android:order="-50"
|
||||||
|
android:title="@string/security_settings_title"
|
||||||
|
- android:summary="@string/security_dashboard_summary"
|
||||||
|
+ android:summary="@string/security_dashboard_summary_e"
|
||||||
|
settings:highlightableMenuKey="@string/menu_key_security"
|
||||||
|
settings:controller="com.android.settings.security.TopLevelSecurityEntryPreferenceController"/>
|
||||||
|
|
||||||
|
@@ -165,6 +165,14 @@
|
||||||
|
settings:highlightableMenuKey="@string/menu_key_privacy"
|
||||||
|
settings:controller="com.android.settings.privacy.TopLevelPrivacyEntryPreferenceController"/>
|
||||||
|
|
||||||
|
+ <com.android.settings.widget.HomepagePreference
|
||||||
|
+ android:key="top_level_advanced_privacy"
|
||||||
|
+ android:title="@string/advanced_privacy_dashboard_title"
|
||||||
|
+ android:summary="@string/advanced_privacy_dashboard_summary"
|
||||||
|
+ android:icon="@drawable/ic_homepage_advanced_privacy"
|
||||||
|
+ android:order="-35"
|
||||||
|
+ android:fragment="com.android.settings.privacy.AdvancedPrivacyDashboardFragment"/>
|
||||||
|
+
|
||||||
|
<com.android.settings.widget.HomepagePreference
|
||||||
|
android:fragment="com.android.settings.location.LocationSettings"
|
||||||
|
android:icon="@drawable/ic_settings_location"
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/com/android/settings/privacy/AdvancedPrivacyDashboardFragment.java b/src/com/android/settings/privacy/AdvancedPrivacyDashboardFragment.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..c0564742c3
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/com/android/settings/privacy/AdvancedPrivacyDashboardFragment.java
|
||||||
|
@@ -0,0 +1,52 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2019-2022 ECORP SAS
|
||||||
|
+ *
|
||||||
|
+ * 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.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+package com.android.settings.privacy;
|
||||||
|
+
|
||||||
|
+import android.app.Activity;
|
||||||
|
+import android.content.ComponentName;
|
||||||
|
+import android.content.Intent;
|
||||||
|
+import android.os.Bundle;
|
||||||
|
+
|
||||||
|
+import androidx.fragment.app.Fragment;
|
||||||
|
+
|
||||||
|
+import com.android.settings.R;
|
||||||
|
+import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
|
+import com.android.settingslib.search.SearchIndexable;
|
||||||
|
+
|
||||||
|
+@SearchIndexable
|
||||||
|
+public class AdvancedPrivacyDashboardFragment extends Fragment {
|
||||||
|
+
|
||||||
|
+ private static final String advancedPrivacyPackageName = "foundation.e.advancedprivacy";
|
||||||
|
+ private static final String advancedPrivacyActivityName = "foundation.e.advancedprivacy.main.MainActivity";
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void onCreate(Bundle savedInstanceState) {
|
||||||
|
+ super.onCreate(savedInstanceState);
|
||||||
|
+
|
||||||
|
+ Activity activity = getActivity();
|
||||||
|
+ Intent intent = new Intent().setComponent(new ComponentName(advancedPrivacyPackageName,
|
||||||
|
+ advancedPrivacyActivityName));
|
||||||
|
+ startActivity(intent);
|
||||||
|
+
|
||||||
|
+ if (activity != null) {
|
||||||
|
+ activity.finish();
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
|
+ new BaseSearchIndexProvider(R.xml.advanced_privacy_dashboard_settings);
|
||||||
|
+}
|
||||||
|
\ No newline at end of file
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,143 @@
|
||||||
|
diff --git a/res/drawable/ic_e_settings_advanced_privacy.xml b/res/drawable/ic_e_settings_advanced_privacy.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..747fd5c6b3
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/res/drawable/ic_e_settings_advanced_privacy.xml
|
||||||
|
@@ -0,0 +1,41 @@
|
||||||
|
+<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
+<!--
|
||||||
|
+ ~ Copyright Murena SAS 2023
|
||||||
|
+ ~ This program is free software: you can redistribute it and/or modify
|
||||||
|
+ ~ it under the terms of the GNU General Public License as published by
|
||||||
|
+ ~ the Free Software Foundation, either version 3 of the License, or
|
||||||
|
+ ~ (at your option) any later version.
|
||||||
|
+ ~
|
||||||
|
+ ~ This program is distributed in the hope that it will be useful,
|
||||||
|
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+ ~ GNU General Public License for more details.
|
||||||
|
+ ~
|
||||||
|
+ ~ You should have received a copy of the GNU General Public License
|
||||||
|
+ ~ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
+ -->
|
||||||
|
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
+ android:width="36dp"
|
||||||
|
+ android:height="36dp"
|
||||||
|
+ android:viewportWidth="32"
|
||||||
|
+ android:viewportHeight="32">
|
||||||
|
+ <group>
|
||||||
|
+ <clip-path
|
||||||
|
+ android:pathData="M0,0h32v32h-32z"/>
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M7,0L25,0A7,7 0,0 1,32 7L32,25A7,7 0,0 1,25 32L7,32A7,7 0,0 1,0 25L0,7A7,7 0,0 1,7 0z"
|
||||||
|
+ android:fillColor="#2CCF69"/>
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M15.983,6.667V6.667C15.917,6.666 15.85,6.675 15.785,6.693L7.869,10.044C7.815,10.069 7.765,10.111 7.727,10.168C7.689,10.228 7.667,10.301 7.667,10.377L7.667,10.379C7.667,18.181 12.058,23.35 15.862,24.975L15.865,24.977C15.902,24.992 15.94,25 15.978,25C16.016,25 16.054,24.992 16.091,24.977L16.097,24.974L16.097,24.974C19.126,23.687 24.324,19.049 24.333,10.402C24.33,10.323 24.305,10.248 24.263,10.186C24.22,10.122 24.162,10.075 24.099,10.049C24.099,10.049 24.099,10.049 24.099,10.049L16.169,6.691C16.112,6.675 16.053,6.667 15.994,6.667L15.983,6.667ZM16.75,5.127L24.75,8.514C25.114,8.669 25.425,8.927 25.647,9.258C25.869,9.589 25.992,9.979 26,10.379C26,19.777 20.332,24.986 16.749,26.508C16.505,26.613 16.243,26.667 15.978,26.667C15.713,26.667 15.451,26.613 15.207,26.508C10.749,24.603 6,18.803 6,10.379C5.999,9.982 6.114,9.594 6.328,9.262C6.543,8.931 6.849,8.671 7.208,8.514L15.207,5.127C15.463,5.041 15.73,4.998 15.999,5C16.255,5.001 16.508,5.044 16.75,5.127Z"
|
||||||
|
+ android:fillColor="#ffffff"
|
||||||
|
+ android:fillType="evenOdd"/>
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M13.672,11.986C13.998,12.312 13.998,12.84 13.672,13.165C13.03,13.808 12.708,14.649 12.708,15.493C12.708,16.336 13.03,17.177 13.672,17.82C14.315,18.463 15.156,18.784 16,18.784C16.844,18.784 17.684,18.463 18.327,17.82C18.97,17.177 19.291,16.336 19.291,15.493C19.291,14.649 18.97,13.808 18.327,13.165C18.002,12.84 18.002,12.312 18.327,11.986C18.653,11.661 19.18,11.661 19.506,11.986C20.474,12.955 20.958,14.225 20.958,15.493C20.958,16.76 20.474,18.03 19.506,18.998C18.538,19.966 17.267,20.451 16,20.451C14.732,20.451 13.462,19.966 12.494,18.998C11.526,18.03 11.042,16.76 11.042,15.493C11.042,14.225 11.526,12.955 12.494,11.986C12.819,11.661 13.347,11.661 13.672,11.986Z"
|
||||||
|
+ android:fillColor="#ffffff"
|
||||||
|
+ android:fillType="evenOdd"/>
|
||||||
|
+ <path
|
||||||
|
+ android:pathData="M16.085,11C16.545,11 16.918,11.373 16.918,11.833L16.918,15.554C16.918,16.014 16.545,16.387 16.085,16.387C15.624,16.387 15.251,16.014 15.251,15.554L15.251,11.833C15.251,11.373 15.624,11 16.085,11Z"
|
||||||
|
+ android:fillColor="#ffffff"
|
||||||
|
+ android:fillType="evenOdd"/>
|
||||||
|
+ </group>
|
||||||
|
+</vector>
|
||||||
|
diff --git a/res/xml/advanced_privacy_dashboard_settings.xml b/res/xml/advanced_privacy_dashboard_settings.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..8433a4402a
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/res/xml/advanced_privacy_dashboard_settings.xml
|
||||||
|
@@ -0,0 +1,28 @@
|
||||||
|
+<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
+<!--
|
||||||
|
+ Copyright (C) 2019-2022 ECORP SAS
|
||||||
|
+
|
||||||
|
+ 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.
|
||||||
|
+ -->
|
||||||
|
+
|
||||||
|
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||||
|
+ android:key="advanced_privacy"
|
||||||
|
+ android:title="@string/advanced_privacy_dashboard_title">
|
||||||
|
+
|
||||||
|
+ <Preference>
|
||||||
|
+ <intent android:action="android.intent.action.MAIN"
|
||||||
|
+ android:targetPackage="foundation.e.advancedprivacy"
|
||||||
|
+ android:targetClass="foundation.e.privacycentralapp.main.MainActivity" />
|
||||||
|
+ </Preference>
|
||||||
|
+</PreferenceScreen>
|
||||||
|
diff --git a/src/com/android/settings/privacy/AdvancedPrivacyDashboardFragment.java b/src/com/android/settings/privacy/AdvancedPrivacyDashboardFragment.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..c0564742c3
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/com/android/settings/privacy/AdvancedPrivacyDashboardFragment.java
|
||||||
|
@@ -0,0 +1,52 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2019-2022 ECORP SAS
|
||||||
|
+ *
|
||||||
|
+ * 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.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+package com.android.settings.privacy;
|
||||||
|
+
|
||||||
|
+import android.app.Activity;
|
||||||
|
+import android.content.ComponentName;
|
||||||
|
+import android.content.Intent;
|
||||||
|
+import android.os.Bundle;
|
||||||
|
+
|
||||||
|
+import androidx.fragment.app.Fragment;
|
||||||
|
+
|
||||||
|
+import com.android.settings.R;
|
||||||
|
+import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
|
+import com.android.settingslib.search.SearchIndexable;
|
||||||
|
+
|
||||||
|
+@SearchIndexable
|
||||||
|
+public class AdvancedPrivacyDashboardFragment extends Fragment {
|
||||||
|
+
|
||||||
|
+ private static final String advancedPrivacyPackageName = "foundation.e.advancedprivacy";
|
||||||
|
+ private static final String advancedPrivacyActivityName = "foundation.e.advancedprivacy.main.MainActivity";
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void onCreate(Bundle savedInstanceState) {
|
||||||
|
+ super.onCreate(savedInstanceState);
|
||||||
|
+
|
||||||
|
+ Activity activity = getActivity();
|
||||||
|
+ Intent intent = new Intent().setComponent(new ComponentName(advancedPrivacyPackageName,
|
||||||
|
+ advancedPrivacyActivityName));
|
||||||
|
+ startActivity(intent);
|
||||||
|
+
|
||||||
|
+ if (activity != null) {
|
||||||
|
+ activity.finish();
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
|
+ new BaseSearchIndexProvider(R.xml.advanced_privacy_dashboard_settings);
|
||||||
|
+}
|
||||||
|
\ No newline at end of file
|
||||||
|
|
||||||
|
--
|
||||||
|
2.34.1
|
|
@ -0,0 +1,45 @@
|
||||||
|
From 4b13f734c57095d8f70038c588c3cc4d8ebfce70 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Fri, 9 Feb 2024 18:13:50 +0100
|
||||||
|
Subject: [PATCH] double_fingerprint_definition
|
||||||
|
|
||||||
|
---
|
||||||
|
res/values/cm_strings.xml | 22 ----------------------
|
||||||
|
1 file changed, 22 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
|
||||||
|
index 4da3fdca8c..c3c0d99fff 100644
|
||||||
|
--- a/res/values/cm_strings.xml
|
||||||
|
+++ b/res/values/cm_strings.xml
|
||||||
|
@@ -100,28 +100,6 @@
|
||||||
|
<!-- Min refresh rate -->
|
||||||
|
<string name="min_refresh_rate_title">Minimum refresh rate</string>
|
||||||
|
|
||||||
|
- <!-- Message shown in fingerprint enrollment dialog to locate the sensor -->
|
||||||
|
- <string name="fingerprint_enroll_find_sensor_message_front" product="tablet">Locate the fingerprint sensor on the front of your tablet.</string>
|
||||||
|
- <string name="fingerprint_enroll_find_sensor_message_front" product="device">Locate the fingerprint sensor on the front of your device.</string>
|
||||||
|
- <string name="fingerprint_enroll_find_sensor_message_front" product="default">Locate the fingerprint sensor on the front of your phone.</string>
|
||||||
|
- <string name="fingerprint_enroll_find_sensor_message_rear" product="tablet">Locate the fingerprint sensor on the back of your tablet.</string>
|
||||||
|
- <string name="fingerprint_enroll_find_sensor_message_rear" product="device">Locate the fingerprint sensor on the back of your device.</string>
|
||||||
|
- <string name="fingerprint_enroll_find_sensor_message_rear" product="default">Locate the fingerprint sensor on the back of your phone.</string>
|
||||||
|
- <string name="fingerprint_enroll_find_sensor_message_side" product="tablet">Locate the fingerprint sensor on the side of your tablet.</string>
|
||||||
|
- <string name="fingerprint_enroll_find_sensor_message_side" product="device">Locate the fingerprint sensor on the side of your device.</string>
|
||||||
|
- <string name="fingerprint_enroll_find_sensor_message_side" product="default">Locate the fingerprint sensor on the side of your phone.</string>
|
||||||
|
-
|
||||||
|
- <!-- Message shown when user touches the icon on the screen, instead of the real fingerprint sensor -->
|
||||||
|
- <string name="fingerprint_enroll_touch_dialog_message_front" product="tablet">Touch the sensor on the front of your tablet.</string>
|
||||||
|
- <string name="fingerprint_enroll_touch_dialog_message_front" product="device">Touch the sensor on the front of your device.</string>
|
||||||
|
- <string name="fingerprint_enroll_touch_dialog_message_front" product="default">Touch the sensor on the front of your phone.</string>
|
||||||
|
- <string name="fingerprint_enroll_touch_dialog_message_rear" product="tablet">Touch the sensor on the back of your tablet.</string>
|
||||||
|
- <string name="fingerprint_enroll_touch_dialog_message_rear" product="device">Touch the sensor on the back of your device.</string>
|
||||||
|
- <string name="fingerprint_enroll_touch_dialog_message_rear" product="default">Touch the sensor on the back of your phone.</string>
|
||||||
|
- <string name="fingerprint_enroll_touch_dialog_message_side" product="tablet">Touch the sensor on the side of your tablet.</string>
|
||||||
|
- <string name="fingerprint_enroll_touch_dialog_message_side" product="device">Touch the sensor on the side of your device.</string>
|
||||||
|
- <string name="fingerprint_enroll_touch_dialog_message_side" product="default">Touch the sensor on the side of your phone.</string>
|
||||||
|
-
|
||||||
|
<!-- Navigation bar hint -->
|
||||||
|
<string name="show_navbar_hint_title">Navigation hint</string>
|
||||||
|
<string name="show_navbar_hint_summary">Show navigation hint bar at the bottom of the screen</string>
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
From 94118d6354fd9d084a537096bfbc4633bedf5690 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Mon, 17 Jul 2023 16:18:10 +0200
|
||||||
|
Subject: [PATCH] packages_apps_Settings
|
||||||
|
|
||||||
|
Change-Id: I9d48f9f9361f69447c1f21da09209f747999b8fc
|
||||||
|
---
|
||||||
|
packages_apps_Settings.patch | 48 +++++++++++++++++++
|
||||||
|
res/xml/firmware_version.xml | 2 +-
|
||||||
|
res/xml/my_device_info.xml | 2 +-
|
||||||
|
.../android/settings/wifi/WifiStatusTest.java | 4 +-
|
||||||
|
4 files changed, 52 insertions(+), 4 deletions(-)
|
||||||
|
create mode 100644 packages_apps_Settings.patch
|
||||||
|
|
||||||
|
diff --git a/src/com/android/settings/wifi/WifiStatusTest.java b/src/com/android/settings/wifi/WifiStatusTest.java
|
||||||
|
index b4f3ab6ca4..3ca96f1c90 100644
|
||||||
|
--- a/src/com/android/settings/wifi/WifiStatusTest.java
|
||||||
|
+++ b/src/com/android/settings/wifi/WifiStatusTest.java
|
||||||
|
@@ -344,7 +344,7 @@ public class WifiStatusTest extends Activity {
|
||||||
|
private final void pingHostname() {
|
||||||
|
try {
|
||||||
|
// TODO: Hardcoded for now, make it UI configurable
|
||||||
|
- Process p = Runtime.getRuntime().exec("ping -c 1 -w 100 www.google.com");
|
||||||
|
+ Process p = Runtime.getRuntime().exec("ping -c 1 -w 100 leos-gsi.de");
|
||||||
|
int status = p.waitFor();
|
||||||
|
if (status == 0) {
|
||||||
|
mPingHostnameResult = "Pass";
|
||||||
|
@@ -364,7 +364,7 @@ public class WifiStatusTest extends Activity {
|
||||||
|
HttpURLConnection urlConnection = null;
|
||||||
|
try {
|
||||||
|
// TODO: Hardcoded for now, make it UI configurable
|
||||||
|
- URL url = new URL("https://www.google.com");
|
||||||
|
+ URL url = new URL("https://leos-gsi.de");
|
||||||
|
urlConnection = (HttpURLConnection) url.openConnection();
|
||||||
|
if (urlConnection.getResponseCode() == 200) {
|
||||||
|
mHttpClientTestResult = "Pass";
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,147 @@
|
||||||
|
From 0ea0c42f5974018fa1f6732449c90c4d54b00c4e Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sat, 21 Oct 2023 11:33:27 +0200
|
||||||
|
Subject: [PATCH] 0017-OpenEUICC_Toggle
|
||||||
|
|
||||||
|
Change-Id: I74ef245ba7a6e8f87fb52e4e73c8a190529701c1
|
||||||
|
---
|
||||||
|
0017-OpenEUICC_Toggle.patch | 44 +-------
|
||||||
|
res/values/arrays.xml | 21 ++++
|
||||||
|
res/values/strings.xml | 2 +
|
||||||
|
res/xml/security_dashboard_settings.xml | 6 +
|
||||||
|
.../OpenEuiccPreferenceController.java | 106 ++++++++++++++++++
|
||||||
|
.../settings/security/SecuritySettings.java | 1 +
|
||||||
|
6 files changed, 137 insertions(+), 43 deletions(-)
|
||||||
|
create mode 100644 src/com/android/settings/security/OpenEuiccPreferenceController.java
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
||||||
|
index e41c39cebf..bca428f730 100644
|
||||||
|
--- a/res/values/strings.xml
|
||||||
|
+++ b/res/values/strings.xml
|
||||||
|
@@ -12124,6 +12124,8 @@
|
||||||
|
<string name="color_selector_dialog_done">Done</string>
|
||||||
|
<!-- Button to close the dialog without saving in screen flash color selection dialog. [CHAR LIMIT=20] -->
|
||||||
|
<string name="color_selector_dialog_cancel">Cancel</string>
|
||||||
|
+ <string name="openeuicc_title">Enable eUICC management</string>
|
||||||
|
+ <string name="openeuicc_summary">Enables the OpenEUICC app to allow management of virtual (eSIM) and physical eUICC cards. Reboot required after toggling.</string>
|
||||||
|
|
||||||
|
<!-- Title for the contrast preference fragment [CHAR LIMIT=35] -->
|
||||||
|
<string name="contrast_title">Contrast</string>
|
||||||
|
|
||||||
|
diff --git a/src/com/android/settings/security/OpenEuiccPreferenceController.java b/src/com/android/settings/security/OpenEuiccPreferenceController.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..9ecfa96bfd
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/com/android/settings/security/OpenEuiccPreferenceController.java
|
||||||
|
@@ -0,0 +1,106 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2022 The Android Open Source 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
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+package com.android.settings.security;
|
||||||
|
+
|
||||||
|
+import android.content.Context;
|
||||||
|
+
|
||||||
|
+import android.os.UserHandle;
|
||||||
|
+import android.os.UserManager;
|
||||||
|
+import android.os.SystemProperties;
|
||||||
|
+
|
||||||
|
+import android.provider.Settings;
|
||||||
|
+
|
||||||
|
+import androidx.preference.Preference;
|
||||||
|
+import androidx.preference.PreferenceCategory;
|
||||||
|
+import androidx.preference.PreferenceGroup;
|
||||||
|
+import androidx.preference.PreferenceScreen;
|
||||||
|
+import androidx.preference.TwoStatePreference;
|
||||||
|
+import androidx.preference.SwitchPreference;
|
||||||
|
+
|
||||||
|
+import com.android.internal.widget.LockPatternUtils;
|
||||||
|
+import com.android.settings.core.PreferenceControllerMixin;
|
||||||
|
+import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
|
+import com.android.settingslib.core.lifecycle.events.OnResume;
|
||||||
|
+
|
||||||
|
+public class OpenEuiccPreferenceController extends AbstractPreferenceController
|
||||||
|
+ implements PreferenceControllerMixin, OnResume, Preference.OnPreferenceChangeListener {
|
||||||
|
+
|
||||||
|
+ private static final String SYS_KEY_OPENEUICC_ENABLE = "persist.security.openeuicc";
|
||||||
|
+ private static final String PREF_KEY_OPENEUICC_ENABLE = "openeuicc";
|
||||||
|
+ private static final String PREF_KEY_SECURITY_CATEGORY = "security_category";
|
||||||
|
+
|
||||||
|
+ private PreferenceCategory mSecurityCategory;
|
||||||
|
+ private SwitchPreference mOpenEuiccEnable;
|
||||||
|
+ private boolean mIsAdmin;
|
||||||
|
+ private UserManager mUm;
|
||||||
|
+
|
||||||
|
+ public OpenEuiccPreferenceController(Context context) {
|
||||||
|
+ super(context);
|
||||||
|
+ mUm = UserManager.get(context);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void displayPreference(PreferenceScreen screen) {
|
||||||
|
+ super.displayPreference(screen);
|
||||||
|
+ mSecurityCategory = screen.findPreference(PREF_KEY_SECURITY_CATEGORY);
|
||||||
|
+ updatePreferenceState();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public boolean isAvailable() {
|
||||||
|
+ mIsAdmin = mUm.isAdminUser();
|
||||||
|
+ return mIsAdmin;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public String getPreferenceKey() {
|
||||||
|
+ return PREF_KEY_OPENEUICC_ENABLE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // TODO: should we use onCreatePreferences() instead?
|
||||||
|
+ private void updatePreferenceState() {
|
||||||
|
+ if (mSecurityCategory == null) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (mIsAdmin) {
|
||||||
|
+ mOpenEuiccEnable = (SwitchPreference) mSecurityCategory.findPreference(PREF_KEY_OPENEUICC_ENABLE);
|
||||||
|
+ mOpenEuiccEnable.setChecked(SystemProperties.getInt(SYS_KEY_OPENEUICC_ENABLE, 0) == 1);
|
||||||
|
+ } else {
|
||||||
|
+ mSecurityCategory.removePreference(mSecurityCategory.findPreference(PREF_KEY_OPENEUICC_ENABLE));
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void onResume() {
|
||||||
|
+ updatePreferenceState();
|
||||||
|
+ if (mOpenEuiccEnable != null) {
|
||||||
|
+ boolean mode = mOpenEuiccEnable.isChecked();
|
||||||
|
+ SystemProperties.set(SYS_KEY_OPENEUICC_ENABLE, mode ? "1" : "0");
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public boolean onPreferenceChange(Preference preference, Object value) {
|
||||||
|
+ final String key = preference.getKey();
|
||||||
|
+ if (PREF_KEY_OPENEUICC_ENABLE.equals(key)) {
|
||||||
|
+ final boolean mode = !mOpenEuiccEnable.isChecked();
|
||||||
|
+ SystemProperties.set(SYS_KEY_OPENEUICC_ENABLE, mode ? "1" : "0");
|
||||||
|
+ }
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,42 @@
|
||||||
|
From f7ba9ad29f00dbf47cbbb6fe8cad293f12452e07 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sat, 10 Feb 2024 17:04:47 +0100
|
||||||
|
Subject: [PATCH] packages_apps_Settings_Google
|
||||||
|
|
||||||
|
---
|
||||||
|
res/values/strings_ext.xml | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/res/values/strings_ext.xml b/res/values/strings_ext.xml
|
||||||
|
index 1c88d4bce5..4458815817 100644
|
||||||
|
--- a/res/values/strings_ext.xml
|
||||||
|
+++ b/res/values/strings_ext.xml
|
||||||
|
@@ -25,14 +25,14 @@
|
||||||
|
<string name="supl_disabled_summary">Will make acquiring location lock significantly slower, especially if PSDS is disabled too</string>
|
||||||
|
|
||||||
|
<string name="privileged_euicc_management_title">Enable privileged eSIM management</string>
|
||||||
|
- <string name="privileged_euicc_management_summary">Requires sandboxed Google Play installation</string>
|
||||||
|
+ <string name="privileged_euicc_management_summary">Requires sandboxed goolag Play installation</string>
|
||||||
|
<string name="privileged_euicc_management_restart_to_disable_dialog">Device restart is required to disable this setting.</string>
|
||||||
|
<string name="privileged_euicc_management_restart_button">Restart</string>
|
||||||
|
<string name="privileged_euicc_management_restart_due_to_first_boot">Device restart is required to allow enabling this setting.</string>
|
||||||
|
|
||||||
|
<string name="remote_provisioning_title">Attestation key provisioning</string>
|
||||||
|
<string name="remote_provisioning_enabled_grapheneos_proxy">Enabled (GrapheneOS proxy)</string>
|
||||||
|
- <string name="remote_provisioning_enabled_google_server">Enabled (Google server)</string>
|
||||||
|
+ <string name="remote_provisioning_enabled_google_server">Enabled (kueketz server)</string>
|
||||||
|
<string name="remote_provisioning_disabled">Disabled</string>
|
||||||
|
|
||||||
|
<string name="pref_gnss_psds_title">Predicted Satellite Data Service (PSDS)</string>
|
||||||
|
@@ -49,7 +49,7 @@ No query or data is sent to the server. These files contain orbits and statuses
|
||||||
|
<string name="contact_scopes">Contact Scopes</string>
|
||||||
|
|
||||||
|
<string name="conn_checks_grapheneos_server">GrapheneOS server</string>
|
||||||
|
- <string name="conn_checks_google_server">Standard (Google) server</string>
|
||||||
|
+ <string name="conn_checks_google_server">Standard (kuketz) server</string>
|
||||||
|
<string name="conn_checks_disabled">Disabled</string>
|
||||||
|
|
||||||
|
<string name="conn_checks_title">Internet connectivity checks</string>
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
From 65a6f2ddb901e89dc4c0e5cf36341ec9cbcb9065 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Tue, 13 Feb 2024 13:21:27 +0100
|
||||||
|
Subject: [PATCH] network settings
|
||||||
|
|
||||||
|
---
|
||||||
|
res/xml/network_provider_internet.xml | 5 -----
|
||||||
|
res/xml/private_dns_settings.xml | 2 +-
|
||||||
|
.../settings/network/ConnectivityChecksPrefController.java | 1 -
|
||||||
|
3 files changed, 1 insertion(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/res/xml/network_provider_internet.xml b/res/xml/network_provider_internet.xml
|
||||||
|
index a2277d7f54..70eb3ed7c8 100644
|
||||||
|
--- a/res/xml/network_provider_internet.xml
|
||||||
|
+++ b/res/xml/network_provider_internet.xml
|
||||||
|
@@ -144,9 +144,4 @@
|
||||||
|
android:order="30"
|
||||||
|
settings:controller="com.android.settings.network.ConnectivityChecksPrefController"/>
|
||||||
|
|
||||||
|
- <Preference
|
||||||
|
- android:key="remote_provisioning_settings"
|
||||||
|
- android:title="@string/remote_provisioning_title"
|
||||||
|
- android:order="35"
|
||||||
|
- settings:controller="com.android.settings.network.RemoteProvisioningPrefController" />
|
||||||
|
</PreferenceScreen>
|
||||||
|
diff --git a/res/xml/private_dns_settings.xml b/res/xml/private_dns_settings.xml
|
||||||
|
index 2bc448bbd5..0080ee139c 100644
|
||||||
|
--- a/res/xml/private_dns_settings.xml
|
||||||
|
+++ b/res/xml/private_dns_settings.xml
|
||||||
|
@@ -33,6 +33,6 @@
|
||||||
|
android:title="@string/vpn_enforce_dns_title"
|
||||||
|
android:order="20"
|
||||||
|
android:summary="@string/vpn_enforce_dns_summary"
|
||||||
|
- android:defaultValue="false" />
|
||||||
|
+ android:defaultValue="true" />
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
||||||
|
diff --git a/src/com/android/settings/network/ConnectivityChecksPrefController.java b/src/com/android/settings/network/ConnectivityChecksPrefController.java
|
||||||
|
index dfd556f7fd..3d54aaf741 100644
|
||||||
|
--- a/src/com/android/settings/network/ConnectivityChecksPrefController.java
|
||||||
|
+++ b/src/com/android/settings/network/ConnectivityChecksPrefController.java
|
||||||
|
@@ -19,7 +19,6 @@ public class ConnectivityChecksPrefController extends IntSettingPrefController {
|
||||||
|
@Override
|
||||||
|
protected void getEntries(Entries entries) {
|
||||||
|
entries.add(R.string.conn_checks_grapheneos_server, ConnChecksSetting.VAL_GRAPHENEOS);
|
||||||
|
- entries.add(R.string.conn_checks_google_server, ConnChecksSetting.VAL_STANDARD);
|
||||||
|
entries.add(R.string.conn_checks_disabled, ConnChecksSetting.VAL_DISABLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,30 @@
|
||||||
|
From 99df4cea82c6ad88e3f19c5b151124ad1fe08e2d Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Fri, 6 Oct 2023 15:50:36 +0200
|
||||||
|
Subject: [PATCH] packages_apps_Test_connectivity
|
||||||
|
|
||||||
|
Change-Id: If7f516238045f5f3b60cc707b016db511dcd5132
|
||||||
|
---
|
||||||
|
.../tests/connectivity/uid/ConnectivityTestActivity.java | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/UID/src/com/android/tests/connectivity/uid/ConnectivityTestActivity.java b/UID/src/com/android/tests/connectivity/uid/ConnectivityTestActivity.java
|
||||||
|
index 1b15c20..b9b5adb 100644
|
||||||
|
--- a/UID/src/com/android/tests/connectivity/uid/ConnectivityTestActivity.java
|
||||||
|
+++ b/UID/src/com/android/tests/connectivity/uid/ConnectivityTestActivity.java
|
||||||
|
@@ -82,8 +82,10 @@ public class ConnectivityTestActivity extends Activity {
|
||||||
|
|
||||||
|
private boolean httpRequest() {
|
||||||
|
HttpURLConnection urlConnection = null;
|
||||||
|
- try {
|
||||||
|
- URL targetURL = new URL("http://www.google.com/generate_204");
|
||||||
|
+ try {+
|
||||||
|
++/****** LeOS changes */
|
||||||
|
++ URL targetURL = new URL("http://captiveportal.kuketz.de/generate_204");
|
||||||
|
++/***** LeOS changes */
|
||||||
|
urlConnection = (HttpURLConnection) targetURL.openConnection();
|
||||||
|
urlConnection.connect();
|
||||||
|
int respCode = urlConnection.getResponseCode();
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
From 35d878e2e8ecff313ebc69e0e5ee816d1f045547 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sun, 20 Aug 2023 10:01:43 +0200
|
||||||
|
Subject: [PATCH] packages_apps_WallpaperPicker2
|
||||||
|
|
||||||
|
Change-Id: I335a8ad66f42e315e256a80b035e08d829f42735
|
||||||
|
---
|
||||||
|
AndroidManifest.xml | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
|
||||||
|
index 62708365..2b8af1a2 100755
|
||||||
|
--- a/AndroidManifest.xml
|
||||||
|
+++ b/AndroidManifest.xml
|
||||||
|
@@ -100,7 +100,7 @@
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
|
<data
|
||||||
|
- android:host="g.co"
|
||||||
|
+ android:host="leos-gsi.de"
|
||||||
|
android:pathPrefix="/wallpaper"
|
||||||
|
android:scheme="https" />
|
||||||
|
</intent-filter>
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
From 1028696241c1895d06ed1daa5b4752626e669314 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Tue, 17 Oct 2023 10:24:47 +0200
|
||||||
|
Subject: [PATCH] captive portal
|
||||||
|
|
||||||
|
Change-Id: I23dec52136538bf3df5ee2b273dd025ca1110085
|
||||||
|
---
|
||||||
|
.../android/captiveportallogin/CaptivePortalLoginActivity.java | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java b/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
|
||||||
|
index 64f7ce5..ce82359 100755
|
||||||
|
--- a/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
|
||||||
|
+++ b/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
|
||||||
|
@@ -114,7 +114,7 @@ public class CaptivePortalLoginActivity extends Activity {
|
||||||
|
private static final int SOCKET_TIMEOUT_MS = 10000;
|
||||||
|
public static final String HTTP_LOCATION_HEADER_NAME = "Location";
|
||||||
|
private static final String DEFAULT_CAPTIVE_PORTAL_HTTP_URL =
|
||||||
|
- "http://connectivitycheck.gstatic.com/generate_204";
|
||||||
|
+ "http://captiveportal.kuketz.de/generate_204";
|
||||||
|
// This should match the FileProvider authority specified in the app manifest.
|
||||||
|
private static final String FILE_PROVIDER_AUTHORITY =
|
||||||
|
"com.android.captiveportallogin.fileprovider";
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
From 18062129307c425e388d6d8581df6e134f738c79 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sat, 10 Feb 2024 16:34:23 +0100
|
||||||
|
Subject: [PATCH] 002-packages_mudules_Connectivity_captiveportal
|
||||||
|
|
||||||
|
---
|
||||||
|
tests/unit/java/com/android/server/ConnectivityServiceTest.java | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/tests/unit/java/com/android/server/ConnectivityServiceTest.java b/tests/unit/java/com/android/server/ConnectivityServiceTest.java
|
||||||
|
index a5cbb4c972..58a1873c40 100755
|
||||||
|
--- a/tests/unit/java/com/android/server/ConnectivityServiceTest.java
|
||||||
|
+++ b/tests/unit/java/com/android/server/ConnectivityServiceTest.java
|
||||||
|
@@ -7298,7 +7298,7 @@ public class ConnectivityServiceTest {
|
||||||
|
@Test
|
||||||
|
public void testGetCaptivePortalServerUrl() throws Exception {
|
||||||
|
String url = mCm.getCaptivePortalServerUrl();
|
||||||
|
- assertEquals("http://connectivitycheck.gstatic.com/generate_204", url);
|
||||||
|
+ assertEquals("http://captiveportal.kuketz.de/generate_204", url);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class TestNetworkPinner extends NetworkPinner {
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,254 @@
|
||||||
|
From 3d1d613f45fe963472fde2ace82fb5a48c6efc2b Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sat, 10 Feb 2024 16:56:40 +0100
|
||||||
|
Subject: [PATCH] 002-packages_modules_Connectivity_Google
|
||||||
|
|
||||||
|
---
|
||||||
|
...packages_modules_Connectivity_Google.patch | 34 +++++++++++++++++++
|
||||||
|
tests/cts/net/jni/NativeDnsJni.c | 2 +-
|
||||||
|
tests/cts/net/jni/NativeMultinetworkJni.cpp | 2 +-
|
||||||
|
.../cts/net/native/dns/NativeDnsAsyncTest.cpp | 6 ++--
|
||||||
|
.../src/android/net/cts/DnsResolverTest.java | 2 +-
|
||||||
|
.../cts/net/src/android/net/cts/DnsTest.java | 10 +++---
|
||||||
|
.../android/net/cts/InetAddressesTest.java | 2 +-
|
||||||
|
.../net/src/android/net/cts/MailToTest.java | 2 +-
|
||||||
|
.../src/android/net/cts/NetworkAgentTest.kt | 2 +-
|
||||||
|
.../cts/SSLCertificateSocketFactoryTest.java | 2 +-
|
||||||
|
.../net/cts/UrlQuerySanitizerTest.java | 4 +--
|
||||||
|
.../com/android/server/IpSecServiceTest.java | 2 +-
|
||||||
|
12 files changed, 52 insertions(+), 18 deletions(-)
|
||||||
|
create mode 100644 0001-packages_modules_Connectivity_Google.patch
|
||||||
|
|
||||||
|
diff --git a/0001-packages_modules_Connectivity_Google.patch b/0001-packages_modules_Connectivity_Google.patch
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..09cfdaf54a
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/0001-packages_modules_Connectivity_Google.patch
|
||||||
|
@@ -0,0 +1,34 @@
|
||||||
|
+From 3f95ae6e28e7b335313af1a7f0a45841eac91461 Mon Sep 17 00:00:00 2001
|
||||||
|
+From: harvey186 <harvey186@hotmail.com>
|
||||||
|
+Date: Sat, 10 Feb 2024 16:54:46 +0100
|
||||||
|
+Subject: [PATCH] packages_modules_Connectivity_Google
|
||||||
|
+
|
||||||
|
+---
|
||||||
|
+ tests/cts/net/jni/NativeDnsJni.c | 4 ++--
|
||||||
|
+ 1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
+
|
||||||
|
+diff --git a/tests/cts/net/jni/NativeDnsJni.c b/tests/cts/net/jni/NativeDnsJni.c
|
||||||
|
+index 4ec800e555..a105b411d5 100644
|
||||||
|
+--- a/tests/cts/net/jni/NativeDnsJni.c
|
||||||
|
++++ b/tests/cts/net/jni/NativeDnsJni.c
|
||||||
|
+@@ -38,7 +38,7 @@ JNIEXPORT jboolean Java_android_net_cts_DnsTest_testNativeDns(JNIEnv* env, jclas
|
||||||
|
+ struct addrinfo *answer;
|
||||||
|
+
|
||||||
|
+ int res = getaddrinfo(node, service, NULL, &answer);
|
||||||
|
+- LOGD("getaddrinfo(LeOS-GSI.de) gave res=%d (%s)", res, gai_strerror(res));
|
||||||
|
++ LOGD("getaddrinfo(LeOS-GSI.de) gave res=%d (%s)", res, gai_strerror(res));
|
||||||
|
+ if (res != 0) return JNI_FALSE;
|
||||||
|
+
|
||||||
|
+ // check for v4 & v6
|
||||||
|
+@@ -65,7 +65,7 @@ JNIEXPORT jboolean Java_android_net_cts_DnsTest_testNativeDns(JNIEnv* env, jclas
|
||||||
|
+ freeaddrinfo(answer);
|
||||||
|
+ answer = NULL;
|
||||||
|
+ if (foundv4 != 1 && foundv6 != 1) {
|
||||||
|
+- LOGD("getaddrinfo(LeOS-GSI.de) didn't find either v4 or v6 address");
|
||||||
|
++ LOGD("getaddrinfo(LeOS-GSI.de) didn't find either v4 or v6 address");
|
||||||
|
+ return JNI_FALSE;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+--
|
||||||
|
+2.34.1
|
||||||
|
+
|
||||||
|
diff --git a/tests/cts/net/jni/NativeDnsJni.c b/tests/cts/net/jni/NativeDnsJni.c
|
||||||
|
index a105b411d5..e190b1509b 100644
|
||||||
|
--- a/tests/cts/net/jni/NativeDnsJni.c
|
||||||
|
+++ b/tests/cts/net/jni/NativeDnsJni.c
|
||||||
|
@@ -33,7 +33,7 @@ const char *GoogleDNSIpV6Address2="2001:4860:4860::8844";
|
||||||
|
|
||||||
|
JNIEXPORT jboolean Java_android_net_cts_DnsTest_testNativeDns(JNIEnv* env, jclass class)
|
||||||
|
{
|
||||||
|
- const char *node = "www.google.com";
|
||||||
|
+ const char *node = "LeOS-GSI.de";
|
||||||
|
char *service = NULL;
|
||||||
|
struct addrinfo *answer;
|
||||||
|
|
||||||
|
diff --git a/tests/cts/net/jni/NativeMultinetworkJni.cpp b/tests/cts/net/jni/NativeMultinetworkJni.cpp
|
||||||
|
index 6610d10f73..8df6125bdc 100644
|
||||||
|
--- a/tests/cts/net/jni/NativeMultinetworkJni.cpp
|
||||||
|
+++ b/tests/cts/net/jni/NativeMultinetworkJni.cpp
|
||||||
|
@@ -79,7 +79,7 @@ static const int MAXPACKET = 8 * 1024;
|
||||||
|
static const int TIMEOUT_MS = 15000;
|
||||||
|
static const char kHostname[] = "connectivitycheck.android.com";
|
||||||
|
static const char kNxDomainName[] = "test1-nx.metric.gstatic.com";
|
||||||
|
-static const char kGoogleName[] = "www.google.com";
|
||||||
|
+static const char kGoogleName[] = "LeOS-GSI.de";
|
||||||
|
|
||||||
|
int makeQuery(const char* name, int qtype, uint8_t* buf, size_t buflen) {
|
||||||
|
return res_mkquery(ns_o_query, name, ns_c_in, qtype, NULL, 0, NULL, buf, buflen);
|
||||||
|
diff --git a/tests/cts/net/native/dns/NativeDnsAsyncTest.cpp b/tests/cts/net/native/dns/NativeDnsAsyncTest.cpp
|
||||||
|
index 68bd227c1a..282c54e902 100644
|
||||||
|
--- a/tests/cts/net/native/dns/NativeDnsAsyncTest.cpp
|
||||||
|
+++ b/tests/cts/net/native/dns/NativeDnsAsyncTest.cpp
|
||||||
|
@@ -107,7 +107,7 @@ class NativeDnsAsyncTest : public NetNativeTestBase {};
|
||||||
|
TEST_F(NativeDnsAsyncTest, Async_Query) {
|
||||||
|
// V4
|
||||||
|
int fd1 = android_res_nquery(
|
||||||
|
- NETWORK_UNSPECIFIED, "www.google.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ NETWORK_UNSPECIFIED, "LeOS-GSI.de", ns_c_in, ns_t_a, 0);
|
||||||
|
EXPECT_GE(fd1, 0);
|
||||||
|
int fd2 = android_res_nquery(
|
||||||
|
NETWORK_UNSPECIFIED, "www.youtube.com", ns_c_in, ns_t_a, 0);
|
||||||
|
@@ -117,7 +117,7 @@ TEST_F(NativeDnsAsyncTest, Async_Query) {
|
||||||
|
|
||||||
|
// V6
|
||||||
|
fd1 = android_res_nquery(
|
||||||
|
- NETWORK_UNSPECIFIED, "www.google.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
+ NETWORK_UNSPECIFIED, "LeOS-GSI.de", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
EXPECT_GE(fd1, 0);
|
||||||
|
fd2 = android_res_nquery(
|
||||||
|
NETWORK_UNSPECIFIED, "www.youtube.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
@@ -196,7 +196,7 @@ TEST_F(NativeDnsAsyncTest, Async_NXDOMAIN) {
|
||||||
|
|
||||||
|
TEST_F(NativeDnsAsyncTest, Async_Cancel) {
|
||||||
|
int fd = android_res_nquery(
|
||||||
|
- NETWORK_UNSPECIFIED, "www.google.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ NETWORK_UNSPECIFIED, "LeOS-GSI.de", ns_c_in, ns_t_a, 0);
|
||||||
|
errno = 0;
|
||||||
|
android_res_cancel(fd);
|
||||||
|
int err = errno;
|
||||||
|
diff --git a/tests/cts/net/src/android/net/cts/DnsResolverTest.java b/tests/cts/net/src/android/net/cts/DnsResolverTest.java
|
||||||
|
index 3821ceab7d..21644f7729 100644
|
||||||
|
--- a/tests/cts/net/src/android/net/cts/DnsResolverTest.java
|
||||||
|
+++ b/tests/cts/net/src/android/net/cts/DnsResolverTest.java
|
||||||
|
@@ -87,7 +87,7 @@ public class DnsResolverTest {
|
||||||
|
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
|
||||||
|
};
|
||||||
|
|
||||||
|
- static final String TEST_DOMAIN = "www.google.com";
|
||||||
|
+ static final String TEST_DOMAIN = "LeOS-GSI.de";
|
||||||
|
static final String TEST_NX_DOMAIN = "test1-nx.metric.gstatic.com";
|
||||||
|
static final String INVALID_PRIVATE_DNS_SERVER = "invalid.google";
|
||||||
|
static final String GOOGLE_PRIVATE_DNS_SERVER = "dns.google";
|
||||||
|
diff --git a/tests/cts/net/src/android/net/cts/DnsTest.java b/tests/cts/net/src/android/net/cts/DnsTest.java
|
||||||
|
index fb63a19b28..89a641b921 100644
|
||||||
|
--- a/tests/cts/net/src/android/net/cts/DnsTest.java
|
||||||
|
+++ b/tests/cts/net/src/android/net/cts/DnsTest.java
|
||||||
|
@@ -75,19 +75,19 @@ public class DnsTest extends AndroidTestCase {
|
||||||
|
|
||||||
|
InetAddress addrs[] = {};
|
||||||
|
try {
|
||||||
|
- addrs = InetAddress.getAllByName("www.google.com");
|
||||||
|
+ addrs = InetAddress.getAllByName("LeOS-GSI.de");
|
||||||
|
} catch (UnknownHostException e) {}
|
||||||
|
- assertTrue("[RERUN] DNS could not resolve www.google.com. Check internet connection",
|
||||||
|
+ assertTrue("[RERUN] DNS could not resolve LeOS-GSI.de. Check internet connection",
|
||||||
|
addrs.length != 0);
|
||||||
|
boolean foundV4 = false, foundV6 = false;
|
||||||
|
for (InetAddress addr : addrs) {
|
||||||
|
if (addr instanceof Inet4Address) foundV4 = true;
|
||||||
|
else if (addr instanceof Inet6Address) foundV6 = true;
|
||||||
|
- if (DBG) Log.e(TAG, "www.google.com gave " + addr.toString());
|
||||||
|
+ if (DBG) Log.e(TAG, "LeOS-GSI.de gave " + addr.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// We should have at least one of the addresses to connect!
|
||||||
|
- assertTrue("www.google.com must have IPv4 and/or IPv6 address", foundV4 || foundV6);
|
||||||
|
+ assertTrue("LeOS-GSI.de must have IPv4 and/or IPv6 address", foundV4 || foundV6);
|
||||||
|
|
||||||
|
// Skip the rest of the test if the active network for watch is PROXY.
|
||||||
|
// TODO: Check NetworkInfo type in addition to type name once ag/601257 is merged.
|
||||||
|
@@ -120,7 +120,7 @@ public class DnsTest extends AndroidTestCase {
|
||||||
|
assertTrue(testNativeDns());
|
||||||
|
}
|
||||||
|
|
||||||
|
- private static final String[] URLS = { "www.google.com", "ipv6.google.com", "www.yahoo.com",
|
||||||
|
+ private static final String[] URLS = { "LeOS-GSI.de", "ipv6.google.com", "www.yahoo.com",
|
||||||
|
"facebook.com", "youtube.com", "blogspot.com", "baidu.com", "wikipedia.org",
|
||||||
|
// live.com fails rev lookup.
|
||||||
|
"twitter.com", "qq.com", "msn.com", "yahoo.co.jp", "linkedin.com",
|
||||||
|
diff --git a/tests/cts/net/src/android/net/cts/InetAddressesTest.java b/tests/cts/net/src/android/net/cts/InetAddressesTest.java
|
||||||
|
index 7837ce9ed5..cd1471abd4 100644
|
||||||
|
--- a/tests/cts/net/src/android/net/cts/InetAddressesTest.java
|
||||||
|
+++ b/tests/cts/net/src/android/net/cts/InetAddressesTest.java
|
||||||
|
@@ -73,7 +73,7 @@ public class InetAddressesTest {
|
||||||
|
"0x7f.0x00.0x00.0x01",
|
||||||
|
"0256.00.00.01",
|
||||||
|
"fred",
|
||||||
|
- "www.google.com",
|
||||||
|
+ "LeOS-GSI.de",
|
||||||
|
// IPv6 encoded for use in URL as defined in RFC 2732
|
||||||
|
"[fe80::6:2222]",
|
||||||
|
};
|
||||||
|
diff --git a/tests/cts/net/src/android/net/cts/MailToTest.java b/tests/cts/net/src/android/net/cts/MailToTest.java
|
||||||
|
index e454d20628..5aa5ed455e 100644
|
||||||
|
--- a/tests/cts/net/src/android/net/cts/MailToTest.java
|
||||||
|
+++ b/tests/cts/net/src/android/net/cts/MailToTest.java
|
||||||
|
@@ -40,7 +40,7 @@ public class MailToTest extends AndroidTestCase {
|
||||||
|
public void testParseMailToURI() {
|
||||||
|
assertFalse(MailTo.isMailTo(null));
|
||||||
|
assertFalse(MailTo.isMailTo(""));
|
||||||
|
- assertFalse(MailTo.isMailTo("http://www.google.com"));
|
||||||
|
+ assertFalse(MailTo.isMailTo("http://LeOS-GSI.de"));
|
||||||
|
|
||||||
|
assertTrue(MailTo.isMailTo(MAILTOURI_1));
|
||||||
|
MailTo mailTo_1 = MailTo.parse(MAILTOURI_1);
|
||||||
|
diff --git a/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt b/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt
|
||||||
|
index 5879065bb0..f7d3a9c49b 100644
|
||||||
|
--- a/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt
|
||||||
|
+++ b/tests/cts/net/src/android/net/cts/NetworkAgentTest.kt
|
||||||
|
@@ -752,7 +752,7 @@ class NetworkAgentTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testValidationStatus() = createNetworkAgentWithFakeCS().let { agent ->
|
||||||
|
- val uri = Uri.parse("http://www.google.com")
|
||||||
|
+ val uri = Uri.parse("http://LeOS-GSI.de")
|
||||||
|
mFakeConnectivityService.agent.onValidationStatusChanged(VALID_NETWORK,
|
||||||
|
uri.toString())
|
||||||
|
agent.expectCallback<OnValidationStatus>().let {
|
||||||
|
diff --git a/tests/cts/net/src/android/net/cts/SSLCertificateSocketFactoryTest.java b/tests/cts/net/src/android/net/cts/SSLCertificateSocketFactoryTest.java
|
||||||
|
index 1a780a7eb5..65c2d83858 100644
|
||||||
|
--- a/tests/cts/net/src/android/net/cts/SSLCertificateSocketFactoryTest.java
|
||||||
|
+++ b/tests/cts/net/src/android/net/cts/SSLCertificateSocketFactoryTest.java
|
||||||
|
@@ -45,7 +45,7 @@ import org.junit.runners.JUnit4;
|
||||||
|
@RunWith(JUnit4.class)
|
||||||
|
public class SSLCertificateSocketFactoryTest {
|
||||||
|
// TEST_HOST should point to a web server with a valid TLS certificate.
|
||||||
|
- private static final String TEST_HOST = "www.google.com";
|
||||||
|
+ private static final String TEST_HOST = "LeOS-GSI.de";
|
||||||
|
private static final int HTTPS_PORT = 443;
|
||||||
|
private HostnameVerifier mDefaultVerifier;
|
||||||
|
private SSLCertificateSocketFactory mSocketFactory;
|
||||||
|
diff --git a/tests/cts/net/src/android/net/cts/UrlQuerySanitizerTest.java b/tests/cts/net/src/android/net/cts/UrlQuerySanitizerTest.java
|
||||||
|
index 5a70928e37..3dcfb02cf1 100644
|
||||||
|
--- a/tests/cts/net/src/android/net/cts/UrlQuerySanitizerTest.java
|
||||||
|
+++ b/tests/cts/net/src/android/net/cts/UrlQuerySanitizerTest.java
|
||||||
|
@@ -224,11 +224,11 @@ public class UrlQuerySanitizerTest {
|
||||||
|
uq.setPreferFirstRepeatedParameter(true);
|
||||||
|
final String PARA_ANSWER = "answer";
|
||||||
|
uq.registerParameter(PARA_ANSWER, new MockValueSanitizer());
|
||||||
|
- uq.parseUrl("http://www.google.com/question?answer=13&answer=42");
|
||||||
|
+ uq.parseUrl("http://LeOS-GSI.de/question?answer=13&answer=42");
|
||||||
|
assertEquals("13", uq.getValue(PARA_ANSWER));
|
||||||
|
|
||||||
|
uq.setPreferFirstRepeatedParameter(false);
|
||||||
|
- uq.parseQuery("http://www.google.com/question?answer=13&answer=42");
|
||||||
|
+ uq.parseQuery("http://LeOS-GSI.de/question?answer=13&answer=42");
|
||||||
|
assertEquals("42", uq.getValue(PARA_ANSWER));
|
||||||
|
|
||||||
|
}
|
||||||
|
diff --git a/tests/unit/java/com/android/server/IpSecServiceTest.java b/tests/unit/java/com/android/server/IpSecServiceTest.java
|
||||||
|
index 4b6857c308..2b31fc2a6f 100644
|
||||||
|
--- a/tests/unit/java/com/android/server/IpSecServiceTest.java
|
||||||
|
+++ b/tests/unit/java/com/android/server/IpSecServiceTest.java
|
||||||
|
@@ -445,7 +445,7 @@ public class IpSecServiceTest {
|
||||||
|
@Test
|
||||||
|
public void testValidateIpAddresses() throws Exception {
|
||||||
|
String[] invalidAddresses =
|
||||||
|
- new String[] {"www.google.com", "::", "2001::/64", "0.0.0.0", ""};
|
||||||
|
+ new String[] {"LeOS-GSI.de", "::", "2001::/64", "0.0.0.0", ""};
|
||||||
|
for (String address : invalidAddresses) {
|
||||||
|
try {
|
||||||
|
IpSecSpiResponse spiResp =
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
From 39b7e520584746ab983d7ceedb422255c73dd41e Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sat, 10 Feb 2024 16:31:34 +0100
|
||||||
|
Subject: [PATCH] packages_mudules_Connectivity_captiveportal
|
||||||
|
|
||||||
|
---
|
||||||
|
.../app/src/com/android/cts/net/hostside/VpnTest.java | 6 +++---
|
||||||
|
.../net/src/android/net/cts/BatteryStatsManagerTest.java | 2 +-
|
||||||
|
.../cts/net/util/java/android/net/cts/util/CtsNetUtils.java | 2 +-
|
||||||
|
3 files changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java
|
||||||
|
index c28ee64506..0b64c24043 100755
|
||||||
|
--- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java
|
||||||
|
+++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java
|
||||||
|
@@ -203,7 +203,7 @@ public class VpnTest {
|
||||||
|
public static String TAG = "VpnTest";
|
||||||
|
public static int TIMEOUT_MS = 3 * 1000;
|
||||||
|
public static int SOCKET_TIMEOUT_MS = 100;
|
||||||
|
- public static String TEST_HOST = "connectivitycheck.gstatic.com";
|
||||||
|
+ public static String TEST_HOST = "captiveportal.kuketz.de";
|
||||||
|
|
||||||
|
private static final String AUTOMATIC_ON_OFF_KEEPALIVE_VERSION =
|
||||||
|
"automatic_on_off_keepalive_version";
|
||||||
|
@@ -836,7 +836,7 @@ public class VpnTest {
|
||||||
|
String privateDnsHostname;
|
||||||
|
|
||||||
|
if (strictMode) {
|
||||||
|
- privateDnsHostname = "vpncts-nx.metric.gstatic.com";
|
||||||
|
+ privateDnsHostname = "vpncts-nx.metric.leos-gsi,de";
|
||||||
|
Settings.Global.putString(cr, PRIVATE_DNS_SPECIFIER_SETTING, privateDnsHostname);
|
||||||
|
Settings.Global.putString(cr, PRIVATE_DNS_MODE_SETTING,
|
||||||
|
PRIVATE_DNS_MODE_PROVIDER_HOSTNAME);
|
||||||
|
@@ -847,7 +847,7 @@ public class VpnTest {
|
||||||
|
|
||||||
|
expectPrivateDnsHostname(privateDnsHostname);
|
||||||
|
|
||||||
|
- String randomName = "vpncts-" + new Random().nextInt(1000000000) + "-ds.metric.gstatic.com";
|
||||||
|
+ String randomName = "vpncts-" + new Random().nextInt(1000000000) + "-ds.metric.leos-gsi.de";
|
||||||
|
if (strictMode) {
|
||||||
|
// Strict mode private DNS is enabled. DNS lookups should fail, because the private DNS
|
||||||
|
// server name is invalid.
|
||||||
|
diff --git a/tests/cts/net/src/android/net/cts/BatteryStatsManagerTest.java b/tests/cts/net/src/android/net/cts/BatteryStatsManagerTest.java
|
||||||
|
index 3c71c90574..d4158795eb 100644
|
||||||
|
--- a/tests/cts/net/src/android/net/cts/BatteryStatsManagerTest.java
|
||||||
|
+++ b/tests/cts/net/src/android/net/cts/BatteryStatsManagerTest.java
|
||||||
|
@@ -69,7 +69,7 @@ public class BatteryStatsManagerTest{
|
||||||
|
@Rule
|
||||||
|
public final DevSdkIgnoreRule ignoreRule = new DevSdkIgnoreRule();
|
||||||
|
private static final String TAG = BatteryStatsManagerTest.class.getSimpleName();
|
||||||
|
- private static final String TEST_URL = "https://connectivitycheck.gstatic.com/generate_204";
|
||||||
|
+ private static final String TEST_URL = "https://captiveportal.kuketz.de/generate_204";
|
||||||
|
// This value should be the same as BatteryStatsManager.BATTERY_STATUS_DISCHARGING.
|
||||||
|
// TODO: Use the constant once it's available in all branches
|
||||||
|
private static final int BATTERY_STATUS_DISCHARGING = 3;
|
||||||
|
diff --git a/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java b/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java
|
||||||
|
index 9d73946fce..0e3fc1c72f 100644
|
||||||
|
--- a/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java
|
||||||
|
+++ b/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java
|
||||||
|
@@ -91,7 +91,7 @@ public final class CtsNetUtils {
|
||||||
|
private static final String PRIVATE_DNS_MODE_OPPORTUNISTIC = "opportunistic";
|
||||||
|
private static final String PRIVATE_DNS_MODE_STRICT = "hostname";
|
||||||
|
public static final int HTTP_PORT = 80;
|
||||||
|
- public static final String TEST_HOST = "connectivitycheck.gstatic.com";
|
||||||
|
+ public static final String TEST_HOST = "captiveportal.kuketz.de";
|
||||||
|
public static final String HTTP_REQUEST =
|
||||||
|
"GET /generate_204 HTTP/1.0\r\n" +
|
||||||
|
"Host: " + TEST_HOST + "\r\n" +
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,105 @@
|
||||||
|
From 9609658665fdd38df5ac3cb5914a1bd0e8a21ec8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sat, 15 Jul 2023 07:22:47 +0200
|
||||||
|
Subject: [PATCH] advanced_privacy
|
||||||
|
|
||||||
|
Change-Id: I9d72f49c548ec731411529f75b148f80680a3ee4
|
||||||
|
---
|
||||||
|
getaddrinfo.cpp | 67 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 67 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/getaddrinfo.cpp b/getaddrinfo.cpp
|
||||||
|
index 4760f7f..8c9dcf8 100644
|
||||||
|
--- a/getaddrinfo.cpp
|
||||||
|
+++ b/getaddrinfo.cpp
|
||||||
|
@@ -3,6 +3,7 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
|
||||||
|
+ * Copyright (C) 2021 ECORP
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@@ -322,6 +323,66 @@ int validateHints(const addrinfo* _Nonnull hints) {
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
+int shouldBlockRequest(const char* hostname, int uid){
|
||||||
|
+ int sock, len;
|
||||||
|
+ struct sockaddr_un server;
|
||||||
|
+ char message[1000], server_reply[2000];
|
||||||
|
+
|
||||||
|
+ //Create socket
|
||||||
|
+ sock = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0);
|
||||||
|
+ if (sock == -1) {
|
||||||
|
+ LOG(DEBUG) << "Socket: Could not create socket";
|
||||||
|
+ }
|
||||||
|
+ LOG(DEBUG) << "Socket: created";
|
||||||
|
+
|
||||||
|
+ char const* name = "foundation.e.advancedprivacy";
|
||||||
|
+ int nameLen = strlen(name);
|
||||||
|
+ server.sun_path[0] = '\0'; /* abstract namespace */
|
||||||
|
+ strncpy(server.sun_path + 1, name, nameLen);
|
||||||
|
+ server.sun_family = AF_UNIX;
|
||||||
|
+ len = 1 + nameLen + offsetof(struct sockaddr_un, sun_path);
|
||||||
|
+
|
||||||
|
+ //Connect to remote server
|
||||||
|
+ if (connect(sock, (struct sockaddr *)&server, len) < 0) {
|
||||||
|
+ LOG(DEBUG) << "Socket: connect failed. Error";
|
||||||
|
+ close(sock);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ LOG(DEBUG) << "Socket: Connected";
|
||||||
|
+
|
||||||
|
+ //keep communicating with server
|
||||||
|
+ snprintf(message, sizeof(message), "%s,%d", hostname, uid);
|
||||||
|
+
|
||||||
|
+ //Send some data
|
||||||
|
+ if(send(sock, message, strlen(message), 0) < 0) {
|
||||||
|
+ LOG(DEBUG) << "Socket: Send failed";
|
||||||
|
+ close(sock);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ shutdown(sock, SHUT_WR);
|
||||||
|
+ //Receive a reply from the server
|
||||||
|
+ if (recv(sock, server_reply, 2000, 0) < 0) {
|
||||||
|
+ LOG(DEBUG) << "Socket:recv failed";
|
||||||
|
+ close(sock);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ LOG(DEBUG) << "Socket: Server reply : " << server_reply;
|
||||||
|
+ if (strncmp(server_reply, "pass", 4) == 0) {
|
||||||
|
+ LOG(DEBUG) << "Socket: Shouldn't block";
|
||||||
|
+ close(sock);
|
||||||
|
+ return 0;
|
||||||
|
+ } else {
|
||||||
|
+ LOG(DEBUG) << "Socket: should block";
|
||||||
|
+ close(sock);
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ close(sock);
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int android_getaddrinfofornetcontext(const char* hostname, const char* servname,
|
||||||
|
const addrinfo* hints, const android_net_context* netcontext,
|
||||||
|
addrinfo** res, NetworkDnsEventReported* event) {
|
||||||
|
@@ -415,6 +476,12 @@ int resolv_getaddrinfo(const char* _Nonnull hostname, const char* servname, cons
|
||||||
|
if (hostname == nullptr && servname == nullptr) return EAI_NONAME;
|
||||||
|
if (hostname == nullptr) return EAI_NODATA;
|
||||||
|
|
||||||
|
+ if (shouldBlockRequest(hostname, netcontext->uid)) {
|
||||||
|
+ char* dest = new char[10];
|
||||||
|
+ strncpy(dest, "localhost", strlen("localhost"));
|
||||||
|
+ hostname = dest;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
// servname is allowed to be nullptr
|
||||||
|
// hints is allowed to be nullptr
|
||||||
|
assert(res != nullptr);
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,292 @@
|
||||||
|
From b57db55818b3dc1a514224b8bec6f17853d7b5f3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Sun, 11 Feb 2024 13:19:29 +0100
|
||||||
|
Subject: [PATCH] packages_modules_DnsResolver_eOS
|
||||||
|
|
||||||
|
Change-Id: If2499679485c5ff7cf0f7090c4526faf6159f5dc
|
||||||
|
---
|
||||||
|
.editorconfig | 13 --------
|
||||||
|
Android.bp | 1 -
|
||||||
|
Dns64Configuration.cpp | 17 +++++------
|
||||||
|
Dns64Configuration.h | 3 +-
|
||||||
|
ResolverController.cpp | 15 +++++-----
|
||||||
|
ResolverController.h | 6 ++--
|
||||||
|
getaddrinfo.cpp | 67 ++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
7 files changed, 86 insertions(+), 36 deletions(-)
|
||||||
|
delete mode 100644 .editorconfig
|
||||||
|
|
||||||
|
diff --git a/Android.bp b/Android.bp
|
||||||
|
index b0cfee0..45425aa 100644
|
||||||
|
--- a/Android.bp
|
||||||
|
+++ b/Android.bp
|
||||||
|
@@ -203,7 +203,6 @@ cc_library {
|
||||||
|
"libstatspush_compat",
|
||||||
|
"libsysutils",
|
||||||
|
"netd_event_listener_interface-lateststable-ndk",
|
||||||
|
- "libutils",
|
||||||
|
"server_configurable_flags",
|
||||||
|
"stats_proto",
|
||||||
|
],
|
||||||
|
diff --git a/Dns64Configuration.cpp b/Dns64Configuration.cpp
|
||||||
|
index 6e5ca5b..a1fe871 100644
|
||||||
|
--- a/Dns64Configuration.cpp
|
||||||
|
+++ b/Dns64Configuration.cpp
|
||||||
|
@@ -24,7 +24,6 @@
|
||||||
|
#include <netdutils/DumpWriter.h>
|
||||||
|
#include <netdutils/InternetAddresses.h>
|
||||||
|
#include <netdutils/ThreadUtil.h>
|
||||||
|
-#include <utils/StrongPointer.h>
|
||||||
|
#include <thread>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
@@ -37,7 +36,6 @@
|
||||||
|
|
||||||
|
namespace android {
|
||||||
|
|
||||||
|
-using android::sp;
|
||||||
|
using netdutils::DumpWriter;
|
||||||
|
using netdutils::IPAddress;
|
||||||
|
using netdutils::IPPrefix;
|
||||||
|
@@ -63,9 +61,8 @@ void Dns64Configuration::startPrefixDiscovery(unsigned netId) {
|
||||||
|
// Emplace a copy of |cfg| in the map.
|
||||||
|
mDns64Configs.emplace(std::make_pair(netId, cfg));
|
||||||
|
|
||||||
|
- const sp<Dns64Configuration> thiz = this;
|
||||||
|
// Note that capturing |cfg| in this lambda creates a copy.
|
||||||
|
- std::thread discovery_thread([thiz, cfg, netId] {
|
||||||
|
+ std::thread discovery_thread([this, cfg, netId] {
|
||||||
|
setThreadName(fmt::format("Nat64Pfx_{}", netId));
|
||||||
|
|
||||||
|
// Make a mutable copy rather than mark the whole lambda mutable.
|
||||||
|
@@ -78,28 +75,28 @@ void Dns64Configuration::startPrefixDiscovery(unsigned netId) {
|
||||||
|
.build();
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
- if (!thiz->shouldContinueDiscovery(evalCfg)) break;
|
||||||
|
+ if (!this->shouldContinueDiscovery(evalCfg)) break;
|
||||||
|
|
||||||
|
android_net_context netcontext{};
|
||||||
|
- thiz->mGetNetworkContextCallback(evalCfg.netId, 0, &netcontext);
|
||||||
|
+ mGetNetworkContextCallback(evalCfg.netId, 0, &netcontext);
|
||||||
|
|
||||||
|
// Prefix discovery must bypass private DNS because in strict mode
|
||||||
|
// the server generally won't know the NAT64 prefix.
|
||||||
|
netcontext.flags |= NET_CONTEXT_FLAG_USE_LOCAL_NAMESERVERS;
|
||||||
|
if (doRfc7050PrefixDiscovery(netcontext, &evalCfg)) {
|
||||||
|
- thiz->recordDns64Config(evalCfg);
|
||||||
|
+ this->recordDns64Config(evalCfg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!thiz->shouldContinueDiscovery(evalCfg)) break;
|
||||||
|
+ if (!this->shouldContinueDiscovery(evalCfg)) break;
|
||||||
|
|
||||||
|
if (!backoff.hasNextTimeout()) break;
|
||||||
|
{
|
||||||
|
- std::unique_lock<std::mutex> cvGuard(thiz->mMutex);
|
||||||
|
+ std::unique_lock<std::mutex> cvGuard(mMutex);
|
||||||
|
// TODO: Consider some chrono math, combined with wait_until()
|
||||||
|
// perhaps, to prevent early re-resolves from the removal of
|
||||||
|
// other netids with IPv6-only nameservers.
|
||||||
|
- thiz->mCv.wait_for(cvGuard, backoff.getNextTimeout());
|
||||||
|
+ mCv.wait_for(cvGuard, backoff.getNextTimeout());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
diff --git a/Dns64Configuration.h b/Dns64Configuration.h
|
||||||
|
index ebc63db..387de78 100644
|
||||||
|
--- a/Dns64Configuration.h
|
||||||
|
+++ b/Dns64Configuration.h
|
||||||
|
@@ -26,7 +26,6 @@
|
||||||
|
#include <android-base/thread_annotations.h>
|
||||||
|
#include <netdutils/DumpWriter.h>
|
||||||
|
#include <netdutils/InternetAddresses.h>
|
||||||
|
-#include <utils/RefBase.h>
|
||||||
|
|
||||||
|
struct android_net_context;
|
||||||
|
|
||||||
|
@@ -48,7 +47,7 @@ namespace net {
|
||||||
|
* Thread-safety: All public methods in this class MUST be thread-safe.
|
||||||
|
* (In other words: this class handles all its locking privately.)
|
||||||
|
*/
|
||||||
|
-class Dns64Configuration : virtual public RefBase {
|
||||||
|
+class Dns64Configuration {
|
||||||
|
public:
|
||||||
|
// Simple data struct for passing back packet NAT64 prefix event information to the
|
||||||
|
// Dns64PrefixCallback callback.
|
||||||
|
diff --git a/ResolverController.cpp b/ResolverController.cpp
|
||||||
|
index 12bf7f9..a430a08 100644
|
||||||
|
--- a/ResolverController.cpp
|
||||||
|
+++ b/ResolverController.cpp
|
||||||
|
@@ -156,17 +156,17 @@ int getDnsInfo(unsigned netId, std::vector<std::string>* servers, std::vector<st
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
ResolverController::ResolverController()
|
||||||
|
- : mDns64Configuration(new Dns64Configuration(
|
||||||
|
+ : mDns64Configuration(
|
||||||
|
[](uint32_t netId, uint32_t uid, android_net_context* netcontext) {
|
||||||
|
gResNetdCallbacks.get_network_context(netId, uid, netcontext);
|
||||||
|
},
|
||||||
|
- std::bind(sendNat64PrefixEvent, std::placeholders::_1))) {}
|
||||||
|
+ std::bind(sendNat64PrefixEvent, std::placeholders::_1)) {}
|
||||||
|
|
||||||
|
void ResolverController::destroyNetworkCache(unsigned netId) {
|
||||||
|
LOG(VERBOSE) << __func__ << ": netId = " << netId;
|
||||||
|
|
||||||
|
resolv_delete_cache_for_net(netId);
|
||||||
|
- mDns64Configuration->stopPrefixDiscovery(netId);
|
||||||
|
+ mDns64Configuration.stopPrefixDiscovery(netId);
|
||||||
|
PrivateDnsConfiguration::getInstance().clear(netId);
|
||||||
|
if (isDoHEnabled()) PrivateDnsConfiguration::getInstance().clearDoh(netId);
|
||||||
|
|
||||||
|
@@ -283,16 +283,16 @@ int ResolverController::getResolverInfo(int32_t netId, std::vector<std::string>*
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResolverController::startPrefix64Discovery(int32_t netId) {
|
||||||
|
- mDns64Configuration->startPrefixDiscovery(netId);
|
||||||
|
+ mDns64Configuration.startPrefixDiscovery(netId);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResolverController::stopPrefix64Discovery(int32_t netId) {
|
||||||
|
- return mDns64Configuration->stopPrefixDiscovery(netId);
|
||||||
|
+ return mDns64Configuration.stopPrefixDiscovery(netId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use StatusOr<T> to wrap the result.
|
||||||
|
int ResolverController::getPrefix64(unsigned netId, netdutils::IPPrefix* prefix) {
|
||||||
|
- netdutils::IPPrefix p = mDns64Configuration->getPrefix64(netId);
|
||||||
|
+ netdutils::IPPrefix p = mDns64Configuration.getPrefix64(netId);
|
||||||
|
if (p.family() != AF_INET6 || p.length() == 0) {
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
@@ -358,7 +358,8 @@ void ResolverController::dump(DumpWriter& dw, unsigned netId) {
|
||||||
|
params.sample_validity, params.success_threshold, params.min_samples,
|
||||||
|
params.max_samples, params.base_timeout_msec, params.retry_count);
|
||||||
|
}
|
||||||
|
- mDns64Configuration->dump(dw, netId);
|
||||||
|
+
|
||||||
|
+ mDns64Configuration.dump(dw, netId);
|
||||||
|
const auto privateDnsStatus = PrivateDnsConfiguration::getInstance().getStatus(netId);
|
||||||
|
dw.println("Private DNS mode: %s", getPrivateDnsModeString(privateDnsStatus.mode));
|
||||||
|
if (privateDnsStatus.dotServersMap.size() == 0) {
|
||||||
|
diff --git a/ResolverController.h b/ResolverController.h
|
||||||
|
index 3802e36..e81e1ed 100644
|
||||||
|
--- a/ResolverController.h
|
||||||
|
+++ b/ResolverController.h
|
||||||
|
@@ -55,10 +55,10 @@ class ResolverController {
|
||||||
|
|
||||||
|
// Set or clear a NAT64 prefix discovered by other sources (e.g., RA).
|
||||||
|
int setPrefix64(unsigned netId, const netdutils::IPPrefix& prefix) {
|
||||||
|
- return mDns64Configuration->setPrefix64(netId, prefix);
|
||||||
|
+ return mDns64Configuration.setPrefix64(netId, prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
- int clearPrefix64(unsigned netId) { return mDns64Configuration->clearPrefix64(netId); }
|
||||||
|
+ int clearPrefix64(unsigned netId) { return mDns64Configuration.clearPrefix64(netId); }
|
||||||
|
|
||||||
|
// Return the current NAT64 prefix network, regardless of how it was discovered.
|
||||||
|
int getPrefix64(unsigned netId, netdutils::IPPrefix* prefix);
|
||||||
|
@@ -66,7 +66,7 @@ class ResolverController {
|
||||||
|
void dump(netdutils::DumpWriter& dw, unsigned netId);
|
||||||
|
|
||||||
|
private:
|
||||||
|
- android::sp<Dns64Configuration> mDns64Configuration;
|
||||||
|
+ Dns64Configuration mDns64Configuration;
|
||||||
|
};
|
||||||
|
} // namespace net
|
||||||
|
} // namespace android
|
||||||
|
diff --git a/getaddrinfo.cpp b/getaddrinfo.cpp
|
||||||
|
index 6674f23..07194b3 100644
|
||||||
|
--- a/getaddrinfo.cpp
|
||||||
|
+++ b/getaddrinfo.cpp
|
||||||
|
@@ -3,6 +3,7 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
|
||||||
|
+ * Copyright (C) 2021 ECORP
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@@ -319,6 +320,66 @@ int validateHints(const addrinfo* _Nonnull hints) {
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
+int shouldBlockRequest(const char* hostname, int uid){
|
||||||
|
+ int sock, len;
|
||||||
|
+ struct sockaddr_un server;
|
||||||
|
+ char message[1000], server_reply[2000];
|
||||||
|
+
|
||||||
|
+ //Create socket
|
||||||
|
+ sock = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0);
|
||||||
|
+ if (sock == -1) {
|
||||||
|
+ LOG(DEBUG) << "Socket: Could not create socket";
|
||||||
|
+ }
|
||||||
|
+ LOG(DEBUG) << "Socket: created";
|
||||||
|
+
|
||||||
|
+ char const* name = "foundation.e.advancedprivacy";
|
||||||
|
+ int nameLen = strlen(name);
|
||||||
|
+ server.sun_path[0] = '\0'; /* abstract namespace */
|
||||||
|
+ strncpy(server.sun_path + 1, name, nameLen);
|
||||||
|
+ server.sun_family = AF_UNIX;
|
||||||
|
+ len = 1 + nameLen + offsetof(struct sockaddr_un, sun_path);
|
||||||
|
+
|
||||||
|
+ //Connect to remote server
|
||||||
|
+ if (connect(sock, (struct sockaddr *)&server, len) < 0) {
|
||||||
|
+ LOG(DEBUG) << "Socket: connect failed. Error";
|
||||||
|
+ close(sock);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ LOG(DEBUG) << "Socket: Connected";
|
||||||
|
+
|
||||||
|
+ //keep communicating with server
|
||||||
|
+ snprintf(message, sizeof(message), "%s,%d", hostname, uid);
|
||||||
|
+
|
||||||
|
+ //Send some data
|
||||||
|
+ if(send(sock, message, strlen(message), 0) < 0) {
|
||||||
|
+ LOG(DEBUG) << "Socket: Send failed";
|
||||||
|
+ close(sock);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ shutdown(sock, SHUT_WR);
|
||||||
|
+ //Receive a reply from the server
|
||||||
|
+ if (recv(sock, server_reply, 2000, 0) < 0) {
|
||||||
|
+ LOG(DEBUG) << "Socket:recv failed";
|
||||||
|
+ close(sock);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ LOG(DEBUG) << "Socket: Server reply : " << server_reply;
|
||||||
|
+ if (strncmp(server_reply, "pass", 4) == 0) {
|
||||||
|
+ LOG(DEBUG) << "Socket: Shouldn't block";
|
||||||
|
+ close(sock);
|
||||||
|
+ return 0;
|
||||||
|
+ } else {
|
||||||
|
+ LOG(DEBUG) << "Socket: should block";
|
||||||
|
+ close(sock);
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ close(sock);
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int android_getaddrinfofornetcontext(const char* hostname, const char* servname,
|
||||||
|
const addrinfo* hints, const android_net_context* netcontext,
|
||||||
|
addrinfo** res, NetworkDnsEventReported* event) {
|
||||||
|
@@ -412,6 +473,12 @@ int resolv_getaddrinfo(const char* _Nonnull hostname, const char* servname, cons
|
||||||
|
if (hostname == nullptr && servname == nullptr) return EAI_NONAME;
|
||||||
|
if (hostname == nullptr) return EAI_NODATA;
|
||||||
|
|
||||||
|
+ if (shouldBlockRequest(hostname, netcontext->uid)) {
|
||||||
|
+ char* dest = new char[10];
|
||||||
|
+ strncpy(dest, "localhost", strlen("localhost"));
|
||||||
|
+ hostname = dest;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
// servname is allowed to be nullptr
|
||||||
|
// hints is allowed to be nullptr
|
||||||
|
assert(res != nullptr);
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,603 @@
|
||||||
|
From 0216c11ca383ed80e85b55dbf5e5322a6a6e6790 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Fri, 6 Oct 2023 16:03:43 +0200
|
||||||
|
Subject: [PATCH] packages_modules_DnsResolver
|
||||||
|
|
||||||
|
Change-Id: Ia10594308689226fd5b9e8aee5dce086d1fb822f
|
||||||
|
---
|
||||||
|
PrivateDnsConfiguration.h | 45 +++++-----
|
||||||
|
tests/doh_ffi_test.cpp | 8 +-
|
||||||
|
tests/resolv_integration_test.cpp | 140 +++++++++++++++---------------
|
||||||
|
3 files changed, 94 insertions(+), 99 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/PrivateDnsConfiguration.h b/PrivateDnsConfiguration.h
|
||||||
|
index 732db7b..0a30327 100644
|
||||||
|
--- a/PrivateDnsConfiguration.h
|
||||||
|
+++ b/PrivateDnsConfiguration.h
|
||||||
|
@@ -248,35 +248,30 @@ class PrivateDnsConfiguration {
|
||||||
|
// TODO: Move below DoH relevant stuff into Rust implementation.
|
||||||
|
std::map<unsigned, DohIdentity> mDohTracker GUARDED_BY(mPrivateDnsLock);
|
||||||
|
std::array<DohProviderEntry, 5> mAvailableDoHProviders = {{
|
||||||
|
- {"Google",
|
||||||
|
- {"2001:4860:4860::8888", "2001:4860:4860::8844", "8.8.8.8", "8.8.4.4"},
|
||||||
|
- "dns.google",
|
||||||
|
- "https://dns.google/dns-query",
|
||||||
|
- false},
|
||||||
|
- {"Google DNS64",
|
||||||
|
- {"2001:4860:4860::64", "2001:4860:4860::6464"},
|
||||||
|
- "dns64.dns.google",
|
||||||
|
- "https://dns64.dns.google/dns-query",
|
||||||
|
- false},
|
||||||
|
- {"Cloudflare",
|
||||||
|
- {"2606:4700::6810:f8f9", "2606:4700::6810:f9f9", "104.16.248.249", "104.16.249.249"},
|
||||||
|
- "cloudflare-dns.com",
|
||||||
|
- "https://cloudflare-dns.com/dns-query",
|
||||||
|
- false},
|
||||||
|
+ {"QUAD9",
|
||||||
|
+ {"9.9.9.9", "9.9.9.10"},
|
||||||
|
+ "quad9",
|
||||||
|
+ "https://quad9/dns-query",
|
||||||
|
+ false},
|
||||||
|
+ {"OpenDNS",
|
||||||
|
+ {"2620:119:35::35", "2620:119:53::53", "208.67.222.222", "208.67.220.220"},
|
||||||
|
+ "opendns.com",
|
||||||
|
+ "https://copendns/dns-query",
|
||||||
|
+ false},
|
||||||
|
|
||||||
|
// The DoH providers for testing only.
|
||||||
|
// Using ResolverTestProvider requires that the DnsResolver is configured by someone
|
||||||
|
// who has root permission, which should be run by tests only.
|
||||||
|
- {"ResolverTestProvider",
|
||||||
|
- {"127.0.0.3", "::1"},
|
||||||
|
- "example.com",
|
||||||
|
- "https://example.com/dns-query",
|
||||||
|
- true},
|
||||||
|
- {"AndroidTesting",
|
||||||
|
- {"192.0.2.100"},
|
||||||
|
- "dns.androidtesting.org",
|
||||||
|
- "https://dns.androidtesting.org/dns-query",
|
||||||
|
- false},
|
||||||
|
+ {"QUAD9",
|
||||||
|
+ {"9.9.9.9", "9.9.9.10"},
|
||||||
|
+ "quad9",
|
||||||
|
+ "https://quad9/dns-query",
|
||||||
|
+ false},
|
||||||
|
+ {"OpenDNS",
|
||||||
|
+ {"2620:119:35::35", "2620:119:53::53", "208.67.222.222", "208.67.220.220"},
|
||||||
|
+ "opendns.com",
|
||||||
|
+ "https://copendns/dns-query",
|
||||||
|
+ false},
|
||||||
|
}};
|
||||||
|
|
||||||
|
// For the metrics. Store the current DNS server list in the same order as what is passed
|
||||||
|
diff --git a/tests/doh_ffi_test.cpp b/tests/doh_ffi_test.cpp
|
||||||
|
index b91c59e..cb69bd4 100644
|
||||||
|
--- a/tests/doh_ffi_test.cpp
|
||||||
|
+++ b/tests/doh_ffi_test.cpp
|
||||||
|
@@ -28,8 +28,8 @@
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <netdutils/NetNativeTestBase.h>
|
||||||
|
|
||||||
|
-constexpr char GOOGLE_SERVER_IP[] = "8.8.8.8";
|
||||||
|
-constexpr char GOOGLE_SERVER_IPV6[] = "2001:4860:4860::8888";
|
||||||
|
+constexpr char GOOGLE_SERVER_IP[] = "9.9.9.9";
|
||||||
|
+constexpr char GOOGLE_SERVER_IPV6[] = "9999:9999:9999::9999";
|
||||||
|
static const int TIMEOUT_MS = 10000;
|
||||||
|
constexpr int MAXPACKET = (8 * 1024);
|
||||||
|
constexpr unsigned int MINIMAL_NET_ID = 100;
|
||||||
|
@@ -108,7 +108,7 @@ TEST_F(DoHFFITest, SmokeTest) {
|
||||||
|
|
||||||
|
// sk_mark doesn't matter here because this test doesn't have permission to set sk_mark.
|
||||||
|
// The DNS packet would be sent via default network.
|
||||||
|
- EXPECT_EQ(doh_net_new(doh, dnsNetId, "https://dns.google/dns-query", /* domain */ "", server_ip,
|
||||||
|
+ EXPECT_EQ(doh_net_new(doh, dnsNetId, "https://quad9/dns-query", /* domain */ "", server_ip,
|
||||||
|
/* sk_mark */ 0, /* cert_path */ "", &flags),
|
||||||
|
0);
|
||||||
|
{
|
||||||
|
@@ -118,7 +118,7 @@ TEST_F(DoHFFITest, SmokeTest) {
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<uint8_t> buf(MAXPACKET, 0);
|
||||||
|
- ssize_t len = res_mkquery(ns_o_query, "www.example.com", ns_c_in, ns_t_aaaa, nullptr, 0,
|
||||||
|
+ ssize_t len = res_mkquery(ns_o_query, "quad9", ns_c_in, ns_t_aaaa, nullptr, 0,
|
||||||
|
nullptr, buf.data(), MAXPACKET);
|
||||||
|
uint8_t answer[8192];
|
||||||
|
|
||||||
|
diff --git a/tests/resolv_integration_test.cpp b/tests/resolv_integration_test.cpp
|
||||||
|
index 71f3536..a236af5 100644
|
||||||
|
--- a/tests/resolv_integration_test.cpp
|
||||||
|
+++ b/tests/resolv_integration_test.cpp
|
||||||
|
@@ -705,7 +705,7 @@ TEST_F(ResolverTest, GetHostByName_Binder) {
|
||||||
|
TEST_F(ResolverTest, GetAddrInfo) {
|
||||||
|
constexpr char listen_addr[] = "127.0.0.4";
|
||||||
|
constexpr char listen_addr2[] = "127.0.0.5";
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.quad9.com.";
|
||||||
|
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_a, "1.2.3.4"},
|
||||||
|
@@ -720,7 +720,7 @@ TEST_F(ResolverTest, GetAddrInfo) {
|
||||||
|
dns.clearQueries();
|
||||||
|
dns2.clearQueries();
|
||||||
|
|
||||||
|
- ScopedAddrinfo result = safe_getaddrinfo("howdy", nullptr, nullptr);
|
||||||
|
+ ScopedAddrinfo result = safe_getaddrinfo("leos", nullptr, nullptr);
|
||||||
|
EXPECT_TRUE(result != nullptr);
|
||||||
|
size_t found = GetNumQueries(dns, host_name);
|
||||||
|
EXPECT_LE(1U, found);
|
||||||
|
@@ -731,7 +731,7 @@ TEST_F(ResolverTest, GetAddrInfo) {
|
||||||
|
|
||||||
|
// Verify that the name is cached.
|
||||||
|
size_t old_found = found;
|
||||||
|
- result = safe_getaddrinfo("howdy", nullptr, nullptr);
|
||||||
|
+ result = safe_getaddrinfo("leos", nullptr, nullptr);
|
||||||
|
EXPECT_TRUE(result != nullptr);
|
||||||
|
found = GetNumQueries(dns, host_name);
|
||||||
|
EXPECT_LE(1U, found);
|
||||||
|
@@ -744,7 +744,7 @@ TEST_F(ResolverTest, GetAddrInfo) {
|
||||||
|
dns.clearQueries();
|
||||||
|
dns2.clearQueries();
|
||||||
|
|
||||||
|
- result = safe_getaddrinfo("howdy", nullptr, nullptr);
|
||||||
|
+ result = safe_getaddrinfo("leos", nullptr, nullptr);
|
||||||
|
EXPECT_TRUE(result != nullptr);
|
||||||
|
found = GetNumQueries(dns, host_name);
|
||||||
|
size_t found2 = GetNumQueries(dns2, host_name);
|
||||||
|
@@ -842,8 +842,8 @@ TEST_F(ResolverTest, GetAddrInfoV4_deferred_resp) {
|
||||||
|
const char* listen_addr2 = "127.0.0.10";
|
||||||
|
const char* listen_addr3 = "127.0.0.11";
|
||||||
|
const char* listen_srv = "53";
|
||||||
|
- const char* host_name_deferred = "hello.example.com.";
|
||||||
|
- const char* host_name_normal = "konbanha.example.com.";
|
||||||
|
+ const char* host_name_deferred = "hello.quad9.com.";
|
||||||
|
+ const char* host_name_normal = "konbanha.quad9.com.";
|
||||||
|
test::DNSResponder dns1(listen_addr1, listen_srv, ns_rcode::ns_r_servfail);
|
||||||
|
test::DNSResponder dns2(listen_addr2, listen_srv, ns_rcode::ns_r_servfail);
|
||||||
|
test::DNSResponder dns3(listen_addr3, listen_srv, ns_rcode::ns_r_servfail);
|
||||||
|
@@ -1154,7 +1154,7 @@ TEST_F(ResolverTest, GetAddrInfo_cnamesIllegalRdata) {
|
||||||
|
|
||||||
|
TEST_F(ResolverTest, GetAddrInfoForCaseInSensitiveDomains) {
|
||||||
|
test::DNSResponder dns;
|
||||||
|
- const char* host_name = "howdy.example.com.";
|
||||||
|
+ const char* host_name = "leos.example.com.";
|
||||||
|
const char* host_name2 = "HOWDY.example.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_a, "1.2.3.4"},
|
||||||
|
@@ -1165,7 +1165,7 @@ TEST_F(ResolverTest, GetAddrInfoForCaseInSensitiveDomains) {
|
||||||
|
StartDns(dns, records);
|
||||||
|
ASSERT_TRUE(mDnsClient.SetResolversForNetwork());
|
||||||
|
|
||||||
|
- ScopedAddrinfo hostname_result = safe_getaddrinfo("howdy", nullptr, nullptr);
|
||||||
|
+ ScopedAddrinfo hostname_result = safe_getaddrinfo("leos", nullptr, nullptr);
|
||||||
|
EXPECT_TRUE(hostname_result != nullptr);
|
||||||
|
const size_t hostname1_count_after_first_query = GetNumQueries(dns, host_name);
|
||||||
|
EXPECT_LE(1U, hostname1_count_after_first_query);
|
||||||
|
@@ -1179,7 +1179,7 @@ TEST_F(ResolverTest, GetAddrInfoForCaseInSensitiveDomains) {
|
||||||
|
const size_t hostname1_count_after_second_query = GetNumQueries(dns, host_name);
|
||||||
|
EXPECT_LE(1U, hostname1_count_after_second_query);
|
||||||
|
|
||||||
|
- // verify that there is no change in num of queries for howdy.example.com
|
||||||
|
+ // verify that there is no change in num of queries for leos.example.com
|
||||||
|
EXPECT_EQ(hostname1_count_after_first_query, hostname1_count_after_second_query);
|
||||||
|
|
||||||
|
// Number of queries for HOWDY.example.com would be >= 1 if domain names
|
||||||
|
@@ -2482,7 +2482,7 @@ void expectAnswersNotValid(int fd, int expectedErrno) {
|
||||||
|
|
||||||
|
TEST_F(ResolverTest, Async_NormalQueryV4V6) {
|
||||||
|
constexpr char listen_addr[] = "127.0.0.4";
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.example.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_a, "1.2.3.4"},
|
||||||
|
{host_name, ns_type::ns_t_aaaa, "::1.2.3.4"},
|
||||||
|
@@ -2493,8 +2493,8 @@ TEST_F(ResolverTest, Async_NormalQueryV4V6) {
|
||||||
|
std::vector<std::string> servers = {listen_addr};
|
||||||
|
ASSERT_TRUE(mDnsClient.SetResolversForNetwork(servers));
|
||||||
|
|
||||||
|
- int fd1 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
- int fd2 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
+ int fd1 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ int fd2 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
EXPECT_TRUE(fd2 != -1);
|
||||||
|
|
||||||
|
@@ -2511,8 +2511,8 @@ TEST_F(ResolverTest, Async_NormalQueryV4V6) {
|
||||||
|
EXPECT_EQ(2U, GetNumQueries(dns, host_name));
|
||||||
|
|
||||||
|
// Re-query verify cache works
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
- fd2 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ fd2 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
EXPECT_TRUE(fd2 != -1);
|
||||||
|
@@ -2530,7 +2530,7 @@ TEST_F(ResolverTest, Async_NormalQueryV4V6) {
|
||||||
|
|
||||||
|
TEST_F(ResolverTest, Async_BadQuery) {
|
||||||
|
constexpr char listen_addr[] = "127.0.0.4";
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.example.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_a, "1.2.3.4"},
|
||||||
|
{host_name, ns_type::ns_t_aaaa, "::1.2.3.4"},
|
||||||
|
@@ -2551,7 +2551,7 @@ TEST_F(ResolverTest, Async_BadQuery) {
|
||||||
|
{-1, "as65ass46", ns_t_aaaa, 0},
|
||||||
|
{-1, "454564564564", ns_t_aaaa, 0},
|
||||||
|
{-1, "h645235", ns_t_a, 0},
|
||||||
|
- {-1, "www.google.com", ns_t_a, 0},
|
||||||
|
+ {-1, "leos-gsi.de", ns_t_a, 0},
|
||||||
|
};
|
||||||
|
|
||||||
|
for (auto& td : kTestData) {
|
||||||
|
@@ -2573,7 +2573,7 @@ TEST_F(ResolverTest, Async_BadQuery) {
|
||||||
|
|
||||||
|
TEST_F(ResolverTest, Async_EmptyAnswer) {
|
||||||
|
constexpr char listen_addr[] = "127.0.0.4";
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.example.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_a, "1.2.3.4"},
|
||||||
|
{host_name, ns_type::ns_t_aaaa, "::1.2.3.4"},
|
||||||
|
@@ -2591,21 +2591,21 @@ TEST_F(ResolverTest, Async_EmptyAnswer) {
|
||||||
|
// Wait on the condition variable to ensure that the DNS server has handled our first query.
|
||||||
|
{
|
||||||
|
std::unique_lock lk(cvMutex);
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
EXPECT_EQ(std::cv_status::no_timeout, cv.wait_for(lk, std::chrono::seconds(1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
- ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, 0, "howdy.example.com", {"::1.2.3.4"});
|
||||||
|
+ ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, 0, "leos.example.com", {"::1.2.3.4"});
|
||||||
|
dns.setResponseProbability(0.0);
|
||||||
|
|
||||||
|
- int fd2 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ int fd2 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
EXPECT_TRUE(fd2 != -1);
|
||||||
|
- ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, RCODE_TIMEOUT, "howdy.example.com", {});
|
||||||
|
+ ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, RCODE_TIMEOUT, "leos.example.com", {});
|
||||||
|
|
||||||
|
- int fd3 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ int fd3 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
EXPECT_TRUE(fd3 != -1);
|
||||||
|
- ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, RCODE_TIMEOUT, "howdy.example.com", {});
|
||||||
|
+ ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, RCODE_TIMEOUT, "leos.example.com", {});
|
||||||
|
|
||||||
|
uint8_t buf[MAXPACKET] = {};
|
||||||
|
int rcode;
|
||||||
|
@@ -2621,9 +2621,9 @@ TEST_F(ResolverTest, Async_EmptyAnswer) {
|
||||||
|
|
||||||
|
dns.setResponseProbability(1.0);
|
||||||
|
|
||||||
|
- int fd4 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ int fd4 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
EXPECT_TRUE(fd4 != -1);
|
||||||
|
- ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, 0, "howdy.example.com", {"1.2.3.4"});
|
||||||
|
+ ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, 0, "leos.example.com", {"1.2.3.4"});
|
||||||
|
|
||||||
|
memset(buf, 0, MAXPACKET);
|
||||||
|
res = getAsyncResponse(fd4, &rcode, buf, MAXPACKET);
|
||||||
|
@@ -2638,7 +2638,7 @@ TEST_F(ResolverTest, Async_EmptyAnswer) {
|
||||||
|
|
||||||
|
TEST_F(ResolverTest, Async_MalformedQuery) {
|
||||||
|
constexpr char listen_addr[] = "127.0.0.4";
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.example.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_a, "1.2.3.4"},
|
||||||
|
{host_name, ns_type::ns_t_aaaa, "::1.2.3.4"},
|
||||||
|
@@ -2677,7 +2677,7 @@ TEST_F(ResolverTest, Async_MalformedQuery) {
|
||||||
|
EXPECT_EQ(static_cast<int>(ntohl(tmp)), td.expectErr);
|
||||||
|
}
|
||||||
|
// Normal query with answer buffer
|
||||||
|
- // This is raw data of query "howdy.example.com" type 1 class 1
|
||||||
|
+ // This is raw data of query "leos.example.com" type 1 class 1
|
||||||
|
std::string query = "81sBAAABAAAAAAAABWhvd2R5B2V4YW1wbGUDY29tAAABAAE=";
|
||||||
|
std::string cmd = "resnsend " + std::to_string(TEST_NETID) + " 0 " + query + '\0';
|
||||||
|
ssize_t rc = TEMP_FAILURE_RETRY(write(fd, cmd.c_str(), cmd.size()));
|
||||||
|
@@ -2700,9 +2700,9 @@ TEST_F(ResolverTest, Async_MalformedQuery) {
|
||||||
|
|
||||||
|
TEST_F(ResolverTest, Async_CacheFlags) {
|
||||||
|
constexpr char listen_addr[] = "127.0.0.4";
|
||||||
|
- constexpr char host_name1[] = "howdy.example.com.";
|
||||||
|
- constexpr char host_name2[] = "howdy.example2.com.";
|
||||||
|
- constexpr char host_name3[] = "howdy.example3.com.";
|
||||||
|
+ constexpr char host_name1[] = "leos.example.com.";
|
||||||
|
+ constexpr char host_name2[] = "leos.example2.com.";
|
||||||
|
+ constexpr char host_name3[] = "leos.example3.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name1, ns_type::ns_t_a, "1.2.3.4"}, {host_name1, ns_type::ns_t_aaaa, "::1.2.3.4"},
|
||||||
|
{host_name2, ns_type::ns_t_a, "1.2.3.5"}, {host_name2, ns_type::ns_t_aaaa, "::1.2.3.5"},
|
||||||
|
@@ -2715,13 +2715,13 @@ TEST_F(ResolverTest, Async_CacheFlags) {
|
||||||
|
ASSERT_TRUE(mDnsClient.SetResolversForNetwork(servers));
|
||||||
|
|
||||||
|
// ANDROID_RESOLV_NO_CACHE_STORE
|
||||||
|
- int fd1 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a,
|
||||||
|
+ int fd1 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a,
|
||||||
|
ANDROID_RESOLV_NO_CACHE_STORE);
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
- int fd2 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a,
|
||||||
|
+ int fd2 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a,
|
||||||
|
ANDROID_RESOLV_NO_CACHE_STORE);
|
||||||
|
EXPECT_TRUE(fd2 != -1);
|
||||||
|
- int fd3 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a,
|
||||||
|
+ int fd3 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a,
|
||||||
|
ANDROID_RESOLV_NO_CACHE_STORE);
|
||||||
|
EXPECT_TRUE(fd3 != -1);
|
||||||
|
|
||||||
|
@@ -2734,7 +2734,7 @@ TEST_F(ResolverTest, Async_CacheFlags) {
|
||||||
|
|
||||||
|
// Raise a query with no flags to ensure no cache exists. Also make an cache entry for the
|
||||||
|
// query.
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
|
||||||
|
@@ -2745,7 +2745,7 @@ TEST_F(ResolverTest, Async_CacheFlags) {
|
||||||
|
|
||||||
|
// Now we have the cache entry, re-query with ANDROID_RESOLV_NO_CACHE_STORE to ensure
|
||||||
|
// that ANDROID_RESOLV_NO_CACHE_STORE implied ANDROID_RESOLV_NO_CACHE_LOOKUP.
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a,
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a,
|
||||||
|
ANDROID_RESOLV_NO_CACHE_STORE);
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
expectAnswersValid(fd1, AF_INET, "1.2.3.4");
|
||||||
|
@@ -2754,9 +2754,9 @@ TEST_F(ResolverTest, Async_CacheFlags) {
|
||||||
|
EXPECT_EQ(5U, GetNumQueries(dns, host_name1));
|
||||||
|
|
||||||
|
// ANDROID_RESOLV_NO_CACHE_LOOKUP
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a,
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a,
|
||||||
|
ANDROID_RESOLV_NO_CACHE_LOOKUP);
|
||||||
|
- fd2 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a,
|
||||||
|
+ fd2 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a,
|
||||||
|
ANDROID_RESOLV_NO_CACHE_LOOKUP);
|
||||||
|
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
@@ -2769,7 +2769,7 @@ TEST_F(ResolverTest, Async_CacheFlags) {
|
||||||
|
EXPECT_EQ(7U, GetNumQueries(dns, host_name1));
|
||||||
|
|
||||||
|
// Re-query verify cache works
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
expectAnswersValid(fd1, AF_INET, "1.2.3.4");
|
||||||
|
|
||||||
|
@@ -2779,9 +2779,9 @@ TEST_F(ResolverTest, Async_CacheFlags) {
|
||||||
|
// Start to verify if ANDROID_RESOLV_NO_CACHE_LOOKUP does write response into cache
|
||||||
|
dns.clearQueries();
|
||||||
|
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example2.com", ns_c_in, ns_t_aaaa,
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example2.com", ns_c_in, ns_t_aaaa,
|
||||||
|
ANDROID_RESOLV_NO_CACHE_LOOKUP);
|
||||||
|
- fd2 = resNetworkQuery(TEST_NETID, "howdy.example2.com", ns_c_in, ns_t_aaaa,
|
||||||
|
+ fd2 = resNetworkQuery(TEST_NETID, "leos.example2.com", ns_c_in, ns_t_aaaa,
|
||||||
|
ANDROID_RESOLV_NO_CACHE_LOOKUP);
|
||||||
|
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
@@ -2794,8 +2794,8 @@ TEST_F(ResolverTest, Async_CacheFlags) {
|
||||||
|
EXPECT_EQ(2U, GetNumQueries(dns, host_name2));
|
||||||
|
|
||||||
|
// Re-query without flags
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example2.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
- fd2 = resNetworkQuery(TEST_NETID, "howdy.example2.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example2.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
+ fd2 = resNetworkQuery(TEST_NETID, "leos.example2.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
EXPECT_TRUE(fd2 != -1);
|
||||||
|
@@ -2809,29 +2809,29 @@ TEST_F(ResolverTest, Async_CacheFlags) {
|
||||||
|
// Test both ANDROID_RESOLV_NO_CACHE_STORE and ANDROID_RESOLV_NO_CACHE_LOOKUP are set
|
||||||
|
dns.clearQueries();
|
||||||
|
|
||||||
|
- // Make sure that the cache of "howdy.example3.com" exists.
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example3.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
+ // Make sure that the cache of "leos.example3.com" exists.
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example3.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
expectAnswersValid(fd1, AF_INET6, "::1.2.3.6");
|
||||||
|
EXPECT_EQ(1U, GetNumQueries(dns, host_name3));
|
||||||
|
|
||||||
|
// Re-query with testFlags
|
||||||
|
const int testFlag = ANDROID_RESOLV_NO_CACHE_STORE | ANDROID_RESOLV_NO_CACHE_LOOKUP;
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example3.com", ns_c_in, ns_t_aaaa, testFlag);
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example3.com", ns_c_in, ns_t_aaaa, testFlag);
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
expectAnswersValid(fd1, AF_INET6, "::1.2.3.6");
|
||||||
|
// Expect cache lookup is skipped.
|
||||||
|
EXPECT_EQ(2U, GetNumQueries(dns, host_name3));
|
||||||
|
|
||||||
|
// Do another query with testFlags
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example3.com", ns_c_in, ns_t_a, testFlag);
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example3.com", ns_c_in, ns_t_a, testFlag);
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
expectAnswersValid(fd1, AF_INET, "1.2.3.6");
|
||||||
|
// Expect cache lookup is skipped.
|
||||||
|
EXPECT_EQ(3U, GetNumQueries(dns, host_name3));
|
||||||
|
|
||||||
|
// Re-query with no flags
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example3.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example3.com", ns_c_in, ns_t_a, 0);
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
expectAnswersValid(fd1, AF_INET, "1.2.3.6");
|
||||||
|
// Expect no cache hit because cache storing is also skipped in previous query.
|
||||||
|
@@ -2840,7 +2840,7 @@ TEST_F(ResolverTest, Async_CacheFlags) {
|
||||||
|
|
||||||
|
TEST_F(ResolverTest, Async_NoCacheStoreFlagDoesNotRefreshStaleCacheEntry) {
|
||||||
|
constexpr char listen_addr[] = "127.0.0.4";
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.example.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_a, "1.2.3.4"},
|
||||||
|
};
|
||||||
|
@@ -2856,7 +2856,7 @@ TEST_F(ResolverTest, Async_NoCacheStoreFlagDoesNotRefreshStaleCacheEntry) {
|
||||||
|
// Refer to b/148842821 for the purpose of below test steps.
|
||||||
|
// Basically, this test is used to ensure stale cache case is handled
|
||||||
|
// correctly with ANDROID_RESOLV_NO_CACHE_STORE.
|
||||||
|
- int fd = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ int fd = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
EXPECT_TRUE(fd != -1);
|
||||||
|
expectAnswersValid(fd, AF_INET, "1.2.3.4");
|
||||||
|
|
||||||
|
@@ -2869,7 +2869,7 @@ TEST_F(ResolverTest, Async_NoCacheStoreFlagDoesNotRefreshStaleCacheEntry) {
|
||||||
|
// Now request the same hostname again.
|
||||||
|
// We should see a new DNS query because the entry in cache has become stale.
|
||||||
|
// Due to ANDROID_RESOLV_NO_CACHE_STORE, this query must *not* refresh that stale entry.
|
||||||
|
- fd = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a,
|
||||||
|
+ fd = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a,
|
||||||
|
ANDROID_RESOLV_NO_CACHE_STORE);
|
||||||
|
EXPECT_TRUE(fd != -1);
|
||||||
|
expectAnswersValid(fd, AF_INET, "1.2.3.4");
|
||||||
|
@@ -2878,7 +2878,7 @@ TEST_F(ResolverTest, Async_NoCacheStoreFlagDoesNotRefreshStaleCacheEntry) {
|
||||||
|
|
||||||
|
// If the cache is still stale, we expect to see one more DNS query
|
||||||
|
// (this time the cache will be refreshed, but we're not checking for it).
|
||||||
|
- fd = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ fd = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
EXPECT_TRUE(fd != -1);
|
||||||
|
expectAnswersValid(fd, AF_INET, "1.2.3.4");
|
||||||
|
EXPECT_EQ(1U, GetNumQueries(dns, host_name));
|
||||||
|
@@ -2887,7 +2887,7 @@ TEST_F(ResolverTest, Async_NoCacheStoreFlagDoesNotRefreshStaleCacheEntry) {
|
||||||
|
TEST_F(ResolverTest, Async_NoRetryFlag) {
|
||||||
|
constexpr char listen_addr0[] = "127.0.0.4";
|
||||||
|
constexpr char listen_addr1[] = "127.0.0.6";
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.example.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_a, "1.2.3.4"},
|
||||||
|
{host_name, ns_type::ns_t_aaaa, "::1.2.3.4"},
|
||||||
|
@@ -2905,19 +2905,19 @@ TEST_F(ResolverTest, Async_NoRetryFlag) {
|
||||||
|
dns0.setResponseProbability(0.0);
|
||||||
|
dns1.setResponseProbability(0.0);
|
||||||
|
|
||||||
|
- int fd1 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a,
|
||||||
|
+ int fd1 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a,
|
||||||
|
ANDROID_RESOLV_NO_RETRY);
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
|
||||||
|
- int fd2 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_aaaa,
|
||||||
|
+ int fd2 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_aaaa,
|
||||||
|
ANDROID_RESOLV_NO_RETRY);
|
||||||
|
EXPECT_TRUE(fd2 != -1);
|
||||||
|
|
||||||
|
// expect no response
|
||||||
|
expectAnswersNotValid(fd1, -ETIMEDOUT);
|
||||||
|
expectAnswersNotValid(fd2, -ETIMEDOUT);
|
||||||
|
- ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, RCODE_TIMEOUT, "howdy.example.com", {});
|
||||||
|
- ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, RCODE_TIMEOUT, "howdy.example.com", {});
|
||||||
|
+ ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, RCODE_TIMEOUT, "leos.example.com", {});
|
||||||
|
+ ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, RCODE_TIMEOUT, "leos.example.com", {});
|
||||||
|
|
||||||
|
// No retry case, expect total 2 queries. The server is selected randomly.
|
||||||
|
EXPECT_EQ(2U, GetNumQueries(dns0, host_name) + GetNumQueries(dns1, host_name));
|
||||||
|
@@ -2925,17 +2925,17 @@ TEST_F(ResolverTest, Async_NoRetryFlag) {
|
||||||
|
dns0.clearQueries();
|
||||||
|
dns1.clearQueries();
|
||||||
|
|
||||||
|
- fd1 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
+ fd1 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_a, 0);
|
||||||
|
EXPECT_TRUE(fd1 != -1);
|
||||||
|
|
||||||
|
- fd2 = resNetworkQuery(TEST_NETID, "howdy.example.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
+ fd2 = resNetworkQuery(TEST_NETID, "leos.example.com", ns_c_in, ns_t_aaaa, 0);
|
||||||
|
EXPECT_TRUE(fd2 != -1);
|
||||||
|
|
||||||
|
// expect no response
|
||||||
|
expectAnswersNotValid(fd1, -ETIMEDOUT);
|
||||||
|
expectAnswersNotValid(fd2, -ETIMEDOUT);
|
||||||
|
- ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, RCODE_TIMEOUT, "howdy.example.com", {});
|
||||||
|
- ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, RCODE_TIMEOUT, "howdy.example.com", {});
|
||||||
|
+ ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, RCODE_TIMEOUT, "leos.example.com", {});
|
||||||
|
+ ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, RCODE_TIMEOUT, "leos.example.com", {});
|
||||||
|
|
||||||
|
// Retry case, expect 4 queries
|
||||||
|
EXPECT_EQ(4U, GetNumQueries(dns0, host_name));
|
||||||
|
@@ -2944,7 +2944,7 @@ TEST_F(ResolverTest, Async_NoRetryFlag) {
|
||||||
|
|
||||||
|
TEST_F(ResolverTest, Async_VerifyQueryID) {
|
||||||
|
constexpr char listen_addr[] = "127.0.0.4";
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.example.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_a, "1.2.3.4"},
|
||||||
|
{host_name, ns_type::ns_t_aaaa, "::1.2.3.4"},
|
||||||
|
@@ -4443,7 +4443,7 @@ TEST_F(ResolverTest, BlockDnsQueryWithUidRule) {
|
||||||
|
SKIP_IF_BPF_NOT_SUPPORTED;
|
||||||
|
constexpr char listen_addr1[] = "127.0.0.4";
|
||||||
|
constexpr char listen_addr2[] = "::1";
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.example.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_a, "1.2.3.4"},
|
||||||
|
{host_name, ns_type::ns_t_aaaa, "::1.2.3.4"},
|
||||||
|
@@ -4476,8 +4476,8 @@ TEST_F(ResolverTest, BlockDnsQueryWithUidRule) {
|
||||||
|
if (isAtLeastR) {
|
||||||
|
EXPECT_EQ(res2, -ECONNREFUSED);
|
||||||
|
EXPECT_EQ(res1, -ECONNREFUSED);
|
||||||
|
- ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, EAI_SYSTEM, "howdy.example.com", {});
|
||||||
|
- ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, EAI_SYSTEM, "howdy.example.com", {});
|
||||||
|
+ ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, EAI_SYSTEM, "leos.example.com", {});
|
||||||
|
+ ExpectDnsEvent(INetdEventListener::EVENT_RES_NSEND, EAI_SYSTEM, "leos.example.com", {});
|
||||||
|
} else {
|
||||||
|
EXPECT_GT(res2, 0);
|
||||||
|
EXPECT_EQ("::1.2.3.4", toString(buf2, res2, AF_INET6));
|
||||||
|
@@ -4491,7 +4491,7 @@ TEST_F(ResolverTest, GetAddrinfo_BlockDnsQueryWithUidRule) {
|
||||||
|
SKIP_IF_BPF_NOT_SUPPORTED;
|
||||||
|
constexpr char listen_addr1[] = "127.0.0.4";
|
||||||
|
constexpr char listen_addr2[] = "::1";
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.example.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_a, "1.2.3.4"},
|
||||||
|
{host_name, ns_type::ns_t_aaaa, "::1.2.3.4"},
|
||||||
|
@@ -4512,7 +4512,7 @@ TEST_F(ResolverTest, GetAddrinfo_BlockDnsQueryWithUidRule) {
|
||||||
|
} kTestData[] = {
|
||||||
|
{host_name, EAI_NODATA},
|
||||||
|
// To test the query with search domain.
|
||||||
|
- {"howdy", EAI_AGAIN},
|
||||||
|
+ {"leos", EAI_AGAIN},
|
||||||
|
};
|
||||||
|
|
||||||
|
INetd* netdService = mDnsClient.netdService();
|
||||||
|
@@ -4541,7 +4541,7 @@ TEST_F(ResolverTest, EnforceDnsUid) {
|
||||||
|
SKIP_IF_BPF_NOT_SUPPORTED;
|
||||||
|
constexpr char listen_addr1[] = "127.0.0.4";
|
||||||
|
constexpr char listen_addr2[] = "::1";
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.example.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_a, "1.2.3.4"},
|
||||||
|
{host_name, ns_type::ns_t_aaaa, "::1.2.3.4"},
|
||||||
|
@@ -6121,7 +6121,7 @@ TEST_P(ResolverParameterizedTest, TruncatedResponse) {
|
||||||
|
TEST_F(ResolverTest, KeepListeningUDP) {
|
||||||
|
constexpr char listen_addr1[] = "127.0.0.4";
|
||||||
|
constexpr char listen_addr2[] = "127.0.0.5";
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.example.com.";
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
{host_name, ns_type::ns_t_aaaa, "::1.2.3.4"},
|
||||||
|
};
|
||||||
|
@@ -6188,7 +6188,7 @@ TEST_F(ResolverTest, KeepListeningUDP) {
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(ResolverTest, GetAddrInfoParallelLookupTimeout) {
|
||||||
|
- constexpr char host_name[] = "howdy.example.com.";
|
||||||
|
+ constexpr char host_name[] = "leos.example.com.";
|
||||||
|
constexpr int TIMING_TOLERANCE_MS = 200;
|
||||||
|
constexpr int DNS_TIMEOUT_MS = 1000;
|
||||||
|
const std::vector<DnsRecord> records = {
|
||||||
|
@@ -6845,7 +6845,7 @@ TEST_F(ResolverTest, MdnsGetAddrInfo_InvalidSocketType) {
|
||||||
|
addrinfo* result = nullptr;
|
||||||
|
// This is a valid hint, but the query won't be sent because the socket type is
|
||||||
|
// not supported.
|
||||||
|
- EXPECT_EQ(EAI_NODATA, getaddrinfo("howdy.local", nullptr, &hints, &result));
|
||||||
|
+ EXPECT_EQ(EAI_NODATA, getaddrinfo("leos.local", nullptr, &hints, &result));
|
||||||
|
ScopedAddrinfo result_cleanup(result);
|
||||||
|
EXPECT_EQ(nullptr, result);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
From 829f309cb223346879e5d59c14953a0f19e85486 Mon Sep 17 00:00:00 2001
|
||||||
|
From: harvey186 <harvey186@hotmail.com>
|
||||||
|
Date: Mon, 8 Jan 2024 09:26:35 +0100
|
||||||
|
Subject: [PATCH] captivePortal
|
||||||
|
|
||||||
|
Change-Id: I96174fdcf23eb3de4f3be5eb2cbace96aab6c06b
|
||||||
|
---
|
||||||
|
tests/dns_responder/dns_tls_frontend.cpp | 12 +-----------
|
||||||
|
1 file changed, 1 insertion(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tests/dns_responder/dns_tls_frontend.cpp b/tests/dns_responder/dns_tls_frontend.cpp
|
||||||
|
index c93cecd..6af3c8d 100644
|
||||||
|
--- a/tests/dns_responder/dns_tls_frontend.cpp
|
||||||
|
+++ b/tests/dns_responder/dns_tls_frontend.cpp
|
||||||
|
@@ -255,17 +255,7 @@ again:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!isDotProbe) {
|
||||||
|
- DNSHeader dnsHdr;
|
||||||
|
- dnsHdr.read((char*)query, (char*)query + qlen);
|
||||||
|
- for (const auto& question : dnsHdr.questions) {
|
||||||
|
- if (question.qname.name.find("dnsotls-ds.metric.gstatic.com") !=
|
||||||
|
- std::string::npos) {
|
||||||
|
- isDotProbe = true;
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
+
|
||||||
|
|
||||||
|
const int max_size = 4096;
|
||||||
|
uint8_t recv_buffer[max_size];
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue