mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2025-03-25 23:18:16 -04:00
May ASB work
untested Signed-off-by: Tavi <tavi@divested.dev>
This commit is contained in:
parent
e195e38150
commit
c31e67b2f8
100
Patches/Common/android_external_sonivox/317780080.patch
Normal file
100
Patches/Common/android_external_sonivox/317780080.patch
Normal file
@ -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 */
|
@ -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
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
@ -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);
|
||||
}
|
||||
}
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user