diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 082dd2badd1cd..0ecb4e1e80bd1 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -274,9 +274,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { @Override public boolean handleMessage(Message msg) { synchronized (mLock) { - if (msg.obj != null) { - mRemoteObserver = (IPackageInstallObserver2) msg.obj; - } try { commitLocked(); } catch (PackageManagerException e) { @@ -666,7 +663,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } @Override - public void commit(IntentSender statusReceiver, boolean forTransfer) { + public void commit(@NonNull IntentSender statusReceiver, boolean forTransfer) { Preconditions.checkNotNull(statusReceiver); // Cache package manager data without the lock held @@ -679,6 +676,10 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { assertCallerIsOwnerOrRootLocked(); assertPreparedAndNotDestroyedLocked("commit"); + final PackageInstallObserverAdapter adapter = new PackageInstallObserverAdapter( + mContext, statusReceiver, sessionId, isInstallerDeviceOwnerLocked(), userId); + mRemoteObserver = adapter.getBinder(); + if (forTransfer) { mContext.enforceCallingOrSelfPermission(Manifest.permission.INSTALL_PACKAGES, null); @@ -712,9 +713,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { mActiveCount.incrementAndGet(); mCommitted = true; - final PackageInstallObserverAdapter adapter = new PackageInstallObserverAdapter( - mContext, statusReceiver, sessionId, isInstallerDeviceOwnerLocked(), userId); - mHandler.obtainMessage(MSG_COMMIT, adapter.getBinder()).sendToTarget(); + mHandler.obtainMessage(MSG_COMMIT).sendToTarget(); } if (!wasSealed) { @@ -1422,8 +1421,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } private void dispatchSessionFinished(int returnCode, String msg, Bundle extras) { - IPackageInstallObserver2 observer; - String packageName; + final IPackageInstallObserver2 observer; + final String packageName; synchronized (mLock) { mFinalStatus = returnCode; mFinalMessage = msg;