diff --git a/Misc/Features/GrapheneOS.txt b/Misc/Features/GrapheneOS.txt index 4fc645cd..c2cf0129 100644 --- a/Misc/Features/GrapheneOS.txt +++ b/Misc/Features/GrapheneOS.txt @@ -79,6 +79,8 @@ nojit [implemented] captive portal toggle 13 https://github.com/GrapheneOS/platform_packages_apps_Settings/commit/d700613896eb60972f8fd9df466218a06be36f1f 12 https://github.com/GrapheneOS/platform_packages_apps_Settings/commit/2a0b0b9193195c360260a3ef7094e45c44b79a24 +11 https://github.com/GrapheneOS/platform_packages_apps_Settings/commit/8c80cb03b42431bfb79e26e8854bd838d645aef7 +11 https://github.com/GrapheneOS/platform_packages_apps_Settings/commit/c3817c3c1251d559a59a8332702d0613d2bd9590 [implemented] show crash details 13 https://github.com/GrapheneOS/platform_frameworks_base/commit/d3d6432758ca3a85a9c8ae0406a01657bd3d3672 diff --git a/Patches/LineageOS-18.1/android_packages_apps_Settings/0001-Captive_Portal_Toggle-gos.patch b/Patches/LineageOS-18.1/android_packages_apps_Settings/0001-Captive_Portal_Toggle-gos.patch new file mode 100644 index 00000000..624de195 --- /dev/null +++ b/Patches/LineageOS-18.1/android_packages_apps_Settings/0001-Captive_Portal_Toggle-gos.patch @@ -0,0 +1,466 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Pratyush +Date: Wed, 20 Oct 2021 05:40:11 +0530 +Subject: [PATCH] add toggle to set captiveportal settings + +Access is disallowed for users that are disallowed from configuring +Private DNS settings. This restriction provides administrative control +over this feature in a way that's compatible with existing device +manager implementations. Private DNS is the closest fit from the +existing user management restrictions that are available. + +Co-authored-by: stuux +Co-authored-by: Renlord +Co-authored-by: Danny Lin +Co-authored-by: anupritaisno1 +Signed-off-by: empratyush +[tad@spotco.us]: add multiple other server options +[tad@spotco.us]: merge with the GrapheneOS patch from RQ3A.211001.001.2021100606 +Change-Id: I8a762d0f29ac42fce3dcfc7189e8ff216a8f8d1a +--- + res/values/arrays.xml | 24 ++ + res/values/strings.xml | 3 + + res/xml/network_and_internet.xml | 8 + + ...ConnectivityCheckPreferenceController.java | 328 ++++++++++++++++++ + .../network/NetworkDashboardFragment.java | 3 + + .../network/NetworkDashboardFragment.java.rej | 11 + + 6 files changed, 377 insertions(+) + create mode 100644 src/com/android/settings/network/ConnectivityCheckPreferenceController.java + create mode 100644 src/com/android/settings/network/NetworkDashboardFragment.java.rej + +diff --git a/res/values/arrays.xml b/res/values/arrays.xml +index 617548cadc..87fd6e5df6 100644 +--- a/res/values/arrays.xml ++++ b/res/values/arrays.xml +@@ -110,6 +110,30 @@ + @string/dark_ui_auto_mode_auto + + ++ ++ Disabled ++ Google (US) [default] ++ ++ DivestOS (US) ++ openSUSE (DE) ++ Ubuntu (UK) ++ Amazon Fire OS (US) ++ Microsoft Edge (US) ++ Kuketz (DE) ++ ++ ++ ++ 0 ++ 1 ++ ++ 3 ++ 4 ++ 5 ++ 6 ++ 7 ++ 8 ++ ++ + + +diff --git a/res/values/strings.xml b/res/values/strings.xml +index 0c6fe1a541..0173a8bf31 100644 +--- a/res/values/strings.xml ++++ b/res/values/strings.xml +@@ -12237,4 +12237,7 @@ + Don\u2019t connect + + Connect ++ ++ Internet connectivity check ++ HTTP endpoints to use for performing internet connectivity checks. + +diff --git a/res/xml/network_and_internet.xml b/res/xml/network_and_internet.xml +index 6bf6dbaccf..8ee092aa04 100644 +--- a/res/xml/network_and_internet.xml ++++ b/res/xml/network_and_internet.xml +@@ -125,4 +125,12 @@ + android:summary="@string/summary_placeholder" + android:order="25" + settings:controller="com.android.settings.network.AdaptiveConnectivityPreferenceController"/> ++ ++ + +diff --git a/src/com/android/settings/network/ConnectivityCheckPreferenceController.java b/src/com/android/settings/network/ConnectivityCheckPreferenceController.java +new file mode 100644 +index 0000000000..3dc7520df3 +--- /dev/null ++++ b/src/com/android/settings/network/ConnectivityCheckPreferenceController.java +@@ -0,0 +1,328 @@ ++/* ++ * 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 = ++ "https://www.google.com/generate_204"; ++ private static final String STANDARD_HTTP_URL = ++ "http://connectivitycheck.gstatic.com/generate_204"; ++ private static final String STANDARD_FALLBACK_URL = ++ "http://www.google.com/gen_204"; ++ private static final String STANDARD_OTHER_FALLBACK_URLS = ++ "http://play.googleapis.com/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"; ++ ++ // Amazon Fire OS ++ private static final String AMAZON_HTTPS_URL = ++ "https://fireoscaptiveportal.com/generate_204"; ++ private static final String AMAZON_HTTP_URL = ++ "http://fireoscaptiveportal.com/generate_204"; ++ ++ // Microsoft Edge ++ private static final String MICROSOFT_HTTP_URL = ++ "http://edge-http.microsoft.com/captiveportal/generate_204"; ++ ++ // 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 STANDARD_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 1; ++ private static final int GRAPHENEOS_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 2; ++ private static final int DIVESTOS_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 3; ++ private static final int OPENSUSE_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 4; ++ private static final int UBUNTU_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 5; ++ private static final int AMAZON_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 6; ++ private static final int MICROSOFT_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 7; ++ private static final int KUKETZ_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 8; ++ ++ 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) { ++ super.displayPreference(screen); ++ mConnectivityPreference = ++ screen.findPreference(KEY_CONNECTIVITY_CHECK_SETTINGS); ++ 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 (AMAZON_HTTP_URL.equals(pref)) { ++ mConnectivityPreference.setValueIndex( ++ AMAZON_CAPTIVE_PORTAL_HTTP_URL_INTVAL); ++ } else if (MICROSOFT_HTTP_URL.equals(pref)) { ++ mConnectivityPreference.setValueIndex( ++ MICROSOFT_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 AMAZON_CAPTIVE_PORTAL_HTTP_URL_INTVAL: ++ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTP_URL, ++ AMAZON_HTTP_URL); ++ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL, ++ AMAZON_HTTPS_URL); ++ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL, ++ AMAZON_HTTP_URL); ++ Settings.Global.putString( ++ cr, Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS, ++ AMAZON_HTTP_URL); ++ Settings.Global.putInt(cr, Settings.Global.CAPTIVE_PORTAL_MODE, ++ Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT); ++ break; ++ case MICROSOFT_CAPTIVE_PORTAL_HTTP_URL_INTVAL: ++ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTP_URL, ++ MICROSOFT_HTTP_URL); ++ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL, ++ MICROSOFT_HTTP_URL); ++ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL, ++ MICROSOFT_HTTP_URL); ++ Settings.Global.putString( ++ cr, Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS, ++ MICROSOFT_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 db704ae850..c77b07821e 100644 +--- a/src/com/android/settings/network/NetworkDashboardFragment.java ++++ b/src/com/android/settings/network/NetworkDashboardFragment.java +@@ -103,6 +103,8 @@ public class NetworkDashboardFragment extends DashboardFragment implements + new VpnPreferenceController(context); + final PrivateDnsPreferenceController privateDnsPreferenceController = + new PrivateDnsPreferenceController(context); ++ final ConnectivityCheckPreferenceController connectivityCheckPreferenceController = ++ new ConnectivityCheckPreferenceController(context); + + if (lifecycle != null) { + lifecycle.addObserver(mobilePlanPreferenceController); +@@ -120,6 +122,7 @@ public class NetworkDashboardFragment extends DashboardFragment implements + controllers.add(mobilePlanPreferenceController); + controllers.add(wifiPreferenceController); + controllers.add(privateDnsPreferenceController); ++ controllers.add(connectivityCheckPreferenceController); + return controllers; + } + +diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java.rej b/src/com/android/settings/network/NetworkDashboardFragment.java.rej +new file mode 100644 +index 0000000000..491cf70863 +--- /dev/null ++++ b/src/com/android/settings/network/NetworkDashboardFragment.java.rej +@@ -0,0 +1,11 @@ ++diff a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java (rejected hunks) ++@@ -119,6 +119,9 @@ public class NetworkDashboardFragment extends DashboardFragment implements ++ } ++ controllers.add(privateDnsPreferenceController); ++ controllers.add(new NetworkProviderCallsSmsController(context, lifecycle)); +++ ConnectivityCheckPreferenceController connectivityCheck = +++ new ConnectivityCheckPreferenceController(context); +++ controllers.add(connectivityCheck); ++ return controllers; ++ } ++ diff --git a/Patches/LineageOS-19.1/android_packages_apps_Settings/0013-Captive_Portal_Toggle.patch b/Patches/LineageOS-19.1/android_packages_apps_Settings/0013-Captive_Portal_Toggle.patch index 8bcb4cfb..21b4d9b4 100644 --- a/Patches/LineageOS-19.1/android_packages_apps_Settings/0013-Captive_Portal_Toggle.patch +++ b/Patches/LineageOS-19.1/android_packages_apps_Settings/0013-Captive_Portal_Toggle.patch @@ -14,57 +14,69 @@ Co-authored-by: Renlord Co-authored-by: Danny Lin Co-authored-by: anupritaisno1 Signed-off-by: empratyush -[tad@spotco.us]: removed the option for GrapheneOS servers -Change-Id: I8602bc4be0b896416282b7cf08bcd45b2cc216c6 +[tad@spotco.us]: add multiple other server options +Change-Id: I8a762d0f29ac42fce3dcfc7189e8ff216a8f8d1a --- - res/values/arrays.xml | 10 + + res/values/arrays.xml | 24 ++ res/values/strings.xml | 3 + - ...ConnectivityCheckPreferenceController.java | 176 ++++++++++++++++++ + ...ConnectivityCheckPreferenceController.java | 339 ++++++++++++++++++ .../network/NetworkDashboardFragment.java | 3 + - 4 files changed, 192 insertions(+) + 4 files changed, 369 insertions(+) create mode 100644 src/com/android/settings/network/ConnectivityCheckPreferenceController.java diff --git a/res/values/arrays.xml b/res/values/arrays.xml -index f50d130936..bb95662047 100644 +index f50d130936..584550265c 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml -@@ -229,6 +229,16 @@ +@@ -229,6 +229,30 @@ 259200000 + -+ Standard (Google) + Disabled ++ Google (US) [default] ++ ++ DivestOS (US) ++ openSUSE (DE) ++ Ubuntu (UK) ++ Amazon Fire OS (US) ++ Microsoft Edge (US) ++ Kuketz (DE) + + + + 0 + 1 ++ ++ 3 ++ 4 ++ 5 ++ 6 ++ 7 ++ 8 + + diff --git a/res/values/strings.xml b/res/values/strings.xml -index 67c47bc7b3..58b17eeccf 100644 +index 67c47bc7b3..62f06201f1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml -@@ -691,6 +691,9 @@ - Auto reboot - Automatically reboot the device, if the phone hasn\'t been unlocked within the selected number of hours. - +@@ -13697,4 +13697,7 @@ + Don\u2019t connect + + Connect ++ + Internet connectivity check + HTTP endpoints to use for performing internet connectivity checks. -+ - - None - + diff --git a/src/com/android/settings/network/ConnectivityCheckPreferenceController.java b/src/com/android/settings/network/ConnectivityCheckPreferenceController.java new file mode 100644 -index 0000000000..bf16eb825a +index 0000000000..5328c3ee6a --- /dev/null +++ b/src/com/android/settings/network/ConnectivityCheckPreferenceController.java -@@ -0,0 +1,176 @@ +@@ -0,0 +1,339 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * @@ -120,8 +132,59 @@ index 0000000000..bf16eb825a + private static final String STANDARD_OTHER_FALLBACK_URLS = + "http://play.googleapis.com/generate_204"; + -+ private static final int STANDARD_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 0; -+ private static final int DISABLED_CAPTIVE_PORTAL_INTVAL = 1; ++ // 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"; ++ ++ // Amazon Fire OS ++ private static final String AMAZON_HTTPS_URL = ++ "https://fireoscaptiveportal.com/generate_204"; ++ private static final String AMAZON_HTTP_URL = ++ "http://fireoscaptiveportal.com/generate_204"; ++ ++ // Microsoft Edge ++ private static final String MICROSOFT_HTTP_URL = ++ "http://edge-http.microsoft.com/captiveportal/generate_204"; ++ ++ // 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 STANDARD_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 1; ++ private static final int GRAPHENEOS_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 2; ++ private static final int DIVESTOS_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 3; ++ private static final int OPENSUSE_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 4; ++ private static final int UBUNTU_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 5; ++ private static final int AMAZON_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 6; ++ private static final int MICROSOFT_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 7; ++ private static final int KUKETZ_CAPTIVE_PORTAL_HTTP_URL_INTVAL = 8; + + private static final String KEY_CONNECTIVITY_CHECK_SETTINGS = + "connectivity_check_settings"; @@ -177,6 +240,27 @@ index 0000000000..bf16eb825a + 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 (AMAZON_HTTP_URL.equals(pref)) { ++ mConnectivityPreference.setValueIndex( ++ AMAZON_CAPTIVE_PORTAL_HTTP_URL_INTVAL); ++ } else if (MICROSOFT_HTTP_URL.equals(pref)) { ++ mConnectivityPreference.setValueIndex( ++ MICROSOFT_CAPTIVE_PORTAL_HTTP_URL_INTVAL); ++ } else if (KUKETZ_HTTP_URL.equals(pref)) { ++ mConnectivityPreference.setValueIndex( ++ KUKETZ_CAPTIVE_PORTAL_HTTP_URL_INTVAL); + } + } + @@ -205,6 +289,97 @@ index 0000000000..bf16eb825a + 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 AMAZON_CAPTIVE_PORTAL_HTTP_URL_INTVAL: ++ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTP_URL, ++ AMAZON_HTTP_URL); ++ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL, ++ AMAZON_HTTPS_URL); ++ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL, ++ AMAZON_HTTP_URL); ++ Settings.Global.putString( ++ cr, Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS, ++ AMAZON_HTTP_URL); ++ Settings.Global.putInt(cr, Settings.Global.CAPTIVE_PORTAL_MODE, ++ Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT); ++ break; ++ case MICROSOFT_CAPTIVE_PORTAL_HTTP_URL_INTVAL: ++ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTP_URL, ++ MICROSOFT_HTTP_URL); ++ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL, ++ MICROSOFT_HTTP_URL); ++ Settings.Global.putString(cr, Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL, ++ MICROSOFT_HTTP_URL); ++ Settings.Global.putString( ++ cr, Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS, ++ MICROSOFT_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, diff --git a/Patches/LineageOS-20.0/android_packages_apps_Settings/0013-Captive_Portal_Toggle.patch b/Patches/LineageOS-20.0/android_packages_apps_Settings/0013-Captive_Portal_Toggle.patch index 7139e69a..dab9ea46 100644 --- a/Patches/LineageOS-20.0/android_packages_apps_Settings/0013-Captive_Portal_Toggle.patch +++ b/Patches/LineageOS-20.0/android_packages_apps_Settings/0013-Captive_Portal_Toggle.patch @@ -14,32 +14,46 @@ Co-authored-by: Renlord Co-authored-by: Danny Lin Co-authored-by: anupritaisno1 Signed-off-by: empratyush -[tad@spotco.us]: removed the option for GrapheneOS servers +[tad@spotco.us]: add multiple other server options Change-Id: I8a762d0f29ac42fce3dcfc7189e8ff216a8f8d1a --- - res/values/arrays.xml | 10 + + res/values/arrays.xml | 24 ++ res/values/strings.xml | 3 + - ...ConnectivityCheckPreferenceController.java | 176 ++++++++++++++++++ + ...ConnectivityCheckPreferenceController.java | 339 ++++++++++++++++++ .../network/NetworkDashboardFragment.java | 3 + - 4 files changed, 192 insertions(+) + 4 files changed, 369 insertions(+) create mode 100644 src/com/android/settings/network/ConnectivityCheckPreferenceController.java diff --git a/res/values/arrays.xml b/res/values/arrays.xml -index cfc7671652..7fac175770 100644 +index cfc7671652..5f72bf702e 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml -@@ -210,6 +210,16 @@ +@@ -210,6 +210,30 @@ @string/dark_ui_auto_mode_custom_bedtime + -+ Standard (Google) + Disabled ++ Google (US) [default] ++ ++ DivestOS (US) ++ openSUSE (DE) ++ Ubuntu (UK) ++ Amazon Fire OS (US) ++ Microsoft Edge (US) ++ Kuketz (DE) + + + + 0 + 1 ++ ++ 3 ++ 4 ++ 5 ++ 6 ++ 7 ++ 8 + +