diff options
| author | 2018-01-19 01:19:44 +0000 | |
|---|---|---|
| committer | 2018-01-19 01:19:44 +0000 | |
| commit | 22b111da8b41f5f5962d1a37725cb58db44577c5 (patch) | |
| tree | 6c0f88cd2bc9e4c37d60290d5a71c2bd0d761390 | |
| parent | 244c6a65e9fe2c309295ec2d0d99e8d6068e614a (diff) | |
| parent | 9aedfb18500d6affd645216574805fd7d8a00370 (diff) | |
Merge "Fix missing service call when rebinding to VrCore"
| -rw-r--r-- | services/core/java/com/android/server/vr/VrManagerService.java | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java index de723c6701d3..d84fbc53c5f9 100644 --- a/services/core/java/com/android/server/vr/VrManagerService.java +++ b/services/core/java/com/android/server/vr/VrManagerService.java @@ -185,6 +185,14 @@ public class VrManagerService extends SystemService ComponentName component = null; synchronized (mLock) { component = ((mCurrentVrService == null) ? null : mCurrentVrService.getComponent()); + + // If the VrCore main service was disconnected or the binding died we'll rebind + // automatically. Call focusedActivityChanged() once we rebind. + if (component != null && component.equals(event.component) && + (event.event == LogEvent.EVENT_DISCONNECTED || + event.event == LogEvent.EVENT_BINDING_DIED)) { + callFocusedActivityChangedLocked(); + } } // If not on an AIO device and we permanently stopped trying to connect to the @@ -980,16 +988,7 @@ public class VrManagerService extends SystemService oldVrServicePackage, oldUserId); if (mCurrentVrService != null && sendUpdatedCaller) { - final ComponentName c = mCurrentVrModeComponent; - final boolean b = running2dInVr; - final int pid = processId; - mCurrentVrService.sendEvent(new PendingEvent() { - @Override - public void runEvent(IInterface service) throws RemoteException { - IVrListener l = (IVrListener) service; - l.focusedActivityChanged(c, b, pid); - } - }); + callFocusedActivityChangedLocked(); } if (!nothingChanged) { @@ -1002,6 +1001,23 @@ public class VrManagerService extends SystemService } } + private void callFocusedActivityChangedLocked() { + final ComponentName c = mCurrentVrModeComponent; + final boolean b = mRunning2dInVr; + final int pid = mVrAppProcessId; + mCurrentVrService.sendEvent(new PendingEvent() { + @Override + public void runEvent(IInterface service) throws RemoteException { + // Under specific (and unlikely) timing scenarios, when VrCore + // crashes and is rebound, focusedActivityChanged() may be + // called a 2nd time with the same arguments. IVrListeners + // should make sure to handle that scenario gracefully. + IVrListener l = (IVrListener) service; + l.focusedActivityChanged(c, b, pid); + } + }); + } + private boolean isDefaultAllowed(String packageName) { PackageManager pm = mContext.getPackageManager(); |