Merge "Enable Region Sampling for Lockscreen Smartspace" into tm-qpr-dev

This commit is contained in:
Grace Han
2022-08-23 21:16:59 +00:00
committed by Android (Google) Code Review
2 changed files with 72 additions and 18 deletions

View File

@@ -31,11 +31,13 @@ import android.os.UserHandle
import android.provider.Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS import android.provider.Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS
import android.provider.Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS import android.provider.Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS
import android.util.Log import android.util.Log
import android.view.ContextThemeWrapper
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import com.android.settingslib.Utils import com.android.settingslib.Utils
import com.android.systemui.R import com.android.systemui.R
import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags import com.android.systemui.flags.Flags
@@ -46,6 +48,7 @@ import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceView
import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.FalsingManager
import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.settings.UserTracker import com.android.systemui.settings.UserTracker
import com.android.systemui.shared.regionsampling.RegionSamplingInstance
import com.android.systemui.statusbar.phone.KeyguardBypassController import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.statusbar.policy.DeviceProvisionedController
@@ -74,6 +77,7 @@ class LockscreenSmartspaceController @Inject constructor(
private val bypassController: KeyguardBypassController, private val bypassController: KeyguardBypassController,
private val execution: Execution, private val execution: Execution,
@Main private val uiExecutor: Executor, @Main private val uiExecutor: Executor,
@Background private val bgExecutor: Executor,
@Main private val handler: Handler, @Main private val handler: Handler,
optionalPlugin: Optional<BcSmartspaceDataPlugin> optionalPlugin: Optional<BcSmartspaceDataPlugin>
) { ) {
@@ -86,15 +90,36 @@ class LockscreenSmartspaceController @Inject constructor(
// Smartspace can be used on multiple displays, such as when the user casts their screen // Smartspace can be used on multiple displays, such as when the user casts their screen
private var smartspaceViews = mutableSetOf<SmartspaceView>() private var smartspaceViews = mutableSetOf<SmartspaceView>()
private var regionSamplingInstances =
mutableMapOf<SmartspaceView, RegionSamplingInstance>()
private val regionSamplingEnabled =
featureFlags.isEnabled(Flags.REGION_SAMPLING)
private var showNotifications = false private var showNotifications = false
private var showSensitiveContentForCurrentUser = false private var showSensitiveContentForCurrentUser = false
private var showSensitiveContentForManagedUser = false private var showSensitiveContentForManagedUser = false
private var managedUserHandle: UserHandle? = null private var managedUserHandle: UserHandle? = null
private val updateFun = object : RegionSamplingInstance.UpdateColorCallback {
override fun updateColors() {
updateTextColorFromRegionSampler()
}
}
var stateChangeListener = object : View.OnAttachStateChangeListener { var stateChangeListener = object : View.OnAttachStateChangeListener {
override fun onViewAttachedToWindow(v: View) { override fun onViewAttachedToWindow(v: View) {
smartspaceViews.add(v as SmartspaceView) smartspaceViews.add(v as SmartspaceView)
var regionSamplingInstance = RegionSamplingInstance(
v,
uiExecutor,
bgExecutor,
regionSamplingEnabled,
updateFun
)
regionSamplingInstance.startRegionSampler()
regionSamplingInstances.put(v, regionSamplingInstance)
connectSession() connectSession()
updateTextColorFromWallpaper() updateTextColorFromWallpaper()
@@ -104,6 +129,10 @@ class LockscreenSmartspaceController @Inject constructor(
override fun onViewDetachedFromWindow(v: View) { override fun onViewDetachedFromWindow(v: View) {
smartspaceViews.remove(v as SmartspaceView) smartspaceViews.remove(v as SmartspaceView)
var regionSamplingInstance = regionSamplingInstances.getValue(v)
regionSamplingInstance.stopRegionSampler()
regionSamplingInstances.remove(v)
if (smartspaceViews.isEmpty()) { if (smartspaceViews.isEmpty()) {
disconnect() disconnect()
} }
@@ -332,9 +361,29 @@ class LockscreenSmartspaceController @Inject constructor(
} }
} }
private fun updateTextColorFromRegionSampler() {
smartspaceViews.forEach {
val isRegionDark = regionSamplingInstances.getValue(it).currentRegionDarkness()
val themeID = if (isRegionDark.isDark) {
R.style.Theme_SystemUI
} else {
R.style.Theme_SystemUI_LightWallpaper
}
val themedContext = ContextThemeWrapper(context, themeID)
val wallpaperTextColor =
Utils.getColorAttrDefaultColor(themedContext, R.attr.wallpaperTextColor)
it.setPrimaryTextColor(wallpaperTextColor)
}
}
private fun updateTextColorFromWallpaper() { private fun updateTextColorFromWallpaper() {
val wallpaperTextColor = Utils.getColorAttrDefaultColor(context, R.attr.wallpaperTextColor) if (!regionSamplingEnabled) {
val wallpaperTextColor =
Utils.getColorAttrDefaultColor(context, R.attr.wallpaperTextColor)
smartspaceViews.forEach { it.setPrimaryTextColor(wallpaperTextColor) } smartspaceViews.forEach { it.setPrimaryTextColor(wallpaperTextColor) }
} else {
updateTextColorFromRegionSampler()
}
} }
private fun reloadSmartspace() { private fun reloadSmartspace() {

View File

@@ -56,6 +56,7 @@ import com.android.systemui.util.mockito.eq
import com.android.systemui.util.settings.SecureSettings import com.android.systemui.util.settings.SecureSettings
import com.android.systemui.util.time.FakeSystemClock import com.android.systemui.util.time.FakeSystemClock
import java.util.Optional import java.util.Optional
import java.util.concurrent.Executor
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.mockito.ArgumentCaptor import org.mockito.ArgumentCaptor
@@ -104,6 +105,9 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
@Mock @Mock
private lateinit var deviceProvisionedController: DeviceProvisionedController private lateinit var deviceProvisionedController: DeviceProvisionedController
@Mock
private lateinit var bgExecutor: Executor
@Mock @Mock
private lateinit var handler: Handler private lateinit var handler: Handler
@@ -203,6 +207,7 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
keyguardBypassController, keyguardBypassController,
execution, execution,
executor, executor,
bgExecutor,
handler, handler,
Optional.of(plugin) Optional.of(plugin)
) )