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

Commit fafe810a authored by Ruben Brunk's avatar Ruben Brunk Committed by android-build-merger
Browse files

Merge \"Fix VR transition for display on/off sequence.\" into nyc-dev

am: 931a7c03

Change-Id: I70301a77d89271e74e69efb92f340f1dbf6b3ca8
parents 44080ac5 931a7c03
Loading
Loading
Loading
Loading
+28 −6
Original line number Original line Diff line number Diff line
@@ -2292,11 +2292,8 @@ public final class ActivityManagerService extends ActivityManagerNative
                final ActivityRecord r = (ActivityRecord) msg.obj;
                final ActivityRecord r = (ActivityRecord) msg.obj;
                final boolean needsVrMode = r != null && r.requestedVrComponent != null;
                final boolean needsVrMode = r != null && r.requestedVrComponent != null;
                if (needsVrMode) {
                if (needsVrMode) {
                    VrManagerInternal vrService =
                    applyVrMode(msg.arg1 == 1, r.requestedVrComponent, r.userId,
                            LocalServices.getService(VrManagerInternal.class);
                            r.info.getComponentName(), false);
                    boolean enable = msg.arg1 == 1;
                    vrService.setVrMode(enable, r.requestedVrComponent, r.userId,
                            r.info.getComponentName());
                }
                }
            } break;
            } break;
            }
            }
@@ -3084,6 +3081,17 @@ public final class ActivityManagerService extends ActivityManagerNative
                mHandler.obtainMessage(VR_MODE_APPLY_IF_NEEDED_MSG, enable ? 1 : 0, 0, r));
                mHandler.obtainMessage(VR_MODE_APPLY_IF_NEEDED_MSG, enable ? 1 : 0, 0, r));
    }
    }
    private void applyVrMode(boolean enabled, ComponentName packageName, int userId,
            ComponentName callingPackage, boolean immediate) {
        VrManagerInternal vrService =
                LocalServices.getService(VrManagerInternal.class);
        if (immediate) {
            vrService.setVrModeImmediate(enabled, packageName, userId, callingPackage);
        } else {
            vrService.setVrMode(enabled, packageName, userId, callingPackage);
        }
    }
    final void showAskCompatModeDialogLocked(ActivityRecord r) {
    final void showAskCompatModeDialogLocked(ActivityRecord r) {
        Message msg = Message.obtain();
        Message msg = Message.obtain();
        msg.what = SHOW_COMPAT_MODE_DIALOG_UI_MSG;
        msg.what = SHOW_COMPAT_MODE_DIALOG_UI_MSG;
@@ -21420,11 +21428,25 @@ public final class ActivityManagerService extends ActivityManagerNative
        public SleepToken acquireSleepToken(String tag) {
        public SleepToken acquireSleepToken(String tag) {
            Preconditions.checkNotNull(tag);
            Preconditions.checkNotNull(tag);
            ComponentName requestedVrService = null;
            ComponentName callingVrActivity = null;
            int userId = -1;
            synchronized (ActivityManagerService.this) {
                if (mFocusedActivity != null) {
                    requestedVrService = mFocusedActivity.requestedVrComponent;
                    callingVrActivity = mFocusedActivity.info.getComponentName();
                    userId = mFocusedActivity.userId;
                }
            }
            if (requestedVrService != null) {
                applyVrMode(false, requestedVrService, userId, callingVrActivity, true);
            }
            synchronized (ActivityManagerService.this) {
            synchronized (ActivityManagerService.this) {
                SleepTokenImpl token = new SleepTokenImpl(tag);
                SleepTokenImpl token = new SleepTokenImpl(tag);
                mSleepTokens.add(token);
                mSleepTokens.add(token);
                updateSleepIfNeededLocked();
                updateSleepIfNeededLocked();
                applyVrModeIfNeededLocked(mFocusedActivity, false);
                return token;
                return token;
            }
            }
        }
        }
+15 −0
Original line number Original line Diff line number Diff line
@@ -43,6 +43,9 @@ public abstract class VrManagerInternal {


    /**
    /**
     * Set the current VR mode state.
     * Set the current VR mode state.
     * <p/>
     * This may delay the mode change slightly during application transitions to avoid frequently
     * tearing down VrListenerServices unless necessary.
     *
     *
     * @param enabled {@code true} to enable VR mode.
     * @param enabled {@code true} to enable VR mode.
     * @param packageName The package name of the requested VrListenerService to bind.
     * @param packageName The package name of the requested VrListenerService to bind.
@@ -52,6 +55,18 @@ public abstract class VrManagerInternal {
    public abstract void setVrMode(boolean enabled, @NonNull ComponentName packageName,
    public abstract void setVrMode(boolean enabled, @NonNull ComponentName packageName,
            int userId, @NonNull ComponentName calling);
            int userId, @NonNull ComponentName calling);


    /**
     * Set the current VR mode state immediately.
     *
     * @param enabled {@code true} to enable VR mode.
     * @param packageName The package name of the requested VrListenerService to bind.
     * @param userId the user requesting the VrListenerService component.
     * @param calling the component currently using VR mode, or null to leave unchanged.
     */
    public abstract void setVrModeImmediate(boolean enabled, @NonNull ComponentName packageName,
            int userId, @NonNull ComponentName calling);


   /**
   /**
    * Return NO_ERROR if the given package is installed on the device and enabled as a
    * Return NO_ERROR if the given package is installed on the device and enabled as a
    * VrListenerService for the given current user, or a negative error code indicating a failure.
    * VrListenerService for the given current user, or a negative error code indicating a failure.
+9 −3
Original line number Original line Diff line number Diff line
@@ -373,7 +373,13 @@ public class VrManagerService extends SystemService implements EnabledComponentC
        @Override
        @Override
        public void setVrMode(boolean enabled, ComponentName packageName, int userId,
        public void setVrMode(boolean enabled, ComponentName packageName, int userId,
                ComponentName callingPackage) {
                ComponentName callingPackage) {
            VrManagerService.this.setVrMode(enabled, packageName, userId, callingPackage);
            VrManagerService.this.setVrMode(enabled, packageName, userId, callingPackage, false);
        }

        @Override
        public void setVrModeImmediate(boolean enabled, ComponentName packageName, int userId,
                ComponentName callingPackage) {
            VrManagerService.this.setVrMode(enabled, packageName, userId, callingPackage, true);
        }
        }


        @Override
        @Override
@@ -916,11 +922,11 @@ public class VrManagerService extends SystemService implements EnabledComponentC
     */
     */


    private void setVrMode(boolean enabled, @NonNull ComponentName targetPackageName,
    private void setVrMode(boolean enabled, @NonNull ComponentName targetPackageName,
            int userId, @NonNull ComponentName callingPackage) {
            int userId, @NonNull ComponentName callingPackage, boolean immediate) {


        synchronized (mLock) {
        synchronized (mLock) {


            if (!enabled && mCurrentVrService != null) {
            if (!enabled && mCurrentVrService != null && !immediate) {
                // If we're transitioning out of VR mode, delay briefly to avoid expensive HAL calls
                // If we're transitioning out of VR mode, delay briefly to avoid expensive HAL calls
                // and service bind/unbind in case we are immediately switching to another VR app.
                // and service bind/unbind in case we are immediately switching to another VR app.
                if (mPendingState == null) {
                if (mPendingState == null) {