diff options
| author | 2020-12-03 11:08:06 +0800 | |
|---|---|---|
| committer | 2020-12-04 16:23:33 +0800 | |
| commit | 10a4b90c1449c5408f8b5d6a503bb0b92878fcfc (patch) | |
| tree | ed1d2290cb113e622c21b7d0e36818045b23fbfa | |
| parent | 2791003f3c9c51de79e089249660ab0c8638be7c (diff) | |
Fix NullPointerException in MediaDevice
-Check router info before accessing
Bug: 174370806
Test: atest MediaDeviceTest
Change-Id: Ie23ceadcdde3a8598947ee2986161079d7035fb3
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java | 26 | ||||
| -rw-r--r-- | packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java | 8 |
2 files changed, 34 insertions, 0 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java index 41d6afc9c234..f21c3598a23d 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java @@ -38,6 +38,7 @@ import android.graphics.drawable.Drawable; import android.media.MediaRoute2Info; import android.media.MediaRouter2Manager; import android.text.TextUtils; +import android.util.Log; import androidx.annotation.IntDef; import androidx.annotation.VisibleForTesting; @@ -46,6 +47,7 @@ import com.android.settingslib.R; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; import java.util.List; /** @@ -199,6 +201,10 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { */ public void requestSetVolume(int volume) { + if (mRouteInfo == null) { + Log.w(TAG, "Unable to set volume. RouteInfo is empty"); + return; + } mRouterManager.setRouteVolume(mRouteInfo, volume); } @@ -208,6 +214,10 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { * @return max volume. */ public int getMaxVolume() { + if (mRouteInfo == null) { + Log.w(TAG, "Unable to get max volume. RouteInfo is empty"); + return 0; + } return mRouteInfo.getVolumeMax(); } @@ -217,6 +227,10 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { * @return current volume. */ public int getCurrentVolume() { + if (mRouteInfo == null) { + Log.w(TAG, "Unable to get current volume. RouteInfo is empty"); + return 0; + } return mRouteInfo.getVolume(); } @@ -226,6 +240,10 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { * @return package name. */ public String getClientPackageName() { + if (mRouteInfo == null) { + Log.w(TAG, "Unable to get client package name. RouteInfo is empty"); + return null; + } return mRouteInfo.getClientPackageName(); } @@ -244,6 +262,10 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { * @return result of transfer media */ public boolean connect() { + if (mRouteInfo == null) { + Log.w(TAG, "Unable to connect. RouteInfo is empty"); + return false; + } setConnectedRecord(); mRouterManager.selectRoute(mPackageName, mRouteInfo); return true; @@ -358,6 +380,10 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { * Gets the supported features of the route. */ public List<String> getFeatures() { + if (mRouteInfo == null) { + Log.w(TAG, "Unable to get features. RouteInfo is empty"); + return new ArrayList<>(); + } return mRouteInfo.getFeatures(); } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java index 47d4beb752c5..6f7f73a3e79b 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java @@ -465,4 +465,12 @@ public class MediaDeviceTest { assertThat(mInfoMediaDevice1.getState()).isEqualTo( LocalMediaManager.MediaDeviceState.STATE_CONNECTING_FAILED); } + + @Test + public void getFeatures_noRouteInfo_returnEmptyList() { + mBluetoothMediaDevice1 = new BluetoothMediaDevice(mContext, mCachedDevice1, + mMediaRouter2Manager, null /* MediaRoute2Info */, TEST_PACKAGE_NAME); + + assertThat(mBluetoothMediaDevice1.getFeatures().size()).isEqualTo(0); + } } |