diff options
| author | 2021-06-16 21:26:45 +0000 | |
|---|---|---|
| committer | 2021-06-16 21:26:45 +0000 | |
| commit | c1d7a61b2f5170a87d6524c47b7c4b4ade404964 (patch) | |
| tree | b0dcb555fff92c0f1f7b505d1d318acc8d15ec1d | |
| parent | c0b53c93a2a216bce635f0f31394546706790e83 (diff) | |
| parent | c3793a5ada21d3fe76626e2e39ff6b62e0976b1e (diff) | |
Merge "Remove recommendations when setting is disabled" into sc-dev
3 files changed, 50 insertions, 8 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt index 5b1e039ad0f8..28d336ea18d5 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt @@ -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 } diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java index 26f4a2b9d2b2..d97815f92964 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java @@ -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(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaDataManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaDataManagerTest.kt index 15cfee828293..3128db423a24 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaDataManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaDataManagerTest.kt @@ -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 @@ -380,6 +391,24 @@ class MediaDataManagerTest : SysuiTestCase() { } @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() mediaDataManager.onNotificationAdded(KEY, mediaNotification) |