public void onWindowTransitionLocked(WindowState windowState, int transition) {
   if (DEBUG_WINDOW_TRANSITIONS) {
     Slog.i(
         LOG_TAG,
         "Window transition: "
             + AppTransition.appTransitionToString(transition)
             + " displayId: "
             + windowState.getDisplayId());
   }
   final boolean magnifying = mMagnifedViewport.isMagnifyingLocked();
   final int type = windowState.mAttrs.type;
   switch (transition) {
     case WindowManagerPolicy.TRANSIT_ENTER:
     case WindowManagerPolicy.TRANSIT_SHOW:
       {
         if (!magnifying) {
           break;
         }
         switch (type) {
           case WindowManager.LayoutParams.TYPE_APPLICATION:
           case WindowManager.LayoutParams.TYPE_APPLICATION_PANEL:
           case WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA:
           case WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL:
           case WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG:
           case WindowManager.LayoutParams.TYPE_SEARCH_BAR:
           case WindowManager.LayoutParams.TYPE_PHONE:
           case WindowManager.LayoutParams.TYPE_SYSTEM_ALERT:
           case WindowManager.LayoutParams.TYPE_TOAST:
           case WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY:
           case WindowManager.LayoutParams.TYPE_PRIORITY_PHONE:
           case WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG:
           case WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG:
           case WindowManager.LayoutParams.TYPE_SYSTEM_ERROR:
           case WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY:
           case WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL:
           case WindowManager.LayoutParams.TYPE_RECENTS_OVERLAY:
             {
               Rect magnifiedRegionBounds = mTempRect2;
               mMagnifedViewport.getMagnifiedFrameInContentCoordsLocked(magnifiedRegionBounds);
               Rect touchableRegionBounds = mTempRect1;
               windowState.getTouchableRegion(mTempRegion1);
               mTempRegion1.getBounds(touchableRegionBounds);
               if (!magnifiedRegionBounds.intersect(touchableRegionBounds)) {
                 try {
                   mCallbacks.onRectangleOnScreenRequested(
                       touchableRegionBounds.left,
                       touchableRegionBounds.top,
                       touchableRegionBounds.right,
                       touchableRegionBounds.bottom);
                 } catch (RemoteException re) {
                   /* ignore */
                 }
               }
             }
             break;
         }
         break;
       }
   }
 }
 public void onWindowLayersChangedLocked() {
   if (DEBUG_LAYERS) {
     Slog.i(LOG_TAG, "Layers changed.");
   }
   mMagnifedViewport.recomputeBoundsLocked();
   mWindowManagerService.scheduleAnimationLocked();
 }
 public void onRectangleOnScreenRequestedLocked(Rect rectangle, boolean immediate) {
   if (DEBUG_RECTANGLE_REQUESTED) {
     Slog.i(LOG_TAG, "Rectangle on screen requested: " + rectangle);
   }
   if (!mMagnifedViewport.isMagnifyingLocked()) {
     return;
   }
   Rect magnifiedRegionBounds = mTempRect2;
   mMagnifedViewport.getMagnifiedFrameInContentCoordsLocked(magnifiedRegionBounds);
   if (magnifiedRegionBounds.contains(rectangle)) {
     return;
   }
   SomeArgs args = SomeArgs.obtain();
   args.argi1 = rectangle.left;
   args.argi2 = rectangle.top;
   args.argi3 = rectangle.right;
   args.argi4 = rectangle.bottom;
   mHandler
       .obtainMessage(MyHandler.MESSAGE_NOTIFY_RECTANGLE_ON_SCREEN_REQUESTED, args)
       .sendToTarget();
 }
 public MagnificationSpec getMagnificationSpecForWindowLocked(WindowState windowState) {
   MagnificationSpec spec = mMagnifedViewport.getMagnificationSpecLocked();
   if (spec != null && !spec.isNop()) {
     WindowManagerPolicy policy = mWindowManagerService.mPolicy;
     final int windowType = windowState.mAttrs.type;
     if (!policy.isTopLevelWindow(windowType)
         && windowState.mAttachedWindow != null
         && !policy.canMagnifyWindow(windowType)) {
       return null;
     }
     if (!policy.canMagnifyWindow(windowState.mAttrs.type)) {
       return null;
     }
   }
   return spec;
 }
 public void onAppWindowTransitionLocked(WindowState windowState, int transition) {
   if (DEBUG_WINDOW_TRANSITIONS) {
     Slog.i(
         LOG_TAG,
         "Window transition: "
             + AppTransition.appTransitionToString(transition)
             + " displayId: "
             + windowState.getDisplayId());
   }
   final boolean magnifying = mMagnifedViewport.isMagnifyingLocked();
   if (magnifying) {
     switch (transition) {
       case AppTransition.TRANSIT_ACTIVITY_OPEN:
       case AppTransition.TRANSIT_TASK_OPEN:
       case AppTransition.TRANSIT_TASK_TO_FRONT:
       case AppTransition.TRANSIT_WALLPAPER_OPEN:
       case AppTransition.TRANSIT_WALLPAPER_CLOSE:
       case AppTransition.TRANSIT_WALLPAPER_INTRA_OPEN:
         {
           mHandler.sendEmptyMessage(MyHandler.MESSAGE_NOTIFY_USER_CONTEXT_CHANGED);
         }
     }
   }
 }
 public void setMagnificationSpecLocked(MagnificationSpec spec) {
   mMagnifedViewport.updateMagnificationSpecLocked(spec);
   mMagnifedViewport.recomputeBoundsLocked();
   mWindowManagerService.scheduleAnimationLocked();
 }
 /** NOTE: This has to be called within a surface transaction. */
 public void drawMagnifiedRegionBorderIfNeededLocked() {
   mMagnifedViewport.drawWindowIfNeededLocked();
 }
 public void destroyLocked() {
   mMagnifedViewport.destroyWindow();
 }