diff --git a/frameworks/base/services/core/java/com/android/server/display/LogicalDisplay.java b/frameworks/base/services/core/java/com/android/server/display/LogicalDisplay.java
index b468d603d90..08f7f494d73 100644
--- a/frameworks/base/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/frameworks/base/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -677,6 +677,18 @@ final class LogicalDisplay {
int orientation = Surface.ROTATION_0;
if ((displayDeviceInfo.flags & DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT) != 0) {
orientation = displayInfo.rotation;
+
+ // Fixup the orientation of HDMI for portrait built-in display
+ if (displayDeviceInfo.type == Display.TYPE_EXTERNAL) {
+ DisplayDeviceInfo primaryDeviceInfo = mPrimaryDisplayDevice.getDisplayDeviceInfoLocked();
+ if (primaryDeviceInfo.width < primaryDeviceInfo.height) {
+ if (displayInfo.logicalWidth < displayInfo.logicalHeight) {
+ orientation += Surface.ROTATION_90;
+ } else if (displayInfo.rotation > 0) {
+ orientation -= Surface.ROTATION_90;
+ }
+ }
+ }
}
// Apply the physical rotation of the display device itself.
diff --git a/packages/apps/Settings/res/values/strings.xml b/packages/apps/Settings/res/values/strings.xml
index 6010bd9e0c5..d374f47c7df 100644
--- a/packages/apps/Settings/res/values/strings.xml
+++ b/packages/apps/Settings/res/values/strings.xml
@@ -12380,8 +12380,9 @@
- HDMI
- System Direction
+ HDMI & Rotation
+ Set preferred Resolution, Overscan and Rotation
+ Display Rotation
Screen Setting
Main Screen
Aux Screen
diff --git a/packages/apps/Settings/res/xml/display_settings.xml b/packages/apps/Settings/res/xml/display_settings.xml
index 7d60562637f..20cc7b5a2cd 100644
--- a/packages/apps/Settings/res/xml/display_settings.xml
+++ b/packages/apps/Settings/res/xml/display_settings.xml
@@ -184,6 +184,7 @@
diff --git a/packages/apps/Settings/src/com/android/settings/display/HdmiSettings.java b/packages/apps/Settings/src/com/android/settings/display/HdmiSettings.java
index a481d34173e..58c76116046 100644
--- a/packages/apps/Settings/src/com/android/settings/display/HdmiSettings.java
+++ b/packages/apps/Settings/src/com/android/settings/display/HdmiSettings.java
@@ -100,6 +100,7 @@ public class HdmiSettings extends SettingsPreferenceFragment
private String main_switch_node = SYS_NODE_HDMI_STATUS;
private String aux_switch_node = SYS_NODE_DP_STATUS;
+ private boolean mShowSystemRotation = true;
private ListPreference mSystemRotation;
private PreferenceCategory mAuxCategory;
private CheckBoxPreference mAuxScreenVH;
@@ -329,9 +330,7 @@ public class HdmiSettings extends SettingsPreferenceFragment
}
private void init() {
- //boolean showSystemRotation = mShowSettings != DISPLAY_SHOW_SETTINGS.ONLY_SHOW_AUX;
- boolean showSystemRotation = false;
- if (showSystemRotation) {
+ if (mShowSystemRotation) {
mSystemRotation = (ListPreference) findPreference(KEY_SYSTEM_ROTATION);
mSystemRotation.setOnPreferenceChangeListener(this);
try {
@@ -357,7 +356,8 @@ public class HdmiSettings extends SettingsPreferenceFragment
}
} else {
removePreference(KEY_SYSTEM_ROTATION);
- }//这边
+ }
+
int displayNumber = DrmDisplaySetting.getDisplayNumber();
Log.v(TAG, "displayNumber=" + displayNumber);
String[] connectorInfos = DrmDisplaySetting.getConnectorInfo();
@@ -366,6 +366,7 @@ public class HdmiSettings extends SettingsPreferenceFragment
Log.v(TAG, i + " connectorInfo====" + connectorInfos[i]);
}
}
+
mDisplayInfoList.clear();
for (int i = 0; i < displayNumber; i++) {
String typeName = "";