From 011c88f8a9b3c4596496a343a0c388673c606dfb Mon Sep 17 00:00:00 2001 From: hmz007 Date: Sat, 11 Sep 2021 18:38:29 +0800 Subject: [PATCH] android: Settings: Add support for hdmi output mode Signed-off-by: hmz007 --- .../Settings/res/values-zh-rCN/strings.xml | 1 + packages/apps/Settings/res/values/strings.xml | 3 ++- .../settings/display/DrmDisplaySetting.java | 18 ++++++++++++++ .../settings/display/HdmiSettings.java | 24 +++++++++++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/packages/apps/Settings/res/values-zh-rCN/strings.xml b/packages/apps/Settings/res/values-zh-rCN/strings.xml index 41a24f761f0..a2efe3c251b 100644 --- a/packages/apps/Settings/res/values-zh-rCN/strings.xml +++ b/packages/apps/Settings/res/values-zh-rCN/strings.xml @@ -4825,6 +4825,7 @@ "副屏" "开关" "分辨率设置" + "输出格式" "屏幕缩放" "屏幕旋转" "满屏显示" diff --git a/packages/apps/Settings/res/values/strings.xml b/packages/apps/Settings/res/values/strings.xml index e63966c145b..d6c5765d16a 100644 --- a/packages/apps/Settings/res/values/strings.xml +++ b/packages/apps/Settings/res/values/strings.xml @@ -12388,7 +12388,8 @@ Aux Screen Turn on/off Resolution - Screen Zoom + Screen zoom + Output mode Screen Rotation screen full display Save Confirm diff --git a/packages/apps/Settings/src/com/android/settings/display/DrmDisplaySetting.java b/packages/apps/Settings/src/com/android/settings/display/DrmDisplaySetting.java index 170d27a8955..614757b3530 100644 --- a/packages/apps/Settings/src/com/android/settings/display/DrmDisplaySetting.java +++ b/packages/apps/Settings/src/com/android/settings/display/DrmDisplaySetting.java @@ -84,6 +84,24 @@ public class DrmDisplaySetting { manager.setOverScan(display, direction, value); } + public static void setColorMode(int displayid, String format) { + RkDisplayOutputManager manager = new RkDisplayOutputManager(); + int type = manager.getCurrentInterface(displayid); + manager.setColorMode(displayid, type, format); + } + + public static String getColorMode(int displayid) { + RkDisplayOutputManager manager = new RkDisplayOutputManager(); + int type = manager.getCurrentInterface(displayid); + return manager.getCurrentColorMode(displayid, type); + } + + public static String[] getColorModeList(int displayid) { + RkDisplayOutputManager manager = new RkDisplayOutputManager(); + int type = manager.getCurrentInterface(displayid); + return manager.getSupportCorlorList(displayid, type); + } + public static int getDisplayNumber() { RkDisplayOutputManager manager = new RkDisplayOutputManager(); return manager.getDisplayNumber(); 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 0692abf9379..29e7e4eeb70 100644 --- a/packages/apps/Settings/src/com/android/settings/display/HdmiSettings.java +++ b/packages/apps/Settings/src/com/android/settings/display/HdmiSettings.java @@ -66,6 +66,7 @@ public class HdmiSettings extends SettingsPreferenceFragment private static final String TAG = "HdmiSettings"; private static final String KEY_PRE_CATE = "Display"; private static final String KEY_PRE_RESOLUTION = "Resolution"; + private static final String KEY_PRE_COLOR_MODE = "ColorMode"; private static final String KEY_PRE_SCREEN_SCALE = "ScreenScale"; private static final String KEY_AUX_CATEGORY = "aux_category"; private static final String KEY_AUX_SCREEN_VH = "aux_screen_vh"; @@ -377,6 +378,21 @@ public class HdmiSettings extends SettingsPreferenceFragment DisplayInfo displayInfo = new DisplayInfo(); displayInfo.setDisplayNo(display); mDisplayInfoList.put(display, displayInfo); + + //add color preference for HDMI-A + if ("HDMIA".equals(typeName)) { + String curColorMode = DrmDisplaySetting.getColorMode(display); + String[] colorList = DrmDisplaySetting.getColorModeList(display); + Log.v(TAG, "Current mode " + curColorMode + " of " + colorList.length); + ListPreference colorPreference = new ListPreference(mContext); + colorPreference.setEntries(colorList); + colorPreference.setEntryValues(colorList); + colorPreference.setKey(KEY_PRE_COLOR_MODE + display); + colorPreference.setTitle(mContext.getString(R.string.screen_output_mode)); + colorPreference.setValue(curColorMode); + colorPreference.setOnPreferenceChangeListener(this); + category.addPreference(colorPreference); + } } sendUpdateStateMsg(ITEM_CONTROL.REFRESH_DISPLAY_STATUS_INFO, 0); mAuxCategory = (PreferenceCategory) findPreference(KEY_AUX_CATEGORY); @@ -641,6 +657,14 @@ public class HdmiSettings extends SettingsPreferenceFragment } preference.getParent().setEnabled(false); updateResolution(ITEM_CONTROL.CHANGE_RESOLUTION, index); + } else if (key.startsWith(KEY_PRE_COLOR_MODE)) { + int display = Integer.parseInt(key.replace(KEY_PRE_COLOR_MODE, "")); + ListPreference colorPreference = (ListPreference) preference; + String curColorMode = DrmDisplaySetting.getColorMode(display); + String newColorMode = (String) obj; + if (!newColorMode.equals(curColorMode)) { + DrmDisplaySetting.setColorMode(display, newColorMode); + } } else if (preference == mAuxScreenVH) { mEnableDisplayListener = false; showWaitingDialog(R.string.dialog_wait_screen_connect);