Settings: don't try to allow NLSes with too-long component names am: f0367c98d0

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23712724

Change-Id: I51744909a3ef6fcb1406dcc24d857d9b9eb88057
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Matías Hernández
2023-06-29 09:29:06 +00:00
committed by Automerger Merge Worker
4 changed files with 27 additions and 3 deletions

View File

@@ -81,6 +81,9 @@ public class ApprovalPreferenceController extends BasePreferenceController {
final SwitchPreference preference = (SwitchPreference) pref; final SwitchPreference preference = (SwitchPreference) pref;
final CharSequence label = mPkgInfo.applicationInfo.loadLabel(mPm); final CharSequence label = mPkgInfo.applicationInfo.loadLabel(mPm);
preference.setChecked(isServiceEnabled(mCn)); preference.setChecked(isServiceEnabled(mCn));
final boolean isAllowedCn = mCn.flattenToShortString().length()
<= NotificationManager.MAX_SERVICE_COMPONENT_NAME_LENGTH;
preference.setEnabled(preference.isChecked() || isAllowedCn);
preference.setOnPreferenceChangeListener((p, newValue) -> { preference.setOnPreferenceChangeListener((p, newValue) -> {
final boolean access = (Boolean) newValue; final boolean access = (Boolean) newValue;
if (!access) { if (!access) {

View File

@@ -67,7 +67,9 @@ public class NotificationAccessConfirmationActivity extends Activity
mUserId = getIntent().getIntExtra(EXTRA_USER_ID, UserHandle.USER_NULL); mUserId = getIntent().getIntExtra(EXTRA_USER_ID, UserHandle.USER_NULL);
CharSequence mAppLabel; CharSequence mAppLabel;
if (mComponentName == null || mComponentName.getPackageName() == null) { if (mComponentName == null || mComponentName.getPackageName() == null
|| mComponentName.flattenToString().length()
> NotificationManager.MAX_SERVICE_COMPONENT_NAME_LENGTH) {
finish(); finish();
return; return;
} }

View File

@@ -63,7 +63,6 @@ public class NotificationAccessSettings extends EmptyTextSettings {
private static final String TAG = "NotifAccessSettings"; private static final String TAG = "NotifAccessSettings";
static final String ALLOWED_KEY = "allowed"; static final String ALLOWED_KEY = "allowed";
static final String NOT_ALLOWED_KEY = "not_allowed"; static final String NOT_ALLOWED_KEY = "not_allowed";
private static final int MAX_CN_LENGTH = 500;
private static final ManagedServiceSettings.Config CONFIG = private static final ManagedServiceSettings.Config CONFIG =
new ManagedServiceSettings.Config.Builder() new ManagedServiceSettings.Config.Builder()
@@ -145,7 +144,8 @@ public class NotificationAccessSettings extends EmptyTextSettings {
for (ServiceInfo service : services) { for (ServiceInfo service : services) {
final ComponentName cn = new ComponentName(service.packageName, service.name); final ComponentName cn = new ComponentName(service.packageName, service.name);
boolean isAllowed = mNm.isNotificationListenerAccessGranted(cn); boolean isAllowed = mNm.isNotificationListenerAccessGranted(cn);
if (!isAllowed && cn.flattenToString().length() > MAX_CN_LENGTH) { if (!isAllowed && cn.flattenToString().length()
> NotificationManager.MAX_SERVICE_COMPONENT_NAME_LENGTH) {
continue; continue;
} }

View File

@@ -77,6 +77,25 @@ public class ApprovalPreferenceControllerTest {
mController.setPkgInfo(mPkgInfo); mController.setPkgInfo(mPkgInfo);
} }
@Test
public void updateState_enabled() {
SwitchPreference pref = new SwitchPreference(mContext);
mController.updateState(pref);
assertThat(pref.isEnabled()).isTrue();
}
@Test
public void updateState_invalidCn_disabled() {
ComponentName longCn = new ComponentName("com.example.package",
com.google.common.base.Strings.repeat("Blah", 150));
mController.setCn(longCn);
SwitchPreference pref = new SwitchPreference(mContext);
mController.updateState(pref);
assertThat(pref.isEnabled()).isFalse();
}
@Test @Test
public void updateState_checked() { public void updateState_checked() {
when(mNm.isNotificationListenerAccessGranted(mCn)).thenReturn(true); when(mNm.isNotificationListenerAccessGranted(mCn)).thenReturn(true);