Loading src/com/android/settings/media/MediaOutputIndicatorWorker.java +20 −15 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import com.android.settingslib.bluetooth.BluetoothCallback; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; import com.android.settingslib.utils.ThreadUtils; import com.google.common.annotations.VisibleForTesting; Loading Loading @@ -81,6 +82,7 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements mContext.registerReceiver(mReceiver, intentFilter); mLocalBluetoothManager.getEventManager().registerCallback(this); ThreadUtils.postOnBackgroundThread(() -> { final MediaController controller = getActiveLocalMediaController(); if (controller == null) { mPackageName = null; Loading @@ -94,12 +96,15 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements } mLocalMediaManager.registerCallback(this); mLocalMediaManager.startScan(); }); } @Override protected void onSliceUnpinned() { if (mLocalMediaManager != null) { mLocalMediaManager.unregisterCallback(this); mLocalMediaManager.stopScan(); } if (mLocalBluetoothManager == null) { Log.e(TAG, "Bluetooth is not supported on this device"); Loading tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -103,7 +103,13 @@ public class MediaOutputIndicatorWorkerTest { @Test public void onSlicePinned_registerCallback() { mMediaOutputIndicatorWorker.mLocalMediaManager = mLocalMediaManager; initPlayback(); when(mMediaController.getPlaybackInfo()).thenReturn(mPlaybackInfo); when(mMediaController.getPlaybackState()).thenReturn(mPlaybackState); when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE_NAME); when(mLocalMediaManager.getPackageName()).thenReturn(TEST_PACKAGE_NAME); mMediaOutputIndicatorWorker.onSlicePinned(); waitForLocalMediaManagerInit(); verify(mBluetoothEventManager).registerCallback(mMediaOutputIndicatorWorker); verify(mContext).registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class)); Loading @@ -119,11 +125,14 @@ public class MediaOutputIndicatorWorkerTest { when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE_NAME); mMediaOutputIndicatorWorker.onSlicePinned(); waitForLocalMediaManagerInit(); assertThat(mMediaOutputIndicatorWorker.mLocalMediaManager.getPackageName()).matches( TEST_PACKAGE_NAME); when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE_NAME2); mMediaOutputIndicatorWorker.mLocalMediaManager = null; mMediaOutputIndicatorWorker.onSlicePinned(); waitForLocalMediaManagerInit(); assertThat(mMediaOutputIndicatorWorker.mLocalMediaManager.getPackageName()).matches( TEST_PACKAGE_NAME2); Loading @@ -134,14 +143,35 @@ public class MediaOutputIndicatorWorkerTest { mMediaControllers.clear(); mMediaOutputIndicatorWorker.onSlicePinned(); waitForLocalMediaManagerInit(); assertThat(mMediaOutputIndicatorWorker.mLocalMediaManager.getPackageName()).isNull(); } private void waitForLocalMediaManagerInit() { for (int i = 0; i < 20; i++) { if (mMediaOutputIndicatorWorker.mLocalMediaManager != null) { return; } try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } @Test public void onSliceUnpinned_unRegisterCallback() { mMediaOutputIndicatorWorker.mLocalMediaManager = mLocalMediaManager; initPlayback(); when(mMediaController.getPlaybackInfo()).thenReturn(mPlaybackInfo); when(mMediaController.getPlaybackState()).thenReturn(mPlaybackState); when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE_NAME); when(mLocalMediaManager.getPackageName()).thenReturn(TEST_PACKAGE_NAME); mMediaOutputIndicatorWorker.onSlicePinned(); waitForLocalMediaManagerInit(); mMediaOutputIndicatorWorker.onSliceUnpinned(); verify(mBluetoothEventManager).unregisterCallback(mMediaOutputIndicatorWorker); Loading @@ -153,6 +183,7 @@ public class MediaOutputIndicatorWorkerTest { @Test public void onReceive_shouldNotifyChange() { mMediaOutputIndicatorWorker.onSlicePinned(); waitForLocalMediaManagerInit(); // onSlicePinned will registerCallback() and get first callback. Callback triggers this at // the first time. verify(mResolver, times(1)).notifyChange(URI, null); Loading Loading
src/com/android/settings/media/MediaOutputIndicatorWorker.java +20 −15 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import com.android.settingslib.bluetooth.BluetoothCallback; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; import com.android.settingslib.utils.ThreadUtils; import com.google.common.annotations.VisibleForTesting; Loading Loading @@ -81,6 +82,7 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements mContext.registerReceiver(mReceiver, intentFilter); mLocalBluetoothManager.getEventManager().registerCallback(this); ThreadUtils.postOnBackgroundThread(() -> { final MediaController controller = getActiveLocalMediaController(); if (controller == null) { mPackageName = null; Loading @@ -94,12 +96,15 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements } mLocalMediaManager.registerCallback(this); mLocalMediaManager.startScan(); }); } @Override protected void onSliceUnpinned() { if (mLocalMediaManager != null) { mLocalMediaManager.unregisterCallback(this); mLocalMediaManager.stopScan(); } if (mLocalBluetoothManager == null) { Log.e(TAG, "Bluetooth is not supported on this device"); Loading
tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -103,7 +103,13 @@ public class MediaOutputIndicatorWorkerTest { @Test public void onSlicePinned_registerCallback() { mMediaOutputIndicatorWorker.mLocalMediaManager = mLocalMediaManager; initPlayback(); when(mMediaController.getPlaybackInfo()).thenReturn(mPlaybackInfo); when(mMediaController.getPlaybackState()).thenReturn(mPlaybackState); when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE_NAME); when(mLocalMediaManager.getPackageName()).thenReturn(TEST_PACKAGE_NAME); mMediaOutputIndicatorWorker.onSlicePinned(); waitForLocalMediaManagerInit(); verify(mBluetoothEventManager).registerCallback(mMediaOutputIndicatorWorker); verify(mContext).registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class)); Loading @@ -119,11 +125,14 @@ public class MediaOutputIndicatorWorkerTest { when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE_NAME); mMediaOutputIndicatorWorker.onSlicePinned(); waitForLocalMediaManagerInit(); assertThat(mMediaOutputIndicatorWorker.mLocalMediaManager.getPackageName()).matches( TEST_PACKAGE_NAME); when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE_NAME2); mMediaOutputIndicatorWorker.mLocalMediaManager = null; mMediaOutputIndicatorWorker.onSlicePinned(); waitForLocalMediaManagerInit(); assertThat(mMediaOutputIndicatorWorker.mLocalMediaManager.getPackageName()).matches( TEST_PACKAGE_NAME2); Loading @@ -134,14 +143,35 @@ public class MediaOutputIndicatorWorkerTest { mMediaControllers.clear(); mMediaOutputIndicatorWorker.onSlicePinned(); waitForLocalMediaManagerInit(); assertThat(mMediaOutputIndicatorWorker.mLocalMediaManager.getPackageName()).isNull(); } private void waitForLocalMediaManagerInit() { for (int i = 0; i < 20; i++) { if (mMediaOutputIndicatorWorker.mLocalMediaManager != null) { return; } try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } @Test public void onSliceUnpinned_unRegisterCallback() { mMediaOutputIndicatorWorker.mLocalMediaManager = mLocalMediaManager; initPlayback(); when(mMediaController.getPlaybackInfo()).thenReturn(mPlaybackInfo); when(mMediaController.getPlaybackState()).thenReturn(mPlaybackState); when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE_NAME); when(mLocalMediaManager.getPackageName()).thenReturn(TEST_PACKAGE_NAME); mMediaOutputIndicatorWorker.onSlicePinned(); waitForLocalMediaManagerInit(); mMediaOutputIndicatorWorker.onSliceUnpinned(); verify(mBluetoothEventManager).unregisterCallback(mMediaOutputIndicatorWorker); Loading @@ -153,6 +183,7 @@ public class MediaOutputIndicatorWorkerTest { @Test public void onReceive_shouldNotifyChange() { mMediaOutputIndicatorWorker.onSlicePinned(); waitForLocalMediaManagerInit(); // onSlicePinned will registerCallback() and get first callback. Callback triggers this at // the first time. verify(mResolver, times(1)).notifyChange(URI, null); Loading