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.java
public 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。