From c72848f9fe37892b4c2250724d9546b5c52202d0 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Tue, 11 May 2021 17:01:11 -0700 Subject: [PATCH 01/19] Send targeted broadcasts to prevent other apps from receiving them. When sending broadcasts ACTION_SNOOZE_WARNING in NPMS, which may contain sensitive information, explicitly set the package name that should receive it to prevent other apps from receiving them. Bug: 177931370 Test: manual Change-Id: I11d736771d859d2af27d5c84a502ab038974e2e2 Merged-In: I11d736771d859d2af27d5c84a502ab038974e2e2 (cherry picked from commit 1494979a6ac772fa49a26748f047a4c3d64baf51) --- .../server/net/NetworkPolicyManagerService.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index ab482bb2da988..72e8fabbfe162 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -1318,7 +1318,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setSmallIcon(R.drawable.stat_notify_error); - final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template); + final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template, + mContext.getPackageName()); builder.setDeleteIntent(PendingIntent.getBroadcast( mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)); @@ -1384,7 +1385,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setSmallIcon(R.drawable.stat_notify_error); - final Intent snoozeIntent = buildSnoozeRapidIntent(policy.template); + final Intent snoozeIntent = buildSnoozeRapidIntent(policy.template, + mContext.getPackageName()); builder.setDeleteIntent(PendingIntent.getBroadcast( mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)); @@ -4677,17 +4679,19 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return new Intent(ACTION_ALLOW_BACKGROUND); } - private static Intent buildSnoozeWarningIntent(NetworkTemplate template) { + private static Intent buildSnoozeWarningIntent(NetworkTemplate template, String targetPackage) { final Intent intent = new Intent(ACTION_SNOOZE_WARNING); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); intent.putExtra(EXTRA_NETWORK_TEMPLATE, template); + intent.setPackage(targetPackage); return intent; } - private static Intent buildSnoozeRapidIntent(NetworkTemplate template) { + private static Intent buildSnoozeRapidIntent(NetworkTemplate template, String targetPackage) { final Intent intent = new Intent(ACTION_SNOOZE_RAPID); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); intent.putExtra(EXTRA_NETWORK_TEMPLATE, template); + intent.setPackage(targetPackage); return intent; } From fdbcf17a4eda04e3140b5d97658a3d4815abd9f5 Mon Sep 17 00:00:00 2001 From: MahendaviAamir Date: Wed, 9 Jun 2021 17:10:42 +0530 Subject: [PATCH 02/19] Send targeted broadcasts to prevent other apps from receiving them. When sending broadcasts ACTION_SNOOZE_WARNING in NPMS, which may contain sensitive information, explicitly set the package name that should receive it to prevent other apps from receiving them. Bug: 177931370 Test: manual Change-Id: I2a0a0dc09e27791de829bacfb2e865ffea993715 Merged-In: I11d736771d859d2af27d5c84a502ab038974e2e2 --- .../android/server/net/NetworkPolicyManagerService.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 5159c70e991c8..0940c09049bd8 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -1155,8 +1155,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setContentText(body); builder.setDefaults(Notification.DEFAULT_ALL); builder.setChannelId(SystemNotificationChannels.NETWORK_ALERTS); - - final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template); + final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template, + mContext.getPackageName()); builder.setDeleteIntent(PendingIntent.getBroadcast( mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)); @@ -4243,9 +4243,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return new Intent(ACTION_ALLOW_BACKGROUND); } - private static Intent buildSnoozeWarningIntent(NetworkTemplate template) { + private static Intent buildSnoozeWarningIntent(NetworkTemplate template, String targetPackage) { final Intent intent = new Intent(ACTION_SNOOZE_WARNING); intent.putExtra(EXTRA_NETWORK_TEMPLATE, template); + intent.setPackage(targetPackage); return intent; } From 29eb352baad77de762ce68cae74b3247b9127352 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Tue, 11 May 2021 17:01:11 -0700 Subject: [PATCH 03/19] Send targeted broadcasts to prevent other apps from receiving them. When sending broadcasts ACTION_SNOOZE_WARNING in NPMS, which may contain sensitive information, explicitly set the package name that should receive it to prevent other apps from receiving them. Bug: 177931370 Test: manual Change-Id: I11d736771d859d2af27d5c84a502ab038974e2e2 Merged-In: I11d736771d859d2af27d5c84a502ab038974e2e2 (cherry picked from commit 1494979a6ac772fa49a26748f047a4c3d64baf51) --- .../server/net/NetworkPolicyManagerService.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 6c34e1313f732..9fff3f898b619 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -1349,7 +1349,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setSmallIcon(R.drawable.stat_notify_error); - final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template); + final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template, + mContext.getPackageName()); builder.setDeleteIntent(PendingIntent.getBroadcast( mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)); @@ -1435,7 +1436,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setSmallIcon(R.drawable.stat_notify_error); - final Intent snoozeIntent = buildSnoozeRapidIntent(policy.template); + final Intent snoozeIntent = buildSnoozeRapidIntent(policy.template, + mContext.getPackageName()); builder.setDeleteIntent(PendingIntent.getBroadcast( mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)); @@ -4862,17 +4864,19 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return new Intent(ACTION_ALLOW_BACKGROUND); } - private static Intent buildSnoozeWarningIntent(NetworkTemplate template) { + private static Intent buildSnoozeWarningIntent(NetworkTemplate template, String targetPackage) { final Intent intent = new Intent(ACTION_SNOOZE_WARNING); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); intent.putExtra(EXTRA_NETWORK_TEMPLATE, template); + intent.setPackage(targetPackage); return intent; } - private static Intent buildSnoozeRapidIntent(NetworkTemplate template) { + private static Intent buildSnoozeRapidIntent(NetworkTemplate template, String targetPackage) { final Intent intent = new Intent(ACTION_SNOOZE_RAPID); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); intent.putExtra(EXTRA_NETWORK_TEMPLATE, template); + intent.setPackage(targetPackage); return intent; } From e329730572f3bd492127054a12a4a064dbe3baa9 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Tue, 11 May 2021 17:01:11 -0700 Subject: [PATCH 04/19] Send targeted broadcasts to prevent other apps from receiving them. When sending broadcasts ACTION_SNOOZE_WARNING in NPMS, which may contain sensitive information, explicitly set the package name that should receive it to prevent other apps from receiving them. Bug: 177931370 Test: manual Change-Id: I11d736771d859d2af27d5c84a502ab038974e2e2 Merged-In: I11d736771d859d2af27d5c84a502ab038974e2e2 (cherry picked from commit 1494979a6ac772fa49a26748f047a4c3d64baf51) --- .../server/net/NetworkPolicyManagerService.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index d6557f6410ecc..985fda3fd1b24 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -1362,7 +1362,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setSmallIcon(R.drawable.stat_notify_error); - final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template); + final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template, + mContext.getPackageName()); builder.setDeleteIntent(PendingIntent.getBroadcast( mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)); @@ -1448,7 +1449,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setSmallIcon(R.drawable.stat_notify_error); - final Intent snoozeIntent = buildSnoozeRapidIntent(policy.template); + final Intent snoozeIntent = buildSnoozeRapidIntent(policy.template, + mContext.getPackageName()); builder.setDeleteIntent(PendingIntent.getBroadcast( mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)); @@ -5043,17 +5045,19 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return new Intent(ACTION_ALLOW_BACKGROUND); } - private static Intent buildSnoozeWarningIntent(NetworkTemplate template) { + private static Intent buildSnoozeWarningIntent(NetworkTemplate template, String targetPackage) { final Intent intent = new Intent(ACTION_SNOOZE_WARNING); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); intent.putExtra(EXTRA_NETWORK_TEMPLATE, template); + intent.setPackage(targetPackage); return intent; } - private static Intent buildSnoozeRapidIntent(NetworkTemplate template) { + private static Intent buildSnoozeRapidIntent(NetworkTemplate template, String targetPackage) { final Intent intent = new Intent(ACTION_SNOOZE_RAPID); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); intent.putExtra(EXTRA_NETWORK_TEMPLATE, template); + intent.setPackage(targetPackage); return intent; } From 16732a1253294866c588ca040416c48be734490b Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Tue, 11 May 2021 17:01:11 -0700 Subject: [PATCH 05/19] Send targeted broadcasts to prevent other apps from receiving them. When sending broadcasts ACTION_SNOOZE_WARNING in NPMS, which may contain sensitive information, explicitly set the package name that should receive it to prevent other apps from receiving them. Bug: 177931370 Test: manual Change-Id: I11d736771d859d2af27d5c84a502ab038974e2e2 Merged-In: I11d736771d859d2af27d5c84a502ab038974e2e2 (cherry picked from commit 1494979a6ac772fa49a26748f047a4c3d64baf51) --- .../server/net/NetworkPolicyManagerService.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 42bd8c5128068..4873440b53c1d 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -1370,7 +1370,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setSmallIcon(R.drawable.stat_notify_error); - final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template); + final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template, + mContext.getPackageName()); builder.setDeleteIntent(PendingIntent.getBroadcast( mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)); @@ -1456,7 +1457,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setSmallIcon(R.drawable.stat_notify_error); - final Intent snoozeIntent = buildSnoozeRapidIntent(policy.template); + final Intent snoozeIntent = buildSnoozeRapidIntent(policy.template, + mContext.getPackageName()); builder.setDeleteIntent(PendingIntent.getBroadcast( mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)); @@ -5061,17 +5063,19 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return new Intent(ACTION_ALLOW_BACKGROUND); } - private static Intent buildSnoozeWarningIntent(NetworkTemplate template) { + private static Intent buildSnoozeWarningIntent(NetworkTemplate template, String targetPackage) { final Intent intent = new Intent(ACTION_SNOOZE_WARNING); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); intent.putExtra(EXTRA_NETWORK_TEMPLATE, template); + intent.setPackage(targetPackage); return intent; } - private static Intent buildSnoozeRapidIntent(NetworkTemplate template) { + private static Intent buildSnoozeRapidIntent(NetworkTemplate template, String targetPackage) { final Intent intent = new Intent(ACTION_SNOOZE_RAPID); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); intent.putExtra(EXTRA_NETWORK_TEMPLATE, template); + intent.setPackage(targetPackage); return intent; } From d02b731699efeebc94865f8b326c05fe40f46747 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Sun, 27 Jun 2021 21:23:44 -0700 Subject: [PATCH 06/19] Add SafetyNet logging if a certain broadcast is received by apps. In case the broadcast intents "com.android.server.net.action.SNOOZE_WARNING" or "com.android.server.net.action.SNOOZE_RAPID" are dispatched to apps, then add a SafetyNet log. Bug: 177931370 Test: manual Change-Id: I65b2e96ff1230b2051dd1e5bd9c21e5ba3e1146a Merged-In: I65b2e96ff1230b2051dd1e5bd9c21e5ba3e1146a (cherry picked from commit a22e341ac2220de707ad37479e4a87a68281e6d1) --- .../com/android/server/am/ActivityManagerService.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 28c9e4914e68b..e4f4a5efae16c 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -15613,6 +15613,15 @@ public class ActivityManagerService extends IActivityManager.Stub return sticky; } + // SafetyNet logging for b/177931370. If any process other than system_server tries to + // listen to this broadcast action, then log it. + if (callingPid != Process.myPid()) { + if (filter.hasAction("com.android.server.net.action.SNOOZE_WARNING") + || filter.hasAction("com.android.server.net.action.SNOOZE_RAPID")) { + EventLog.writeEvent(0x534e4554, "177931370", callingUid, ""); + } + } + synchronized (this) { if (callerApp != null && (callerApp.thread == null || callerApp.thread.asBinder() != caller.asBinder())) { From 3ae33de9240a1e32dc60993befbe0ef1fc2de7a8 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Sun, 27 Jun 2021 21:23:44 -0700 Subject: [PATCH 07/19] Add SafetyNet logging if a certain broadcast is received by apps. In case the broadcast intents "com.android.server.net.action.SNOOZE_WARNING" or "com.android.server.net.action.SNOOZE_RAPID" are dispatched to apps, then add a SafetyNet log. Bug: 177931370 Test: manual Change-Id: I65b2e96ff1230b2051dd1e5bd9c21e5ba3e1146a Merged-In: I65b2e96ff1230b2051dd1e5bd9c21e5ba3e1146a (cherry picked from commit a22e341ac2220de707ad37479e4a87a68281e6d1) --- .../com/android/server/am/ActivityManagerService.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 0ae9cc279e681..9c811e67945e1 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -15611,6 +15611,15 @@ public class ActivityManagerService extends IActivityManager.Stub return sticky; } + // SafetyNet logging for b/177931370. If any process other than system_server tries to + // listen to this broadcast action, then log it. + if (callingPid != Process.myPid()) { + if (filter.hasAction("com.android.server.net.action.SNOOZE_WARNING") + || filter.hasAction("com.android.server.net.action.SNOOZE_RAPID")) { + EventLog.writeEvent(0x534e4554, "177931370", callingUid, ""); + } + } + synchronized (this) { if (callerApp != null && (callerApp.thread == null || callerApp.thread.asBinder() != caller.asBinder())) { From 452a5aeec5a7b84eec797f024bf0dcc485428676 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Sun, 27 Jun 2021 21:23:44 -0700 Subject: [PATCH 08/19] Add SafetyNet logging if a certain broadcast is received by apps. In case the broadcast intents "com.android.server.net.action.SNOOZE_WARNING" or "com.android.server.net.action.SNOOZE_RAPID" are dispatched to apps, then add a SafetyNet log. Bug: 177931370 Test: manual Change-Id: I65b2e96ff1230b2051dd1e5bd9c21e5ba3e1146a Merged-In: I65b2e96ff1230b2051dd1e5bd9c21e5ba3e1146a (cherry picked from commit a22e341ac2220de707ad37479e4a87a68281e6d1) --- .../com/android/server/am/ActivityManagerService.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 591e738e3ab10..7393bd1582c95 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -14511,6 +14511,15 @@ public class ActivityManagerService extends IActivityManager.Stub return sticky; } + // SafetyNet logging for b/177931370. If any process other than system_server tries to + // listen to this broadcast action, then log it. + if (callingPid != Process.myPid()) { + if (filter.hasAction("com.android.server.net.action.SNOOZE_WARNING") + || filter.hasAction("com.android.server.net.action.SNOOZE_RAPID")) { + EventLog.writeEvent(0x534e4554, "177931370", callingUid, ""); + } + } + synchronized (this) { if (callerApp != null && (callerApp.thread == null || callerApp.thread.asBinder() != caller.asBinder())) { From ad79043436c96fb8b9d983b93cd425672112d3ed Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Sun, 27 Jun 2021 21:23:44 -0700 Subject: [PATCH 09/19] Add SafetyNet logging if a certain broadcast is received by apps. In case the broadcast intents "com.android.server.net.action.SNOOZE_WARNING" or "com.android.server.net.action.SNOOZE_RAPID" are dispatched to apps, then add a SafetyNet log. Bug: 177931370 Test: manual Change-Id: I65b2e96ff1230b2051dd1e5bd9c21e5ba3e1146a Merged-In: I65b2e96ff1230b2051dd1e5bd9c21e5ba3e1146a (cherry picked from commit a22e341ac2220de707ad37479e4a87a68281e6d1) --- .../com/android/server/am/ActivityManagerService.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index deb8ea9a8d6e4..d06caebc67a89 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -21010,6 +21010,15 @@ public class ActivityManagerService extends IActivityManager.Stub return sticky; } + // SafetyNet logging for b/177931370. If any process other than system_server tries to + // listen to this broadcast action, then log it. + if (callingPid != Process.myPid()) { + if (filter.hasAction("com.android.server.net.action.SNOOZE_WARNING") + || filter.hasAction("com.android.server.net.action.SNOOZE_RAPID")) { + EventLog.writeEvent(0x534e4554, "177931370", callingUid, ""); + } + } + synchronized (this) { if (callerApp != null && (callerApp.thread == null || callerApp.thread.asBinder() != caller.asBinder())) { From de779f8124595b4097ca890691a23a3fd629ef40 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Wed, 21 Jul 2021 10:08:04 -0400 Subject: [PATCH 10/19] Guard DISABLE_PLUGIN with PLUGIN permission. Fixes a p0 security bug. We already have the plugin permission defined in our manifest. Ensure that senders of the DISABLE_PLUGIN broadcast have that permission. Fixes: 193444889 Test: manual Change-Id: Iebaba435c17c5644c5357c0683858447f5ffb897 Merged-In: Iebaba435c17c5644c5357c0683858447f5ffb897 --- .../src/com/android/systemui/plugins/PluginManagerImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/plugins/PluginManagerImpl.java b/packages/SystemUI/src/com/android/systemui/plugins/PluginManagerImpl.java index 03747d50a6fa4..fab0e281d2c05 100644 --- a/packages/SystemUI/src/com/android/systemui/plugins/PluginManagerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/plugins/PluginManagerImpl.java @@ -181,10 +181,12 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_CHANGED); filter.addAction(Intent.ACTION_PACKAGE_REMOVED); + filter.addDataScheme("package"); + mContext.registerReceiver(this, filter); filter.addAction(PLUGIN_CHANGED); filter.addAction(DISABLE_PLUGIN); filter.addDataScheme("package"); - mContext.registerReceiver(this, filter); + mContext.registerReceiver(this, filter, PluginInstanceManager.PLUGIN_PERMISSION, null); filter = new IntentFilter(Intent.ACTION_USER_UNLOCKED); mContext.registerReceiver(this, filter); } From 3c26a24644feaf2860892809929dec816f354bae Mon Sep 17 00:00:00 2001 From: Rhed Jao Date: Fri, 30 Jul 2021 15:52:05 +0800 Subject: [PATCH 11/19] DO NOT MERGE Apply a maximum char count to the load label api The system is overwhelmed by an enormous label string returned by the load label api. This cl truncates the label string if it exceeds the maximum safe length. Bug: 67013844 Test: atest PackageManagerTest Change-Id: Ia4d768cc93a47cfb8b6f7c4b6dc73abd801809bd Merged-in: Ia4d768cc93a47cfb8b6f7c4b6dc73abd801809bd --- core/java/android/content/pm/PackageItemInfo.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java index 65ce1e7ef0796..9cd568fe2aafe 100644 --- a/core/java/android/content/pm/PackageItemInfo.java +++ b/core/java/android/content/pm/PackageItemInfo.java @@ -207,7 +207,9 @@ public class PackageItemInfo { return loadSafeLabel(pm, DEFAULT_MAX_LABEL_SIZE_PX, SAFE_STRING_FLAG_TRIM | SAFE_STRING_FLAG_FIRST_LINE); } else { - return loadUnsafeLabel(pm); + // Trims the label string to the MAX_SAFE_LABEL_LENGTH. This is to prevent that the + // system is overwhelmed by an enormous string returned by the application. + return TextUtils.trimToSize(loadUnsafeLabel(pm), MAX_SAFE_LABEL_LENGTH); } } From 61722016377e992b5e2e63d5886684f8ac195c7e Mon Sep 17 00:00:00 2001 From: Rhed Jao Date: Fri, 30 Jul 2021 15:52:05 +0800 Subject: [PATCH 12/19] DO NOT MERGE Apply a maximum char count to the load label api The system is overwhelmed by an enormous label string returned by the load label api. This cl truncates the label string if it exceeds the maximum safe length. Also update the max safe label length to 1000 characters, which is enough. Bug: 67013844 Test: atest PackageManagerTest Change-Id: Ia4d768cc93a47cfb8b6f7c4b6dc73abd801809bd Merged-in: Ia4d768cc93a47cfb8b6f7c4b6dc73abd801809bd --- core/java/android/content/pm/PackageItemInfo.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java index d0ab8f713de83..aa8e84262049b 100644 --- a/core/java/android/content/pm/PackageItemInfo.java +++ b/core/java/android/content/pm/PackageItemInfo.java @@ -49,7 +49,7 @@ import java.util.Comparator; */ public class PackageItemInfo { /** The maximum length of a safe label, in characters */ - private static final int MAX_SAFE_LABEL_LENGTH = 50000; + private static final int MAX_SAFE_LABEL_LENGTH = 1000; /** @hide */ public static final float DEFAULT_MAX_LABEL_SIZE_PX = 500f; @@ -198,7 +198,9 @@ public class PackageItemInfo { return loadSafeLabel(pm, DEFAULT_MAX_LABEL_SIZE_PX, SAFE_STRING_FLAG_TRIM | SAFE_STRING_FLAG_FIRST_LINE); } else { - return loadUnsafeLabel(pm); + // Trims the label string to the MAX_SAFE_LABEL_LENGTH. This is to prevent that the + // system is overwhelmed by an enormous string returned by the application. + return TextUtils.trimToSize(loadUnsafeLabel(pm), MAX_SAFE_LABEL_LENGTH); } } From 5031c3a4f63a4a843eefdb49fe5e06ea25a4e482 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Fri, 6 Aug 2021 14:10:29 -0700 Subject: [PATCH 13/19] Clarify how FGS restriction won't apply STICKY FGS restarts Fix: 195780554 Test: build Change-Id: Ic627a89ac863729d36554070d04c22254747f014 --- core/java/android/app/Service.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/java/android/app/Service.java b/core/java/android/app/Service.java index 7cb1d89aa9543..3363872044106 100644 --- a/core/java/android/app/Service.java +++ b/core/java/android/app/Service.java @@ -387,6 +387,13 @@ public abstract class Service extends ContextWrapper implements ComponentCallbac *

