Merge "Remove recommendations when setting is disabled" into sc-dev am: c1d7a61b2f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14850802 Change-Id: Ie19dd54675122d81b0e2d1e82769be2ba922c7a8
This commit is contained in:
@@ -39,6 +39,7 @@ import android.media.session.MediaSession
|
||||
import android.net.Uri
|
||||
import android.os.Parcelable
|
||||
import android.os.UserHandle
|
||||
import android.provider.Settings
|
||||
import android.service.notification.StatusBarNotification
|
||||
import android.text.TextUtils
|
||||
import android.util.Log
|
||||
@@ -54,6 +55,7 @@ import com.android.systemui.plugins.ActivityStarter
|
||||
import com.android.systemui.plugins.BcSmartspaceDataPlugin
|
||||
import com.android.systemui.statusbar.NotificationMediaManager.isPlayingState
|
||||
import com.android.systemui.statusbar.notification.row.HybridGroupManager
|
||||
import com.android.systemui.tuner.TunerService
|
||||
import com.android.systemui.util.Assert
|
||||
import com.android.systemui.util.Utils
|
||||
import com.android.systemui.util.concurrency.DelayableExecutor
|
||||
@@ -114,7 +116,8 @@ class MediaDataManager(
|
||||
private val smartspaceMediaDataProvider: SmartspaceMediaDataProvider,
|
||||
private var useMediaResumption: Boolean,
|
||||
private val useQsMediaPlayer: Boolean,
|
||||
private val systemClock: SystemClock
|
||||
private val systemClock: SystemClock,
|
||||
private val tunerService: TunerService
|
||||
) : Dumpable, BcSmartspaceDataPlugin.SmartspaceTargetListener {
|
||||
|
||||
companion object {
|
||||
@@ -147,6 +150,7 @@ class MediaDataManager(
|
||||
// There should ONLY be at most one Smartspace media recommendation.
|
||||
private var smartspaceMediaData: SmartspaceMediaData = EMPTY_SMARTSPACE_MEDIA_DATA
|
||||
private var smartspaceSession: SmartspaceSession? = null
|
||||
private var allowMediaRecommendations = Utils.allowMediaRecommendations(context)
|
||||
|
||||
@Inject
|
||||
constructor(
|
||||
@@ -164,12 +168,13 @@ class MediaDataManager(
|
||||
mediaDataFilter: MediaDataFilter,
|
||||
activityStarter: ActivityStarter,
|
||||
smartspaceMediaDataProvider: SmartspaceMediaDataProvider,
|
||||
clock: SystemClock
|
||||
clock: SystemClock,
|
||||
tunerService: TunerService
|
||||
) : this(context, backgroundExecutor, foregroundExecutor, mediaControllerFactory,
|
||||
broadcastDispatcher, dumpManager, mediaTimeoutListener, mediaResumeListener,
|
||||
mediaSessionBasedFilter, mediaDeviceManager, mediaDataCombineLatest, mediaDataFilter,
|
||||
activityStarter, smartspaceMediaDataProvider, Utils.useMediaResumption(context),
|
||||
Utils.useQsMediaPlayer(context), clock)
|
||||
Utils.useQsMediaPlayer(context), clock, tunerService)
|
||||
|
||||
private val appChangeReceiver = object : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
@@ -243,6 +248,14 @@ class MediaDataManager(
|
||||
})
|
||||
}
|
||||
smartspaceSession?.let { it.requestSmartspaceUpdate() }
|
||||
tunerService.addTunable(object : TunerService.Tunable {
|
||||
override fun onTuningChanged(key: String?, newValue: String?) {
|
||||
allowMediaRecommendations = Utils.allowMediaRecommendations(context)
|
||||
if (!allowMediaRecommendations) {
|
||||
dismissSmartspaceRecommendation(key = smartspaceMediaData.targetId, delay = 0L)
|
||||
}
|
||||
}
|
||||
}, Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION)
|
||||
}
|
||||
|
||||
fun destroy() {
|
||||
@@ -695,8 +708,7 @@ class MediaDataManager(
|
||||
}
|
||||
|
||||
override fun onSmartspaceTargetsUpdated(targets: List<Parcelable>) {
|
||||
if (!Utils.allowMediaRecommendations(context)) {
|
||||
Log.d(TAG, "Smartspace recommendation is disabled in Settings.")
|
||||
if (!allowMediaRecommendations) {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,8 @@ public class TunerServiceImpl extends TunerService {
|
||||
private static final String[] RESET_EXCEPTION_LIST = new String[] {
|
||||
QSTileHost.TILES_SETTING,
|
||||
Settings.Secure.DOZE_ALWAYS_ON,
|
||||
Settings.Secure.MEDIA_CONTROLS_RESUME
|
||||
Settings.Secure.MEDIA_CONTROLS_RESUME,
|
||||
Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION
|
||||
};
|
||||
|
||||
private final Observer mObserver = new Observer();
|
||||
|
||||
@@ -9,8 +9,8 @@ import android.media.MediaDescription
|
||||
import android.media.MediaMetadata
|
||||
import android.media.session.MediaController
|
||||
import android.media.session.MediaSession
|
||||
import android.provider.Settings
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.service.notification.StatusBarNotification
|
||||
import android.testing.AndroidTestingRunner
|
||||
import android.testing.TestableLooper.RunWithLooper
|
||||
@@ -20,6 +20,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher
|
||||
import com.android.systemui.dump.DumpManager
|
||||
import com.android.systemui.plugins.ActivityStarter
|
||||
import com.android.systemui.statusbar.SbnBuilder
|
||||
import com.android.systemui.tuner.TunerService
|
||||
import com.android.systemui.util.concurrency.FakeExecutor
|
||||
import com.android.systemui.util.mockito.capture
|
||||
import com.android.systemui.util.mockito.eq
|
||||
@@ -86,6 +87,8 @@ class MediaDataManagerTest : SysuiTestCase() {
|
||||
lateinit var mediaNotification: StatusBarNotification
|
||||
@Captor lateinit var mediaDataCaptor: ArgumentCaptor<MediaData>
|
||||
private val clock = FakeSystemClock()
|
||||
@Mock private lateinit var tunerService: TunerService
|
||||
@Captor lateinit var tunableCaptor: ArgumentCaptor<TunerService.Tunable>
|
||||
|
||||
private val originalSmartspaceSetting = Settings.Secure.getInt(context.contentResolver,
|
||||
Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION, 1)
|
||||
@@ -114,8 +117,11 @@ class MediaDataManagerTest : SysuiTestCase() {
|
||||
smartspaceMediaDataProvider = smartspaceMediaDataProvider,
|
||||
useMediaResumption = true,
|
||||
useQsMediaPlayer = true,
|
||||
systemClock = clock
|
||||
systemClock = clock,
|
||||
tunerService = tunerService
|
||||
)
|
||||
verify(tunerService).addTunable(capture(tunableCaptor),
|
||||
eq(Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION))
|
||||
session = MediaSession(context, "MediaDataManagerTestSession")
|
||||
mediaNotification = SbnBuilder().run {
|
||||
setPkg(PACKAGE_NAME)
|
||||
@@ -364,6 +370,9 @@ class MediaDataManagerTest : SysuiTestCase() {
|
||||
fun testOnSmartspaceMediaDataLoaded_hasNoneMediaTarget_callsRemoveListener() {
|
||||
smartspaceMediaDataProvider.onTargetsAvailable(listOf(mediaSmartspaceTarget))
|
||||
smartspaceMediaDataProvider.onTargetsAvailable(listOf())
|
||||
foregroundExecutor.advanceClockToLast()
|
||||
foregroundExecutor.runAllReady()
|
||||
|
||||
verify(listener).onSmartspaceMediaDataRemoved(eq(KEY_MEDIA_SMARTSPACE), eq(false))
|
||||
}
|
||||
|
||||
@@ -372,6 +381,8 @@ class MediaDataManagerTest : SysuiTestCase() {
|
||||
// WHEN media recommendation setting is off
|
||||
Settings.Secure.putInt(context.contentResolver,
|
||||
Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION, 0)
|
||||
tunableCaptor.value.onTuningChanged(Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION, "0")
|
||||
|
||||
smartspaceMediaDataProvider.onTargetsAvailable(listOf(mediaSmartspaceTarget))
|
||||
|
||||
// THEN smartspace signal is ignored
|
||||
@@ -379,6 +390,24 @@ class MediaDataManagerTest : SysuiTestCase() {
|
||||
.onSmartspaceMediaDataLoaded(anyObject(), anyObject(), anyBoolean())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testMediaRecommendationDisabled_removesSmartspaceData() {
|
||||
// GIVEN a media recommendation card is present
|
||||
smartspaceMediaDataProvider.onTargetsAvailable(listOf(mediaSmartspaceTarget))
|
||||
verify(listener).onSmartspaceMediaDataLoaded(eq(KEY_MEDIA_SMARTSPACE), anyObject(),
|
||||
anyBoolean())
|
||||
|
||||
// WHEN the media recommendation setting is turned off
|
||||
Settings.Secure.putInt(context.contentResolver,
|
||||
Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION, 0)
|
||||
tunableCaptor.value.onTuningChanged(Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION, "0")
|
||||
|
||||
// THEN listeners are notified
|
||||
foregroundExecutor.advanceClockToLast()
|
||||
foregroundExecutor.runAllReady()
|
||||
verify(listener).onSmartspaceMediaDataRemoved(eq(KEY_MEDIA_SMARTSPACE), eq(true))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testOnMediaDataChanged_updatesLastActiveTime() {
|
||||
val currentTime = clock.elapsedRealtime()
|
||||
|
||||
Reference in New Issue
Block a user