Merge "Update smart space views whenever the keyguard bypass state changes." into tm-qpr-dev
This commit is contained in:
@@ -104,6 +104,11 @@ public interface BcSmartspaceDataPlugin extends Plugin {
|
||||
*/
|
||||
void setDozeAmount(float amount);
|
||||
|
||||
/**
|
||||
* Set the current keyguard bypass enabled status.
|
||||
*/
|
||||
default void setKeyguardBypassEnabled(boolean enabled) {}
|
||||
|
||||
/**
|
||||
* Overrides how Intents/PendingIntents gets launched. Mostly to support auth from
|
||||
* the lockscreen.
|
||||
|
||||
@@ -37,6 +37,8 @@ import com.android.settingslib.Utils
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.dagger.qualifiers.Main
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
import com.android.systemui.plugins.ActivityStarter
|
||||
import com.android.systemui.plugins.BcSmartspaceDataPlugin
|
||||
import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceTargetListener
|
||||
@@ -44,13 +46,11 @@ import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceView
|
||||
import com.android.systemui.plugins.FalsingManager
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
||||
import com.android.systemui.settings.UserTracker
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController
|
||||
import com.android.systemui.util.concurrency.Execution
|
||||
import com.android.systemui.util.settings.SecureSettings
|
||||
import java.lang.RuntimeException
|
||||
import java.util.Optional
|
||||
import java.util.concurrent.Executor
|
||||
import javax.inject.Inject
|
||||
@@ -71,6 +71,7 @@ class LockscreenSmartspaceController @Inject constructor(
|
||||
private val configurationController: ConfigurationController,
|
||||
private val statusBarStateController: StatusBarStateController,
|
||||
private val deviceProvisionedController: DeviceProvisionedController,
|
||||
private val bypassController: KeyguardBypassController,
|
||||
private val execution: Execution,
|
||||
@Main private val uiExecutor: Executor,
|
||||
@Main private val handler: Handler,
|
||||
@@ -154,6 +155,13 @@ class LockscreenSmartspaceController @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private val bypassStateChangedListener =
|
||||
object : KeyguardBypassController.OnBypassStateChangedListener {
|
||||
override fun onBypassStateChanged(isEnabled: Boolean) {
|
||||
updateBypassEnabled()
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
deviceProvisionedController.addCallback(deviceProvisionedListener)
|
||||
}
|
||||
@@ -164,6 +172,11 @@ class LockscreenSmartspaceController @Inject constructor(
|
||||
return featureFlags.isEnabled(Flags.SMARTSPACE) && plugin != null
|
||||
}
|
||||
|
||||
private fun updateBypassEnabled() {
|
||||
val bypassEnabled = bypassController.bypassEnabled
|
||||
smartspaceViews.forEach { it.setKeyguardBypassEnabled(bypassEnabled) }
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs the smartspace view and connects it to the smartspace service.
|
||||
*/
|
||||
@@ -211,6 +224,7 @@ class LockscreenSmartspaceController @Inject constructor(
|
||||
}
|
||||
})
|
||||
ssView.setFalsingManager(falsingManager)
|
||||
ssView.setKeyguardBypassEnabled(bypassController.bypassEnabled)
|
||||
return (ssView as View).apply { addOnAttachStateChangeListener(stateChangeListener) }
|
||||
}
|
||||
|
||||
@@ -248,11 +262,13 @@ class LockscreenSmartspaceController @Inject constructor(
|
||||
)
|
||||
configurationController.addCallback(configChangeListener)
|
||||
statusBarStateController.addCallback(statusBarStateListener)
|
||||
bypassController.registerOnBypassStateChangedListener(bypassStateChangedListener)
|
||||
|
||||
plugin.registerSmartspaceEventNotifier {
|
||||
e -> session?.notifySmartspaceEvent(e)
|
||||
}
|
||||
|
||||
updateBypassEnabled()
|
||||
reloadSmartspace()
|
||||
}
|
||||
|
||||
@@ -276,6 +292,7 @@ class LockscreenSmartspaceController @Inject constructor(
|
||||
contentResolver.unregisterContentObserver(settingsObserver)
|
||||
configurationController.removeCallback(configChangeListener)
|
||||
statusBarStateController.removeCallback(statusBarStateListener)
|
||||
bypassController.unregisterOnBypassStateChangedListener(bypassStateChangedListener)
|
||||
session = null
|
||||
|
||||
plugin?.registerSmartspaceEventNotifier(null)
|
||||
|
||||
@@ -33,6 +33,8 @@ import android.view.View
|
||||
import android.widget.FrameLayout
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
import com.android.systemui.plugins.ActivityStarter
|
||||
import com.android.systemui.plugins.BcSmartspaceDataPlugin
|
||||
import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceTargetListener
|
||||
@@ -41,8 +43,7 @@ import com.android.systemui.plugins.FalsingManager
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener
|
||||
import com.android.systemui.settings.UserTracker
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController
|
||||
@@ -54,20 +55,20 @@ import com.android.systemui.util.mockito.capture
|
||||
import com.android.systemui.util.mockito.eq
|
||||
import com.android.systemui.util.settings.SecureSettings
|
||||
import com.android.systemui.util.time.FakeSystemClock
|
||||
import java.util.Optional
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.mockito.ArgumentCaptor
|
||||
import org.mockito.Captor
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.`when`
|
||||
import org.mockito.Mockito.anyInt
|
||||
import org.mockito.Mockito.clearInvocations
|
||||
import org.mockito.Mockito.mock
|
||||
import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.spy
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.Mockito.`when`
|
||||
import org.mockito.MockitoAnnotations
|
||||
import java.util.Optional
|
||||
|
||||
@SmallTest
|
||||
class LockscreenSmartspaceControllerTest : SysuiTestCase() {
|
||||
@@ -81,36 +82,56 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
|
||||
private lateinit var activityStarter: ActivityStarter
|
||||
@Mock
|
||||
private lateinit var falsingManager: FalsingManager
|
||||
|
||||
@Mock
|
||||
private lateinit var secureSettings: SecureSettings
|
||||
|
||||
@Mock
|
||||
private lateinit var userTracker: UserTracker
|
||||
|
||||
@Mock
|
||||
private lateinit var contentResolver: ContentResolver
|
||||
|
||||
@Mock
|
||||
private lateinit var configurationController: ConfigurationController
|
||||
|
||||
@Mock
|
||||
private lateinit var statusBarStateController: StatusBarStateController
|
||||
|
||||
@Mock
|
||||
private lateinit var keyguardBypassController: KeyguardBypassController
|
||||
|
||||
@Mock
|
||||
private lateinit var deviceProvisionedController: DeviceProvisionedController
|
||||
|
||||
@Mock
|
||||
private lateinit var handler: Handler
|
||||
|
||||
@Mock
|
||||
private lateinit var plugin: BcSmartspaceDataPlugin
|
||||
|
||||
@Mock
|
||||
private lateinit var controllerListener: SmartspaceTargetListener
|
||||
|
||||
@Captor
|
||||
private lateinit var sessionListenerCaptor: ArgumentCaptor<OnTargetsAvailableListener>
|
||||
|
||||
@Captor
|
||||
private lateinit var userTrackerCaptor: ArgumentCaptor<UserTracker.Callback>
|
||||
|
||||
@Captor
|
||||
private lateinit var settingsObserverCaptor: ArgumentCaptor<ContentObserver>
|
||||
|
||||
@Captor
|
||||
private lateinit var configChangeListenerCaptor: ArgumentCaptor<ConfigurationListener>
|
||||
|
||||
@Captor
|
||||
private lateinit var statusBarStateListenerCaptor: ArgumentCaptor<StateListener>
|
||||
|
||||
@Captor
|
||||
private lateinit var bypassStateChangedListenerCaptor:
|
||||
ArgumentCaptor<KeyguardBypassController.OnBypassStateChangedListener>
|
||||
|
||||
@Captor
|
||||
private lateinit var deviceProvisionedCaptor: ArgumentCaptor<DeviceProvisionedListener>
|
||||
|
||||
@@ -119,6 +140,8 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
|
||||
private lateinit var settingsObserver: ContentObserver
|
||||
private lateinit var configChangeListener: ConfigurationListener
|
||||
private lateinit var statusBarStateListener: StateListener
|
||||
private lateinit var bypassStateChangeListener:
|
||||
KeyguardBypassController.OnBypassStateChangedListener
|
||||
private lateinit var deviceProvisionedListener: DeviceProvisionedListener
|
||||
|
||||
private lateinit var smartspaceView: SmartspaceView
|
||||
@@ -177,11 +200,12 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
|
||||
configurationController,
|
||||
statusBarStateController,
|
||||
deviceProvisionedController,
|
||||
keyguardBypassController,
|
||||
execution,
|
||||
executor,
|
||||
handler,
|
||||
Optional.of(plugin)
|
||||
)
|
||||
)
|
||||
|
||||
verify(deviceProvisionedController).addCallback(capture(deviceProvisionedCaptor))
|
||||
deviceProvisionedListener = deviceProvisionedCaptor.value
|
||||
@@ -309,6 +333,19 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
|
||||
verify(smartspaceView).setDozeAmount(0.7f)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testKeyguardBypassEnabledUpdatesView() {
|
||||
// GIVEN a connected smartspace session
|
||||
connectSession()
|
||||
`when`(keyguardBypassController.bypassEnabled).thenReturn(true)
|
||||
|
||||
// WHEN the doze amount changes
|
||||
bypassStateChangeListener.onBypassStateChanged(true)
|
||||
|
||||
// We pass that along to the view
|
||||
verify(smartspaceView).setKeyguardBypassEnabled(true)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSensitiveTargetsAreNotFilteredIfAllowed() {
|
||||
// GIVEN the active and managed users allow sensitive content
|
||||
@@ -457,6 +494,8 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
|
||||
verify(contentResolver).unregisterContentObserver(settingsObserver)
|
||||
verify(configurationController).removeCallback(configChangeListener)
|
||||
verify(statusBarStateController).removeCallback(statusBarStateListener)
|
||||
verify(keyguardBypassController)
|
||||
.unregisterOnBypassStateChangedListener(bypassStateChangeListener)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -477,6 +516,19 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
|
||||
verify(smartspaceView2).registerDataProvider(plugin)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testViewGetInitializedWithBypassEnabledState() {
|
||||
// GIVEN keyguard bypass is enabled.
|
||||
`when`(keyguardBypassController.bypassEnabled).thenReturn(true)
|
||||
|
||||
// WHEN the view is being built
|
||||
val view = controller.buildAndConnectView(fakeParent)
|
||||
smartspaceView = view as SmartspaceView
|
||||
|
||||
// THEN the view is initialized with the keyguard bypass enabled state.
|
||||
verify(smartspaceView).setKeyguardBypassEnabled(true)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testConnectAttemptBeforeInitializationShouldNotCreateSession() {
|
||||
// GIVEN an uninitalized smartspaceView
|
||||
@@ -517,6 +569,9 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
|
||||
|
||||
verify(statusBarStateController).addCallback(statusBarStateListenerCaptor.capture())
|
||||
statusBarStateListener = statusBarStateListenerCaptor.value
|
||||
verify(keyguardBypassController)
|
||||
.registerOnBypassStateChangedListener(capture(bypassStateChangedListenerCaptor))
|
||||
bypassStateChangeListener = bypassStateChangedListenerCaptor.value
|
||||
|
||||
verify(smartspaceSession).requestSmartspaceUpdate()
|
||||
clearInvocations(smartspaceSession)
|
||||
@@ -585,6 +640,9 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
|
||||
override fun setDozeAmount(amount: Float) {
|
||||
}
|
||||
|
||||
override fun setKeyguardBypassEnabled(enabled: Boolean) {
|
||||
}
|
||||
|
||||
override fun setIntentStarter(intentStarter: BcSmartspaceDataPlugin.IntentStarter?) {
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user