Merge cherrypicks of [12373238, 12372475, 12370691, 12373239, 12372186, 12373784, 12373477, 12373478, 12373479, 12373765, 12373526] into rvc-release

Change-Id: I01dc559688e848fa22517d779c7d54bbfd5205a2
This commit is contained in:
android-build-team Robot
2020-08-14 00:06:43 +00:00
4 changed files with 123 additions and 1 deletions

View File

@@ -559,6 +559,7 @@ void GraphicsStatsService::finishDumpInMemory(Dump* dump, AStatsEventList* data,
AStatsEvent_writeBool(event, !lastFullDay);
AStatsEvent_build(event);
}
delete dump;
}

View File

@@ -75,6 +75,7 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -173,6 +174,8 @@ public class PreferencesHelper implements RankingConfig {
private boolean mAllowInvalidShortcuts = false;
private Map<String, List<String>> mOemLockedApps = new HashMap();
public PreferencesHelper(Context context, PackageManager pm, RankingHandler rankingHandler,
ZenModeHelper zenHelper, NotificationChannelLogger notificationChannelLogger,
AppOpsManager appOpsManager,
@@ -314,6 +317,12 @@ public class PreferencesHelper implements RankingConfig {
}
channel.setImportanceLockedByCriticalDeviceFunction(
r.defaultAppLockedImportance);
channel.setImportanceLockedByOEM(r.oemLockedImportance);
if (!channel.isImportanceLockedByOEM()) {
if (r.oemLockedChannels.contains(channel.getId())) {
channel.setImportanceLockedByOEM(true);
}
}
boolean isInvalidShortcutChannel =
channel.getConversationId() != null &&
channel.getConversationId().contains(
@@ -396,6 +405,14 @@ public class PreferencesHelper implements RankingConfig {
r.visibility = visibility;
r.showBadge = showBadge;
r.bubblePreference = bubblePreference;
if (mOemLockedApps.containsKey(r.pkg)) {
List<String> channels = mOemLockedApps.get(r.pkg);
if (channels == null || channels.isEmpty()) {
r.oemLockedImportance = true;
} else {
r.oemLockedChannels = channels;
}
}
try {
createDefaultChannelIfNeededLocked(r);
@@ -1149,8 +1166,10 @@ public class PreferencesHelper implements RankingConfig {
String channelId = appSplit.length == 2 ? appSplit[1] : null;
synchronized (mPackagePreferences) {
boolean foundApp = false;
for (PackagePreferences r : mPackagePreferences.values()) {
if (r.pkg.equals(appName)) {
foundApp = true;
if (channelId == null) {
// lock all channels for the app
r.oemLockedImportance = true;
@@ -1168,6 +1187,14 @@ public class PreferencesHelper implements RankingConfig {
}
}
}
if (!foundApp) {
List<String> channels =
mOemLockedApps.getOrDefault(appName, new ArrayList<>());
if (channelId != null) {
channels.add(channelId);
}
mOemLockedApps.put(appName, channels);
}
}
}
}

View File

@@ -337,6 +337,7 @@ public class BackgroundDexOptService extends JobService {
private int idleOptimizePackages(PackageManagerService pm, ArraySet<String> pkgs,
long lowStorageThreshold) {
ArraySet<String> updatedPackages = new ArraySet<>();
ArraySet<String> updatedPackagesDueToSecondaryDex = new ArraySet<>();
try {
final boolean supportSecondaryDex = supportSecondaryDex();
@@ -391,11 +392,14 @@ public class BackgroundDexOptService extends JobService {
}
int secondaryResult = optimizePackages(pm, pkgs, lowStorageThreshold,
/*isForPrimaryDex*/ false, updatedPackages);
/*isForPrimaryDex*/ false, updatedPackagesDueToSecondaryDex);
return secondaryResult;
} finally {
// Always let the pinner service know about changes.
notifyPinService(updatedPackages);
// Only notify IORap the primary dex opt, because we don't want to
// invalidate traces unnecessary due to b/161633001 and that it's
// better to have a trace than no trace at all.
notifyPackagesUpdated(updatedPackages);
}
}

View File

@@ -2632,6 +2632,96 @@ public class PreferencesHelperTest extends UiServiceTestCase {
.isImportanceLockedByOEM());
}
@Test
public void testLockChannelsForOEM_onlyGivenPkg_appDoesNotExistYet() {
mHelper.lockChannelsForOEM(new String[] {PKG_O});
NotificationChannel a = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
NotificationChannel b = new NotificationChannel("b", "b", IMPORTANCE_LOW);
mHelper.createNotificationChannel(PKG_O, 3, a, true, false);
mHelper.createNotificationChannel(PKG_N_MR1, 30, b, false, false);
assertTrue(mHelper.getNotificationChannel(PKG_O, 3, a.getId(), false)
.isImportanceLockedByOEM());
assertFalse(mHelper.getNotificationChannel(PKG_N_MR1, 30, b.getId(), false)
.isImportanceLockedByOEM());
}
@Test
public void testLockChannelsForOEM_channelSpecific_appDoesNotExistYet() {
mHelper.lockChannelsForOEM(new String[] {PKG_O + ":b", PKG_O + ":c"});
NotificationChannel a = new NotificationChannel("a", "a", IMPORTANCE_HIGH);
NotificationChannel b = new NotificationChannel("b", "b", IMPORTANCE_LOW);
NotificationChannel c = new NotificationChannel("c", "c", IMPORTANCE_DEFAULT);
// different uids, same package
mHelper.createNotificationChannel(PKG_O, 3, a, true, false);
mHelper.createNotificationChannel(PKG_O, 3, b, false, false);
mHelper.createNotificationChannel(PKG_O, 30, c, true, true);
assertFalse(mHelper.getNotificationChannel(PKG_O, 3, a.getId(), false)
.isImportanceLockedByOEM());
assertTrue(mHelper.getNotificationChannel(PKG_O, 3, b.getId(), false)
.isImportanceLockedByOEM());
assertTrue(mHelper.getNotificationChannel(PKG_O, 30, c.getId(), false)
.isImportanceLockedByOEM());
}
@Test
public void testLockChannelsForOEM_onlyGivenPkg_appDoesNotExistYet_restoreData()
throws Exception {
mHelper.lockChannelsForOEM(new String[] {PKG_O});
final String xml = "<ranking version=\"1\">\n"
+ "<package name=\"" + PKG_O + "\" uid=\"" + UID_O + "\" >\n"
+ "<channel id=\"a\" name=\"a\" importance=\"3\"/>"
+ "<channel id=\"b\" name=\"b\" importance=\"3\"/>"
+ "</package>"
+ "<package name=\"" + PKG_N_MR1 + "\" uid=\"" + UID_N_MR1 + "\" >\n"
+ "<channel id=\"a\" name=\"a\" importance=\"3\"/>"
+ "<channel id=\"b\" name=\"b\" importance=\"3\"/>"
+ "</package>"
+ "</ranking>";
XmlPullParser parser = Xml.newPullParser();
parser.setInput(new BufferedInputStream(new ByteArrayInputStream(xml.getBytes())),
null);
parser.nextTag();
mHelper.readXml(parser, false, UserHandle.USER_ALL);
assertTrue(mHelper.getNotificationChannel(PKG_O, UID_O, "a", false)
.isImportanceLockedByOEM());
assertFalse(mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, "b", false)
.isImportanceLockedByOEM());
}
@Test
public void testLockChannelsForOEM_channelSpecific_appDoesNotExistYet_restoreData()
throws Exception {
mHelper.lockChannelsForOEM(new String[] {PKG_O + ":b", PKG_O + ":c"});
final String xml = "<ranking version=\"1\">\n"
+ "<package name=\"" + PKG_O + "\" uid=\"" + 3 + "\" >\n"
+ "<channel id=\"a\" name=\"a\" importance=\"3\"/>"
+ "<channel id=\"b\" name=\"b\" importance=\"3\"/>"
+ "</package>"
+ "<package name=\"" + PKG_O + "\" uid=\"" + 30 + "\" >\n"
+ "<channel id=\"c\" name=\"c\" importance=\"3\"/>"
+ "</package>"
+ "</ranking>";
XmlPullParser parser = Xml.newPullParser();
parser.setInput(new BufferedInputStream(new ByteArrayInputStream(xml.getBytes())),
null);
parser.nextTag();
mHelper.readXml(parser, false, UserHandle.USER_ALL);
assertFalse(mHelper.getNotificationChannel(PKG_O, 3, "a", false)
.isImportanceLockedByOEM());
assertTrue(mHelper.getNotificationChannel(PKG_O, 3, "b", false)
.isImportanceLockedByOEM());
assertTrue(mHelper.getNotificationChannel(PKG_O, 30, "c", false)
.isImportanceLockedByOEM());
}
@Test
public void testLockChannelsForOEM_channelSpecific_clearData() {
NotificationChannel a = new NotificationChannel("a", "a", IMPORTANCE_HIGH);