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

Commit ac3f8e55 authored by Jae Seo's avatar Jae Seo
Browse files

Unregister the existing callback when MediaProjection stops

Also removed the unnecessary lock in binderDied.

Bug: 22812934
Change-Id: Ief8856276dbd45a4afa632e51df18bd7d60e6bb1
parent fad3c663
Loading
Loading
Loading
Loading
+8 −5
Original line number Original line Diff line number Diff line
@@ -127,10 +127,8 @@ public final class MediaProjectionManagerService extends SystemService
        IBinder.DeathRecipient deathRecipient = new IBinder.DeathRecipient() {
        IBinder.DeathRecipient deathRecipient = new IBinder.DeathRecipient() {
            @Override
            @Override
            public void binderDied() {
            public void binderDied() {
                synchronized (mLock) {
                removeCallback(callback);
                removeCallback(callback);
            }
            }
            }
        };
        };
        synchronized (mLock) {
        synchronized (mLock) {
            mCallbackDelegate.add(callback);
            mCallbackDelegate.add(callback);
@@ -344,6 +342,7 @@ public final class MediaProjectionManagerService extends SystemService
        public final String packageName;
        public final String packageName;
        public final UserHandle userHandle;
        public final UserHandle userHandle;


        private IMediaProjectionCallback mCallback;
        private IBinder mToken;
        private IBinder mToken;
        private IBinder.DeathRecipient mDeathEater;
        private IBinder.DeathRecipient mDeathEater;
        private int mType;
        private int mType;
@@ -406,7 +405,8 @@ public final class MediaProjectionManagerService extends SystemService
                    throw new IllegalStateException(
                    throw new IllegalStateException(
                            "Cannot start already started MediaProjection");
                            "Cannot start already started MediaProjection");
                }
                }
                registerCallback(callback);
                mCallback = callback;
                registerCallback(mCallback);
                try {
                try {
                    mToken = callback.asBinder();
                    mToken = callback.asBinder();
                    mDeathEater = new IBinder.DeathRecipient() {
                    mDeathEater = new IBinder.DeathRecipient() {
@@ -435,8 +435,11 @@ public final class MediaProjectionManagerService extends SystemService
                            + "pid=" + Binder.getCallingPid() + ")");
                            + "pid=" + Binder.getCallingPid() + ")");
                    return;
                    return;
                }
                }
                mToken.unlinkToDeath(mDeathEater, 0);
                stopProjectionLocked(this);
                stopProjectionLocked(this);
                mToken.unlinkToDeath(mDeathEater, 0);
                mToken = null;
                unregisterCallback(mCallback);
                mCallback = null;
            }
            }
        }
        }