Program: 23995
Project: 23995
Buggy source:
private final void performLayoutAndPlaceSurfacesLockedInner(boolean recoveringMemory){
  final long currentTime=SystemClock.uptimeMillis();
  final int dw=mDisplay.getWidth();
  final int dh=mDisplay.getHeight();
  final int N=mWindows.size();
  int i;
  performLayoutLockedInner();
  if (mFxSession == null) {
    mFxSession=new SurfaceSession();
  }
  if (SHOW_TRANSACTIONS)   Log.i(TAG,"String_Node_Str");
  for (i=mExitingTokens.size() - 1; i >= 0; i--) {
    mExitingTokens.get(i).hasVisible=false;
  }
  for (i=mExitingAppTokens.size() - 1; i >= 0; i--) {
    mExitingAppTokens.get(i).hasVisible=false;
  }
  boolean orientationChangeComplete=true;
  Session holdScreen=null;
  float screenBrightness=-1;
  boolean focusDisplayed=false;
  boolean animating=false;
  Surface.openTransaction();
  try {
    boolean restart;
    do {
      final int transactionSequence=++mTransactionSequence;
      boolean tokensAnimating=false;
      final int NAT=mAppTokens.size();
      for (i=0; i < NAT; i++) {
        if (mAppTokens.get(i).stepAnimationLocked(currentTime,dw,dh)) {
          tokensAnimating=true;
        }
      }
      final int NEAT=mExitingAppTokens.size();
      for (i=0; i < NEAT; i++) {
        if (mExitingAppTokens.get(i).stepAnimationLocked(currentTime,dw,dh)) {
          tokensAnimating=true;
        }
      }
      animating=tokensAnimating;
      restart=false;
      boolean tokenMayBeDrawn=false;
      mPolicy.beginAnimationLw(dw,dh);
      for (i=N - 1; i >= 0; i--) {
        WindowState w=(WindowState)mWindows.get(i);
        final WindowManager.LayoutParams attrs=w.mAttrs;
        if (w.mSurface != null) {
          w.commitFinishDrawingLocked(currentTime);
          if (w.stepAnimationLocked(currentTime,dw,dh)) {
            animating=true;
          }
          mPolicy.animatingWindowLw(w,attrs);
        }
        final AppWindowToken atoken=w.mAppToken;
        if (atoken != null && (!atoken.allDrawn || atoken.freezingScreen)) {
          if (atoken.lastTransactionSequence != transactionSequence) {
            atoken.lastTransactionSequence=transactionSequence;
            atoken.numInterestingWindows=atoken.numDrawnWindows=0;
            atoken.startingDisplayed=false;
          }
          if ((w.isOnScreen() || w.mAttrs.type == WindowManager.LayoutParams.TYPE_BASE_APPLICATION) && !w.mExiting && !w.mDestroying) {
            if (DEBUG_VISIBILITY || DEBUG_ORIENTATION) {
              Log.v(TAG,"String_Node_Str" + w + "String_Node_Str"+ w.isDisplayedLw()+ "String_Node_Str"+ w.isAnimating());
              if (!w.isDisplayedLw()) {
                Log.v(TAG,"String_Node_Str" + w.mSurface + "String_Node_Str"+ w.mPolicyVisibility+ "String_Node_Str"+ w.mDrawPending+ "String_Node_Str"+ w.mCommitDrawPending+ "String_Node_Str"+ w.mAttachedHidden+ "String_Node_Str"+ atoken.hiddenRequested+ "String_Node_Str"+ w.mAnimating);
              }
            }
            if (w != atoken.startingWindow) {
              if (!atoken.freezingScreen || !w.mAppFreezing) {
                atoken.numInterestingWindows++;
                if (w.isDisplayedLw()) {
                  atoken.numDrawnWindows++;
                  if (DEBUG_VISIBILITY || DEBUG_ORIENTATION)                   Log.v(TAG,"String_Node_Str" + atoken + "String_Node_Str"+ atoken.freezingScreen+ "String_Node_Str"+ w.mAppFreezing);
                  tokenMayBeDrawn=true;
                }
              }
            }
 else             if (w.isDisplayedLw()) {
              atoken.startingDisplayed=true;
            }
          }
        }
 else         if (w.mReadyToShow) {
          w.performShowLocked();
        }
      }
      if (mPolicy.finishAnimationLw()) {
        restart=true;
      }
      if (tokenMayBeDrawn) {
        final int NT=mTokenList.size();
        for (i=0; i < NT; i++) {
          AppWindowToken wtoken=mTokenList.get(i).appWindowToken;
          if (wtoken == null) {
            continue;
          }
          if (wtoken.freezingScreen) {
            int numInteresting=wtoken.numInterestingWindows;
            if (numInteresting > 0 && wtoken.numDrawnWindows >= numInteresting) {
              if (DEBUG_VISIBILITY)               Log.v(TAG,"String_Node_Str" + wtoken + "String_Node_Str"+ numInteresting+ "String_Node_Str"+ wtoken.numDrawnWindows);
              wtoken.showAllWindowsLocked();
              unsetAppFreezingScreenLocked(wtoken,false,true);
              orientationChangeComplete=true;
            }
          }
 else           if (!wtoken.allDrawn) {
            int numInteresting=wtoken.numInterestingWindows;
            if (numInteresting > 0 && wtoken.numDrawnWindows >= numInteresting) {
              if (DEBUG_VISIBILITY)               Log.v(TAG,"String_Node_Str" + wtoken + "String_Node_Str"+ numInteresting+ "String_Node_Str"+ wtoken.numDrawnWindows);
              wtoken.allDrawn=true;
              restart=true;
              if (!mOpeningApps.contains(wtoken)) {
                wtoken.showAllWindowsLocked();
              }
            }
          }
        }
      }
      if (mAppTransitionReady) {
        int NN=mOpeningApps.size();
        boolean goodToGo=true;
        if (DEBUG_APP_TRANSITIONS)         Log.v(TAG,"String_Node_Str" + NN + "String_Node_Str"+ mDisplayFrozen+ "String_Node_Str"+ mAppTransitionTimeout+ "String_Node_Str");
        if (!mDisplayFrozen && !mAppTransitionTimeout) {
          for (i=0; i < NN && goodToGo; i++) {
            AppWindowToken wtoken=mOpeningApps.get(i);
            if (DEBUG_APP_TRANSITIONS)             Log.v(TAG,"String_Node_Str" + wtoken + "String_Node_Str"+ wtoken.allDrawn+ "String_Node_Str"+ wtoken.startingDisplayed);
            if (!wtoken.allDrawn && !wtoken.startingDisplayed && !wtoken.startingMoved) {
              goodToGo=false;
            }
          }
        }
        if (goodToGo) {
          if (DEBUG_APP_TRANSITIONS)           Log.v(TAG,"String_Node_Str");
          int transit=mNextAppTransition;
          if (mSkipAppTransitionAnimation) {
            transit=WindowManagerPolicy.TRANSIT_NONE;
          }
          mNextAppTransition=WindowManagerPolicy.TRANSIT_NONE;
          mAppTransitionReady=false;
          mAppTransitionTimeout=false;
          mStartingIconInTransition=false;
          mSkipAppTransitionAnimation=false;
          mH.removeMessages(H.APP_TRANSITION_TIMEOUT);
          WindowManager.LayoutParams lp=findAnimations(mAppTokens,mOpeningApps,mClosingApps);
          NN=mOpeningApps.size();
          for (i=0; i < NN; i++) {
            AppWindowToken wtoken=mOpeningApps.get(i);
            if (DEBUG_APP_TRANSITIONS)             Log.v(TAG,"String_Node_Str" + wtoken);
            wtoken.reportedVisible=false;
            wtoken.inPendingTransaction=false;
            setTokenVisibilityLocked(wtoken,lp,true,transit,false);
            wtoken.updateReportedVisibilityLocked();
            wtoken.showAllWindowsLocked();
          }
          NN=mClosingApps.size();
          for (i=0; i < NN; i++) {
            AppWindowToken wtoken=mClosingApps.get(i);
            if (DEBUG_APP_TRANSITIONS)             Log.v(TAG,"String_Node_Str" + wtoken);
            wtoken.inPendingTransaction=false;
            setTokenVisibilityLocked(wtoken,lp,false,transit,false);
            wtoken.updateReportedVisibilityLocked();
            wtoken.allDrawn=true;
          }
          mOpeningApps.clear();
          mClosingApps.clear();
          mLayoutNeeded=true;
          moveInputMethodWindowsIfNeededLocked(true);
          performLayoutLockedInner();
          updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES);
          restart=true;
        }
      }
    }
 while (restart);
    final boolean someoneLosingFocus=mLosingFocus.size() != 0;
    boolean obscured=false;
    boolean blurring=false;
    boolean dimming=false;
    boolean covered=false;
    boolean syswin=false;
    boolean backgroundFillerShown=false;
    for (i=N - 1; i >= 0; i--) {
      WindowState w=(WindowState)mWindows.get(i);
      boolean displayed=false;
      final WindowManager.LayoutParams attrs=w.mAttrs;
      final int attrFlags=attrs.flags;
      if (w.mSurface != null) {
        w.computeShownFrameLocked();
        if (localLOGV)         Log.v(TAG,"String_Node_Str" + i + "String_Node_Str"+ w.mSurface+ "String_Node_Str"+ w.mShownFrame+ "String_Node_Str"+ w.mLastShownFrame);
        boolean resize;
        int width, height;
        if ((w.mAttrs.flags & w.mAttrs.FLAG_SCALED) != 0) {
          resize=w.mLastRequestedWidth != w.mRequestedWidth || w.mLastRequestedHeight != w.mRequestedHeight;
          width=w.mRequestedWidth;
          height=w.mRequestedHeight;
          w.mLastRequestedWidth=width;
          w.mLastRequestedHeight=height;
          w.mLastShownFrame.set(w.mShownFrame);
          try {
            w.mSurface.setPosition(w.mShownFrame.left,w.mShownFrame.top);
          }
 catch (          RuntimeException e) {
            Log.w(TAG,"String_Node_Str" + w,e);
            if (!recoveringMemory) {
              reclaimSomeSurfaceMemoryLocked(w,"String_Node_Str");
            }
          }
        }
 else {
          resize=!w.mLastShownFrame.equals(w.mShownFrame);
          width=w.mShownFrame.width();
          height=w.mShownFrame.height();
          w.mLastShownFrame.set(w.mShownFrame);
          if (resize) {
            if (SHOW_TRANSACTIONS)             Log.i(TAG,"String_Node_Str" + w.mSurface + "String_Node_Str"+ w.mShownFrame.left+ "String_Node_Str"+ w.mShownFrame.top+ "String_Node_Str"+ w.mShownFrame.width()+ "String_Node_Str"+ w.mShownFrame.height()+ "String_Node_Str");
          }
        }
        if (resize) {
          if (width < 1)           width=1;
          if (height < 1)           height=1;
          if (w.mSurface != null) {
            try {
              w.mSurface.setSize(width,height);
              w.mSurface.setPosition(w.mShownFrame.left,w.mShownFrame.top);
            }
 catch (            RuntimeException e) {
              Log.e(TAG,"String_Node_Str" + w + "String_Node_Str"+ width+ "String_Node_Str"+ height+ "String_Node_Str"+ w.mShownFrame.left+ "String_Node_Str"+ w.mShownFrame.top+ "String_Node_Str",e);
              if (!recoveringMemory) {
                reclaimSomeSurfaceMemoryLocked(w,"String_Node_Str");
              }
            }
          }
        }
        if (!w.mAppFreezing) {
          w.mContentInsetsChanged=!w.mLastContentInsets.equals(w.mContentInsets);
          w.mVisibleInsetsChanged=!w.mLastVisibleInsets.equals(w.mVisibleInsets);
          if (!w.mLastFrame.equals(w.mFrame) || w.mContentInsetsChanged || w.mVisibleInsetsChanged) {
            w.mLastFrame.set(w.mFrame);
            w.mLastContentInsets.set(w.mContentInsets);
            w.mLastVisibleInsets.set(w.mVisibleInsets);
            if (w.mOrientationChanging) {
              if (DEBUG_ORIENTATION)               Log.v(TAG,"String_Node_Str" + w + "String_Node_Str"+ w.mSurface);
              w.mDrawPending=true;
              w.mCommitDrawPending=false;
              w.mReadyToShow=false;
              if (w.mAppToken != null) {
                w.mAppToken.allDrawn=false;
              }
            }
            if (DEBUG_ORIENTATION)             Log.v(TAG,"String_Node_Str" + w + "String_Node_Str"+ w.mFrame);
            mResizingWindows.add(w);
          }
 else           if (w.mOrientationChanging) {
            if (!w.mDrawPending && !w.mCommitDrawPending) {
              if (DEBUG_ORIENTATION)               Log.v(TAG,"String_Node_Str" + w + "String_Node_Str"+ w.mSurface);
              w.mOrientationChanging=false;
            }
          }
        }
        if (w.mAttachedHidden) {
          if (!w.mLastHidden) {
            w.mLastHidden=true;
            if (SHOW_TRANSACTIONS)             Log.i(TAG,"String_Node_Str" + w.mSurface + "String_Node_Str");
            if (w.mSurface != null) {
              try {
                w.mSurface.hide();
              }
 catch (              RuntimeException e) {
                Log.w(TAG,"String_Node_Str" + w);
              }
            }
            mKeyWaiter.releasePendingPointerLocked(w.mSession);
          }
          if (w.mOrientationChanging) {
            w.mOrientationChanging=false;
            if (DEBUG_ORIENTATION)             Log.v(TAG,"String_Node_Str" + w);
          }
        }
 else         if (!w.isReadyForDisplay()) {
          if (!w.mLastHidden) {
            w.mLastHidden=true;
            if (SHOW_TRANSACTIONS)             Log.i(TAG,"String_Node_Str" + w.mSurface + "String_Node_Str");
            if (w.mSurface != null) {
              try {
                w.mSurface.hide();
              }
 catch (              RuntimeException e) {
                Log.w(TAG,"String_Node_Str" + w);
              }
            }
            mKeyWaiter.releasePendingPointerLocked(w.mSession);
          }
          if (w.mOrientationChanging) {
            w.mOrientationChanging=false;
            if (DEBUG_ORIENTATION)             Log.v(TAG,"String_Node_Str" + w);
          }
        }
 else         if (w.mLastLayer != w.mAnimLayer || w.mLastAlpha != w.mShownAlpha || w.mLastDsDx != w.mDsDx || w.mLastDtDx != w.mDtDx || w.mLastDsDy != w.mDsDy || w.mLastDtDy != w.mDtDy || w.mLastHScale != w.mHScale || w.mLastVScale != w.mVScale || w.mLastHidden) {
          displayed=true;
          w.mLastAlpha=w.mShownAlpha;
          w.mLastLayer=w.mAnimLayer;
          w.mLastDsDx=w.mDsDx;
          w.mLastDtDx=w.mDtDx;
          w.mLastDsDy=w.mDsDy;
          w.mLastDtDy=w.mDtDy;
          w.mLastHScale=w.mHScale;
          w.mLastVScale=w.mVScale;
          if (SHOW_TRANSACTIONS)           Log.i(TAG,"String_Node_Str" + w.mSurface + "String_Node_Str"+ w.mShownAlpha+ "String_Node_Str"+ w.mAnimLayer);
          if (w.mSurface != null) {
            try {
              w.mSurface.setAlpha(w.mShownAlpha);
              w.mSurface.setLayer(w.mAnimLayer);
              w.mSurface.setMatrix(w.mDsDx * w.mHScale,w.mDtDx * w.mVScale,w.mDsDy * w.mHScale,w.mDtDy * w.mVScale);
            }
 catch (            RuntimeException e) {
              Log.w(TAG,"String_Node_Str" + w,e);
              if (!recoveringMemory) {
                reclaimSomeSurfaceMemoryLocked(w,"String_Node_Str");
              }
            }
          }
          if (w.mLastHidden && !w.mDrawPending && !w.mCommitDrawPending&& !w.mReadyToShow) {
            if (SHOW_TRANSACTIONS)             Log.i(TAG,"String_Node_Str" + w.mSurface + "String_Node_Str");
            if (DEBUG_VISIBILITY)             Log.v(TAG,"String_Node_Str" + w + "String_Node_Str");
            if (showSurfaceRobustlyLocked(w)) {
              w.mHasDrawn=true;
              w.mLastHidden=false;
            }
 else {
              w.mOrientationChanging=false;
            }
          }
          if (w.mSurface != null) {
            w.mToken.hasVisible=true;
          }
        }
 else {
          displayed=true;
        }
        if (displayed) {
          if (!covered) {
            if (attrs.width == LayoutParams.FILL_PARENT && attrs.height == LayoutParams.FILL_PARENT) {
              covered=true;
            }
          }
          if (w.mOrientationChanging) {
            if (w.mDrawPending || w.mCommitDrawPending) {
              orientationChangeComplete=false;
              if (DEBUG_ORIENTATION)               Log.v(TAG,"String_Node_Str" + w);
            }
 else {
              w.mOrientationChanging=false;
              if (DEBUG_ORIENTATION)               Log.v(TAG,"String_Node_Str" + w);
            }
          }
          w.mToken.hasVisible=true;
        }
      }
 else       if (w.mOrientationChanging) {
        if (DEBUG_ORIENTATION)         Log.v(TAG,"String_Node_Str" + w);
        w.mOrientationChanging=false;
      }
      final boolean canBeSeen=w.isDisplayedLw();
      if (someoneLosingFocus && w == mCurrentFocus && canBeSeen) {
        focusDisplayed=true;
      }
      if (!obscured) {
        if (w.mSurface != null) {
          if ((attrFlags & FLAG_KEEP_SCREEN_ON) != 0) {
            holdScreen=w.mSession;
          }
          if (!syswin && w.mAttrs.screenBrightness >= 0 && screenBrightness < 0) {
            screenBrightness=w.mAttrs.screenBrightness;
          }
          if (attrs.type == WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG || attrs.type == WindowManager.LayoutParams.TYPE_KEYGUARD || attrs.type == WindowManager.LayoutParams.TYPE_SYSTEM_ERROR) {
            syswin=true;
          }
        }
        boolean opaqueDrawn=w.isOpaqueDrawn();
        if (opaqueDrawn && w.isFullscreen(dw,dh)) {
          obscured=true;
        }
 else         if (opaqueDrawn && w.needsBackgroundFiller(dw,dh)) {
          if (SHOW_TRANSACTIONS)           Log.d(TAG,"String_Node_Str");
          obscured=true;
          if (mBackgroundFillerSurface == null) {
            try {
              mBackgroundFillerSurface=new Surface(mFxSession,0,0,dw,dh,PixelFormat.OPAQUE,Surface.FX_SURFACE_NORMAL);
            }
 catch (            Exception e) {
              Log.e(TAG,"String_Node_Str",e);
            }
          }
          try {
            mBackgroundFillerSurface.setPosition(0,0);
            mBackgroundFillerSurface.setSize(dw,dh);
            mBackgroundFillerSurface.setLayer(w.mAnimLayer - 1);
            mBackgroundFillerSurface.show();
          }
 catch (          RuntimeException e) {
            Log.e(TAG,"String_Node_Str");
          }
          backgroundFillerShown=true;
          mBackgroundFillerShown=true;
        }
 else         if (canBeSeen && !obscured && (attrFlags & FLAG_BLUR_BEHIND | FLAG_DIM_BEHIND) != 0) {
          if (localLOGV)           Log.v(TAG,"String_Node_Str" + w + "String_Node_Str"+ blurring+ "String_Node_Str"+ obscured+ "String_Node_Str"+ displayed);
          if ((attrFlags & FLAG_DIM_BEHIND) != 0) {
            if (!dimming) {
              dimming=true;
              if (mDimAnimator == null) {
                mDimAnimator=new DimAnimator(mFxSession);
              }
              mDimAnimator.show(dw,dh);
            }
            mDimAnimator.updateParameters(w,currentTime);
          }
          if ((attrFlags & FLAG_BLUR_BEHIND) != 0) {
            if (!blurring) {
              blurring=true;
              mBlurShown=true;
              if (mBlurSurface == null) {
                if (SHOW_TRANSACTIONS)                 Log.i(TAG,"String_Node_Str" + mBlurSurface + "String_Node_Str");
                try {
                  mBlurSurface=new Surface(mFxSession,0,-1,16,16,PixelFormat.OPAQUE,Surface.FX_SURFACE_BLUR);
                }
 catch (                Exception e) {
                  Log.e(TAG,"String_Node_Str",e);
                }
              }
              if (SHOW_TRANSACTIONS)               Log.i(TAG,"String_Node_Str" + mBlurSurface + "String_Node_Str"+ dw+ "String_Node_Str"+ dh+ "String_Node_Str"+ (w.mAnimLayer - 1));
              if (mBlurSurface != null) {
                mBlurSurface.setPosition(0,0);
                mBlurSurface.setSize(dw,dh);
                try {
                  mBlurSurface.show();
                }
 catch (                RuntimeException e) {
                  Log.w(TAG,"String_Node_Str",e);
                }
              }
            }
            mBlurSurface.setLayer(w.mAnimLayer - 2);
          }
        }
      }
    }
    if (backgroundFillerShown == false && mBackgroundFillerShown) {
      mBackgroundFillerShown=false;
      if (SHOW_TRANSACTIONS)       Log.d(TAG,"String_Node_Str");
      try {
        mBackgroundFillerSurface.hide();
      }
 catch (      RuntimeException e) {
        Log.e(TAG,"String_Node_Str",e);
      }
    }
    if (mDimAnimator != null && mDimAnimator.mDimShown) {
      animating|=mDimAnimator.updateSurface(dimming,currentTime,mDisplayFrozen);
    }
    if (!blurring && mBlurShown) {
      if (SHOW_TRANSACTIONS)       Log.i(TAG,"String_Node_Str" + mBlurSurface + "String_Node_Str");
      try {
        mBlurSurface.hide();
      }
 catch (      IllegalArgumentException e) {
        Log.w(TAG,"String_Node_Str");
      }
      mBlurShown=false;
    }
    if (SHOW_TRANSACTIONS)     Log.i(TAG,"String_Node_Str");
  }
 catch (  RuntimeException e) {
    Log.e(TAG,"String_Node_Str",e);
  }
  Surface.closeTransaction();
  if (DEBUG_ORIENTATION && mDisplayFrozen)   Log.v(TAG,"String_Node_Str" + orientationChangeComplete);
  if (orientationChangeComplete) {
    if (mWindowsFreezingScreen) {
      mWindowsFreezingScreen=false;
      mH.removeMessages(H.WINDOW_FREEZE_TIMEOUT);
    }
    if (mAppsFreezingScreen == 0) {
      stopFreezingDisplayLocked();
    }
  }
  i=mResizingWindows.size();
  if (i > 0) {
    do {
      i--;
      WindowState win=mResizingWindows.get(i);
      try {
        win.mClient.resized(win.mFrame.width(),win.mFrame.height(),win.mLastContentInsets,win.mLastVisibleInsets,win.mDrawPending);
        win.mContentInsetsChanged=false;
        win.mVisibleInsetsChanged=false;
      }
 catch (      RemoteException e) {
        win.mOrientationChanging=false;
      }
    }
 while (i > 0);
    mResizingWindows.clear();
  }
  i=mDestroySurface.size();
  if (i > 0) {
    do {
      i--;
      WindowState win=mDestroySurface.get(i);
      win.mDestroying=false;
      if (mInputMethodWindow == win) {
        mInputMethodWindow=null;
      }
      win.destroySurfaceLocked();
    }
 while (i > 0);
    mDestroySurface.clear();
  }
  for (i=mExitingTokens.size() - 1; i >= 0; i--) {
    WindowToken token=mExitingTokens.get(i);
    if (!token.hasVisible) {
      mExitingTokens.remove(i);
    }
  }
  for (i=mExitingAppTokens.size() - 1; i >= 0; i--) {
    AppWindowToken token=mExitingAppTokens.get(i);
    if (!token.hasVisible && !mClosingApps.contains(token)) {
      mAppTokens.remove(token);
      mExitingAppTokens.remove(i);
    }
  }
  if (focusDisplayed) {
    mH.sendEmptyMessage(H.REPORT_LOSING_FOCUS);
  }
  if (animating) {
    requestAnimationLocked(currentTime + (1000 / 60) - SystemClock.uptimeMillis());
  }
  mQueue.setHoldScreenLocked(holdScreen != null);
  if (screenBrightness < 0 || screenBrightness > 1.0f) {
    mPowerManager.setScreenBrightnessOverride(-1);
  }
 else {
    mPowerManager.setScreenBrightnessOverride((int)(screenBrightness * Power.BRIGHTNESS_ON));
  }
  if (holdScreen != mHoldingScreenOn) {
    mHoldingScreenOn=holdScreen;
    Message m=mH.obtainMessage(H.HOLD_SCREEN_CHANGED,holdScreen);
    mH.sendMessage(m);
  }
}

