Fix NullPointerException in MediaDevice

-Check router info before accessing

Bug: 174370806
Test: atest MediaDeviceTest
Change-Id: Ie23ceadcdde3a8598947ee2986161079d7035fb3
This commit is contained in:
timhypeng
2020-12-03 11:08:06 +08:00
parent 2791003f3c
commit 10a4b90c14
2 changed files with 34 additions and 0 deletions

View File

@@ -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();
}

View File

@@ -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);
}
}