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

Commit 0116d1a2 authored by Matt Pietal's avatar Matt Pietal
Browse files

Controls Activity - Always close when keyguard becomes active

The ControlsActivity can be launched over lockscreen when the user
permits, or only while unlocked. However, leaving the occluded
activity up while the screen is off can lead to potential issues, as
well as just being against user expectations for the activity.

Fixes: 197391802
Test: manual, launch device controls and power the screen off

Change-Id: I50a4d17a24c0d73f320f2637488f7ae502dddae9
parent 4881b7d6
Loading
Loading
Loading
Loading
+36 −2
Original line number Diff line number Diff line
@@ -16,6 +16,10 @@

package com.android.systemui.controls.ui

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
@@ -23,18 +27,25 @@ import android.view.WindowInsets
import android.view.WindowInsets.Type

import com.android.systemui.R
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.controls.management.ControlsAnimations
import com.android.systemui.util.LifecycleActivity
import javax.inject.Inject

/**
 * Displays Device Controls inside an activity
 * Displays Device Controls inside an activity. This activity is available to be displayed over the
 * lockscreen if the user has allowed it via
 * [android.provider.Settings.Secure.LOCKSCREEN_SHOW_CONTROLS]. This activity will be
 * destroyed on SCREEN_OFF events, due to issues with occluded activities over lockscreen as well as
 * user expectations for the activity to not continue running.
 */
class ControlsActivity @Inject constructor(
    private val uiController: ControlsUiController
    private val uiController: ControlsUiController,
    private val broadcastDispatcher: BroadcastDispatcher
) : LifecycleActivity() {

    private lateinit var parent: ViewGroup
    private lateinit var broadcastReceiver: BroadcastReceiver

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
@@ -62,6 +73,8 @@ class ControlsActivity @Inject constructor(
                WindowInsets.CONSUMED
            }
        }

        initBroadcastReceiver()
    }

    override fun onResume() {
@@ -83,4 +96,25 @@ class ControlsActivity @Inject constructor(

        uiController.hide()
    }

    override fun onDestroy() {
        super.onDestroy()

        broadcastDispatcher.unregisterReceiver(broadcastReceiver)
    }

    private fun initBroadcastReceiver() {
        broadcastReceiver = object : BroadcastReceiver() {
            override fun onReceive(context: Context, intent: Intent) {
                val action = intent.getAction()
                if (Intent.ACTION_SCREEN_OFF.equals(action)) {
                    finish()
                }
            }
        }

        val filter = IntentFilter()
        filter.addAction(Intent.ACTION_SCREEN_OFF)
        broadcastDispatcher.registerReceiver(broadcastReceiver, filter)
    }
}