diff options
Diffstat (limited to 'media/java/android')
-rw-r--r-- | media/java/android/media/AudioManager.java | 33 | ||||
-rw-r--r-- | media/java/android/media/tv/tuner/Tuner.java | 3 |
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); + } /** |