From c31e67b2f84140eec430fd9f9b4b5074c6361741 Mon Sep 17 00:00:00 2001 From: Tavi Date: Fri, 10 May 2024 19:40:43 -0400 Subject: [PATCH] May ASB work untested Signed-off-by: Tavi --- .../android_external_sonivox/317780080.patch | 100 ++++++++++++ .../android_external_sonivox/391896.patch | 0 .../316891059-16.patch | 117 ++++++++++++++ .../316891059-17.patch | 117 ++++++++++++++ .../316891059-18.patch | 117 ++++++++++++++ .../293301736-19.patch | 142 +++++++++++++++++ .../316891059-19.patch | 150 ++++++++++++++++++ .../293301736-20.patch | 142 +++++++++++++++++ .../316891059-20.patch | 150 ++++++++++++++++++ Scripts/LineageOS-14.1/Patch.sh | 2 +- Scripts/LineageOS-15.1/Patch.sh | 6 +- Scripts/LineageOS-16.0/Patch.sh | 11 +- Scripts/LineageOS-17.1/Patch.sh | 7 +- Scripts/LineageOS-18.1/Patch.sh | 7 +- Scripts/LineageOS-19.1/Patch.sh | 8 +- Scripts/LineageOS-20.0/Patch.sh | 6 + 16 files changed, 1074 insertions(+), 8 deletions(-) create mode 100644 Patches/Common/android_external_sonivox/317780080.patch rename Patches/{LineageOS-14.1 => Common}/android_external_sonivox/391896.patch (100%) create mode 100644 Patches/LineageOS-16.0/android_packages_apps_Settings/316891059-16.patch create mode 100644 Patches/LineageOS-17.1/android_packages_apps_Settings/316891059-17.patch create mode 100644 Patches/LineageOS-18.1/android_packages_apps_Settings/316891059-18.patch create mode 100644 Patches/LineageOS-19.1/android_frameworks_base/293301736-19.patch create mode 100644 Patches/LineageOS-19.1/android_packages_apps_Settings/316891059-19.patch create mode 100644 Patches/LineageOS-20.0/android_frameworks_base/293301736-20.patch create mode 100644 Patches/LineageOS-20.0/android_packages_apps_Settings/316891059-20.patch diff --git a/Patches/Common/android_external_sonivox/317780080.patch b/Patches/Common/android_external_sonivox/317780080.patch new file mode 100644 index 00000000..1e57fd34 --- /dev/null +++ b/Patches/Common/android_external_sonivox/317780080.patch @@ -0,0 +1,100 @@ +diff --git a/arm-wt-22k/lib_src/eas_wtengine.c b/arm-wt-22k/lib_src/eas_wtengine.c +index 950616e..9791fe8 100644 +--- a/arm-wt-22k/lib_src/eas_wtengine.c ++++ b/arm-wt-22k/lib_src/eas_wtengine.c +@@ -99,6 +99,10 @@ + ALOGE("b/26366256"); + android_errorWriteLog(0x534e4554, "26366256"); + return; ++ } else if (numSamples > BUFFER_SIZE_IN_MONO_SAMPLES) { ++ ALOGE("b/317780080 clip numSamples %ld -> %d", numSamples, BUFFER_SIZE_IN_MONO_SAMPLES); ++ android_errorWriteLog(0x534e4554, "317780080"); ++ numSamples = BUFFER_SIZE_IN_MONO_SAMPLES; + } + pMixBuffer = pWTIntFrame->pMixBuffer; + pInputBuffer = pWTIntFrame->pAudioBuffer; +@@ -196,6 +200,10 @@ + ALOGE("b/26366256"); + android_errorWriteLog(0x534e4554, "26366256"); + return; ++ } else if (numSamples > BUFFER_SIZE_IN_MONO_SAMPLES) { ++ ALOGE("b/317780080 clip numSamples %ld -> %d", numSamples, BUFFER_SIZE_IN_MONO_SAMPLES); ++ android_errorWriteLog(0x534e4554, "317780080"); ++ numSamples = BUFFER_SIZE_IN_MONO_SAMPLES; + } + pOutputBuffer = pWTIntFrame->pAudioBuffer; + +@@ -295,6 +303,10 @@ + ALOGE("b/26366256"); + android_errorWriteLog(0x534e4554, "26366256"); + return; ++ } else if (numSamples > BUFFER_SIZE_IN_MONO_SAMPLES) { ++ ALOGE("b/317780080 clip numSamples %ld -> %d", numSamples, BUFFER_SIZE_IN_MONO_SAMPLES); ++ android_errorWriteLog(0x534e4554, "317780080"); ++ numSamples = BUFFER_SIZE_IN_MONO_SAMPLES; + } + pOutputBuffer = pWTIntFrame->pAudioBuffer; + +@@ -395,6 +407,10 @@ + ALOGE("b/26366256"); + android_errorWriteLog(0x534e4554, "26366256"); + return; ++ } else if (numSamples > BUFFER_SIZE_IN_MONO_SAMPLES) { ++ ALOGE("b/317780080 clip numSamples %ld -> %d", numSamples, BUFFER_SIZE_IN_MONO_SAMPLES); ++ android_errorWriteLog(0x534e4554, "317780080"); ++ numSamples = BUFFER_SIZE_IN_MONO_SAMPLES; + } + pAudioBuffer = pWTIntFrame->pAudioBuffer; + +@@ -463,6 +479,10 @@ + ALOGE("b/26366256"); + android_errorWriteLog(0x534e4554, "26366256"); + return; ++ } else if (numSamples > BUFFER_SIZE_IN_MONO_SAMPLES) { ++ ALOGE("b/317780080 clip numSamples %ld -> %d", numSamples, BUFFER_SIZE_IN_MONO_SAMPLES); ++ android_errorWriteLog(0x534e4554, "317780080"); ++ numSamples = BUFFER_SIZE_IN_MONO_SAMPLES; + } + pOutputBuffer = pWTIntFrame->pAudioBuffer; + phaseInc = pWTIntFrame->frame.phaseIncrement; +@@ -611,6 +631,10 @@ + ALOGE("b/26366256"); + android_errorWriteLog(0x534e4554, "26366256"); + return; ++ } else if (numSamples > BUFFER_SIZE_IN_MONO_SAMPLES) { ++ ALOGE("b/317780080 clip numSamples %ld -> %d", numSamples, BUFFER_SIZE_IN_MONO_SAMPLES); ++ android_errorWriteLog(0x534e4554, "317780080"); ++ numSamples = BUFFER_SIZE_IN_MONO_SAMPLES; + } + pMixBuffer = pWTIntFrame->pMixBuffer; + +diff --git a/arm-wt-22k/lib_src/eas_wtsynth.c b/arm-wt-22k/lib_src/eas_wtsynth.c +index 74f78f5..ea1fe78 100644 +--- a/arm-wt-22k/lib_src/eas_wtsynth.c ++++ b/arm-wt-22k/lib_src/eas_wtsynth.c +@@ -484,7 +484,12 @@ + /*lint -e{703} use shift for performance */ + numSamples = (numSamples << NUM_PHASE_FRAC_BITS) - (EAS_I32) pWTVoice->phaseFrac; + if (pWTIntFrame->frame.phaseIncrement) { +- pWTIntFrame->numSamples = 1 + (numSamples / pWTIntFrame->frame.phaseIncrement); ++ EAS_I32 oldMethod = 1 + (numSamples / pWTIntFrame->frame.phaseIncrement); ++ pWTIntFrame->numSamples = ++ (numSamples + pWTIntFrame->frame.phaseIncrement - 1) / pWTIntFrame->frame.phaseIncrement; ++ if (oldMethod != pWTIntFrame->numSamples) { ++ ALOGE("b/317780080 old %ld new %ld", oldMethod, pWTIntFrame->numSamples); ++ } + } else { + pWTIntFrame->numSamples = numSamples; + } +@@ -492,6 +497,11 @@ + ALOGE("b/26366256"); + android_errorWriteLog(0x534e4554, "26366256"); + pWTIntFrame->numSamples = 0; ++ } else if (pWTIntFrame->numSamples > BUFFER_SIZE_IN_MONO_SAMPLES) { ++ ALOGE("b/317780080 clip numSamples %ld -> %d", ++ pWTIntFrame->numSamples, BUFFER_SIZE_IN_MONO_SAMPLES); ++ android_errorWriteLog(0x534e4554, "317780080"); ++ pWTIntFrame->numSamples = BUFFER_SIZE_IN_MONO_SAMPLES; + } + + /* sound will be done this frame */ diff --git a/Patches/LineageOS-14.1/android_external_sonivox/391896.patch b/Patches/Common/android_external_sonivox/391896.patch similarity index 100% rename from Patches/LineageOS-14.1/android_external_sonivox/391896.patch rename to Patches/Common/android_external_sonivox/391896.patch diff --git a/Patches/LineageOS-16.0/android_packages_apps_Settings/316891059-16.patch b/Patches/LineageOS-16.0/android_packages_apps_Settings/316891059-16.patch new file mode 100644 index 00000000..bb076268 --- /dev/null +++ b/Patches/LineageOS-16.0/android_packages_apps_Settings/316891059-16.patch @@ -0,0 +1,117 @@ +diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java +index cbe49f8c799..9bfd5460efa 100644 +--- a/src/com/android/settings/search/SearchFeatureProvider.java ++++ b/src/com/android/settings/search/SearchFeatureProvider.java +@@ -38,7 +38,7 @@ public interface SearchFeatureProvider { + * @throws IllegalArgumentException when caller is null + * @throws SecurityException when caller is not allowed to launch search result page + */ +- void verifyLaunchSearchResultPageCaller(Context context, @NonNull ComponentName caller) ++ void verifyLaunchSearchResultPageCaller(@NonNull Context context, @NonNull String callerPackage) + throws SecurityException, IllegalArgumentException; + + /** +diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java +index 78c47edf046..262f220f8ab 100644 +--- a/src/com/android/settings/search/SearchFeatureProviderImpl.java ++++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java +@@ -17,10 +17,11 @@ + + package com.android.settings.search; + +-import android.content.ComponentName; + import android.content.Context; + import android.text.TextUtils; + ++import androidx.annotation.NonNull; ++ + import com.android.internal.annotations.VisibleForTesting; + import com.android.settings.overlay.FeatureFactory; + import com.android.settings.search.indexing.IndexData; +@@ -32,24 +33,21 @@ import java.util.Locale; + */ + public class SearchFeatureProviderImpl implements SearchFeatureProvider { + +- private static final String TAG = "SearchFeatureProvider"; +- + private static final String METRICS_ACTION_SETTINGS_INDEX = "search_synchronous_indexing"; + private DatabaseIndexingManager mDatabaseIndexingManager; + private SearchIndexableResources mSearchIndexableResources; + + @Override +- public void verifyLaunchSearchResultPageCaller(Context context, ComponentName caller) { +- if (caller == null) { ++ public void verifyLaunchSearchResultPageCaller(@NonNull Context context, ++ @NonNull String callerPackage) { ++ if (TextUtils.isEmpty(callerPackage)) { + throw new IllegalArgumentException("ExternalSettingsTrampoline intents " + + "must be called with startActivityForResult"); + } +- final String packageName = caller.getPackageName(); +- final boolean isSettingsPackage = TextUtils.equals(packageName, context.getPackageName()) +- || TextUtils.equals(getSettingsIntelligencePkgName(), packageName); +- final boolean isWhitelistedPackage = +- isSignatureWhitelisted(context, caller.getPackageName()); +- if (isSettingsPackage || isWhitelistedPackage) { ++ final boolean isSettingsPackage = TextUtils.equals(callerPackage, context.getPackageName()) ++ || TextUtils.equals(getSettingsIntelligencePkgName(), callerPackage); ++ final boolean isAllowlistedPackage = isSignatureAllowlisted(context, callerPackage); ++ if (isSettingsPackage || isAllowlistedPackage) { + return; + } + throw new SecurityException("Search result intents must be called with from a " +diff --git a/src/com/android/settings/search/SearchResultTrampoline.java b/src/com/android/settings/search/SearchResultTrampoline.java +index 3bbe6bd58a7..70387b021d4 100644 +--- a/src/com/android/settings/search/SearchResultTrampoline.java ++++ b/src/com/android/settings/search/SearchResultTrampoline.java +@@ -38,7 +38,7 @@ public class SearchResultTrampoline extends Activity { + // First make sure caller has privilege to launch a search result page. + FeatureFactory.getFactory(this) + .getSearchFeatureProvider() +- .verifyLaunchSearchResultPageCaller(this, getCallingActivity()); ++ .verifyLaunchSearchResultPageCaller(this, getCallingPackage()); + // Didn't crash, proceed and launch the result as a subsetting. + final Intent intent = getIntent(); + +diff --git a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +index eeebdee96e3..7945c05a293 100644 +--- a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java ++++ b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +@@ -21,7 +21,6 @@ import static com.google.common.truth.Truth.assertThat; + import static org.mockito.Mockito.spy; + + import android.app.Activity; +-import android.content.ComponentName; + import android.content.Intent; + import android.widget.Toolbar; + +@@ -70,21 +69,23 @@ public class SearchFeatureProviderImplTest { + + @Test(expected = SecurityException.class) + public void verifyLaunchSearchResultPageCaller_badCaller_shouldCrash() { +- final ComponentName cn = new ComponentName("pkg", "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ final String packageName = "pkg"; ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test + public void verifyLaunchSearchResultPageCaller_settingsCaller_shouldNotCrash() { +- final ComponentName cn = new ComponentName(mActivity.getPackageName(), "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ final String packageName = mActivity.getPackageName(); ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test + public void verifyLaunchSearchResultPageCaller_settingsIntelligenceCaller_shouldNotCrash() { + final String packageName = mProvider.getSettingsIntelligencePkgName(); +- final ComponentName cn = new ComponentName(packageName, "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test diff --git a/Patches/LineageOS-17.1/android_packages_apps_Settings/316891059-17.patch b/Patches/LineageOS-17.1/android_packages_apps_Settings/316891059-17.patch new file mode 100644 index 00000000..cd6408c3 --- /dev/null +++ b/Patches/LineageOS-17.1/android_packages_apps_Settings/316891059-17.patch @@ -0,0 +1,117 @@ +diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java +index 20d4e7c16bd..d6950eb06aa 100644 +--- a/src/com/android/settings/search/SearchFeatureProvider.java ++++ b/src/com/android/settings/search/SearchFeatureProvider.java +@@ -49,7 +49,7 @@ public interface SearchFeatureProvider { + * @throws IllegalArgumentException when caller is null + * @throws SecurityException when caller is not allowed to launch search result page + */ +- void verifyLaunchSearchResultPageCaller(Context context, @NonNull ComponentName caller) ++ void verifyLaunchSearchResultPageCaller(@NonNull Context context, @NonNull String callerPackage) + throws SecurityException, IllegalArgumentException; + + /** +diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java +index 63bf420c027..eaadbc2af50 100644 +--- a/src/com/android/settings/search/SearchFeatureProviderImpl.java ++++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java +@@ -17,13 +17,14 @@ + + package com.android.settings.search; + +-import android.content.ComponentName; + import android.content.Context; + import android.content.Intent; + import android.net.Uri; + import android.provider.Settings; + import android.text.TextUtils; + ++import androidx.annotation.NonNull; ++ + import com.android.settingslib.search.SearchIndexableResources; + import com.android.settingslib.search.SearchIndexableResourcesMobile; + +@@ -32,22 +33,19 @@ import com.android.settingslib.search.SearchIndexableResourcesMobile; + */ + public class SearchFeatureProviderImpl implements SearchFeatureProvider { + +- private static final String TAG = "SearchFeatureProvider"; +- + private SearchIndexableResources mSearchIndexableResources; + + @Override +- public void verifyLaunchSearchResultPageCaller(Context context, ComponentName caller) { +- if (caller == null) { ++ public void verifyLaunchSearchResultPageCaller(@NonNull Context context, ++ @NonNull String callerPackage) { ++ if (TextUtils.isEmpty(callerPackage)) { + throw new IllegalArgumentException("ExternalSettingsTrampoline intents " + + "must be called with startActivityForResult"); + } +- final String packageName = caller.getPackageName(); +- final boolean isSettingsPackage = TextUtils.equals(packageName, context.getPackageName()) +- || TextUtils.equals(getSettingsIntelligencePkgName(context), packageName); +- final boolean isWhitelistedPackage = +- isSignatureWhitelisted(context, caller.getPackageName()); +- if (isSettingsPackage || isWhitelistedPackage) { ++ final boolean isSettingsPackage = TextUtils.equals(callerPackage, context.getPackageName()) ++ || TextUtils.equals(getSettingsIntelligencePkgName(context), callerPackage); ++ final boolean isAllowlistedPackage = isSignatureAllowlisted(context, callerPackage); ++ if (isSettingsPackage || isAllowlistedPackage) { + return; + } + throw new SecurityException("Search result intents must be called with from a " +diff --git a/src/com/android/settings/search/SearchResultTrampoline.java b/src/com/android/settings/search/SearchResultTrampoline.java +index e9304739460..c233e86b6fc 100644 +--- a/src/com/android/settings/search/SearchResultTrampoline.java ++++ b/src/com/android/settings/search/SearchResultTrampoline.java +@@ -39,7 +39,7 @@ public class SearchResultTrampoline extends Activity { + // First make sure caller has privilege to launch a search result page. + FeatureFactory.getFactory(this) + .getSearchFeatureProvider() +- .verifyLaunchSearchResultPageCaller(this, getCallingActivity()); ++ .verifyLaunchSearchResultPageCaller(this, getCallingPackage()); + // Didn't crash, proceed and launch the result as a subsetting. + final Intent intent = getIntent(); + +diff --git a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +index 444a8137889..ebd935d3406 100644 +--- a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java ++++ b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +@@ -21,7 +21,6 @@ import static com.google.common.truth.Truth.assertThat; + + import android.app.Activity; + import android.app.settings.SettingsEnums; +-import android.content.ComponentName; + import android.content.Intent; + import android.content.pm.ActivityInfo; + import android.content.pm.ResolveInfo; +@@ -126,20 +125,22 @@ public class SearchFeatureProviderImplTest { + + @Test(expected = SecurityException.class) + public void verifyLaunchSearchResultPageCaller_badCaller_shouldCrash() { +- final ComponentName cn = new ComponentName("pkg", "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ final String packageName = "pkg"; ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test + public void verifyLaunchSearchResultPageCaller_settingsCaller_shouldNotCrash() { +- final ComponentName cn = new ComponentName(mActivity.getPackageName(), "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ final String packageName = mActivity.getPackageName(); ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test + public void verifyLaunchSearchResultPageCaller_settingsIntelligenceCaller_shouldNotCrash() { + final String packageName = mProvider.getSettingsIntelligencePkgName(mActivity); +- final ComponentName cn = new ComponentName(packageName, "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + } diff --git a/Patches/LineageOS-18.1/android_packages_apps_Settings/316891059-18.patch b/Patches/LineageOS-18.1/android_packages_apps_Settings/316891059-18.patch new file mode 100644 index 00000000..cd6408c3 --- /dev/null +++ b/Patches/LineageOS-18.1/android_packages_apps_Settings/316891059-18.patch @@ -0,0 +1,117 @@ +diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java +index 20d4e7c16bd..d6950eb06aa 100644 +--- a/src/com/android/settings/search/SearchFeatureProvider.java ++++ b/src/com/android/settings/search/SearchFeatureProvider.java +@@ -49,7 +49,7 @@ public interface SearchFeatureProvider { + * @throws IllegalArgumentException when caller is null + * @throws SecurityException when caller is not allowed to launch search result page + */ +- void verifyLaunchSearchResultPageCaller(Context context, @NonNull ComponentName caller) ++ void verifyLaunchSearchResultPageCaller(@NonNull Context context, @NonNull String callerPackage) + throws SecurityException, IllegalArgumentException; + + /** +diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java +index 63bf420c027..eaadbc2af50 100644 +--- a/src/com/android/settings/search/SearchFeatureProviderImpl.java ++++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java +@@ -17,13 +17,14 @@ + + package com.android.settings.search; + +-import android.content.ComponentName; + import android.content.Context; + import android.content.Intent; + import android.net.Uri; + import android.provider.Settings; + import android.text.TextUtils; + ++import androidx.annotation.NonNull; ++ + import com.android.settingslib.search.SearchIndexableResources; + import com.android.settingslib.search.SearchIndexableResourcesMobile; + +@@ -32,22 +33,19 @@ import com.android.settingslib.search.SearchIndexableResourcesMobile; + */ + public class SearchFeatureProviderImpl implements SearchFeatureProvider { + +- private static final String TAG = "SearchFeatureProvider"; +- + private SearchIndexableResources mSearchIndexableResources; + + @Override +- public void verifyLaunchSearchResultPageCaller(Context context, ComponentName caller) { +- if (caller == null) { ++ public void verifyLaunchSearchResultPageCaller(@NonNull Context context, ++ @NonNull String callerPackage) { ++ if (TextUtils.isEmpty(callerPackage)) { + throw new IllegalArgumentException("ExternalSettingsTrampoline intents " + + "must be called with startActivityForResult"); + } +- final String packageName = caller.getPackageName(); +- final boolean isSettingsPackage = TextUtils.equals(packageName, context.getPackageName()) +- || TextUtils.equals(getSettingsIntelligencePkgName(context), packageName); +- final boolean isWhitelistedPackage = +- isSignatureWhitelisted(context, caller.getPackageName()); +- if (isSettingsPackage || isWhitelistedPackage) { ++ final boolean isSettingsPackage = TextUtils.equals(callerPackage, context.getPackageName()) ++ || TextUtils.equals(getSettingsIntelligencePkgName(context), callerPackage); ++ final boolean isAllowlistedPackage = isSignatureAllowlisted(context, callerPackage); ++ if (isSettingsPackage || isAllowlistedPackage) { + return; + } + throw new SecurityException("Search result intents must be called with from a " +diff --git a/src/com/android/settings/search/SearchResultTrampoline.java b/src/com/android/settings/search/SearchResultTrampoline.java +index e9304739460..c233e86b6fc 100644 +--- a/src/com/android/settings/search/SearchResultTrampoline.java ++++ b/src/com/android/settings/search/SearchResultTrampoline.java +@@ -39,7 +39,7 @@ public class SearchResultTrampoline extends Activity { + // First make sure caller has privilege to launch a search result page. + FeatureFactory.getFactory(this) + .getSearchFeatureProvider() +- .verifyLaunchSearchResultPageCaller(this, getCallingActivity()); ++ .verifyLaunchSearchResultPageCaller(this, getCallingPackage()); + // Didn't crash, proceed and launch the result as a subsetting. + final Intent intent = getIntent(); + +diff --git a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +index 444a8137889..ebd935d3406 100644 +--- a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java ++++ b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +@@ -21,7 +21,6 @@ import static com.google.common.truth.Truth.assertThat; + + import android.app.Activity; + import android.app.settings.SettingsEnums; +-import android.content.ComponentName; + import android.content.Intent; + import android.content.pm.ActivityInfo; + import android.content.pm.ResolveInfo; +@@ -126,20 +125,22 @@ public class SearchFeatureProviderImplTest { + + @Test(expected = SecurityException.class) + public void verifyLaunchSearchResultPageCaller_badCaller_shouldCrash() { +- final ComponentName cn = new ComponentName("pkg", "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ final String packageName = "pkg"; ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test + public void verifyLaunchSearchResultPageCaller_settingsCaller_shouldNotCrash() { +- final ComponentName cn = new ComponentName(mActivity.getPackageName(), "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ final String packageName = mActivity.getPackageName(); ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test + public void verifyLaunchSearchResultPageCaller_settingsIntelligenceCaller_shouldNotCrash() { + final String packageName = mProvider.getSettingsIntelligencePkgName(mActivity); +- final ComponentName cn = new ComponentName(packageName, "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + } diff --git a/Patches/LineageOS-19.1/android_frameworks_base/293301736-19.patch b/Patches/LineageOS-19.1/android_frameworks_base/293301736-19.patch new file mode 100644 index 00000000..35d02cd2 --- /dev/null +++ b/Patches/LineageOS-19.1/android_frameworks_base/293301736-19.patch @@ -0,0 +1,142 @@ +diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java +index 093ecd57124f..18f397551be8 100644 +--- a/services/core/java/com/android/server/clipboard/ClipboardService.java ++++ b/services/core/java/com/android/server/clipboard/ClipboardService.java +@@ -1006,7 +1006,7 @@ public class ClipboardService extends SystemService { + getContext().getString(R.string.pasted_from_clipboard, callingAppLabel); + Slog.i(TAG, message); + Toast.makeText( +- getContext(), UiThread.get().getLooper(), message, Toast.LENGTH_SHORT) ++ getContext(), UiThread.get().getLooper(), message, Toast.LENGTH_LONG) + .show(); + } catch (PackageManager.NameNotFoundException e) { + // do nothing +diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java +index 1044611e1dad..438d7f67d775 100755 +--- a/services/core/java/com/android/server/notification/NotificationManagerService.java ++++ b/services/core/java/com/android/server/notification/NotificationManagerService.java +@@ -3224,8 +3224,19 @@ public class NotificationManagerService extends SystemService { + null /* options */); + record = getToastRecord(callingUid, callingPid, pkg, isSystemToast, token, + text, callback, duration, windowToken, displayId, textCallback); +- mToastQueue.add(record); +- index = mToastQueue.size() - 1; ++ ++ // Insert system toasts at the front of the queue ++ int systemToastInsertIdx = mToastQueue.size(); ++ if (isSystemToast) { ++ systemToastInsertIdx = getInsertIndexForSystemToastLocked(); ++ } ++ if (systemToastInsertIdx < mToastQueue.size()) { ++ index = systemToastInsertIdx; ++ mToastQueue.add(index, record); ++ } else { ++ mToastQueue.add(record); ++ index = mToastQueue.size() - 1; ++ } + keepProcessAliveForToastIfNeededLocked(callingPid); + } + // If it's at index 0, it's the current toast. It doesn't matter if it's +@@ -3241,6 +3252,23 @@ public class NotificationManagerService extends SystemService { + } + } + ++ @GuardedBy("mToastQueue") ++ private int getInsertIndexForSystemToastLocked() { ++ // If there are other system toasts: insert after the last one ++ int idx = 0; ++ for (ToastRecord r : mToastQueue) { ++ if (idx == 0 && mIsCurrentToastShown) { ++ idx++; ++ continue; ++ } ++ if (!r.isSystemToast) { ++ return idx; ++ } ++ idx++; ++ } ++ return idx; ++ } ++ + private boolean checkCanEnqueueToast(String pkg, int callingUid, + boolean isAppRenderedToast, boolean isSystemToast) { + final boolean isPackageSuspended = isPackagePaused(pkg); +diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +index dff3a1623403..afe3f4e93521 100755 +--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java ++++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +@@ -6125,6 +6125,74 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { + assertEquals(NotificationManagerService.MAX_PACKAGE_TOASTS, mService.mToastQueue.size()); + } + ++ @Test ++ public void testPrioritizeSystemToasts() throws Exception { ++ // Insert non-system toasts ++ final String testPackage = "testPackageName"; ++ assertEquals(0, mService.mToastQueue.size()); ++ mService.isSystemUid = false; ++ mService.isSystemAppId = false; ++ setToastRateIsWithinQuota(true); ++ setIfPackageHasPermissionToAvoidToastRateLimiting(testPackage, false); ++ ++ // package is not suspended ++ when(mPackageManager.isPackageSuspendedForUser(testPackage, UserHandle.getUserId(mUid))) ++ .thenReturn(false); ++ ++ INotificationManager nmService = (INotificationManager) mService.mService; ++ ++ // Enqueue maximum number of toasts for test package ++ for (int i = 0; i < NotificationManagerService.MAX_PACKAGE_TOASTS; i++) { ++ nmService.enqueueTextToast(testPackage, new Binder(), "Text", 2000, 0, null); ++ } ++ ++ // Enqueue system toast ++ final String testPackageSystem = "testPackageNameSystem"; ++ mService.isSystemUid = true; ++ setIfPackageHasPermissionToAvoidToastRateLimiting(testPackageSystem, false); ++ when(mPackageManager.isPackageSuspendedForUser(testPackageSystem, UserHandle.getUserId(mUid))) ++ .thenReturn(false); ++ ++ nmService.enqueueToast(testPackageSystem, new Binder(), new TestableToastCallback(), 2000, 0); ++ ++ // System toast is inserted at the front of the queue, behind current showing toast ++ assertEquals(testPackageSystem, mService.mToastQueue.get(1).pkg); ++ } ++ ++ @Test ++ public void testPrioritizeSystemToasts_enqueueAfterExistingSystemToast() throws Exception { ++ // Insert system toasts ++ final String testPackageSystem1 = "testPackageNameSystem1"; ++ assertEquals(0, mService.mToastQueue.size()); ++ mService.isSystemUid = true; ++ setToastRateIsWithinQuota(true); ++ setIfPackageHasPermissionToAvoidToastRateLimiting(testPackageSystem1, false); ++ ++ // package is not suspended ++ when(mPackageManager.isPackageSuspendedForUser(testPackageSystem1, UserHandle.getUserId(mUid))) ++ .thenReturn(false); ++ ++ INotificationManager nmService = (INotificationManager) mService.mService; ++ ++ // Enqueue maximum number of toasts for test package ++ for (int i = 0; i < NotificationManagerService.MAX_PACKAGE_TOASTS; i++) { ++ nmService.enqueueTextToast(testPackageSystem1, new Binder(), "Text", 2000, 0, null); ++ } ++ ++ // Enqueue another system toast ++ final String testPackageSystem2 = "testPackageNameSystem2"; ++ mService.isSystemUid = true; ++ setIfPackageHasPermissionToAvoidToastRateLimiting(testPackageSystem2, false); ++ when(mPackageManager.isPackageSuspendedForUser(testPackageSystem2, UserHandle.getUserId(mUid))) ++ .thenReturn(false); ++ ++ nmService.enqueueToast(testPackageSystem2, new Binder(), new TestableToastCallback(), 2000, 0); ++ ++ // System toast is inserted at the back of the queue, after the other system toasts ++ assertEquals(testPackageSystem2, ++ mService.mToastQueue.get(mService.mToastQueue.size() - 1).pkg); ++ } ++ + private void setAppInForegroundForToasts(int uid, boolean inForeground) { + int importance = (inForeground) ? IMPORTANCE_FOREGROUND : IMPORTANCE_NONE; + when(mActivityManager.getUidImportance(mUid)).thenReturn(importance); diff --git a/Patches/LineageOS-19.1/android_packages_apps_Settings/316891059-19.patch b/Patches/LineageOS-19.1/android_packages_apps_Settings/316891059-19.patch new file mode 100644 index 00000000..3203b983 --- /dev/null +++ b/Patches/LineageOS-19.1/android_packages_apps_Settings/316891059-19.patch @@ -0,0 +1,150 @@ +diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java +index 1785361d3b..c4141e91f7 100644 +--- a/src/com/android/settings/search/SearchFeatureProvider.java ++++ b/src/com/android/settings/search/SearchFeatureProvider.java +@@ -56,7 +56,7 @@ public interface SearchFeatureProvider { + * @throws IllegalArgumentException when caller is null + * @throws SecurityException when caller is not allowed to launch search result page + */ +- void verifyLaunchSearchResultPageCaller(Context context, @NonNull ComponentName caller) ++ void verifyLaunchSearchResultPageCaller(@NonNull Context context, @NonNull String callerPackage) + throws SecurityException, IllegalArgumentException; + + /** +diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java +index 6f90970905..3a62ddfb67 100644 +--- a/src/com/android/settings/search/SearchFeatureProviderImpl.java ++++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java +@@ -17,13 +17,14 @@ + + package com.android.settings.search; + +-import android.content.ComponentName; + import android.content.Context; + import android.content.Intent; + import android.net.Uri; + import android.provider.Settings; + import android.text.TextUtils; + ++import androidx.annotation.NonNull; ++ + import com.android.settingslib.search.SearchIndexableResources; + import com.android.settingslib.search.SearchIndexableResourcesMobile; + +@@ -32,21 +33,18 @@ import com.android.settingslib.search.SearchIndexableResourcesMobile; + */ + public class SearchFeatureProviderImpl implements SearchFeatureProvider { + +- private static final String TAG = "SearchFeatureProvider"; +- + private SearchIndexableResources mSearchIndexableResources; + + @Override +- public void verifyLaunchSearchResultPageCaller(Context context, ComponentName caller) { +- if (caller == null) { ++ public void verifyLaunchSearchResultPageCaller(@NonNull Context context, ++ @NonNull String callerPackage) { ++ if (TextUtils.isEmpty(callerPackage)) { + throw new IllegalArgumentException("ExternalSettingsTrampoline intents " + + "must be called with startActivityForResult"); + } +- final String packageName = caller.getPackageName(); +- final boolean isSettingsPackage = TextUtils.equals(packageName, context.getPackageName()) +- || TextUtils.equals(getSettingsIntelligencePkgName(context), packageName); +- final boolean isAllowlistedPackage = +- isSignatureAllowlisted(context, caller.getPackageName()); ++ final boolean isSettingsPackage = TextUtils.equals(callerPackage, context.getPackageName()) ++ || TextUtils.equals(getSettingsIntelligencePkgName(context), callerPackage); ++ final boolean isAllowlistedPackage = isSignatureAllowlisted(context, callerPackage); + if (isSettingsPackage || isAllowlistedPackage) { + return; + } +diff --git a/src/com/android/settings/search/SearchResultTrampoline.java b/src/com/android/settings/search/SearchResultTrampoline.java +index 8b041b67f8..6580c682fa 100644 +--- a/src/com/android/settings/search/SearchResultTrampoline.java ++++ b/src/com/android/settings/search/SearchResultTrampoline.java +@@ -20,7 +20,6 @@ import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENT + import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB; + + import android.app.Activity; +-import android.content.ComponentName; + import android.content.Intent; + import android.os.Bundle; + import android.provider.Settings; +@@ -48,11 +47,11 @@ public class SearchResultTrampoline extends Activity { + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + +- final ComponentName callingActivity = getCallingActivity(); ++ final String callerPackage = getLaunchedFromPackage(); + // First make sure caller has privilege to launch a search result page. + FeatureFactory.getFactory(this) + .getSearchFeatureProvider() +- .verifyLaunchSearchResultPageCaller(this, callingActivity); ++ .verifyLaunchSearchResultPageCaller(this, callerPackage); + // Didn't crash, proceed and launch the result as a subsetting. + Intent intent = getIntent(); + final String highlightMenuKey = intent.getStringExtra( +@@ -96,7 +95,7 @@ public class SearchResultTrampoline extends Activity { + + if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) { + startActivity(intent); +- } else if (isSettingsIntelligence(callingActivity)) { ++ } else if (isSettingsIntelligence(callerPackage)) { + // Register SplitPairRule for SubSettings, set clearTop false to prevent unexpected back + // navigation behavior. + ActivityEmbeddingRulesController.registerSubSettingsPairRule(this, +@@ -122,9 +121,9 @@ public class SearchResultTrampoline extends Activity { + finish(); + } + +- private boolean isSettingsIntelligence(ComponentName callingActivity) { +- return callingActivity != null && TextUtils.equals( +- callingActivity.getPackageName(), ++ private boolean isSettingsIntelligence(String callerPackage) { ++ return TextUtils.equals( ++ callerPackage, + FeatureFactory.getFactory(this).getSearchFeatureProvider() + .getSettingsIntelligencePkgName(this)); + } +diff --git a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +index 5de57b6c95..dec99028e8 100644 +--- a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java ++++ b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +@@ -20,7 +20,6 @@ package com.android.settings.search; + import static com.google.common.truth.Truth.assertThat; + + import android.app.settings.SettingsEnums; +-import android.content.ComponentName; + import android.content.Intent; + import android.content.pm.ActivityInfo; + import android.content.pm.ResolveInfo; +@@ -127,20 +126,22 @@ public class SearchFeatureProviderImplTest { + + @Test(expected = SecurityException.class) + public void verifyLaunchSearchResultPageCaller_badCaller_shouldCrash() { +- final ComponentName cn = new ComponentName("pkg", "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ final String packageName = "pkg"; ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test + public void verifyLaunchSearchResultPageCaller_settingsCaller_shouldNotCrash() { +- final ComponentName cn = new ComponentName(mActivity.getPackageName(), "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ final String packageName = mActivity.getPackageName(); ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test + public void verifyLaunchSearchResultPageCaller_settingsIntelligenceCaller_shouldNotCrash() { + final String packageName = mProvider.getSettingsIntelligencePkgName(mActivity); +- final ComponentName cn = new ComponentName(packageName, "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + } diff --git a/Patches/LineageOS-20.0/android_frameworks_base/293301736-20.patch b/Patches/LineageOS-20.0/android_frameworks_base/293301736-20.patch new file mode 100644 index 00000000..88342554 --- /dev/null +++ b/Patches/LineageOS-20.0/android_frameworks_base/293301736-20.patch @@ -0,0 +1,142 @@ +diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java +index 6f9a17682dd7..638c4a916a15 100644 +--- a/services/core/java/com/android/server/clipboard/ClipboardService.java ++++ b/services/core/java/com/android/server/clipboard/ClipboardService.java +@@ -1193,7 +1193,7 @@ public class ClipboardService extends SystemService { + } else { + toastToShow = Toast.makeText( + getContext(), UiThread.get().getLooper(), message, +- Toast.LENGTH_SHORT); ++ Toast.LENGTH_LONG); + } + toastToShow.show(); + } catch (PackageManager.NameNotFoundException e) { +diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java +index a59e2dbfe0f2..1c8c85cf8d29 100755 +--- a/services/core/java/com/android/server/notification/NotificationManagerService.java ++++ b/services/core/java/com/android/server/notification/NotificationManagerService.java +@@ -3369,8 +3369,19 @@ public class NotificationManagerService extends SystemService { + null /* options */); + record = getToastRecord(callingUid, callingPid, pkg, isSystemToast, token, + text, callback, duration, windowToken, displayId, textCallback); +- mToastQueue.add(record); +- index = mToastQueue.size() - 1; ++ ++ // Insert system toasts at the front of the queue ++ int systemToastInsertIdx = mToastQueue.size(); ++ if (isSystemToast) { ++ systemToastInsertIdx = getInsertIndexForSystemToastLocked(); ++ } ++ if (systemToastInsertIdx < mToastQueue.size()) { ++ index = systemToastInsertIdx; ++ mToastQueue.add(index, record); ++ } else { ++ mToastQueue.add(record); ++ index = mToastQueue.size() - 1; ++ } + keepProcessAliveForToastIfNeededLocked(callingPid); + } + // If it's at index 0, it's the current toast. It doesn't matter if it's +@@ -3386,6 +3397,23 @@ public class NotificationManagerService extends SystemService { + } + } + ++ @GuardedBy("mToastQueue") ++ private int getInsertIndexForSystemToastLocked() { ++ // If there are other system toasts: insert after the last one ++ int idx = 0; ++ for (ToastRecord r : mToastQueue) { ++ if (idx == 0 && mIsCurrentToastShown) { ++ idx++; ++ continue; ++ } ++ if (!r.isSystemToast) { ++ return idx; ++ } ++ idx++; ++ } ++ return idx; ++ } ++ + private boolean checkCanEnqueueToast(String pkg, int callingUid, + boolean isAppRenderedToast, boolean isSystemToast) { + final boolean isPackageSuspended = isPackagePaused(pkg); +diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +index 7a3754e4e5fa..4f0a7ca0ad51 100755 +--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java ++++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +@@ -7117,6 +7117,74 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { + assertEquals(NotificationManagerService.MAX_PACKAGE_TOASTS, mService.mToastQueue.size()); + } + ++ @Test ++ public void testPrioritizeSystemToasts() throws Exception { ++ // Insert non-system toasts ++ final String testPackage = "testPackageName"; ++ assertEquals(0, mService.mToastQueue.size()); ++ mService.isSystemUid = false; ++ mService.isSystemAppId = false; ++ setToastRateIsWithinQuota(true); ++ setIfPackageHasPermissionToAvoidToastRateLimiting(testPackage, false); ++ ++ // package is not suspended ++ when(mPackageManager.isPackageSuspendedForUser(testPackage, UserHandle.getUserId(mUid))) ++ .thenReturn(false); ++ ++ INotificationManager nmService = (INotificationManager) mService.mService; ++ ++ // Enqueue maximum number of toasts for test package ++ for (int i = 0; i < NotificationManagerService.MAX_PACKAGE_TOASTS; i++) { ++ nmService.enqueueTextToast(testPackage, new Binder(), "Text", 2000, 0, null); ++ } ++ ++ // Enqueue system toast ++ final String testPackageSystem = "testPackageNameSystem"; ++ mService.isSystemUid = true; ++ setIfPackageHasPermissionToAvoidToastRateLimiting(testPackageSystem, false); ++ when(mPackageManager.isPackageSuspendedForUser(testPackageSystem, UserHandle.getUserId(mUid))) ++ .thenReturn(false); ++ ++ nmService.enqueueToast(testPackageSystem, new Binder(), new TestableToastCallback(), 2000, 0); ++ ++ // System toast is inserted at the front of the queue, behind current showing toast ++ assertEquals(testPackageSystem, mService.mToastQueue.get(1).pkg); ++ } ++ ++ @Test ++ public void testPrioritizeSystemToasts_enqueueAfterExistingSystemToast() throws Exception { ++ // Insert system toasts ++ final String testPackageSystem1 = "testPackageNameSystem1"; ++ assertEquals(0, mService.mToastQueue.size()); ++ mService.isSystemUid = true; ++ setToastRateIsWithinQuota(true); ++ setIfPackageHasPermissionToAvoidToastRateLimiting(testPackageSystem1, false); ++ ++ // package is not suspended ++ when(mPackageManager.isPackageSuspendedForUser(testPackageSystem1, UserHandle.getUserId(mUid))) ++ .thenReturn(false); ++ ++ INotificationManager nmService = (INotificationManager) mService.mService; ++ ++ // Enqueue maximum number of toasts for test package ++ for (int i = 0; i < NotificationManagerService.MAX_PACKAGE_TOASTS; i++) { ++ nmService.enqueueTextToast(testPackageSystem1, new Binder(), "Text", 2000, 0, null); ++ } ++ ++ // Enqueue another system toast ++ final String testPackageSystem2 = "testPackageNameSystem2"; ++ mService.isSystemUid = true; ++ setIfPackageHasPermissionToAvoidToastRateLimiting(testPackageSystem2, false); ++ when(mPackageManager.isPackageSuspendedForUser(testPackageSystem2, UserHandle.getUserId(mUid))) ++ .thenReturn(false); ++ ++ nmService.enqueueToast(testPackageSystem2, new Binder(), new TestableToastCallback(), 2000, 0); ++ ++ // System toast is inserted at the back of the queue, after the other system toasts ++ assertEquals(testPackageSystem2, ++ mService.mToastQueue.get(mService.mToastQueue.size() - 1).pkg); ++ } ++ + private void setAppInForegroundForToasts(int uid, boolean inForeground) { + int importance = (inForeground) ? IMPORTANCE_FOREGROUND : IMPORTANCE_NONE; + when(mActivityManager.getUidImportance(mUid)).thenReturn(importance); diff --git a/Patches/LineageOS-20.0/android_packages_apps_Settings/316891059-20.patch b/Patches/LineageOS-20.0/android_packages_apps_Settings/316891059-20.patch new file mode 100644 index 00000000..e575df69 --- /dev/null +++ b/Patches/LineageOS-20.0/android_packages_apps_Settings/316891059-20.patch @@ -0,0 +1,150 @@ +diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java +index b14a4d7fbf..2fbaafd191 100644 +--- a/src/com/android/settings/search/SearchFeatureProvider.java ++++ b/src/com/android/settings/search/SearchFeatureProvider.java +@@ -56,7 +56,7 @@ public interface SearchFeatureProvider { + * @throws IllegalArgumentException when caller is null + * @throws SecurityException when caller is not allowed to launch search result page + */ +- void verifyLaunchSearchResultPageCaller(Context context, @NonNull ComponentName caller) ++ void verifyLaunchSearchResultPageCaller(@NonNull Context context, @NonNull String callerPackage) + throws SecurityException, IllegalArgumentException; + + /** +diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java +index 6f90970905..3a62ddfb67 100644 +--- a/src/com/android/settings/search/SearchFeatureProviderImpl.java ++++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java +@@ -17,13 +17,14 @@ + + package com.android.settings.search; + +-import android.content.ComponentName; + import android.content.Context; + import android.content.Intent; + import android.net.Uri; + import android.provider.Settings; + import android.text.TextUtils; + ++import androidx.annotation.NonNull; ++ + import com.android.settingslib.search.SearchIndexableResources; + import com.android.settingslib.search.SearchIndexableResourcesMobile; + +@@ -32,21 +33,18 @@ import com.android.settingslib.search.SearchIndexableResourcesMobile; + */ + public class SearchFeatureProviderImpl implements SearchFeatureProvider { + +- private static final String TAG = "SearchFeatureProvider"; +- + private SearchIndexableResources mSearchIndexableResources; + + @Override +- public void verifyLaunchSearchResultPageCaller(Context context, ComponentName caller) { +- if (caller == null) { ++ public void verifyLaunchSearchResultPageCaller(@NonNull Context context, ++ @NonNull String callerPackage) { ++ if (TextUtils.isEmpty(callerPackage)) { + throw new IllegalArgumentException("ExternalSettingsTrampoline intents " + + "must be called with startActivityForResult"); + } +- final String packageName = caller.getPackageName(); +- final boolean isSettingsPackage = TextUtils.equals(packageName, context.getPackageName()) +- || TextUtils.equals(getSettingsIntelligencePkgName(context), packageName); +- final boolean isAllowlistedPackage = +- isSignatureAllowlisted(context, caller.getPackageName()); ++ final boolean isSettingsPackage = TextUtils.equals(callerPackage, context.getPackageName()) ++ || TextUtils.equals(getSettingsIntelligencePkgName(context), callerPackage); ++ final boolean isAllowlistedPackage = isSignatureAllowlisted(context, callerPackage); + if (isSettingsPackage || isAllowlistedPackage) { + return; + } +diff --git a/src/com/android/settings/search/SearchResultTrampoline.java b/src/com/android/settings/search/SearchResultTrampoline.java +index 5e710293c2..2c6fd67a2f 100644 +--- a/src/com/android/settings/search/SearchResultTrampoline.java ++++ b/src/com/android/settings/search/SearchResultTrampoline.java +@@ -20,7 +20,6 @@ import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENT + import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB; + + import android.app.Activity; +-import android.content.ComponentName; + import android.content.Intent; + import android.os.Bundle; + import android.provider.Settings; +@@ -51,11 +50,11 @@ public class SearchResultTrampoline extends Activity { + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + +- final ComponentName callingActivity = getCallingActivity(); ++ final String callerPackage = getLaunchedFromPackage(); + // First make sure caller has privilege to launch a search result page. + FeatureFactory.getFactory(this) + .getSearchFeatureProvider() +- .verifyLaunchSearchResultPageCaller(this, callingActivity); ++ .verifyLaunchSearchResultPageCaller(this, callerPackage); + // Didn't crash, proceed and launch the result as a subsetting. + Intent intent = getIntent(); + final String highlightMenuKey = intent.getStringExtra( +@@ -99,7 +98,7 @@ public class SearchResultTrampoline extends Activity { + + if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) { + startActivity(intent); +- } else if (isSettingsIntelligence(callingActivity)) { ++ } else if (isSettingsIntelligence(callerPackage)) { + if (FeatureFlagUtils.isEnabled(this, FeatureFlags.SETTINGS_SEARCH_ALWAYS_EXPAND)) { + startActivity(SettingsActivity.getTrampolineIntent(intent, highlightMenuKey) + .setClass(this, DeepLinkHomepageActivityInternal.class) +@@ -132,9 +131,9 @@ public class SearchResultTrampoline extends Activity { + finish(); + } + +- private boolean isSettingsIntelligence(ComponentName callingActivity) { +- return callingActivity != null && TextUtils.equals( +- callingActivity.getPackageName(), ++ private boolean isSettingsIntelligence(String callerPackage) { ++ return TextUtils.equals( ++ callerPackage, + FeatureFactory.getFactory(this).getSearchFeatureProvider() + .getSettingsIntelligencePkgName(this)); + } +diff --git a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +index f3496001d0..8a7419bb1b 100644 +--- a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java ++++ b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +@@ -20,7 +20,6 @@ package com.android.settings.search; + import static com.google.common.truth.Truth.assertThat; + + import android.app.settings.SettingsEnums; +-import android.content.ComponentName; + import android.content.Intent; + import android.content.pm.ActivityInfo; + import android.content.pm.ResolveInfo; +@@ -131,20 +130,22 @@ public class SearchFeatureProviderImplTest { + + @Test(expected = SecurityException.class) + public void verifyLaunchSearchResultPageCaller_badCaller_shouldCrash() { +- final ComponentName cn = new ComponentName("pkg", "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ final String packageName = "pkg"; ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test + public void verifyLaunchSearchResultPageCaller_settingsCaller_shouldNotCrash() { +- final ComponentName cn = new ComponentName(mActivity.getPackageName(), "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ final String packageName = mActivity.getPackageName(); ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + + @Test + public void verifyLaunchSearchResultPageCaller_settingsIntelligenceCaller_shouldNotCrash() { + final String packageName = mProvider.getSettingsIntelligencePkgName(mActivity); +- final ComponentName cn = new ComponentName(packageName, "class"); +- mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); ++ ++ mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName); + } + } diff --git a/Scripts/LineageOS-14.1/Patch.sh b/Scripts/LineageOS-14.1/Patch.sh index 8d3f4c47..9686f036 100644 --- a/Scripts/LineageOS-14.1/Patch.sh +++ b/Scripts/LineageOS-14.1/Patch.sh @@ -172,7 +172,7 @@ fi; if enterAndClear "external/sonivox"; then applyPatch "$DOS_PATCHES/android_external_sonivox/317038.patch"; #n-asb-2021-10 Fix global buffer overflow in WT_InterpolateNoLoop -applyPatch "$DOS_PATCHES/android_external_sonivox/391896.patch"; #n-asb-2024-05 Fix buffer overrun in eas_wtengine +applyPatch "$DOS_PATCHES_COMMON/android_external_sonivox/391896.patch"; #n-asb-2024-05 Fix buffer overrun in eas_wtengine fi; if enterAndClear "external/sqlite"; then diff --git a/Scripts/LineageOS-15.1/Patch.sh b/Scripts/LineageOS-15.1/Patch.sh index a1336be0..6bd81451 100644 --- a/Scripts/LineageOS-15.1/Patch.sh +++ b/Scripts/LineageOS-15.1/Patch.sh @@ -78,7 +78,7 @@ applyPatch "$DOS_PATCHES/android_build/0002-Enable_fwrapv.patch"; #Use -fwrapv a applyPatch "$DOS_PATCHES/android_build/0003-verity-openssl3.patch"; #Fix VB 1.0 failure due to openssl output format change sed -i '57i$(my_res_package): PRIVATE_AAPT_FLAGS += --auto-add-overlay' core/aapt2.mk; #Enable auto-add-overlay for packages, this allows the vendor overlay to easily work across all branches. awk -i inplace '!/Email/' target/product/core.mk; #Remove Email -sed -i 's/2021-10-05/2024-04-05/' core/version_defaults.mk; #Bump Security String #XXX +sed -i 's/2021-10-05/2024-05-05/' core/version_defaults.mk; #Bump Security String #XXX fi; if enterAndClear "build/soong"; then @@ -152,6 +152,10 @@ if enterAndClear "external/libxml2"; then applyPatch "$DOS_PATCHES/android_external_libxml2/368053.patch"; #R_asb_2023-10 malloc-fail: Fix OOB read after xmlRegGetCounter fi; +if enterAndClear "external/sonivox"; then +applyPatch "$DOS_PATCHES_COMMON/android_external_sonivox/391896.patch"; #n-asb-2024-05 Fix buffer overrun in eas_wtengine +fi; + if enterAndClear "external/svox"; then git revert --no-edit 1419d63b4889a26d22443fd8df1f9073bf229d3d; #Add back Makefiles fi; diff --git a/Scripts/LineageOS-16.0/Patch.sh b/Scripts/LineageOS-16.0/Patch.sh index 8741ca32..cd82fecf 100644 --- a/Scripts/LineageOS-16.0/Patch.sh +++ b/Scripts/LineageOS-16.0/Patch.sh @@ -99,7 +99,7 @@ applyPatch "$DOS_PATCHES_COMMON/android_build/0001-verity-openssl3.patch"; #Fix sed -i '74i$(my_res_package): PRIVATE_AAPT_FLAGS += --auto-add-overlay' core/aapt2.mk; #Enable auto-add-overlay for packages, this allows the vendor overlay to easily work across all branches. sed -i 's/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 17/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 28/' core/version_defaults.mk; #Set the minimum supported target SDK to Pie (GrapheneOS) awk -i inplace '!/Email/' target/product/core.mk; #Remove Email -sed -i 's/2022-01-05/2024-04-05/' core/version_defaults.mk; #Bump Security String #P_asb_2024-04 #XXX +sed -i 's/2022-01-05/2024-05-05/' core/version_defaults.mk; #Bump Security String #P_asb_2024-04 #XXX fi; if enterAndClear "build/soong"; then @@ -179,8 +179,8 @@ if enterAndClear "external/libxml2"; then applyPatch "$DOS_PATCHES/android_external_libxml2/370701.patch"; #P_asb_2023-10 malloc-fail: Fix OOB read after xmlRegGetCounter fi; -if enterAndClear "external/zlib"; then -applyPatch "$DOS_PATCHES/android_external_zlib/351909.patch"; #P_asb_2023-03 Fix a bug when getting a gzip header extra field with inflate(). +if enterAndClear "external/sonivox"; then +applyPatch "$DOS_PATCHES_COMMON/android_external_sonivox/391896.patch"; #n-asb-2024-05 Fix buffer overrun in eas_wtengine fi; if enterAndClear "external/svox"; then @@ -190,6 +190,10 @@ sed -i 's/about to delete/unable to delete/' pico/src/com/svox/pico/LangPackUnin awk -i inplace '!/deletePackage/' pico/src/com/svox/pico/LangPackUninstaller.java; fi; +if enterAndClear "external/zlib"; then +applyPatch "$DOS_PATCHES/android_external_zlib/351909.patch"; #P_asb_2023-03 Fix a bug when getting a gzip header extra field with inflate(). +fi; + if enterAndClear "frameworks/av"; then applyPatch "$DOS_PATCHES/android_frameworks_av/344167.patch"; #P_asb_2022-11 setSecurityLevel in clearkey applyPatch "$DOS_PATCHES/android_frameworks_av/349329.patch"; #P_asb_2023-02 move MediaCodec metrics processing to looper thread @@ -526,6 +530,7 @@ applyPatch "$DOS_PATCHES/android_packages_apps_Settings/351915.patch"; #P_asb_20 applyPatch "$DOS_PATCHES/android_packages_apps_Settings/359734.patch"; #P_asb_2023-06 Convert argument to intent in AddAccountSettings. applyPatch "$DOS_PATCHES/android_packages_apps_Settings/366136.patch"; #P_asb_2023-09 Prevent non-system IME from becoming device admin applyPatch "$DOS_PATCHES/android_packages_apps_Settings/370700.patch"; #P_asb_2023-10 Restrict ApnEditor settings +applyPatch "$DOS_PATCHES/android_packages_apps_Settings/316891059-16.patch"; #x-asb_2024-05 Replace getCallingActivity() with getLaunchedFromPackage() git revert --no-edit c240992b4c86c7f226290807a2f41f2619e7e5e8; #Don't hide OEM unlock applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0001-Captive_Portal_Toggle.patch"; #Add option to disable captive portal checks (MSe1969) #applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0004-Private_DNS.patch"; #More 'Private DNS' options (heavily based off of a CalyxOS patch) #TODO: Needs work diff --git a/Scripts/LineageOS-17.1/Patch.sh b/Scripts/LineageOS-17.1/Patch.sh index e617aaf6..f880c6aa 100644 --- a/Scripts/LineageOS-17.1/Patch.sh +++ b/Scripts/LineageOS-17.1/Patch.sh @@ -98,7 +98,7 @@ sed -i '75i$(my_res_package): PRIVATE_AAPT_FLAGS += --auto-add-overlay' core/aap awk -i inplace '!/updatable_apex.mk/' target/product/mainline_system.mk; #Disable APEX sed -i 's/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 23/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 28/' core/version_defaults.mk; #Set the minimum supported target SDK to Pie (GrapheneOS) #sed -i 's/PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := true/PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := false/' core/product_config.mk; #broken by hardenDefconfig -sed -i 's/2023-02-05/2024-04-05/' core/version_defaults.mk; #Bump Security String #R_asb_2024-04 +sed -i 's/2023-02-05/2024-05-05/' core/version_defaults.mk; #Bump Security String #x_asb_2024-05 fi; if enterAndClear "build/soong"; then @@ -172,6 +172,10 @@ git fetch https://github.com/LineageOS/android_external_pdfium refs/changes/14/3 git fetch https://github.com/LineageOS/android_external_pdfium refs/changes/15/378315/1 && git cherry-pick FETCH_HEAD; fi; +if enterAndClear "external/sonivox"; then +applyPatch "$DOS_PATCHES_COMMON/android_external_sonivox/391896.patch"; #n-asb-2024-05 Fix buffer overrun in eas_wtengine +fi; + if enterAndClear "external/svox"; then git revert --no-edit 1419d63b4889a26d22443fd8df1f9073bf229d3d; #Add back Makefiles sed -i '12iLOCAL_SDK_VERSION := current' pico/Android.mk; #Fix build under Pie @@ -500,6 +504,7 @@ applyPatch "$DOS_PATCHES/android_packages_apps_Settings/368012.patch"; #Q_asb_20 applyPatch "$DOS_PATCHES/android_packages_apps_Settings/378109.patch"; #Q_asb_2023-09 Settings: don't try to allow NLSes with too-long component names applyPatch "$DOS_PATCHES/android_packages_apps_Settings/378110.patch"; #Q_asb_2023-10 Restrict ApnEditor settings applyPatch "$DOS_PATCHES/android_packages_apps_Settings/380569.patch"; #Q_asb_2024-01 Validate ringtone URIs before setting +applyPatch "$DOS_PATCHES/android_packages_apps_Settings/316891059-17.patch"; #x-asb_2024-05 Replace getCallingActivity() with getLaunchedFromPackage() git revert --no-edit 486980cfecce2ca64267f41462f9371486308e9d; #Don't hide OEM unlock #applyPatch "$DOS_PATCHES/android_packages_apps_Settings/272651.patch"; #ten-bt-sbc-hd-dualchannel: Add Dual Channel into Bluetooth Audio Channel Mode developer options menu (ValdikSS) applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0001-Captive_Portal_Toggle.patch"; #Add option to disable captive portal checks (MSe1969) diff --git a/Scripts/LineageOS-18.1/Patch.sh b/Scripts/LineageOS-18.1/Patch.sh index f8ad2d94..8f8bb0e3 100644 --- a/Scripts/LineageOS-18.1/Patch.sh +++ b/Scripts/LineageOS-18.1/Patch.sh @@ -96,7 +96,7 @@ sed -i '75i$(my_res_package): PRIVATE_AAPT_FLAGS += --auto-add-overlay' core/aap awk -i inplace '!/updatable_apex.mk/' target/product/mainline_system.mk; #Disable APEX sed -i 's/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 23/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 28/' core/version_defaults.mk; #Set the minimum supported target SDK to Pie (GrapheneOS) #sed -i 's/PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := true/PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := false/' core/product_config.mk; #broken by hardenDefconfig -sed -i 's/2024-02-05/2024-04-05/' core/version_defaults.mk; #Bump Security String #R_asb_2024-04 +sed -i 's/2024-02-05/2024-05-05/' core/version_defaults.mk; #Bump Security String #x_asb_2024-04 fi; if enterAndClear "build/soong"; then @@ -131,6 +131,10 @@ rm -rfv androidtest; #fix compile under A11 fi; fi; +if enterAndClear "external/sonivox"; then +applyPatch "$DOS_PATCHES_COMMON/android_external_sonivox/391896.patch"; #n-asb-2024-05 Fix buffer overrun in eas_wtengine +fi; + if enterAndClear "frameworks/av"; then applyPatch "$DOS_PATCHES/android_frameworks_av/385529.patch"; #R_asb_2024-03 Validate OMX Params for VPx encoders applyPatch "$DOS_PATCHES/android_frameworks_av/385530.patch"; #R_asb_2024-03 SoftVideoDecodeOMXComponent: validate OMX params for dynamic HDR @@ -341,6 +345,7 @@ applyPatch "$DOS_PATCHES/android_packages_apps_PermissionController/0002-Special fi; if enterAndClear "packages/apps/Settings"; then +applyPatch "$DOS_PATCHES/android_packages_apps_Settings/316891059-18.patch"; #x-asb_2024-05 Replace getCallingActivity() with getLaunchedFromPackage() #applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0001-Captive_Portal_Toggle.patch"; #Add option to disable captive portal checks (MSe1969) applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0001-Captive_Portal_Toggle-gos.patch"; #Add option to disable captive portal checks (GrapheneOS) applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0003-Remove_SensorsOff_Tile.patch"; #Remove the Sensors Off development tile (DivestOS) diff --git a/Scripts/LineageOS-19.1/Patch.sh b/Scripts/LineageOS-19.1/Patch.sh index ea3876c3..36721b1a 100644 --- a/Scripts/LineageOS-19.1/Patch.sh +++ b/Scripts/LineageOS-19.1/Patch.sh @@ -98,7 +98,7 @@ sed -i '75i$(my_res_package): PRIVATE_AAPT_FLAGS += --auto-add-overlay' core/aap awk -i inplace '!/updatable_apex.mk/' target/product/generic_system.mk; #Disable APEX sed -i 's/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 23/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 28/' core/version_defaults.mk; #Set the minimum supported target SDK to Pie (GrapheneOS) #sed -i 's/PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := true/PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := false/' core/product_config.mk; #broken by hardenDefconfig -sed -i 's/2024-03-05/2024-04-05/' core/version_defaults.mk; #Bump Security String #S_asb_2024-04 +sed -i 's/2024-03-05/2024-05-05/' core/version_defaults.mk; #Bump Security String #x_asb_2024-05 fi; if enterAndClear "build/soong"; then @@ -131,7 +131,12 @@ sed -i '/LOCAL_MODULE/s/Camera/SecureCamera/' Android.mk; #Change module name sed -i '11iLOCAL_OVERRIDES_PACKAGES := Camera Camera2 LegacyCamera Snap OpenCamera' Android.mk; #Replace the others fi; +if enterAndClear "external/sonivox"; then +applyPatch "$DOS_PATCHES_COMMON/android_external_sonivox/317780080.patch"; #x-asb_2024-05 Fix buffer overrun in eas_wtengine +fi; + if enterAndClear "frameworks/base"; then +applyPatch "$DOS_PATCHES/android_frameworks_base/293301736-19.patch"; #x-asb_2024-05 Prioritize system toasts git revert --no-edit 83fe523914728a3674debba17a6019cb74803045; #Reverts "Allow signature spoofing for microG Companion/Services" in favor of below patch applyPatch "$DOS_PATCHES/android_frameworks_base/344888-backport.patch"; #fixup! fw/b: Add support for allowing/disallowing apps on cellular, vpn and wifi networks (CalyxOS) applyPatch "$DOS_PATCHES/android_frameworks_base/0007-Always_Restict_Serial.patch"; #Always restrict access to Build.SERIAL (GrapheneOS) @@ -307,6 +312,7 @@ if [ "$DOS_GRAPHENE_CONSTIFY" = true ]; then applyPatch "$DOS_PATCHES/android_pa fi; if enterAndClear "packages/apps/Settings"; then +applyPatch "$DOS_PATCHES/android_packages_apps_Settings/316891059-19.patch"; #x-asb_2024-05 Replace getCallingActivity() with getLaunchedFromPackage() applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0004-Private_DNS.patch"; #More 'Private DNS' options (heavily based off of a CalyxOS patch) applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0005-Automatic_Reboot.patch"; #Timeout for reboot (GrapheneOS) applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0006-Bluetooth_Timeout.patch"; #Timeout for Bluetooth (CalyxOS) diff --git a/Scripts/LineageOS-20.0/Patch.sh b/Scripts/LineageOS-20.0/Patch.sh index b9aec05d..f832858a 100644 --- a/Scripts/LineageOS-20.0/Patch.sh +++ b/Scripts/LineageOS-20.0/Patch.sh @@ -98,6 +98,7 @@ applyPatch "$DOS_PATCHES/android_build/0004-Selective_APEX.patch"; #Only enable sed -i '75i$(my_res_package): PRIVATE_AAPT_FLAGS += --auto-add-overlay' core/aapt2.mk; #Enable auto-add-overlay for packages, this allows the vendor overlay to easily work across all branches. sed -i 's/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 23/PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION := 28/' core/version_util.mk; #Set the minimum supported target SDK to Pie (GrapheneOS) #sed -i 's/PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := true/PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := false/' core/product_config.mk; #broken by hardenDefconfig +sed -i 's/2024-04-05/2024-05-05/' core/version_defaults.mk; #Bump Security String #x_asb_2024-05 fi; if enterAndClear "build/soong"; then @@ -124,12 +125,16 @@ sed -i -e '76,78d;' Android.bp; #fix compile under A13 fi; fi; +if enterAndClear "external/sonivox"; then +applyPatch "$DOS_PATCHES_COMMON/android_external_sonivox/317780080.patch"; #x-asb_2024-05 Fix buffer overrun in eas_wtengine +fi; if enterAndClear "frameworks/av"; then git am $DOS_PATCHES/ASB-2023-10/av-*.patch; fi; if enterAndClear "frameworks/base"; then +applyPatch "$DOS_PATCHES/android_frameworks_base/293301736-20.patch"; #x-asb_2024-05 Prioritize system toasts git revert --no-edit d36faad3267522c6d3ff91ba9dcca8f6274bccd1; #Reverts "JobScheduler: Respect allow-in-power-save perm" in favor of below patch git revert --no-edit 90d6826548189ca850d91692e71fcc1be426f453; #Reverts "Remove sensitive info from SUPL requests" in favor of below patch git revert --no-edit 6d2955f0bd55e9938d5d49415182c27b50900b95; #Reverts "Allow signature spoofing for microG Companion/Services" in favor of below patch @@ -323,6 +328,7 @@ if [ "$DOS_GRAPHENE_CONSTIFY" = true ]; then applyPatch "$DOS_PATCHES/android_pa fi; if enterAndClear "packages/apps/Settings"; then +applyPatch "$DOS_PATCHES/android_packages_apps_Settings/316891059-20.patch"; #x-asb_2024-05 Replace getCallingActivity() with getLaunchedFromPackage() git revert --no-edit 41b4ed345a91da1dd46c00ee11a151c2b5ff4f43; applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0004-Private_DNS.patch"; #More 'Private DNS' options (heavily based off of a CalyxOS patch) applyPatch "$DOS_PATCHES/android_packages_apps_Settings/0005-Automatic_Reboot.patch"; #Timeout for reboot (GrapheneOS)