diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 049a270728354..019b0fb84e6f4 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -213,6 +213,8 @@
Taking screenshots isn\'t allowed by the app or
your organization
+
+ Taking screenshots is blocked by your IT admin
Edit
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
index 924351df31176..7f3758e208dbf 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
@@ -27,6 +27,7 @@ import static com.android.systemui.screenshot.LogConfig.logTag;
import android.annotation.MainThread;
import android.app.Service;
+import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -42,9 +43,11 @@ import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
+import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;
import android.view.WindowManager;
+import android.widget.Toast;
import androidx.annotation.NonNull;
@@ -62,9 +65,11 @@ public class TakeScreenshotService extends Service {
private ScreenshotController mScreenshot;
private final UserManager mUserManager;
+ private final DevicePolicyManager mDevicePolicyManager;
private final UiEventLogger mUiEventLogger;
private final ScreenshotNotificationsController mNotificationsController;
private final Handler mHandler;
+ private final Context mContext;
private final BroadcastReceiver mCloseSystemDialogs = new BroadcastReceiver() {
@Override
@@ -91,16 +96,18 @@ public class TakeScreenshotService extends Service {
@Inject
public TakeScreenshotService(ScreenshotController screenshotController, UserManager userManager,
- UiEventLogger uiEventLogger,
- ScreenshotNotificationsController notificationsController) {
+ DevicePolicyManager devicePolicyManager, UiEventLogger uiEventLogger,
+ ScreenshotNotificationsController notificationsController, Context context) {
if (DEBUG_SERVICE) {
Log.d(TAG, "new " + this);
}
mHandler = new Handler(Looper.getMainLooper(), this::handleMessage);
mScreenshot = screenshotController;
mUserManager = userManager;
+ mDevicePolicyManager = devicePolicyManager;
mUiEventLogger = uiEventLogger;
mNotificationsController = notificationsController;
+ mContext = context;
}
@Override
@@ -182,6 +189,14 @@ public class TakeScreenshotService extends Service {
requestCallback.reportError();
return true;
}
+ if(mDevicePolicyManager.getScreenCaptureDisabled(null, UserHandle.USER_ALL)) {
+ Log.w(TAG, "Skipping screenshot because an IT admin has disabled "
+ + "screenshots on the device");
+ Toast.makeText(mContext, R.string.screenshot_blocked_by_admin,
+ Toast.LENGTH_SHORT).show();
+ requestCallback.reportError();
+ return true;
+ }
ScreenshotHelper.ScreenshotRequest screenshotRequest =
(ScreenshotHelper.ScreenshotRequest) msg.obj;