summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author timhypeng <timhypeng@google.com> 2020-12-03 11:08:06 +0800
committer timhypeng <timhypeng@google.com> 2020-12-04 16:23:33 +0800
commit10a4b90c1449c5408f8b5d6a503bb0b92878fcfc (patch)
treeed1d2290cb113e622c21b7d0e36818045b23fbfa
parent2791003f3c9c51de79e089249660ab0c8638be7c (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.java26
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java8
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);
+ }
}