Loading core/java/android/permission/flags.aconfig +0 −11 Original line number Diff line number Diff line Loading @@ -284,17 +284,6 @@ flag { bug: "364638912" } flag { name: "delay_uid_state_changes_from_capability_updates" is_fixed_read_only: true namespace: "permissions" description: "If proc state is decreasing over the restriction threshold and capability is changed, delay if no new capabilities are added" bug: "347891382" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "allow_host_permission_dialogs_on_virtual_devices" is_exported: true Loading services/core/java/com/android/server/appop/AppOpsUidStateTrackerImpl.java +4 −13 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import static android.app.AppOpsManager.UID_STATE_FOREGROUND_SERVICE; import static android.app.AppOpsManager.UID_STATE_MAX_LAST_NON_RESTRICTED; import static android.app.AppOpsManager.UID_STATE_NONEXISTENT; import static android.app.AppOpsManager.UID_STATE_TOP; import static android.permission.flags.Flags.delayUidStateChangesFromCapabilityUpdates; import static android.permission.flags.Flags.finishRunningOpsForKilledPackages; import static com.android.server.appop.AppOpsUidStateTracker.processStateToUidState; Loading Loading @@ -246,18 +245,10 @@ class AppOpsUidStateTrackerImpl implements AppOpsUidStateTracker { // foreground and the old state is in the background, then always do it // immediately. commitUidPendingState(uid); } else if (delayUidStateChangesFromCapabilityUpdates() && uidState == prevUidState && !hasLostCapability) { // No change on process state, but process capability hasn't decreased. commitUidPendingState(uid); } else if (!delayUidStateChangesFromCapabilityUpdates() && uidState == prevUidState && capability != prevCapability) { // No change on process state, but process capability has changed. commitUidPendingState(uid); } else if (uidState <= UID_STATE_MAX_LAST_NON_RESTRICTED && (!delayUidStateChangesFromCapabilityUpdates() || !hasLostCapability)) { // We are moving to a less important state, but it doesn't cross the restriction // threshold. } else if ((uidState == prevUidState || uidState <= UID_STATE_MAX_LAST_NON_RESTRICTED) && !hasLostCapability) { // Process capability hasn't decreased in any bit. UidState has not changed or it // has remained at least as important as the restriction threshold commitUidPendingState(uid); } else if (pendingStateCommitTime == 0) { // We are moving to a less important state for the first time, Loading services/tests/mockingservicestests/src/com/android/server/appop/AppOpsUidStateTrackerTest.java +13 −23 Original line number Diff line number Diff line Loading @@ -30,12 +30,10 @@ import static android.app.AppOpsManager.UID_STATE_FOREGROUND; import static android.app.AppOpsManager.UID_STATE_FOREGROUND_SERVICE; import static android.app.AppOpsManager.UID_STATE_MAX_LAST_NON_RESTRICTED; import static android.app.AppOpsManager.UID_STATE_TOP; import static android.permission.flags.Flags.delayUidStateChangesFromCapabilityUpdates; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeTrue; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; Loading Loading @@ -350,7 +348,6 @@ public class AppOpsUidStateTrackerTest { .backgroundState() .update(); if (delayUidStateChangesFromCapabilityUpdates()) { mClock.advanceTime(mConstants.BG_STATE_SETTLE_TIME - 1); assertEquals(MODE_ALLOWED, mIntf.evalMode(UID, OP_RECORD_AUDIO, MODE_FOREGROUND)); assertEquals(MODE_ALLOWED, Loading @@ -358,7 +355,6 @@ public class AppOpsUidStateTrackerTest { MODE_FOREGROUND)); mClock.advanceTime(1); } assertEquals(MODE_IGNORED, mIntf.evalMode(UID, OP_RECORD_AUDIO, MODE_FOREGROUND)); assertEquals(MODE_IGNORED, mIntf.evalMode(UID, OP_RECEIVE_EXPLICIT_USER_INTERACTION_AUDIO, MODE_FOREGROUND)); Loading Loading @@ -393,12 +389,10 @@ public class AppOpsUidStateTrackerTest { .backgroundState() .update(); if (delayUidStateChangesFromCapabilityUpdates()) { mClock.advanceTime(mConstants.BG_STATE_SETTLE_TIME - 1); assertEquals(MODE_ALLOWED, mIntf.evalMode(UID, OP_CAMERA, MODE_FOREGROUND)); mClock.advanceTime(1); } assertEquals(MODE_IGNORED, mIntf.evalMode(UID, OP_CAMERA, MODE_FOREGROUND)); } Loading Loading @@ -434,21 +428,17 @@ public class AppOpsUidStateTrackerTest { .backgroundState() .update(); if (delayUidStateChangesFromCapabilityUpdates()) { mClock.advanceTime(mConstants.BG_STATE_SETTLE_TIME - 1); assertEquals(MODE_ALLOWED, mIntf.evalMode(UID, OP_COARSE_LOCATION, MODE_FOREGROUND)); assertEquals(MODE_ALLOWED, mIntf.evalMode(UID, OP_FINE_LOCATION, MODE_FOREGROUND)); mClock.advanceTime(1); } assertEquals(MODE_IGNORED, mIntf.evalMode(UID, OP_COARSE_LOCATION, MODE_FOREGROUND)); assertEquals(MODE_IGNORED, mIntf.evalMode(UID, OP_FINE_LOCATION, MODE_FOREGROUND)); } @Test public void testProcStateChangesAndStaysUnrestrictedAndCapabilityRemoved() { assumeTrue(delayUidStateChangesFromCapabilityUpdates()); procStateBuilder(UID) .topState() .microphoneCapability() Loading Loading
core/java/android/permission/flags.aconfig +0 −11 Original line number Diff line number Diff line Loading @@ -284,17 +284,6 @@ flag { bug: "364638912" } flag { name: "delay_uid_state_changes_from_capability_updates" is_fixed_read_only: true namespace: "permissions" description: "If proc state is decreasing over the restriction threshold and capability is changed, delay if no new capabilities are added" bug: "347891382" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "allow_host_permission_dialogs_on_virtual_devices" is_exported: true Loading
services/core/java/com/android/server/appop/AppOpsUidStateTrackerImpl.java +4 −13 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import static android.app.AppOpsManager.UID_STATE_FOREGROUND_SERVICE; import static android.app.AppOpsManager.UID_STATE_MAX_LAST_NON_RESTRICTED; import static android.app.AppOpsManager.UID_STATE_NONEXISTENT; import static android.app.AppOpsManager.UID_STATE_TOP; import static android.permission.flags.Flags.delayUidStateChangesFromCapabilityUpdates; import static android.permission.flags.Flags.finishRunningOpsForKilledPackages; import static com.android.server.appop.AppOpsUidStateTracker.processStateToUidState; Loading Loading @@ -246,18 +245,10 @@ class AppOpsUidStateTrackerImpl implements AppOpsUidStateTracker { // foreground and the old state is in the background, then always do it // immediately. commitUidPendingState(uid); } else if (delayUidStateChangesFromCapabilityUpdates() && uidState == prevUidState && !hasLostCapability) { // No change on process state, but process capability hasn't decreased. commitUidPendingState(uid); } else if (!delayUidStateChangesFromCapabilityUpdates() && uidState == prevUidState && capability != prevCapability) { // No change on process state, but process capability has changed. commitUidPendingState(uid); } else if (uidState <= UID_STATE_MAX_LAST_NON_RESTRICTED && (!delayUidStateChangesFromCapabilityUpdates() || !hasLostCapability)) { // We are moving to a less important state, but it doesn't cross the restriction // threshold. } else if ((uidState == prevUidState || uidState <= UID_STATE_MAX_LAST_NON_RESTRICTED) && !hasLostCapability) { // Process capability hasn't decreased in any bit. UidState has not changed or it // has remained at least as important as the restriction threshold commitUidPendingState(uid); } else if (pendingStateCommitTime == 0) { // We are moving to a less important state for the first time, Loading
services/tests/mockingservicestests/src/com/android/server/appop/AppOpsUidStateTrackerTest.java +13 −23 Original line number Diff line number Diff line Loading @@ -30,12 +30,10 @@ import static android.app.AppOpsManager.UID_STATE_FOREGROUND; import static android.app.AppOpsManager.UID_STATE_FOREGROUND_SERVICE; import static android.app.AppOpsManager.UID_STATE_MAX_LAST_NON_RESTRICTED; import static android.app.AppOpsManager.UID_STATE_TOP; import static android.permission.flags.Flags.delayUidStateChangesFromCapabilityUpdates; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeTrue; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; Loading Loading @@ -350,7 +348,6 @@ public class AppOpsUidStateTrackerTest { .backgroundState() .update(); if (delayUidStateChangesFromCapabilityUpdates()) { mClock.advanceTime(mConstants.BG_STATE_SETTLE_TIME - 1); assertEquals(MODE_ALLOWED, mIntf.evalMode(UID, OP_RECORD_AUDIO, MODE_FOREGROUND)); assertEquals(MODE_ALLOWED, Loading @@ -358,7 +355,6 @@ public class AppOpsUidStateTrackerTest { MODE_FOREGROUND)); mClock.advanceTime(1); } assertEquals(MODE_IGNORED, mIntf.evalMode(UID, OP_RECORD_AUDIO, MODE_FOREGROUND)); assertEquals(MODE_IGNORED, mIntf.evalMode(UID, OP_RECEIVE_EXPLICIT_USER_INTERACTION_AUDIO, MODE_FOREGROUND)); Loading Loading @@ -393,12 +389,10 @@ public class AppOpsUidStateTrackerTest { .backgroundState() .update(); if (delayUidStateChangesFromCapabilityUpdates()) { mClock.advanceTime(mConstants.BG_STATE_SETTLE_TIME - 1); assertEquals(MODE_ALLOWED, mIntf.evalMode(UID, OP_CAMERA, MODE_FOREGROUND)); mClock.advanceTime(1); } assertEquals(MODE_IGNORED, mIntf.evalMode(UID, OP_CAMERA, MODE_FOREGROUND)); } Loading Loading @@ -434,21 +428,17 @@ public class AppOpsUidStateTrackerTest { .backgroundState() .update(); if (delayUidStateChangesFromCapabilityUpdates()) { mClock.advanceTime(mConstants.BG_STATE_SETTLE_TIME - 1); assertEquals(MODE_ALLOWED, mIntf.evalMode(UID, OP_COARSE_LOCATION, MODE_FOREGROUND)); assertEquals(MODE_ALLOWED, mIntf.evalMode(UID, OP_FINE_LOCATION, MODE_FOREGROUND)); mClock.advanceTime(1); } assertEquals(MODE_IGNORED, mIntf.evalMode(UID, OP_COARSE_LOCATION, MODE_FOREGROUND)); assertEquals(MODE_IGNORED, mIntf.evalMode(UID, OP_FINE_LOCATION, MODE_FOREGROUND)); } @Test public void testProcStateChangesAndStaysUnrestrictedAndCapabilityRemoved() { assumeTrue(delayUidStateChangesFromCapabilityUpdates()); procStateBuilder(UID) .topState() .microphoneCapability() Loading