Merge "Enable Region Sampling for Lockscreen Smartspace" into tm-qpr-dev
This commit is contained in:
@@ -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() {
|
||||||
|
|||||||
@@ -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)
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user