1、com/android/incallui/InCallOrientationEventListener.java
手機設備旋轉時回調的方法:
@Override
public void onOrientationChanged(int rotation) {
if (rotation == OrientationEventListener.ORIENTATION_UNKNOWN) {
return;
}
final int orientation = toScreenOrientation(rotation);
if (orientation != SCREEN_ORIENTATION_UNKNOWN && sCurrentOrientation != orientation) {
sCurrentOrientation = orientation;
InCallPresenter.getInstance().onDeviceOrientationChange(sCurrentOrientation);
}
}
2、com/android/incallui/InCallPresenter.javapublic void onDeviceOrientationChange(int orientation) {
Log.d(this, "onDeviceOrientationChange: orientation= " + orientation);
if (mCallList != null) {
mCallList.notifyCallsOfDeviceRotation(orientation);
} else {
Log.w(this, "onDeviceOrientationChange: CallList is null.");
}
// Notify listeners of device orientation changed.
for (InCallOrientationListener listener : mOrientationListeners) {
listener.onDeviceOrientationChanged(orientation);
}
}
3、com/android/incallui/VideoCallPresenter.java回調onDeviceOrientationChanged:
@Override
public void onDeviceOrientationChanged(int orientation) {
mDeviceOrientation = orientation;
VideoCallUi ui = getUi();
if (ui == null) {
Log.e(this, "onDeviceOrientationChanged: VideoCallUi is null");
return;
}
Point previewDimensions = ui.getPreviewSize();
if (previewDimensions == null) {
return;
}
Log.d(this, "onDeviceOrientationChanged: orientation=" + orientation + " size: "
+ previewDimensions);
changePreviewDimensions(previewDimensions.x, previewDimensions.y);
ui.setPreviewRotation(mDeviceOrientation);
}
4、com/android/incallui/VideoCallFragment.java
調用setPreviewRotation方法:
@Override
public void setPreviewRotation(int orientation) {
Log.d(this, "setPreviewRotation: orientation=" + orientation);
if (sPreviewSurface != null) {
TextureView preview = sPreviewSurface.getTextureView();
if (preview == null ) {
return;
}
preview.setRotation(orientation);
}
}
這裏的setRotation其實就是View類的一個方法,用於旋轉一個子view。