summaryrefslogtreecommitdiff
path: root/media/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'media/java/android')
-rw-r--r--media/java/android/media/AudioManager.java33
-rw-r--r--media/java/android/media/tv/tuner/Tuner.java3
2 files changed, 21 insertions, 15 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 5b48bea776a8..cdc1964b7f4f 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -73,6 +73,7 @@ import com.android.internal.util.Preconditions;
import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -103,7 +104,7 @@ public class AudioManager {
private static final AudioVolumeGroupChangeHandler sAudioAudioVolumeGroupChangedHandler =
new AudioVolumeGroupChangeHandler();
- private static Context sContext;
+ private static WeakReference<Context> sContext;
/**
* Broadcast intent, a hint for applications that audio is about to become
@@ -800,7 +801,7 @@ public class AudioManager {
} else {
mOriginalContext = context;
}
- sContext = context;
+ sContext = new WeakReference<>(context);
}
@UnsupportedAppUsage
@@ -7312,23 +7313,27 @@ public class AudioManager {
*/
public static boolean hasHapticChannels(@Nullable Context context, @NonNull Uri uri) {
Objects.requireNonNull(uri);
+
if (context != null) {
return hasHapticChannelsImpl(context, uri);
- } else if (sContext != null) {
+ }
+
+ Context cachedContext = sContext.get();
+ if (cachedContext != null) {
if (DEBUG) {
Log.d(TAG, "Try to use static context to query if having haptic channels");
}
- return hasHapticChannelsImpl(sContext, uri);
- } else {
- // Try with audio service context, this may fail to get correct result.
- if (DEBUG) {
- Log.d(TAG, "Try to use audio service context to query if having haptic channels");
- }
- try {
- return getService().hasHapticChannels(uri);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
+ return hasHapticChannelsImpl(cachedContext, uri);
+ }
+
+ // Try with audio service context, this may fail to get correct result.
+ if (DEBUG) {
+ Log.d(TAG, "Try to use audio service context to query if having haptic channels");
+ }
+ try {
+ return getService().hasHapticChannels(uri);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
}
}
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java
index 952bbf56d5fa..2ea745b44288 100644
--- a/media/java/android/media/tv/tuner/Tuner.java
+++ b/media/java/android/media/tv/tuner/Tuner.java
@@ -347,7 +347,6 @@ public class Tuner implements AutoCloseable {
mHandler = createEventHandler();
}
- mHandler = createEventHandler();
int[] clientId = new int[1];
ResourceClientProfile profile = new ResourceClientProfile();
profile.tvInputSessionId = tvInputSessionId;
@@ -516,6 +515,8 @@ public class Tuner implements AutoCloseable {
mDemuxHandle = null;
}
+ mTunerResourceManager.unregisterClientProfile(mClientId);
+
}
/**