From 75436aa90d2ea034d42fcf0d2f4dc3437eeb187d Mon Sep 17 00:00:00 2001 From: LoveSy Date: Tue, 14 Dec 2021 20:18:54 +0800 Subject: [PATCH] Lock screen unconditionally after switching user (#1482) Fix #1480 --- .../lsposed/lspd/service/LSPManagerService.java | 10 +++++++++- .../main/java/android/view/IWindowManager.java | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 hiddenapi-stubs/src/main/java/android/view/IWindowManager.java diff --git a/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java b/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java index 026952b6..8d1f539f 100644 --- a/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java +++ b/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java @@ -55,6 +55,7 @@ import android.os.SystemProperties; import android.system.ErrnoException; import android.system.Os; import android.util.Log; +import android.view.IWindowManager; import androidx.annotation.NonNull; @@ -651,7 +652,14 @@ public class LSPManagerService extends ILSPManagerService.Stub { if (currentUser == null) return -1; var parent = UserService.getProfileParent(userId); if (parent < 0) return -1; - if (currentUser.id != parent && !ActivityManagerService.switchUser(parent)) return -1; + if (currentUser.id != parent) { + if (!ActivityManagerService.switchUser(parent)) return -1; + var window = android.os.ServiceManager.getService("window"); + if (window != null) { + var wm = IWindowManager.Stub.asInterface(window); + wm.lockNow(null); + } + } } return ActivityManagerService.startActivityAsUserWithFeature("android", null, intent, intent.getType(), null, null, 0, 0, null, null, userId); } diff --git a/hiddenapi-stubs/src/main/java/android/view/IWindowManager.java b/hiddenapi-stubs/src/main/java/android/view/IWindowManager.java new file mode 100644 index 00000000..9ad26bc1 --- /dev/null +++ b/hiddenapi-stubs/src/main/java/android/view/IWindowManager.java @@ -0,0 +1,17 @@ +package android.view; + +import android.app.IActivityManager; +import android.os.Binder; +import android.os.Bundle; +import android.os.IBinder; +import android.os.IInterface; + +public interface IWindowManager extends IInterface { + void lockNow(Bundle options); + + abstract class Stub extends Binder implements IWindowManager { + public static IWindowManager asInterface(IBinder obj) { + throw new UnsupportedOperationException(); + } + } +}