FocusRequester: fix NPE

Fix NPE and potential race condition in
FocusRequester.dispatchFocusResultFromExtPolicy where mFocusDispatcher
was checked against null, but the method didn't return in that case.

Bug: 142278598
Test: Android Auto with phone call and custom focus policy
Change-Id: I88447a255132c94f8c2fbf97a1e3ee88f6d2e993
Merged-In: I88447a255132c94f8c2fbf97a1e3ee88f6d2e993
This commit is contained in:
Jean-Michel Trivi
2019-11-08 16:45:16 -08:00
parent 2080a05995
commit 9ae68f467e

View File

@@ -416,7 +416,8 @@ public class FocusRequester {
}
int dispatchFocusChange(int focusChange) {
if (mFocusDispatcher == null) {
final IAudioFocusDispatcher fd = mFocusDispatcher;
if (fd == null) {
if (MediaFocusControl.DEBUG) { Log.e(TAG, "dispatchFocusChange: no focus dispatcher"); }
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
}
@@ -436,7 +437,7 @@ public class FocusRequester {
mFocusLossReceived = focusChange;
}
try {
mFocusDispatcher.dispatchAudioFocusChange(focusChange, mClientId);
fd.dispatchAudioFocusChange(focusChange, mClientId);
} catch (android.os.RemoteException e) {
Log.e(TAG, "dispatchFocusChange: error talking to focus listener " + mClientId, e);
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
@@ -445,16 +446,18 @@ public class FocusRequester {
}
void dispatchFocusResultFromExtPolicy(int requestResult) {
if (mFocusDispatcher == null) {
final IAudioFocusDispatcher fd = mFocusDispatcher;
if (fd == null) {
if (MediaFocusControl.DEBUG) {
Log.e(TAG, "dispatchFocusResultFromExtPolicy: no focus dispatcher");
}
return;
}
if (DEBUG) {
Log.v(TAG, "dispatching result" + requestResult + " to " + mClientId);
}
try {
mFocusDispatcher.dispatchFocusResultFromExtPolicy(requestResult, mClientId);
fd.dispatchFocusResultFromExtPolicy(requestResult, mClientId);
} catch (android.os.RemoteException e) {
Log.e(TAG, "dispatchFocusResultFromExtPolicy: error talking to focus listener"
+ mClientId, e);