From 3ec36ef2af10558a0a94aa56331ce16bc6b18914 Mon Sep 17 00:00:00 2001 From: Pavel Maltsev Date: Thu, 15 Mar 2018 16:17:48 -0700 Subject: [PATCH] JobStore: persist unwanted set of capabilities Network request may contain list of required capabilities and list of capabilities that network shouldn't have in order to satisfy the request (unwanted). Bug: 72828388 Test: runtest -x frameworks/base/services/tests/servicestests/ -c com.android.server.job.JobStoreTest Change-Id: I47dbfc7ad23e3d6903272155d6aaa294ff81586a --- .../core/java/com/android/server/job/JobStore.java | 12 +++++++++++- .../src/com/android/server/job/JobStoreTest.java | 5 ++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/job/JobStore.java b/services/core/java/com/android/server/job/JobStore.java index 7235faa6ad509..4f8b1dcc6bb46 100644 --- a/services/core/java/com/android/server/job/JobStore.java +++ b/services/core/java/com/android/server/job/JobStore.java @@ -477,6 +477,9 @@ public final class JobStore { final NetworkRequest network = jobStatus.getJob().getRequiredNetwork(); out.attribute(null, "net-capabilities", Long.toString( BitUtils.packBits(network.networkCapabilities.getCapabilities()))); + out.attribute(null, "net-unwanted-capabilities", Long.toString( + BitUtils.packBits(network.networkCapabilities.getUnwantedCapabilities()))); + out.attribute(null, "net-transport-types", Long.toString( BitUtils.packBits(network.networkCapabilities.getTransportTypes()))); } @@ -888,12 +891,19 @@ public final class JobStore { String val; final String netCapabilities = parser.getAttributeValue(null, "net-capabilities"); + final String netUnwantedCapabilities = parser.getAttributeValue( + null, "net-unwanted-capabilities"); final String netTransportTypes = parser.getAttributeValue(null, "net-transport-types"); if (netCapabilities != null && netTransportTypes != null) { final NetworkRequest request = new NetworkRequest.Builder().build(); + final long unwantedCapabilities = netUnwantedCapabilities != null + ? Long.parseLong(netUnwantedCapabilities) + : BitUtils.packBits(request.networkCapabilities.getUnwantedCapabilities()); + // We're okay throwing NFE here; caught by caller request.networkCapabilities.setCapabilities( - BitUtils.unpackBits(Long.parseLong(netCapabilities))); + BitUtils.unpackBits(Long.parseLong(netCapabilities)), + BitUtils.unpackBits(unwantedCapabilities)); request.networkCapabilities.setTransportTypes( BitUtils.unpackBits(Long.parseLong(netTransportTypes))); jobBuilder.setRequiredNetwork(request); diff --git a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java index e2064aa38f1f5..4ee2ff48fd625 100644 --- a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java +++ b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java @@ -1,6 +1,7 @@ package com.android.server.job; import static android.net.NetworkCapabilities.NET_CAPABILITY_IMS; +import static android.net.NetworkCapabilities.NET_CAPABILITY_OEM_PAID; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; import static org.junit.Assert.assertEquals; @@ -374,7 +375,9 @@ public class JobStoreTest { assertPersistedEquals(new JobInfo.Builder(0, mComponent) .setPersisted(true) .setRequiredNetwork(new NetworkRequest.Builder() - .addCapability(NET_CAPABILITY_IMS).build()) + .addCapability(NET_CAPABILITY_IMS) + .addUnwantedCapability(NET_CAPABILITY_OEM_PAID) + .build()) .build()); }