This mode makes sense for things that will be explicitly started * and stopped to run for arbitrary periods of time, such as a service * performing background music playback. + * + *

Since Android version {@link Build.VERSION_CODES#S}, apps + * targeting {@link Build.VERSION_CODES#S} or above are disallowed + * to start a foreground service from the background, but the restriction + * doesn't impact restarts of a sticky foreground service. However, + * when apps start a sticky foreground service from the background, + * the same restriction still applies. */ public static final int START_STICKY = 1; From 906773a97f1a96e2eeb1758756c86d890e79c6d0 Mon Sep 17 00:00:00 2001 From: Rubin Xu Date: Mon, 9 Aug 2021 17:03:34 +0100 Subject: [PATCH 14/19] Attempt to clear memory after keyguard PIN entry Force object finalization and garbage collection to remove shards of user PIN from memory. Bug: 189315376 Test: Unlock keyguard; take ramdump; search for PIN in the dump Change-Id: I6d951babc225998d959669117c26f823f28fa706 --- .../android/keyguard/KeyguardSecurityContainerController.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java index fde8213de0c68..dd7c7ea6b5a53 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java @@ -146,7 +146,9 @@ public class KeyguardSecurityContainerController extends ViewController Date: Tue, 10 Aug 2021 15:31:40 +0800 Subject: [PATCH 15/19] Allow to use fixed rotation if recents is animating The condition of visible wallpaper was added for transition between lockscreen and home that show wallpaper in different orientation. But that also affects when swiping to home if the recents activity is not home activity (3rd party launcher). And it will cause additional rotation animation which looks unpolished. This restores the case to have the same behavior as R. Bug: 196012011 Test: Use 3rd party launcher as default home and gesture navigation. Swipe to home from an app which has different orientation from the launcher. There should be no rotation animation. Change-Id: I8a3b4617434c619463a96b9e3106d25654a55391 --- .../core/java/com/android/server/wm/DisplayContent.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 1b799dfbdaabf..dbc1116ad3890 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -1593,8 +1593,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // If the transition has not started yet, the activity must be the top. return false; } - if (mLastWallpaperVisible && r.windowsCanBeWallpaperTarget()) { - // Use normal rotation animation for orientation change of visible wallpaper. + if (mLastWallpaperVisible && r.windowsCanBeWallpaperTarget() + && mFixedRotationTransitionListener.mAnimatingRecents == null) { + // Use normal rotation animation for orientation change of visible wallpaper if recents + // animation is not running (it may be swiping to home). return false; } final int rotation = rotationForActivityInDifferentOrientation(r); From 4cd66d15d764c4045056c55c16b41e1707fd4319 Mon Sep 17 00:00:00 2001 From: Tim Peng Date: Mon, 9 Aug 2021 07:19:12 +0000 Subject: [PATCH 16/19] Disable volume control bar for all remote devices Bug: 189270378 Test: manual test Change-Id: Id5ca32ffb86ac634a41b5ba077f76f2842e747e8 --- .../android/systemui/media/dialog/MediaOutputController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index 5293c88502670..b2def7a8596a0 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -466,7 +466,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback { } boolean isVolumeControlEnabled(@NonNull MediaDevice device) { - return !device.getFeatures().contains(MediaRoute2Info.FEATURE_REMOTE_GROUP_PLAYBACK); + return !isActiveRemoteDevice(device); } private final MediaController.Callback mCb = new MediaController.Callback() { From 41aac681b87c365afe7cd81a4fda345e15bb77ad Mon Sep 17 00:00:00 2001 From: Tim Peng Date: Mon, 9 Aug 2021 04:17:51 +0000 Subject: [PATCH 17/19] Disable volume control bar for all remote devices Bug: 189270378 Test: manual test Change-Id: I72d7d674513e882f5e1628c8bfa78934a998fc40 --- .../settingslib/media/InfoMediaManager.java | 30 +------------------ 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index ed8d524b01326..3c43f4a637ba2 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -15,7 +15,6 @@ */ package com.android.settingslib.media; -import static android.media.MediaRoute2Info.FEATURE_REMOTE_GROUP_PLAYBACK; import static android.media.MediaRoute2Info.TYPE_BLUETOOTH_A2DP; import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER; import static android.media.MediaRoute2Info.TYPE_DOCK; @@ -388,34 +387,7 @@ public class InfoMediaManager extends MediaManager { @TargetApi(Build.VERSION_CODES.R) boolean shouldEnableVolumeSeekBar(RoutingSessionInfo sessionInfo) { - if (sessionInfo == null) { - Log.w(TAG, "shouldEnableVolumeSeekBar() package name is null or empty!"); - return false; - } - final List mediaRoute2Infos = - mRouterManager.getSelectedRoutes(sessionInfo); - // More than one selected route - if (mediaRoute2Infos.size() > 1) { - if (DEBUG) { - Log.d(TAG, "shouldEnableVolumeSeekBar() package name : " - + sessionInfo.getClientPackageName() - + ", mediaRoute2Infos.size() " + mediaRoute2Infos.size()); - } - return false; - } - // Route contains group feature - for (MediaRoute2Info mediaRoute2Info : mediaRoute2Infos) { - final List features = mediaRoute2Info.getFeatures(); - if (features.contains(FEATURE_REMOTE_GROUP_PLAYBACK)) { - if (DEBUG) { - Log.d(TAG, "shouldEnableVolumeSeekBar() package name : " - + mediaRoute2Info.getClientPackageName() - + "contain group playback "); - } - return false; - } - } - return true; + return false; } private void refreshDevices() { From 271b907bab302ddc480a08551201b28b3a86e443 Mon Sep 17 00:00:00 2001 From: Soonil Nagarkar Date: Tue, 10 Aug 2021 12:18:30 -0700 Subject: [PATCH 18/19] Fix Location equals() Should handle extras in a better manner. Bug: 196075248 Test: presubmits + manual Change-Id: I89e45c289b26ea97486c5a72feb0a805c8c1a950 --- location/java/android/location/Location.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/location/java/android/location/Location.java b/location/java/android/location/Location.java index 1e8b9521e41ea..209903c57d902 100644 --- a/location/java/android/location/Location.java +++ b/location/java/android/location/Location.java @@ -1084,6 +1084,12 @@ public class Location implements Parcelable { mExtras = (extras == null) ? null : new Bundle(extras); } + /** + * Location equality is provided primarily for test purposes. Comparing locations for equality + * in production may indicate incorrect assumptions, and should be avoided whenever possible. + * + *

{@inheritDoc} + */ @Override public boolean equals(Object o) { if (this == o) { @@ -1121,7 +1127,17 @@ public class Location implements Parcelable { && (!hasBearingAccuracy() || Float.compare(location.mBearingAccuracyDegrees, mBearingAccuracyDegrees) == 0) && Objects.equals(mProvider, location.mProvider) - && Objects.equals(mExtras, location.mExtras); + && areExtrasEqual(mExtras, location.mExtras); + } + + private static boolean areExtrasEqual(@Nullable Bundle extras1, @Nullable Bundle extras2) { + if ((extras1 == null || extras1.isEmpty()) && (extras2 == null || extras2.isEmpty())) { + return true; + } else if (extras1 == null || extras2 == null) { + return false; + } else { + return extras1.kindofEquals(extras2); + } } @Override From d7e56f5b961e3f4d089ae5d9f4dd817471404686 Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Tue, 10 Aug 2021 14:25:14 -0700 Subject: [PATCH 19/19] Update wallpaper offset when changing target from null updateWallpaperOffsetLocked copies the IPC received values to the state variables that are actually set on the wallpaper window. It skips this job when there is no wallpaper target. In a situation where we are going from no wallpaper target to wallpaper target (e.g. lock screen wallpaper) there may be nothing to trigger this method to be called again when we finally receive a wallpaper target, and we then have to wait for another IPC. Since there were some values ignored, it can lead to some jank/misalignment. Bug: 195596603 Test: Repro from bug. Change-Id: I3ef19b77bc33546a3e80bca75532d017b4712054 --- .../core/java/com/android/server/wm/WallpaperController.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java index 95e5fc2e6b274..4ff6d3c9a5f22 100644 --- a/services/core/java/com/android/server/wm/WallpaperController.java +++ b/services/core/java/com/android/server/wm/WallpaperController.java @@ -549,6 +549,9 @@ class WallpaperController { final WindowState prevWallpaperTarget = mWallpaperTarget; mWallpaperTarget = wallpaperTarget; + if (prevWallpaperTarget == null && wallpaperTarget != null) { + updateWallpaperOffsetLocked(mWallpaperTarget, false); + } if (wallpaperTarget == null || prevWallpaperTarget == null) { return; }