Initial stab at background check.
Actually, this implementation is more what we want for ephemeral
apps. I am realizing the two are not really the same thing. :(
For this implementation, we now keep track of how long a uid has
been in the background, and after a certain amount of time
(currently 1 minute) we mark it as "idle". Any packages associated
with that uid are then no longer allowed to run in the background.
This means, until the app next goes in the foreground:
- No manifest broadcast receivers in the app will execute.
- No services can be started (binding services is still okay,
as this is outside dependencies on the app that should still
be represented).
- All alarms for the app are cancelled and no more can be set.
- All jobs for the app are cancelled and no more can be scheduled.
- All syncs for the app are cancelled and no more can be requested.
Change-Id: If53714ca4beed35faf2e89f916ce9eaaabd9290d
diff --git a/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java b/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java
index b0296a0..c174a92 100644
--- a/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java
+++ b/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java
@@ -61,7 +61,7 @@
b2.putBoolean("b2", true);
SyncOperation op1 = new SyncOperation(account1, 0,
- 1,
+ 1, "foo", 0,
SyncOperation.REASON_PERIODIC,
"authority1",
b1,
@@ -73,7 +73,7 @@
// Same as op1 but different time infos
SyncOperation op2 = new SyncOperation(account1, 0,
- 1,
+ 1, "foo", 0,
SyncOperation.REASON_PERIODIC,
"authority1",
b1,
@@ -85,7 +85,7 @@
// Same as op1 but different authority
SyncOperation op3 = new SyncOperation(account1, 0,
- 1,
+ 1, "foo", 0,
SyncOperation.REASON_PERIODIC,
"authority2",
b1,
@@ -97,7 +97,7 @@
// Same as op1 but different account
SyncOperation op4 = new SyncOperation(account2, 0,
- 1,
+ 1, "foo", 0,
SyncOperation.REASON_PERIODIC,
"authority1",
b1,
@@ -109,7 +109,7 @@
// Same as op1 but different bundle
SyncOperation op5 = new SyncOperation(account1, 0,
- 1,
+ 1, "foo", 0,
SyncOperation.REASON_PERIODIC,
"authority1",
b2,
@@ -131,21 +131,21 @@
long soonFlex = 50;
long after = 1500;
long afterFlex = 100;
- SyncOperation op1 = new SyncOperation(mDummy, 0, 0, SyncOperation.REASON_PERIODIC,
+ SyncOperation op1 = new SyncOperation(mDummy, 0, 0, "foo", 0, SyncOperation.REASON_PERIODIC,
"authority1", mEmpty, soon, soonFlex, mUnimportantLong, mUnimportantLong, true);
// Interval disjoint from and after op1.
- SyncOperation op2 = new SyncOperation(mDummy, 0, 0, SyncOperation.REASON_PERIODIC,
+ SyncOperation op2 = new SyncOperation(mDummy, 0, 0, "foo", 0, SyncOperation.REASON_PERIODIC,
"authority1", mEmpty, after, afterFlex, mUnimportantLong, mUnimportantLong, true);
// Interval equivalent to op1, but expedited.
Bundle b2 = new Bundle();
b2.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
- SyncOperation op3 = new SyncOperation(mDummy, 0, 0, 0,
+ SyncOperation op3 = new SyncOperation(mDummy, 0, 0, "foo", 0, 0,
"authority1", b2, -1, soonFlex, mUnimportantLong, mUnimportantLong, true);
// Interval overlaps but not equivalent to op1.
- SyncOperation op4 = new SyncOperation(mDummy, 0, 0, SyncOperation.REASON_PERIODIC,
+ SyncOperation op4 = new SyncOperation(mDummy, 0, 0, "foo", 0, SyncOperation.REASON_PERIODIC,
"authority1", mEmpty, soon + 100, soonFlex + 100, mUnimportantLong, mUnimportantLong, true);
assertTrue(op1.compareTo(op2) == -1);
@@ -165,7 +165,8 @@
Bundle withExpedited = new Bundle();
withExpedited.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
- SyncOperation op = new SyncOperation(mDummy, 0, 0, SyncOperation.REASON_USER_START,
+ SyncOperation op = new SyncOperation(mDummy, 0, 0, "foo", 0,
+ SyncOperation.REASON_USER_START,
mAuthority, withExpedited, fiveSecondsFromNow, twoSecondsFlex,
eightSeconds /* backoff */, fourSeconds /* delayUntil */, true);
// Create another sync op to be rerun in 5 minutes.