diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index dc606c9..5dd04bf 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -109,6 +109,7 @@
     private CalculatorExpressionTokenizer mTokenizer;
     private CalculatorExpressionEvaluator mEvaluator;
 
+    private View mDisplayView;
     private CalculatorEditText mFormulaEditText;
     private CalculatorEditText mResultEditText;
     private ViewPager mPadViewPager;
@@ -124,6 +125,7 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_calculator);
 
+        mDisplayView = findViewById(R.id.display);
         mFormulaEditText = (CalculatorEditText) findViewById(R.id.formula);
         mResultEditText = (CalculatorEditText) findViewById(R.id.result);
         mPadViewPager = (ViewPager) findViewById(R.id.pad_pager);
@@ -314,11 +316,11 @@
     }
 
     private void reveal(View sourceView, int colorRes, AnimatorListener listener) {
-        final View displayView = findViewById(R.id.display);
-        final View decorView = getWindow().getDecorView();
+        final ViewGroupOverlay groupOverlay =
+                (ViewGroupOverlay) getWindow().getDecorView().getOverlay();
 
         final Rect displayRect = new Rect();
-        displayView.getGlobalVisibleRect(displayRect);
+        mDisplayView.getGlobalVisibleRect(displayRect);
 
         // Make reveal cover the display and status bar.
         final View revealView = new View(this);
@@ -326,6 +328,7 @@
         revealView.setLeft(displayRect.left);
         revealView.setRight(displayRect.right);
         revealView.setBackgroundColor(getResources().getColor(colorRes));
+        groupOverlay.add(revealView);
 
         final int[] clearLocation = new int[2];
         sourceView.getLocationInWindow(clearLocation);
@@ -351,17 +354,11 @@
         alphaAnimator.setDuration(
                 getResources().getInteger(android.R.integer.config_mediumAnimTime));
 
-        final ViewGroupOverlay groupOverlay = (ViewGroupOverlay) decorView.getOverlay();
         final AnimatorSet animatorSet = new AnimatorSet();
         animatorSet.play(revealAnimator).before(alphaAnimator);
         animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
         animatorSet.addListener(new AnimatorListenerAdapter() {
             @Override
-            public void onAnimationStart(Animator animation) {
-                groupOverlay.add(revealView);
-            }
-
-            @Override
             public void onAnimationEnd(Animator animator) {
                 groupOverlay.remove(revealView);
                 mCurrentAnimator = null;
