Loading src/com/android/settings/media/MediaOutputIndicatorSlice.java +2 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,8 @@ public class MediaOutputIndicatorSlice implements CustomSliceable { } final IconCompat icon = IconCompat.createWithResource(mContext, com.android.internal.R.drawable.ic_settings_bluetooth); final CharSequence title = mContext.getText(R.string.media_output_title); final CharSequence title = mContext.getString(R.string.media_output_label_title, Utils.getApplicationLabel(mContext, getWorker().getPackageName())); final PendingIntent primaryActionIntent = PendingIntent.getActivity(mContext, 0 /* requestCode */, getMediaOutputSliceIntent(), 0 /* flags */); final SliceAction primarySliceAction = SliceAction.createDeeplink( Loading src/com/android/settings/media/MediaOutputIndicatorWorker.java +7 −3 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements private final Collection<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>(); private LocalBluetoothManager mLocalBluetoothManager; private String mPackageName; @VisibleForTesting LocalMediaManager mLocalMediaManager; Loading @@ -82,11 +83,10 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements if (mLocalMediaManager == null) { final MediaController controller = getActiveLocalMediaController(); String packageName = null; if (controller != null) { packageName = controller.getPackageName(); mPackageName = controller.getPackageName(); } mLocalMediaManager = new LocalMediaManager(mContext, packageName, null); mLocalMediaManager = new LocalMediaManager(mContext, mPackageName, null); } mLocalMediaManager.registerCallback(this); Loading Loading @@ -168,6 +168,10 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements return mLocalMediaManager.getCurrentConnectedDevice(); } String getPackageName() { return mPackageName; } private class DevicesChangedBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Loading src/com/android/settings/media/RemoteMediaSlice.java +5 −2 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import androidx.slice.builders.SliceAction; import com.android.settings.R; import com.android.settings.SubSettings; import com.android.settings.Utils; import com.android.settings.notification.SoundSettings; import com.android.settings.slices.CustomSliceable; import com.android.settings.slices.SliceBackgroundWorker; Loading Loading @@ -86,7 +87,6 @@ public class RemoteMediaSlice implements CustomSliceable { return listBuilder.build(); } final CharSequence castVolume = mContext.getText(R.string.remote_media_volume_option_title); final CharSequence outputTitle = mContext.getText(R.string.media_output_title); final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.ic_volume_remote); // To create an empty icon to indent the row Loading @@ -99,6 +99,8 @@ public class RemoteMediaSlice implements CustomSliceable { + maxVolume); continue; } final CharSequence outputTitle = mContext.getString(R.string.media_output_label_title, Utils.getApplicationLabel(mContext, info.getClientPackageName())); listBuilder.addInputRange(new InputRangeBuilder() .setTitleItem(icon, ListBuilder.ICON_IMAGE) .setTitle(castVolume) Loading Loading @@ -154,7 +156,8 @@ public class RemoteMediaSlice implements CustomSliceable { 0 /* requestCode */, intent, 0 /* flags */); final SliceAction primarySliceAction = SliceAction.createDeeplink( primaryActionIntent, icon, ListBuilder.ICON_IMAGE, mContext.getText(R.string.media_output_title)); mContext.getString(R.string.media_output_label_title, Utils.getApplicationLabel(mContext, packageName))); return primarySliceAction; } Loading src/com/android/settings/notification/RemoteVolumeGroupController.java +3 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.media.LocalMediaManager; Loading Loading @@ -108,7 +109,6 @@ public class RemoteVolumeGroupController extends BasePreferenceController implem mPreferenceCategory.setVisible(false); return; } final CharSequence outputTitle = mContext.getText(R.string.media_output_title); final CharSequence castVolume = mContext.getText(R.string.remote_media_volume_option_title); mPreferenceCategory.setVisible(true); Loading @@ -116,6 +116,8 @@ public class RemoteVolumeGroupController extends BasePreferenceController implem if (mPreferenceCategory.findPreference(info.getId()) != null) { continue; } final CharSequence outputTitle = mContext.getString(R.string.media_output_label_title, Utils.getApplicationLabel(mContext, info.getClientPackageName())); // Add slider final RemoteVolumeSeekBarPreference seekBarPreference = new RemoteVolumeSeekBarPreference(mContext); Loading tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java +28 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,9 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageStats; import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.media.session.MediaController; Loading Loading @@ -55,9 +58,11 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.Shadows; import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.shadows.ShadowPackageManager; import java.util.ArrayList; import java.util.List; Loading @@ -70,6 +75,7 @@ public class MediaOutputIndicatorSliceTest { private static final String TEST_DEVICE_1_NAME = "test_device_1_name"; private static final String TEST_DEVICE_2_NAME = "test_device_2_name"; private static final String TEST_PACKAGE_NAME = "com.test"; private static final String TEST_APPLICATION_LABEL = "APP Test Label"; private static MediaOutputIndicatorWorker sMediaOutputIndicatorWorker; Loading @@ -90,6 +96,10 @@ public class MediaOutputIndicatorSliceTest { private MediaOutputIndicatorSlice mMediaOutputIndicatorSlice; private AudioManager mAudioManager; private MediaSession.Token mToken; private ShadowPackageManager mShadowPackageManager; private ApplicationInfo mAppInfo; private PackageInfo mPackageInfo; private PackageStats mPackageStats; @Before public void setUp() throws Exception { Loading Loading @@ -118,8 +128,11 @@ public class MediaOutputIndicatorSliceTest { @Test public void getSlice_withConnectedDevice_verifyMetadata() { initPackage(); mShadowPackageManager.addPackage(mPackageInfo, mPackageStats); mDevices.add(mDevice1); when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices); when(sMediaOutputIndicatorWorker.getPackageName()).thenReturn(TEST_PACKAGE_NAME); doReturn(mMediaController).when(sMediaOutputIndicatorWorker) .getActiveLocalMediaController(); doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); Loading @@ -128,7 +141,9 @@ public class MediaOutputIndicatorSliceTest { final Slice mediaSlice = mMediaOutputIndicatorSlice.getSlice(); final SliceMetadata metadata = SliceMetadata.from(mContext, mediaSlice); assertThat(metadata.getTitle()).isEqualTo(mContext.getText(R.string.media_output_title)); assertThat(metadata.getTitle()).isEqualTo(mContext.getString( R.string.media_output_label_title, Utils.getApplicationLabel(mContext, TEST_PACKAGE_NAME))); assertThat(metadata.getSubtitle()).isEqualTo(TEST_DEVICE_1_NAME); assertThat(metadata.isErrorSlice()).isFalse(); } Loading Loading @@ -241,6 +256,18 @@ public class MediaOutputIndicatorSliceTest { assertThat(mMediaOutputIndicatorSlice.isVisible()).isFalse(); } private void initPackage() { mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager()); mAppInfo = new ApplicationInfo(); mAppInfo.flags = ApplicationInfo.FLAG_INSTALLED; mAppInfo.packageName = TEST_PACKAGE_NAME; mAppInfo.name = TEST_APPLICATION_LABEL; mPackageInfo = new PackageInfo(); mPackageInfo.packageName = TEST_PACKAGE_NAME; mPackageInfo.applicationInfo = mAppInfo; mPackageStats = new PackageStats(TEST_PACKAGE_NAME); } @Implements(SliceBackgroundWorker.class) public static class ShadowSliceBackgroundWorker { Loading Loading
src/com/android/settings/media/MediaOutputIndicatorSlice.java +2 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,8 @@ public class MediaOutputIndicatorSlice implements CustomSliceable { } final IconCompat icon = IconCompat.createWithResource(mContext, com.android.internal.R.drawable.ic_settings_bluetooth); final CharSequence title = mContext.getText(R.string.media_output_title); final CharSequence title = mContext.getString(R.string.media_output_label_title, Utils.getApplicationLabel(mContext, getWorker().getPackageName())); final PendingIntent primaryActionIntent = PendingIntent.getActivity(mContext, 0 /* requestCode */, getMediaOutputSliceIntent(), 0 /* flags */); final SliceAction primarySliceAction = SliceAction.createDeeplink( Loading
src/com/android/settings/media/MediaOutputIndicatorWorker.java +7 −3 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements private final Collection<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>(); private LocalBluetoothManager mLocalBluetoothManager; private String mPackageName; @VisibleForTesting LocalMediaManager mLocalMediaManager; Loading @@ -82,11 +83,10 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements if (mLocalMediaManager == null) { final MediaController controller = getActiveLocalMediaController(); String packageName = null; if (controller != null) { packageName = controller.getPackageName(); mPackageName = controller.getPackageName(); } mLocalMediaManager = new LocalMediaManager(mContext, packageName, null); mLocalMediaManager = new LocalMediaManager(mContext, mPackageName, null); } mLocalMediaManager.registerCallback(this); Loading Loading @@ -168,6 +168,10 @@ public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements return mLocalMediaManager.getCurrentConnectedDevice(); } String getPackageName() { return mPackageName; } private class DevicesChangedBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Loading
src/com/android/settings/media/RemoteMediaSlice.java +5 −2 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import androidx.slice.builders.SliceAction; import com.android.settings.R; import com.android.settings.SubSettings; import com.android.settings.Utils; import com.android.settings.notification.SoundSettings; import com.android.settings.slices.CustomSliceable; import com.android.settings.slices.SliceBackgroundWorker; Loading Loading @@ -86,7 +87,6 @@ public class RemoteMediaSlice implements CustomSliceable { return listBuilder.build(); } final CharSequence castVolume = mContext.getText(R.string.remote_media_volume_option_title); final CharSequence outputTitle = mContext.getText(R.string.media_output_title); final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.ic_volume_remote); // To create an empty icon to indent the row Loading @@ -99,6 +99,8 @@ public class RemoteMediaSlice implements CustomSliceable { + maxVolume); continue; } final CharSequence outputTitle = mContext.getString(R.string.media_output_label_title, Utils.getApplicationLabel(mContext, info.getClientPackageName())); listBuilder.addInputRange(new InputRangeBuilder() .setTitleItem(icon, ListBuilder.ICON_IMAGE) .setTitle(castVolume) Loading Loading @@ -154,7 +156,8 @@ public class RemoteMediaSlice implements CustomSliceable { 0 /* requestCode */, intent, 0 /* flags */); final SliceAction primarySliceAction = SliceAction.createDeeplink( primaryActionIntent, icon, ListBuilder.ICON_IMAGE, mContext.getText(R.string.media_output_title)); mContext.getString(R.string.media_output_label_title, Utils.getApplicationLabel(mContext, packageName))); return primarySliceAction; } Loading
src/com/android/settings/notification/RemoteVolumeGroupController.java +3 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.media.LocalMediaManager; Loading Loading @@ -108,7 +109,6 @@ public class RemoteVolumeGroupController extends BasePreferenceController implem mPreferenceCategory.setVisible(false); return; } final CharSequence outputTitle = mContext.getText(R.string.media_output_title); final CharSequence castVolume = mContext.getText(R.string.remote_media_volume_option_title); mPreferenceCategory.setVisible(true); Loading @@ -116,6 +116,8 @@ public class RemoteVolumeGroupController extends BasePreferenceController implem if (mPreferenceCategory.findPreference(info.getId()) != null) { continue; } final CharSequence outputTitle = mContext.getString(R.string.media_output_label_title, Utils.getApplicationLabel(mContext, info.getClientPackageName())); // Add slider final RemoteVolumeSeekBarPreference seekBarPreference = new RemoteVolumeSeekBarPreference(mContext); Loading
tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java +28 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,9 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageStats; import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.media.session.MediaController; Loading Loading @@ -55,9 +58,11 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.Shadows; import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.shadows.ShadowPackageManager; import java.util.ArrayList; import java.util.List; Loading @@ -70,6 +75,7 @@ public class MediaOutputIndicatorSliceTest { private static final String TEST_DEVICE_1_NAME = "test_device_1_name"; private static final String TEST_DEVICE_2_NAME = "test_device_2_name"; private static final String TEST_PACKAGE_NAME = "com.test"; private static final String TEST_APPLICATION_LABEL = "APP Test Label"; private static MediaOutputIndicatorWorker sMediaOutputIndicatorWorker; Loading @@ -90,6 +96,10 @@ public class MediaOutputIndicatorSliceTest { private MediaOutputIndicatorSlice mMediaOutputIndicatorSlice; private AudioManager mAudioManager; private MediaSession.Token mToken; private ShadowPackageManager mShadowPackageManager; private ApplicationInfo mAppInfo; private PackageInfo mPackageInfo; private PackageStats mPackageStats; @Before public void setUp() throws Exception { Loading Loading @@ -118,8 +128,11 @@ public class MediaOutputIndicatorSliceTest { @Test public void getSlice_withConnectedDevice_verifyMetadata() { initPackage(); mShadowPackageManager.addPackage(mPackageInfo, mPackageStats); mDevices.add(mDevice1); when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices); when(sMediaOutputIndicatorWorker.getPackageName()).thenReturn(TEST_PACKAGE_NAME); doReturn(mMediaController).when(sMediaOutputIndicatorWorker) .getActiveLocalMediaController(); doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); Loading @@ -128,7 +141,9 @@ public class MediaOutputIndicatorSliceTest { final Slice mediaSlice = mMediaOutputIndicatorSlice.getSlice(); final SliceMetadata metadata = SliceMetadata.from(mContext, mediaSlice); assertThat(metadata.getTitle()).isEqualTo(mContext.getText(R.string.media_output_title)); assertThat(metadata.getTitle()).isEqualTo(mContext.getString( R.string.media_output_label_title, Utils.getApplicationLabel(mContext, TEST_PACKAGE_NAME))); assertThat(metadata.getSubtitle()).isEqualTo(TEST_DEVICE_1_NAME); assertThat(metadata.isErrorSlice()).isFalse(); } Loading Loading @@ -241,6 +256,18 @@ public class MediaOutputIndicatorSliceTest { assertThat(mMediaOutputIndicatorSlice.isVisible()).isFalse(); } private void initPackage() { mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager()); mAppInfo = new ApplicationInfo(); mAppInfo.flags = ApplicationInfo.FLAG_INSTALLED; mAppInfo.packageName = TEST_PACKAGE_NAME; mAppInfo.name = TEST_APPLICATION_LABEL; mPackageInfo = new PackageInfo(); mPackageInfo.packageName = TEST_PACKAGE_NAME; mPackageInfo.applicationInfo = mAppInfo; mPackageStats = new PackageStats(TEST_PACKAGE_NAME); } @Implements(SliceBackgroundWorker.class) public static class ShadowSliceBackgroundWorker { Loading