Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18e91aac authored by Kevin Chyn's avatar Kevin Chyn
Browse files

Use a protected receiver for the keyguard delayed actions

Fixes: 33281221

Test: keyguard locks after the timeout
Test: with test app using code from comment #1, see the following logs
      BroadcastQueue: Permission Denial: broadcasting Intent { act=com.android.internal.policy.impl.PhoneWindowManager.DELAYED_KEYGUARD

Change-Id: I8b6abbc63965a5f0b24a82949ba1925f420a1454
parent 9cb67590
Loading
Loading
Loading
Loading
+20 −4
Original line number Diff line number Diff line
@@ -145,6 +145,8 @@ public class KeyguardViewMediator extends SystemUI {
    private static final String DELAYED_LOCK_PROFILE_ACTION =
            "com.android.internal.policy.impl.PhoneWindowManager.DELAYED_LOCK";

    private static final String SYSTEMUI_PERMISSION = "com.android.systemui.permission.SELF";

    // used for handler messages
    private static final int SHOW = 1;
    private static final int HIDE = 2;
@@ -688,11 +690,15 @@ public class KeyguardViewMediator extends SystemUI {
        mShowKeyguardWakeLock.setReferenceCounted(false);

        IntentFilter filter = new IntentFilter();
        filter.addAction(DELAYED_KEYGUARD_ACTION);
        filter.addAction(DELAYED_LOCK_PROFILE_ACTION);
        filter.addAction(Intent.ACTION_SHUTDOWN);
        mContext.registerReceiver(mBroadcastReceiver, filter);

        final IntentFilter delayedActionFilter = new IntentFilter();
        delayedActionFilter.addAction(DELAYED_KEYGUARD_ACTION);
        delayedActionFilter.addAction(DELAYED_LOCK_PROFILE_ACTION);
        mContext.registerReceiver(mDelayedLockBroadcastReceiver, delayedActionFilter,
                SYSTEMUI_PERMISSION, null /* scheduler */);

        mKeyguardDisplayManager = new KeyguardDisplayManager(mContext, mViewMediatorCallback);

        mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
@@ -1456,7 +1462,10 @@ public class KeyguardViewMediator extends SystemUI {
        }
    }

    private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    /**
     * This broadcast receiver should be registered with the SystemUI permission.
     */
    private final BroadcastReceiver mDelayedLockBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (DELAYED_KEYGUARD_ACTION.equals(intent.getAction())) {
@@ -1478,7 +1487,14 @@ public class KeyguardViewMediator extends SystemUI {
                        }
                    }
                }
            } else if (Intent.ACTION_SHUTDOWN.equals(intent.getAction())) {
            }
        }
    };

    private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (Intent.ACTION_SHUTDOWN.equals(intent.getAction())) {
                synchronized (KeyguardViewMediator.this){
                    mShuttingDown = true;
                }