android 设置屏幕固定,android修改framework固定屏幕

public boolean updateRotationUncheckedLocked(boolean inTransaction) {

if (mDeferredRotationPauseCount > 0) {

// Rotation updates have been paused temporarily. Defer the update until

// updates have been resumed.

if (DEBUG_ORIENTATION) Slog.v(TAG, "Deferring rotation, rotation is paused." );

return false ;

}

ScreenRotationAnimation screenRotationAnimation =

mAnimator.getScreenRotationAnimationLocked(Display.DEFAULT_DISPLAY);

if (screenRotationAnimation != null && screenRotationAnimation.isAnimating()) {

// Rotation updates cannot be performed while the previous rotation change

// animation is still in progress. Skip this update. We will try updating

// again after the animation is finished and the display is unfrozen.

if (DEBUG_ORIENTATION) Slog.v(TAG, "Deferring rotation, animation in progress." );

return false ;

}

if (!mDisplayEnabled) {

// No point choosing a rotation if the display is not enabled.

if (DEBUG_ORIENTATION) Slog.v(TAG, "Deferring rotation, display is not enabled." );

return false ;

}

// TODO: Implement forced rotation changes.

// Set mAltOrientation to indicate that the application is receiving

// an orientation that has different metrics than it expected.

// eg. Portrait instead of Landscape.

int rotation = mPolicy.rotationForOrientationLw(mForcedAppOrientation, mRotation);

boolean altOrientation = !mPolicy.rotationHasCompatibleMetricsLw(

mForcedAppOrientation, rotation);

if (DEBUG_ORIENTATION) {

Slog.v(TAG, "Application requested orientation "

+ mForcedAppOrientation + ", got rotation " + rotation

+ " which has " + (altOrientation ? "incompatible" : "compatible" )

+ " metrics");

}

// add by ytmfdw

rotation=0;    //修改这里,0:竖屏,3:横屏

if (mRotation == rotation && mAltOrientation == altOrientation) {

// No change.

return false ;

}

if (DEBUG_ORIENTATION) {

Slog.v(TAG,

"Rotation changed to " + rotation + (altOrientation ? " (alt)" : "" )

+ " from " + mRotation + (mAltOrientation ? " (alt)" : "" )

+ ", forceApp=" + mForcedAppOrientation);

}

mRotation = rotation;

mAltOrientation = altOrientation;

mPolicy.setRotationLw(mRotation);

mWindowsFreezingScreen = true;

mH.removeMessages(H.WINDOW_FREEZE_TIMEOUT);

mH.sendMessageDelayed(mH.obtainMessage(H.WINDOW_FREEZE_TIMEOUT),

WINDOW_FREEZE_TIMEOUT_DURATION);

mWaitingForConfig = true;

getDefaultDisplayContentLocked().layoutNeeded = true;

startFreezingDisplayLocked(inTransaction, 0, 0);

// startFreezingDisplayLocked can reset the ScreenRotationAnimation.

screenRotationAnimation =

mAnimator.getScreenRotationAnimationLocked(Display.DEFAULT_DISPLAY);

// We need to update our screen size information to match the new

// rotation. Note that this is redundant with the later call to

// sendNewConfiguration() that must be called after this function

// returns... however we need to do the screen size part of that

// before then so we have the correct size to use when initializing

// the rotation animation for the new rotation.

computeScreenConfigurationLocked( null);

final DisplayContent displayContent = getDefaultDisplayContentLocked();

final DisplayInfo displayInfo = displayContent.getDisplayInfo();

if (!inTransaction) {

if (SHOW_TRANSACTIONS) {

Slog.i(TAG, ">>> OPEN TRANSACTION setRotationUnchecked");

}

Surface.openTransaction();

}

try {

// NOTE: We disable the rotation in the emulator because

// it doesn't support hardware OpenGL emulation yet.

if (CUSTOM_SCREEN_ROTATION && screenRotationAnimation != null

&& screenRotationAnimation.hasScreenshot()) {

if (screenRotationAnimation.setRotationInTransaction(

rotation, mFxSession,

MAX_ANIMATION_DURATION, mTransitionAnimationScale,

displayInfo.logicalWidth, displayInfo.logicalHeight)) {

updateLayoutToAnimationLocked();

}

}

mDisplayManagerService.performTraversalInTransactionFromWindowManager();

} finally {

if (!inTransaction) {

Surface.closeTransaction();

if (SHOW_LIGHT_TRANSACTIONS) {

Slog.i(TAG, "<<< CLOSE TRANSACTION setRotationUnchecked");

}

}

}

final WindowList windows = displayContent.getWindowList();

for (int i = windows.size() - 1; i >= 0; i--) {

WindowState w = windows.get(i);

if (w.mHasSurface) {

if (DEBUG_ORIENTATION) Slog.v(TAG, "Set mOrientationChanging of " + w);

w.mOrientationChanging = true;

mInnerFields.mOrientationChangeComplete = false;

}

}

for (int i=mRotationWatchers.size()-1; i>=0; i--) {

try {

mRotationWatchers.get(i).onRotationChanged(rotation);

} catch (RemoteException e) {

}

}

scheduleNotifyRotationChangedIfNeededLocked(displayContent, rotation);

return true ;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值