Ask pin for shutdown/reboot on secure lockscreen

Based on: https://github.com/ezio84/abc_frameworks_base/commit/62537d0ea76331fe838f25732fbe38c69eb0904e

@neobuddy89:
* Code clean up, optimization and disabled by default.
* Adapted for Android 11

abc 11: adapt to the new advanced reboot code, remove settings part

Change-Id: I4bf551c47a64324db462ee977fd9d1e399f0d26c
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index 5184214..1f0f42b 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -614,7 +614,7 @@
                 RESTART_RECOVERY_BUTTON,
                 com.android.systemui.R.drawable.ic_restart_recovery,
                 com.android.systemui.R.string.global_action_restart_recovery,
-                mWindowManagerFuncs, mHandler) {
+                mWindowManagerFuncs, mHandler, mKeyguardStateController, mActivityStarter) {
 
             public boolean showDuringKeyguard() {
                 return true;
@@ -629,7 +629,7 @@
                 RESTART_BOOTLOADER_BUTTON,
                 com.android.systemui.R.drawable.ic_restart_bootloader,
                 com.android.systemui.R.string.global_action_restart_bootloader,
-                mWindowManagerFuncs, mHandler) {
+                mWindowManagerFuncs, mHandler, mKeyguardStateController, mActivityStarter) {
 
             public boolean showDuringKeyguard() {
                 return true;
@@ -644,7 +644,7 @@
                 RESTART_UI_BUTTON,
                 com.android.systemui.R.drawable.ic_restart_ui,
                 com.android.systemui.R.string.global_action_restart_ui,
-                mWindowManagerFuncs, mHandler) {
+                mWindowManagerFuncs, mHandler, mKeyguardStateController, mActivityStarter) {
 
             public boolean showDuringKeyguard() {
                 return true;
@@ -842,6 +842,18 @@
         return mWalletPlugin.onPanelShown(this, !mKeyguardStateController.isUnlocked());
     }
 
+    private boolean rebootAction(boolean safeMode) {
+        if (mKeyguardStateController.isMethodSecure() && mKeyguardStateController.isShowing()) {
+              mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
+                mWindowManagerFuncs.reboot(safeMode);
+            });
+            return true;
+        } else {
+            mWindowManagerFuncs.reboot(safeMode);
+            return true;
+        }
+    }
+
     /**
      * Implements {@link GlobalActionsPanelPlugin.Callbacks#dismissGlobalActionsMenu()}, which is
      * called when the quick access wallet requests dismissal.
@@ -896,7 +908,7 @@
         @Override
         public boolean onLongPress() {
             if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) {
-                mWindowManagerFuncs.reboot(true);
+                rebootAction(true);
                 return true;
             }
             return false;
@@ -915,7 +927,13 @@
         @Override
         public void onPress() {
             // shutdown by making sure radio and power are handled accordingly.
-            mWindowManagerFuncs.shutdown();
+            if (mKeyguardStateController.isMethodSecure() && mKeyguardStateController.isShowing()) {
+                  mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
+                    mWindowManagerFuncs.shutdown();
+                });
+            } else {
+                mWindowManagerFuncs.shutdown();
+            }
         }
     }
 
@@ -1008,7 +1026,7 @@
         @Override
         public boolean onLongPress() {
             if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) {
-                mWindowManagerFuncs.reboot(true);
+                rebootAction(true);
                 return true;
             }
             return false;
@@ -1026,7 +1044,7 @@
 
         @Override
         public void onPress() {
-            mWindowManagerFuncs.reboot(false);
+            rebootAction(false);
         }
     }
 
@@ -1952,18 +1970,24 @@
         protected Handler mRefresh;
         protected GlobalActionsManager mWmFuncs;
         private Context mContext;
+        private KeyguardStateController mKeyguardStateController;
+        private ActivityStarter mActivityStarter;
 
         public AdvancedAction(
                 int actionType,
                 int iconResid,
                 int messageResid,
                 GlobalActionsManager funcs,
-                Handler handler) {
+                Handler handler,
+                KeyguardStateController ksc,
+                ActivityStarter as) {
             mActionType = actionType;
             mIconResid = iconResid;
             mMessageResId = messageResid;
             mRefresh = handler;
             mWmFuncs = funcs;
+            mKeyguardStateController = ksc;
+            mActivityStarter = as;
         }
 
         @Override
@@ -1987,7 +2011,13 @@
 
         @Override
         public final void onPress() {
-            triggerAction(mActionType, mRefresh, mWmFuncs, mContext);
+            if (mKeyguardStateController.isMethodSecure() && mKeyguardStateController.isShowing()) {
+                  mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
+                    triggerAction(mActionType, mRefresh, mWmFuncs, mContext);
+                });
+            } else {
+                triggerAction(mActionType, mRefresh, mWmFuncs, mContext);
+            }
         }
 
         @Override