Fixed version (ground truth):
private final void performLayoutAndPlaceSurfacesLockedInner(boolean recoveringMemory){
  final long currentTime=SystemClock.uptimeMillis();
  final int dw=mDisplay.getWidth();
  final int dh=mDisplay.getHeight();
  final int N=mWindows.size();
  int i;
  performLayoutLockedInner();
  if (mFxSession == null) {
    mFxSession=new SurfaceSession();
  }
  if (SHOW_TRANSACTIONS)   Log.i(TAG,"String_Node_Str");
  for (i=mExitingTokens.size() - 1; i >= 0; i--) {
    mExitingTokens.get(i).hasVisible=false;
  }
  for (i=mExitingAppTokens.size() - 1; i >= 0; i--) {
    mExitingAppTokens.get(i).hasVisible=false;
  }
  boolean orientationChangeComplete=true;
  Session holdScreen=null;
  float screenBrightness=-1;
  boolean focusDisplayed=false;
  boolean animating=false;
  Surface.openTransaction();
  try {
    boolean restart;
    do {
      final int transactionSequence=++mTransactionSequence;
      boolean tokensAnimating=false;
      final int NAT=mAppTokens.size();
      for (i=0; i < NAT; i++) {
        if (mAppTokens.get(i).stepAnimationLocked(currentTime,dw,dh)) {
          tokensAnimating=true;
        }
      }
      final int NEAT=mExitingAppTokens.size();
      for (i=0; i < NEAT; i++) {
        if (mExitingAppTokens.get(i).stepAnimationLocked(currentTime,dw,dh)) {
          tokensAnimating=true;
        }
      }
      animating=tokensAnimating;
      restart=false;
      boolean tokenMayBeDrawn=false;
      mPolicy.beginAnimationLw(dw,dh);
      for (i=N - 1; i >= 0; i--) {
        WindowState w=(WindowState)mWindows.get(i);
        final WindowManager.LayoutParams attrs=w.mAttrs;
        if (w.mSurface != null) {
          w.commitFinishDrawingLocked(currentTime);
          if (w.stepAnimationLocked(currentTime,dw,dh)) {
            animating=true;
          }
          mPolicy.animatingWindowLw(w,attrs);
        }
        final AppWindowToken atoken=w.mAppToken;
        if (atoken != null && (!atoken.allDrawn || atoken.freezingScreen)) {
          if (atoken.lastTransactionSequence != transactionSequence) {
            atoken.lastTransactionSequence=transactionSequence;
            atoken.numInterestingWindows=atoken.numDrawnWindows=0;
            atoken.startingDisplayed=false;
          }
          if ((w.isOnScreen() || w.mAttrs.type == WindowManager.LayoutParams.TYPE_BASE_APPLICATION) && !w.mExiting && !w.mDestroying) {
            if (DEBUG_VISIBILITY || DEBUG_ORIENTATION) {
              Log.v(TAG,"String_Node_Str" + w + "String_Node_Str"+ w.isDisplayedLw()+ "String_Node_Str"+ w.isAnimating());
              if (!w.isDisplayedLw()) {
                Log.v(TAG,"String_Node_Str" + w.mSurface + "String_Node_Str"+ w.mPolicyVisibility+ "String_Node_Str"+ w.mDrawPending+ "String_Node_Str"+ w.mCommitDrawPending+ "String_Node_Str"+ w.mAttachedHidden+ "String_Node_Str"+ atoken.hiddenRequested+ "String_Node_Str"+ w.mAnimating);
              }
            }
            if (w != atoken.startingWindow) {
              if (!atoken.freezingScreen || !w.mAppFreezing) {
                atoken.numInterestingWindows++;
                if (w.isDisplayedLw()) {
                  atoken.numDrawnWindows++;
                  if (DEBUG_VISIBILITY || DEBUG_ORIENTATION)                   Log.v(TAG,"String_Node_Str" + atoken + "String_Node_Str"+ atoken.freezingScreen+ "String_Node_Str"+ w.mAppFreezing);
                  tokenMayBeDrawn=true;
                }
              }
            }
 else             if (w.isDisplayedLw()) {
              atoken.startingDisplayed=true;
            }
          }
        }
 else         if (w.mReadyToShow) {
          w.performShowLocked();
        }
      }
      if (mPolicy.finishAnimationLw()) {
        restart=true;
      }
      if (tokenMayBeDrawn) {
        final int NT=mTokenList.size();
        for (i=0; i < NT; i++) {
          AppWindowToken wtoken=mTokenList.get(i).appWindowToken;
          if (wtoken == null) {
            continue;
          }
          if (wtoken.freezingScreen) {
            int numInteresting=wtoken.numInterestingWindows;
            if (numInteresting > 0 && wtoken.numDrawnWindows >= numInteresting) {
              if (DEBUG_VISIBILITY)               Log.v(TAG,"String_Node_Str" + wtoken + "String_Node_Str"+ numInteresting+ "String_Node_Str"+ wtoken.numDrawnWindows);
              wtoken.showAllWindowsLocked();
              unsetAppFreezingScreenLocked(wtoken,false,true);
              orientationChangeComplete=true;
            }
          }
 else           if (!wtoken.allDrawn) {
            int numInteresting=wtoken.numInterestingWindows;
            if (numInteresting > 0 && wtoken.numDrawnWindows >= numInteresting) {
              if (DEBUG_VISIBILITY)               Log.v(TAG,"String_Node_Str" + wtoken + "String_Node_Str"+ numInteresting+ "String_Node_Str"+ wtoken.numDrawnWindows);
              wtoken.allDrawn=true;
              restart=true;
              if (!mOpeningApps.contains(wtoken)) {
                wtoken.showAllWindowsLocked();
              }
            }
          }
        }
      }
      if (mAppTransitionReady) {
        int NN=mOpeningApps.size();
        boolean goodToGo=true;
        if (DEBUG_APP_TRANSITIONS)         Log.v(TAG,"String_Node_Str" + NN + "String_Node_Str"+ mDisplayFrozen+ "String_Node_Str"+ mAppTransitionTimeout+ "String_Node_Str");
        if (!mDisplayFrozen && !mAppTransitionTimeout) {
          for (i=0; i < NN && goodToGo; i++) {
            AppWindowToken wtoken=mOpeningApps.get(i);
            if (DEBUG_APP_TRANSITIONS)             Log.v(TAG,"String_Node_Str" + wtoken + "String_Node_Str"+ wtoken.allDrawn+ "String_Node_Str"+ wtoken.startingDisplayed);
            if (!wtoken.allDrawn && !wtoken.startingDisplayed && !wtoken.startingMoved) {
              goodToGo=false;
            }
          }
        }
        if (goodToGo) {
          if (DEBUG_APP_TRANSITIONS)           Log.v(TAG,"String_Node_Str");
          int transit=mNextAppTransition;
          if (mSkipAppTransitionAnimation) {
            transit=WindowManagerPolicy.TRANSIT_NONE;
          }
          mNextAppTransition=WindowManagerPolicy.TRANSIT_NONE;
          mAppTransitionReady=false;
          mAppTransitionTimeout=false;
          mStartingIconInTransition=false;
          mSkipAppTransitionAnimation=false;
          mH.removeMessages(H.APP_TRANSITION_TIMEOUT);
          WindowManager.LayoutParams lp=findAnimations(mAppTokens,mOpeningApps,mClosingApps);
          NN=mOpeningApps.size();
          for (i=0; i < NN; i++) {
            AppWindowToken wtoken=mOpeningApps.get(i);
            if (DEBUG_APP_TRANSITIONS)             Log.v(TAG,"String_Node_Str" + wtoken);
            wtoken.reportedVisible=false;
            wtoken.inPendingTransaction=false;
            setTokenVisibilityLocked(wtoken,lp,true,transit,false);
            wtoken.updateReportedVisibilityLocked();
            wtoken.showAllWindowsLocked();
          }
          NN=mClosingApps.size();
          for (i=0; i < NN; i++) {
            AppWindowToken wtoken=mClosingApps.get(i);
            if (DEBUG_APP_TRANSITIONS)             Log.v(TAG,"String_Node_Str" + wtoken);
            wtoken.inPendingTransaction=false;
            setTokenVisibilityLocked(wtoken,lp,false,transit,false);
            wtoken.updateReportedVisibilityLocked();
            wtoken.allDrawn=true;
          }
          mOpeningApps.clear();
          mClosingApps.clear();
          mLayoutNeeded=true;
          if (!moveInputMethodWindowsIfNeededLocked(true)) {
            assignLayersLocked();
          }
          performLayoutLockedInner();
          updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES);
          restart=true;
        }
      }
    }
 while (restart);
    final boolean someoneLosingFocus=mLosingFocus.size() != 0;
    boolean obscured=false;
    boolean blurring=false;
    boolean dimming=false;
    boolean covered=false;
    boolean syswin=false;
    boolean backgroundFillerShown=false;
    for (i=N - 1; i >= 0; i--) {
      WindowState w=(WindowState)mWindows.get(i);
      boolean displayed=false;
      final WindowManager.LayoutParams attrs=w.mAttrs;
      final int attrFlags=attrs.flags;
      if (w.mSurface != null) {
        w.computeShownFrameLocked();
        if (localLOGV)         Log.v(TAG,"String_Node_Str" + i + "String_Node_Str"+ w.mSurface+ "String_Node_Str"+ w.mShownFrame+ "String_Node_Str"+ w.mLastShownFrame);
        boolean resize;
        int width, height;
        if ((w.mAttrs.flags & w.mAttrs.FLAG_SCALED) != 0) {
          resize=w.mLastRequestedWidth != w.mRequestedWidth || w.mLastRequestedHeight != w.mRequestedHeight;
          width=w.mRequestedWidth;
          height=w.mRequestedHeight;
          w.mLastRequestedWidth=width;
          w.mLastRequestedHeight=height;
          w.mLastShownFrame.set(w.mShownFrame);
          try {
            w.mSurface.setPosition(w.mShownFrame.left,w.mShownFrame.top);
          }
 catch (          RuntimeException e) {
            Log.w(TAG,"String_Node_Str" + w,e);
            if (!recoveringMemory) {
              reclaimSomeSurfaceMemoryLocked(w,"String_Node_Str");
            }
          }
        }
 else {
          resize=!w.mLastShownFrame.equals(w.mShownFrame);
          width=w.mShownFrame.width();
          height=w.mShownFrame.height();
          w.mLastShownFrame.set(w.mShownFrame);
          if (resize) {
            if (SHOW_TRANSACTIONS)             Log.i(TAG,"String_Node_Str" + w.mSurface + "String_Node_Str"+ w.mShownFrame.left+ "String_Node_Str"+ w.mShownFrame.top+ "String_Node_Str"+ w.mShownFrame.width()+ "String_Node_Str"+ w.mShownFrame.height()+ "String_Node_Str");
          }
        }
        if (resize) {
          if (width < 1)           width=1;
          if (height < 1)           height=1;
          if (w.mSurface != null) {
            try {
              w.mSurface.setSize(width,height);
              w.mSurface.setPosition(w.mShownFrame.left,w.mShownFrame.top);
            }
 catch (            RuntimeException e) {
              Log.e(TAG,"String_Node_Str" + w + "String_Node_Str"+ width+ "String_Node_Str"+ height+ "String_Node_Str"+ w.mShownFrame.left+ "String_Node_Str"+ w.mShownFrame.top+ "String_Node_Str",e);
              if (!recoveringMemory) {
                reclaimSomeSurfaceMemoryLocked(w,"String_Node_Str");
              }
            }
          }
        }
        if (!w.mAppFreezing) {
          w.mContentInsetsChanged=!w.mLastContentInsets.equals(w.mContentInsets);
          w.mVisibleInsetsChanged=!w.mLastVisibleInsets.equals(w.mVisibleInsets);
          if (!w.mLastFrame.equals(w.mFrame) || w.mContentInsetsChanged || w.mVisibleInsetsChanged) {
            w.mLastFrame.set(w.mFrame);
            w.mLastContentInsets.set(w.mContentInsets);
            w.mLastVisibleInsets.set(w.mVisibleInsets);
            if (w.mOrientationChanging) {
              if (DEBUG_ORIENTATION)               Log.v(TAG,"String_Node_Str" + w + "String_Node_Str"+ w.mSurface);
              w.mDrawPending=true;
              w.mCommitDrawPending=false;
              w.mReadyToShow=false;
              if (w.mAppToken != null) {
                w.mAppToken.allDrawn=false;
              }
            }
            if (DEBUG_ORIENTATION)             Log.v(TAG,"String_Node_Str" + w + "String_Node_Str"+ w.mFrame);
            mResizingWindows.add(w);
          }
 else           if (w.mOrientationChanging) {
            if (!w.mDrawPending && !w.mCommitDrawPending) {
              if (DEBUG_ORIENTATION)               Log.v(TAG,"String_Node_Str" + w + "String_Node_Str"+ w.mSurface);
              w.mOrientationChanging=false;
            }
          }
        }
        if (w.mAttachedHidden) {
          if (!w.mLastHidden) {
            w.mLastHidden=true;
            if (SHOW_TRANSACTIONS)             Log.i(TAG,"String_Node_Str" + w.mSurface + "String_Node_Str");
            if (w.mSurface != null) {
              try {
                w.mSurface.hide();
              }
 catch (              RuntimeException e) {
                Log.w(TAG,"String_Node_Str" + w);
              }
            }
            mKeyWaiter.releasePendingPointerLocked(w.mSession);
          }
          if (w.mOrientationChanging) {
            w.mOrientationChanging=false;
            if (DEBUG_ORIENTATION)             Log.v(TAG,"String_Node_Str" + w);
          }
        }
 else         if (!w.isReadyForDisplay()) {
          if (!w.mLastHidden) {
            w.mLastHidden=true;
            if (SHOW_TRANSACTIONS)             Log.i(TAG,"String_Node_Str" + w.mSurface + "String_Node_Str");
            if (w.mSurface != null) {
              try {
                w.mSurface.hide();
              }
 catch (              RuntimeException e) {
                Log.w(TAG,"String_Node_Str" + w);
              }
            }
            mKeyWaiter.releasePendingPointerLocked(w.mSession);
          }
          if (w.mOrientationChanging) {
            w.mOrientationChanging=false;
            if (DEBUG_ORIENTATION)             Log.v(TAG,"String_Node_Str" + w);
          }
        }
 else         if (w.mLastLayer != w.mAnimLayer || w.mLastAlpha != w.mShownAlpha || w.mLastDsDx != w.mDsDx || w.mLastDtDx != w.mDtDx || w.mLastDsDy != w.mDsDy || w.mLastDtDy != w.mDtDy || w.mLastHScale != w.mHScale || w.mLastVScale != w.mVScale || w.mLastHidden) {
          displayed=true;
          w.mLastAlpha=w.mShownAlpha;
          w.mLastLayer=w.mAnimLayer;
          w.mLastDsDx=w.mDsDx;
          w.mLastDtDx=w.mDtDx;
          w.mLastDsDy=w.mDsDy;
          w.mLastDtDy=w.mDtDy;
          w.mLastHScale=w.mHScale;
          w.mLastVScale=w.mVScale;
          if (SHOW_TRANSACTIONS)           Log.i(TAG,"String_Node_Str" + w.mSurface + "String_Node_Str"+ w.mShownAlpha+ "String_Node_Str"+ w.mAnimLayer);
          if (w.mSurface != null) {
            try {
              w.mSurface.setAlpha(w.mShownAlpha);
              w.mSurface.setLayer(w.mAnimLayer);
              w.mSurface.setMatrix(w.mDsDx * w.mHScale,w.mDtDx * w.mVScale,w.mDsDy * w.mHScale,w.mDtDy * w.mVScale);
            }
 catch (            RuntimeException e) {
              Log.w(TAG,"String_Node_Str" + w,e);
              if (!recoveringMemory) {
                reclaimSomeSurfaceMemoryLocked(w,"String_Node_Str");
              }
            }
          }
          if (w.mLastHidden && !w.mDrawPending && !w.mCommitDrawPending&& !w.mReadyToShow) {
            if (SHOW_TRANSACTIONS)             Log.i(TAG,"String_Node_Str" + w.mSurface + "String_Node_Str");
            if (DEBUG_VISIBILITY)             Log.v(TAG,"String_Node_Str" + w + "String_Node_Str");
            if (showSurfaceRobustlyLocked(w)) {
              w.mHasDrawn=true;
              w.mLastHidden=false;
            }
 else {
              w.mOrientationChanging=false;
            }
          }
          if (w.mSurface != null) {
            w.mToken.hasVisible=true;
          }
        }
 else {
          displayed=true;
        }
        if (displayed) {
          if (!covered) {
            if (attrs.width == LayoutParams.FILL_PARENT && attrs.height == LayoutParams.FILL_PARENT) {
              covered=true;
            }
          }
          if (w.mOrientationChanging) {
            if (w.mDrawPending || w.mCommitDrawPending) {
              orientationChangeComplete=false;
              if (DEBUG_ORIENTATION)               Log.v(TAG,"String_Node_Str" + w);
            }
 else {
              w.mOrientationChanging=false;
              if (DEBUG_ORIENTATION)               Log.v(TAG,"String_Node_Str" + w);
            }
          }
          w.mToken.hasVisible=true;
        }
      }
 else       if (w.mOrientationChanging) {
        if (DEBUG_ORIENTATION)         Log.v(TAG,"String_Node_Str" + w);
        w.mOrientationChanging=false;
      }
      final boolean canBeSeen=w.isDisplayedLw();
      if (someoneLosingFocus && w == mCurrentFocus && canBeSeen) {
        focusDisplayed=true;
      }
      if (!obscured) {
        if (w.mSurface != null) {
          if ((attrFlags & FLAG_KEEP_SCREEN_ON) != 0) {
            holdScreen=w.mSession;
          }
          if (!syswin && w.mAttrs.screenBrightness >= 0 && screenBrightness < 0) {
            screenBrightness=w.mAttrs.screenBrightness;
          }
          if (attrs.type == WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG || attrs.type == WindowManager.LayoutParams.TYPE_KEYGUARD || attrs.type == WindowManager.LayoutParams.TYPE_SYSTEM_ERROR) {
            syswin=true;
          }
        }
        boolean opaqueDrawn=w.isOpaqueDrawn();
        if (opaqueDrawn && w.isFullscreen(dw,dh)) {
          obscured=true;
        }
 else         if (opaqueDrawn && w.needsBackgroundFiller(dw,dh)) {
          if (SHOW_TRANSACTIONS)           Log.d(TAG,"String_Node_Str");
          obscured=true;
          if (mBackgroundFillerSurface == null) {
            try {
              mBackgroundFillerSurface=new Surface(mFxSession,0,0,dw,dh,PixelFormat.OPAQUE,Surface.FX_SURFACE_NORMAL);
            }
 catch (            Exception e) {
              Log.e(TAG,"String_Node_Str",e);
            }
          }
          try {
            mBackgroundFillerSurface.setPosition(0,0);
            mBackgroundFillerSurface.setSize(dw,dh);
            mBackgroundFillerSurface.setLayer(w.mAnimLayer - 1);
            mBackgroundFillerSurface.show();
          }
 catch (          RuntimeException e) {
            Log.e(TAG,"String_Node_Str");
          }
          backgroundFillerShown=true;
          mBackgroundFillerShown=true;
        }
 else         if (canBeSeen && !obscured && (attrFlags & FLAG_BLUR_BEHIND | FLAG_DIM_BEHIND) != 0) {
          if (localLOGV)           Log.v(TAG,"String_Node_Str" + w + "String_Node_Str"+ blurring+ "String_Node_Str"+ obscured+ "String_Node_Str"+ displayed);
          if ((attrFlags & FLAG_DIM_BEHIND) != 0) {
            if (!dimming) {
              dimming=true;
              if (mDimAnimator == null) {
                mDimAnimator=new DimAnimator(mFxSession);
              }
              mDimAnimator.show(dw,dh);
            }
            mDimAnimator.updateParameters(w,currentTime);
          }
          if ((attrFlags & FLAG_BLUR_BEHIND) != 0) {
            if (!blurring) {
              blurring=true;
              mBlurShown=true;
              if (mBlurSurface == null) {
                if (SHOW_TRANSACTIONS)                 Log.i(TAG,"String_Node_Str" + mBlurSurface + "String_Node_Str");
                try {
                  mBlurSurface=new Surface(mFxSession,0,-1,16,16,PixelFormat.OPAQUE,Surface.FX_SURFACE_BLUR);
                }
 catch (                Exception e) {
                  Log.e(TAG,"String_Node_Str",e);
                }
              }
              if (SHOW_TRANSACTIONS)               Log.i(TAG,"String_Node_Str" + mBlurSurface + "String_Node_Str"+ dw+ "String_Node_Str"+ dh+ "String_Node_Str"+ (w.mAnimLayer - 1));
              if (mBlurSurface != null) {
                mBlurSurface.setPosition(0,0);
                mBlurSurface.setSize(dw,dh);
                try {
                  mBlurSurface.show();
                }
 catch (                RuntimeException e) {
                  Log.w(TAG,"String_Node_Str",e);
                }
              }
            }
            mBlurSurface.setLayer(w.mAnimLayer - 2);
          }
        }
      }
    }
    if (backgroundFillerShown == false && mBackgroundFillerShown) {
      mBackgroundFillerShown=false;
      if (SHOW_TRANSACTIONS)       Log.d(TAG,"String_Node_Str");
      try {
        mBackgroundFillerSurface.hide();
      }
 catch (      RuntimeException e) {
        Log.e(TAG,"String_Node_Str",e);
      }
    }
    if (mDimAnimator != null && mDimAnimator.mDimShown) {
      animating|=mDimAnimator.updateSurface(dimming,currentTime,mDisplayFrozen);
    }
    if (!blurring && mBlurShown) {
      if (SHOW_TRANSACTIONS)       Log.i(TAG,"String_Node_Str" + mBlurSurface + "String_Node_Str");
      try {
        mBlurSurface.hide();
      }
 catch (      IllegalArgumentException e) {
        Log.w(TAG,"String_Node_Str");
      }
      mBlurShown=false;
    }
    if (SHOW_TRANSACTIONS)     Log.i(TAG,"String_Node_Str");
  }
 catch (  RuntimeException e) {
    Log.e(TAG,"String_Node_Str",e);
  }
  Surface.closeTransaction();
  if (DEBUG_ORIENTATION && mDisplayFrozen)   Log.v(TAG,"String_Node_Str" + orientationChangeComplete);
  if (orientationChangeComplete) {
    if (mWindowsFreezingScreen) {
      mWindowsFreezingScreen=false;
      mH.removeMessages(H.WINDOW_FREEZE_TIMEOUT);
    }
    if (mAppsFreezingScreen == 0) {
      stopFreezingDisplayLocked();
    }
  }
  i=mResizingWindows.size();
  if (i > 0) {
    do {
      i--;
      WindowState win=mResizingWindows.get(i);
      try {
        win.mClient.resized(win.mFrame.width(),win.mFrame.height(),win.mLastContentInsets,win.mLastVisibleInsets,win.mDrawPending);
        win.mContentInsetsChanged=false;
        win.mVisibleInsetsChanged=false;
      }
 catch (      RemoteException e) {
        win.mOrientationChanging=false;
      }
    }
 while (i > 0);
    mResizingWindows.clear();
  }
  i=mDestroySurface.size();
  if (i > 0) {
    do {
      i--;
      WindowState win=mDestroySurface.get(i);
      win.mDestroying=false;
      if (mInputMethodWindow == win) {
        mInputMethodWindow=null;
      }
      win.destroySurfaceLocked();
    }
 while (i > 0);
    mDestroySurface.clear();
  }
  for (i=mExitingTokens.size() - 1; i >= 0; i--) {
    WindowToken token=mExitingTokens.get(i);
    if (!token.hasVisible) {
      mExitingTokens.remove(i);
    }
  }
  for (i=mExitingAppTokens.size() - 1; i >= 0; i--) {
    AppWindowToken token=mExitingAppTokens.get(i);
    if (!token.hasVisible && !mClosingApps.contains(token)) {
      mAppTokens.remove(token);
      mExitingAppTokens.remove(i);
    }
  }
  if (focusDisplayed) {
    mH.sendEmptyMessage(H.REPORT_LOSING_FOCUS);
  }
  if (animating) {
    requestAnimationLocked(currentTime + (1000 / 60) - SystemClock.uptimeMillis());
  }
  mQueue.setHoldScreenLocked(holdScreen != null);
  if (screenBrightness < 0 || screenBrightness > 1.0f) {
    mPowerManager.setScreenBrightnessOverride(-1);
  }
 else {
    mPowerManager.setScreenBrightnessOverride((int)(screenBrightness * Power.BRIGHTNESS_ON));
  }
  if (holdScreen != mHoldingScreenOn) {
    mHoldingScreenOn=holdScreen;
    Message m=mH.obtainMessage(H.HOLD_SCREEN_CHANGED,holdScreen);
    mH.sendMessage(m);
  }
}