Loading core/java/android/app/AppOpsManager.java +8 −4 Original line number Diff line number Diff line Loading @@ -1738,7 +1738,7 @@ public class AppOpsManager { * * @hide */ public static final int OP_AGENT_CONTROL = AppOpEnums.APP_OP_AGENT_CONTROL; public static final int OP_COMPUTER_CONTROL = AppOpEnums.APP_OP_COMPUTER_CONTROL; /** @hide */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) Loading Loading @@ -1913,7 +1913,7 @@ public class AppOpsManager { OPSTR_SYSTEM_APPLICATION_OVERLAY, OPSTR_READ_CELL_IDENTITY, OPSTR_READ_CELL_INFO, OPSTR_AGENT_CONTROL, OPSTR_COMPUTER_CONTROL, }) public @interface AppOpString {} Loading Loading @@ -2724,7 +2724,7 @@ public class AppOpsManager { public static final String OPSTR_READ_CELL_INFO = "android:read_cell_info"; /** @hide Control other applications. */ public static final String OPSTR_AGENT_CONTROL = "android:agent_control"; public static final String OPSTR_COMPUTER_CONTROL = "android:computer_control"; /** {@link #sAppOpsToNote} not initialized yet for this op */ private static final byte SHOULD_COLLECT_NOTE_OP_NOT_INITIALIZED = 0; Loading Loading @@ -3399,7 +3399,11 @@ public class AppOpsManager { "READ_CELL_INFO") .setDefaultMode(AppOpsManager.MODE_ALLOWED) .build(), new AppOpInfo.Builder(OP_AGENT_CONTROL, OPSTR_AGENT_CONTROL, "AGENT_CONTROL") // OP_COMPUTER_CONTROL is related to the ACCESS_COMPUTER_CONTROL permission but with // slightly different semantics - the permission must be held in order to request a // computer control session at all, while the op mode determines whether explicit user // consent is required when requesting a computer control session. new AppOpInfo.Builder(OP_COMPUTER_CONTROL, OPSTR_COMPUTER_CONTROL, "COMPUTER_CONTROL") .setDefaultMode(AppOpsManager.MODE_IGNORED) .build(), }; Loading packages/VirtualDeviceManager/src/com/android/virtualdevicemanager/RequestComputerControlAccessFragment.java +1 −1 Original line number Diff line number Diff line Loading @@ -125,7 +125,7 @@ public class RequestComputerControlAccessFragment extends DialogFragment { private void onAlwaysAllow(View view) { AppOpsManager appOpsManager = requireActivity().getSystemService(AppOpsManager.class); appOpsManager.setMode(AppOpsManager.OP_AGENT_CONTROL, mAgentUid, mAgentPackageName, appOpsManager.setMode(AppOpsManager.OP_COMPUTER_CONTROL, mAgentUid, mAgentPackageName, AppOpsManager.MODE_ALLOWED); finish(Activity.RESULT_OK); } Loading services/companion/java/com/android/server/companion/virtual/computercontrol/ComputerControlSessionProcessor.java +1 −1 Original line number Diff line number Diff line Loading @@ -113,7 +113,7 @@ public class ComputerControlSessionProcessor { final boolean canCreateWithoutConsent; if (Flags.computerControlConsent()) { final int isOpAllowed = mAppOpsManager.noteOpNoThrow( AppOpsManager.OP_AGENT_CONTROL, attributionSource, "create session"); AppOpsManager.OP_COMPUTER_CONTROL, attributionSource, "create session"); canCreateWithoutConsent = isOpAllowed == AppOpsManager.MODE_ALLOWED; } else { canCreateWithoutConsent = true; Loading services/tests/servicestests/src/com/android/server/companion/virtual/computercontrol/ComputerControlSessionProcessorTest.java +3 −3 Original line number Diff line number Diff line Loading @@ -116,7 +116,7 @@ public class ComputerControlSessionProcessorTest { when(mContext.getSystemService(Context.KEYGUARD_SERVICE)).thenReturn(mKeyguardManager); when(mContext.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManager); when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_AGENT_CONTROL), any(), any())) when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_COMPUTER_CONTROL), any(), any())) .thenReturn(AppOpsManager.MODE_ALLOWED); when(mVirtualDeviceFactory.createVirtualDevice(any(), any(), any(), any())) Loading Loading @@ -180,7 +180,7 @@ public class ComputerControlSessionProcessorTest { @EnableFlags(Flags.FLAG_COMPUTER_CONTROL_CONSENT) @Test public void onSessionPending_consentGranted_sessionCreated() throws Exception { when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_AGENT_CONTROL), any(), any())) when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_COMPUTER_CONTROL), any(), any())) .thenReturn(AppOpsManager.MODE_IGNORED); mProcessor.processNewSessionRequest(AttributionSource.myAttributionSource(), Loading @@ -198,7 +198,7 @@ public class ComputerControlSessionProcessorTest { @EnableFlags(Flags.FLAG_COMPUTER_CONTROL_CONSENT) @Test public void onSessionPending_consentDenied_sessionCreationFailed() throws Exception { when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_AGENT_CONTROL), any(), any())) when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_COMPUTER_CONTROL), any(), any())) .thenReturn(AppOpsManager.MODE_IGNORED); mProcessor.processNewSessionRequest(AttributionSource.myAttributionSource(), Loading Loading
core/java/android/app/AppOpsManager.java +8 −4 Original line number Diff line number Diff line Loading @@ -1738,7 +1738,7 @@ public class AppOpsManager { * * @hide */ public static final int OP_AGENT_CONTROL = AppOpEnums.APP_OP_AGENT_CONTROL; public static final int OP_COMPUTER_CONTROL = AppOpEnums.APP_OP_COMPUTER_CONTROL; /** @hide */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) Loading Loading @@ -1913,7 +1913,7 @@ public class AppOpsManager { OPSTR_SYSTEM_APPLICATION_OVERLAY, OPSTR_READ_CELL_IDENTITY, OPSTR_READ_CELL_INFO, OPSTR_AGENT_CONTROL, OPSTR_COMPUTER_CONTROL, }) public @interface AppOpString {} Loading Loading @@ -2724,7 +2724,7 @@ public class AppOpsManager { public static final String OPSTR_READ_CELL_INFO = "android:read_cell_info"; /** @hide Control other applications. */ public static final String OPSTR_AGENT_CONTROL = "android:agent_control"; public static final String OPSTR_COMPUTER_CONTROL = "android:computer_control"; /** {@link #sAppOpsToNote} not initialized yet for this op */ private static final byte SHOULD_COLLECT_NOTE_OP_NOT_INITIALIZED = 0; Loading Loading @@ -3399,7 +3399,11 @@ public class AppOpsManager { "READ_CELL_INFO") .setDefaultMode(AppOpsManager.MODE_ALLOWED) .build(), new AppOpInfo.Builder(OP_AGENT_CONTROL, OPSTR_AGENT_CONTROL, "AGENT_CONTROL") // OP_COMPUTER_CONTROL is related to the ACCESS_COMPUTER_CONTROL permission but with // slightly different semantics - the permission must be held in order to request a // computer control session at all, while the op mode determines whether explicit user // consent is required when requesting a computer control session. new AppOpInfo.Builder(OP_COMPUTER_CONTROL, OPSTR_COMPUTER_CONTROL, "COMPUTER_CONTROL") .setDefaultMode(AppOpsManager.MODE_IGNORED) .build(), }; Loading
packages/VirtualDeviceManager/src/com/android/virtualdevicemanager/RequestComputerControlAccessFragment.java +1 −1 Original line number Diff line number Diff line Loading @@ -125,7 +125,7 @@ public class RequestComputerControlAccessFragment extends DialogFragment { private void onAlwaysAllow(View view) { AppOpsManager appOpsManager = requireActivity().getSystemService(AppOpsManager.class); appOpsManager.setMode(AppOpsManager.OP_AGENT_CONTROL, mAgentUid, mAgentPackageName, appOpsManager.setMode(AppOpsManager.OP_COMPUTER_CONTROL, mAgentUid, mAgentPackageName, AppOpsManager.MODE_ALLOWED); finish(Activity.RESULT_OK); } Loading
services/companion/java/com/android/server/companion/virtual/computercontrol/ComputerControlSessionProcessor.java +1 −1 Original line number Diff line number Diff line Loading @@ -113,7 +113,7 @@ public class ComputerControlSessionProcessor { final boolean canCreateWithoutConsent; if (Flags.computerControlConsent()) { final int isOpAllowed = mAppOpsManager.noteOpNoThrow( AppOpsManager.OP_AGENT_CONTROL, attributionSource, "create session"); AppOpsManager.OP_COMPUTER_CONTROL, attributionSource, "create session"); canCreateWithoutConsent = isOpAllowed == AppOpsManager.MODE_ALLOWED; } else { canCreateWithoutConsent = true; Loading
services/tests/servicestests/src/com/android/server/companion/virtual/computercontrol/ComputerControlSessionProcessorTest.java +3 −3 Original line number Diff line number Diff line Loading @@ -116,7 +116,7 @@ public class ComputerControlSessionProcessorTest { when(mContext.getSystemService(Context.KEYGUARD_SERVICE)).thenReturn(mKeyguardManager); when(mContext.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManager); when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_AGENT_CONTROL), any(), any())) when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_COMPUTER_CONTROL), any(), any())) .thenReturn(AppOpsManager.MODE_ALLOWED); when(mVirtualDeviceFactory.createVirtualDevice(any(), any(), any(), any())) Loading Loading @@ -180,7 +180,7 @@ public class ComputerControlSessionProcessorTest { @EnableFlags(Flags.FLAG_COMPUTER_CONTROL_CONSENT) @Test public void onSessionPending_consentGranted_sessionCreated() throws Exception { when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_AGENT_CONTROL), any(), any())) when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_COMPUTER_CONTROL), any(), any())) .thenReturn(AppOpsManager.MODE_IGNORED); mProcessor.processNewSessionRequest(AttributionSource.myAttributionSource(), Loading @@ -198,7 +198,7 @@ public class ComputerControlSessionProcessorTest { @EnableFlags(Flags.FLAG_COMPUTER_CONTROL_CONSENT) @Test public void onSessionPending_consentDenied_sessionCreationFailed() throws Exception { when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_AGENT_CONTROL), any(), any())) when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_COMPUTER_CONTROL), any(), any())) .thenReturn(AppOpsManager.MODE_IGNORED); mProcessor.processNewSessionRequest(AttributionSource.myAttributionSource(), Loading