Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f3339cf authored by jiabin's avatar jiabin
Browse files

Cache weak reference for static context.

Use weak reference to cache static context to avoid leak.

Test: atest RingtoneManagerTest
Test: atest RequestPinItemTest
Bug: 192995480
Change-Id: Idbfc9bd0c93ddb40693989c0d09719af24363f1d
parent f36c575b
Loading
Loading
Loading
Loading
+19 −14
Original line number Diff line number Diff line
@@ -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
@@ -7256,14 +7257,19 @@ 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 {
            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");
@@ -7274,7 +7280,6 @@ public class AudioManager {
            throw e.rethrowFromSystemServer();
        }
    }
    }

    /**
     * Set whether or not there is an active RTT call.