Merge "Disable "Night Light" mode while in VR mode." into nyc-mr1-dev
This commit is contained in:
@@ -33,8 +33,11 @@ import android.net.Uri;
|
||||
import android.opengl.Matrix;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.RemoteException;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings.Secure;
|
||||
import android.service.vr.IVrManager;
|
||||
import android.service.vr.IVrStateCallbacks;
|
||||
import android.util.MathUtils;
|
||||
import android.util.Slog;
|
||||
import android.view.animation.AnimationUtils;
|
||||
@@ -44,7 +47,9 @@ import com.android.server.SystemService;
|
||||
import com.android.server.twilight.TwilightListener;
|
||||
import com.android.server.twilight.TwilightManager;
|
||||
import com.android.server.twilight.TwilightState;
|
||||
import com.android.server.vr.VrManagerService;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.Calendar;
|
||||
import java.util.TimeZone;
|
||||
|
||||
@@ -83,6 +88,31 @@ public final class NightDisplayService extends SystemService
|
||||
private static final ColorMatrixEvaluator COLOR_MATRIX_EVALUATOR = new ColorMatrixEvaluator();
|
||||
|
||||
private final Handler mHandler;
|
||||
private final AtomicBoolean mIgnoreAllColorMatrixChanges = new AtomicBoolean();
|
||||
private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() {
|
||||
@Override
|
||||
public void onVrStateChanged(final boolean enabled) {
|
||||
// Turn off all night mode display stuff while device is in VR mode.
|
||||
mIgnoreAllColorMatrixChanges.set(enabled);
|
||||
mHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// Cancel in-progress animations
|
||||
if (mColorMatrixAnimator != null) {
|
||||
mColorMatrixAnimator.cancel();
|
||||
}
|
||||
|
||||
final DisplayTransformManager dtm =
|
||||
getLocalService(DisplayTransformManager.class);
|
||||
if (enabled) {
|
||||
dtm.setColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY, MATRIX_IDENTITY);
|
||||
} else if (mController.isActivated()) {
|
||||
dtm.setColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY, MATRIX_NIGHT);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
private int mCurrentUser = UserHandle.USER_NULL;
|
||||
private ContentObserver mUserSetupObserver;
|
||||
@@ -105,7 +135,17 @@ public final class NightDisplayService extends SystemService
|
||||
|
||||
@Override
|
||||
public void onBootPhase(int phase) {
|
||||
if (phase == PHASE_BOOT_COMPLETED) {
|
||||
if (phase == PHASE_SYSTEM_SERVICES_READY) {
|
||||
IVrManager vrManager =
|
||||
(IVrManager) getBinderService(VrManagerService.VR_MANAGER_BINDER_SERVICE);
|
||||
if (vrManager != null) {
|
||||
try {
|
||||
vrManager.registerListener(mVrStateCallbacks);
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "Failed to register VR mode state listener: " + e);
|
||||
}
|
||||
}
|
||||
} else if (phase == PHASE_BOOT_COMPLETED) {
|
||||
mBootCompleted = true;
|
||||
|
||||
// Register listeners now that boot is complete.
|
||||
@@ -234,6 +274,11 @@ public final class NightDisplayService extends SystemService
|
||||
mColorMatrixAnimator.cancel();
|
||||
}
|
||||
|
||||
// Don't do any color matrix change animations if we are ignoring them anyway.
|
||||
if (mIgnoreAllColorMatrixChanges.get()) {
|
||||
return;
|
||||
}
|
||||
|
||||
final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class);
|
||||
final float[] from = dtm.getColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY);
|
||||
final float[] to = mIsActivated ? MATRIX_NIGHT : null;
|
||||
|
||||
Reference in New Issue
Block a user