方法一,在内核层和frameworks同时修改,实现横屏操作。
参考文档 mtk6735(8735)LCD屏幕显示90°旋转_u012765781的博客-CSDN博客
可以实现横屏,但是boot和内核启动画面logo,显示变形,还是要更新图片,其实横屏可以不改boot和内核层,只从frameworks层修改,boot和内核层只需制作一个横屏的启动画面logo。
方法二,只改frameworks层,实现横屏操作。
参考文档 android5.1设置默认开机横屏_lwz的博客-CSDN博客
1、进入framework/base/core/res/res/values/config.xml
修改 <bool name="config_allowAllRotations">false</bool>
<integer name="config_lidOpenRotation">90</integer>
2、进入framework/base/services/core/java/com/android/server/wm/WindowMangerService.java
修改int mRotation = 0 ; -----> int mRotation = 1 ;
3、进入/\frameworks/native/services/surfaceflinger/DisplayDevice.cpp
修改setProjection( Displaystate::eOrientationDefault, mViewprot , mFrame )------>
setProjection( Displaystate::eOrientation90 , mViewprot , mFrame )
4、进入frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java修改public int rotationForOrientationLw(int orientation, int lastRotation)函数
在if(DEBUG_ORIENTATION) 前,添加if(true)部分即可。
if (true)
{
return Surface.ROTATION_90;
}
//end zyd
/** M:[ALPS00117318] @{ */
if (DEBUG_ORIENTATION) {
Slog.v(TAG, "rotationForOrientationLw(appReqQrientation = "
+ orientation + ", lastOrientation = " + lastRotation
+ ", sensorRotation = " + sensorRotation
+ ", UserRotation = " + mUserRotation
+ ", LidState = " + mLidState
+ ", DockMode = " + mDockMode
+ ", DeskDockEnable = " + mDeskDockEnablesAccelerometer
+ ", CarDockEnable = " + mCarDockEnablesAccelerometer
+ ", HdmiPlugged = " + mHdmiPlugged
+ ", Accelerometer = " + mAccelerometerDefault
+ ", AllowAllRotations = " + mAllowAllRotations
+ ")");
}
/** @} */
编译成功刷入系统会出现开机动画部分只显示3/4解决方案如下:
1、进入framework/base/cmds/bootanimation/BootAnimation.cpp
修改status_t BootAnimation::readyToRun函数中的
spcontrol=session()- >createsurface(String8("BootAnimation"),dinfo.w,dinfo.h.PIXEL_FORMAT_RGB_565);
为:
spcontrol=session()- >createsurface(String8"BootAnimation"),dinfo.h,dinfo.w.PIXEL_FORMAT_RGB_565);
2、进入/framework/native/services/surfaceflinger/DisplayDevice.cpp
修改函数 void DisplayDevice::setProjection(int orientation, conts Rect&newViewport,const Rect&newFrame)中
if(!frame.isValid()){
frame = Rect(w,h); ----->frame = Rect(h,w);
}
在Transform R; 下面添加
orientation = DisplayState::eOrientation90; //
3、进入/framework/native/services/surfaceflinger/surfaceFlinger.cpp
修改函数void SurfaceFlinger::onInitializeDisplay()中:
d.orientation = DisplayState::eOrientationDefault ; -->d.orientation=DisplayState::eOrientation90 ;
三,问题总结
按照方法二的方法更改后,实现横屏,存在的问题有
1,需要将boot和内核启动画面改成横屏匹配的logo。
2,图标拖到右侧会出现变形。
3,摄像头不正常。拍照时,图像左旋了90°。
4,虚拟按键一直在右边。
四,摄像头问题解决方案。
经过两周的不断尝试,最终解决了摄像头的问题。网上大部分提供的方案都是修改frameworks层 ,例如frameworks/base/core/java/android/hardware/Camera.java中设置 camera.setDisplayOrientation(90) ,但是实际测试修改并没有变化,不知道为什么。最后参考论坛中的方法,在hal层进行修改,完美解决了问题。参考文章链接如下,【求教】MT6737t平台驱动如何实现摄像头预览旋转90度的功能-MTK/联发科-MTK软件-一牛网论坛 (16rd.com)
diff --git a/alps/vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor_metadata/common/config_static_metadata_common.h b/alps/vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor_metadata/common/config_static_metadata_common.h
old mode 100644
new mode 100755
index 73f1efb..dffd7c6
--- a/alps/vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor_metadata/common/config_static_metadata_common.h
+++ b/alps/vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor_metadata/common/config_static_metadata_common.h
@@ -62,11 +62,11 @@ STATIC_METADATA_BEGIN(DEVICE, CAMERA, COMMON)
case 0:
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_ORIENTATION)
- CONFIG_ENTRY_VALUE(90, MINT32)
+ CONFIG_ENTRY_VALUE(180, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_WANTED_ORIENTATION)
- CONFIG_ENTRY_VALUE(90, MINT32)
+ CONFIG_ENTRY_VALUE(180, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_FACING)
@@ -86,11 +86,11 @@ STATIC_METADATA_BEGIN(DEVICE, CAMERA, COMMON)
case 1:
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_ORIENTATION)
- CONFIG_ENTRY_VALUE(270, MINT32)
+ CONFIG_ENTRY_VALUE(180, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_WANTED_ORIENTATION)
- CONFIG_ENTRY_VALUE(270, MINT32)
+ CONFIG_ENTRY_VALUE(180, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_FACING)
diff --git a/alps/vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor_src/cfg_setting_imgsensor.cpp b/alps/vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor_src/cfg_setting_imgsensor.cpp
old mode 100644
new mode 100755
index 9ecfba5..a512713
--- a/alps/vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor_src/cfg_setting_imgsensor.cpp
+++ b/alps/vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor_src/cfg_setting_imgsensor.cpp
@@ -45,8 +45,8 @@ SensorOrientation_T const&
getSensorOrientation()
{
static SensorOrientation_T const inst = {
- u4Degree_0 : 90, // main sensor in degree (0, 90, 180, 270)
- u4Degree_1 : 270, // sub sensor in degree (0, 90, 180, 270)
+ u4Degree_0 : 180, // main sensor in degree (0, 90, 180, 270)
+ u4Degree_1 : 0, // sub sensor in degree (0, 90, 180, 270)
u4Degree_2 : 90, // main2 sensor in degree (0, 90, 180, 270)
};
return inst;
对应到自己的平台,代码修改如下
1,修改文件:config_static_metadata_common.h
文件地址:
/home/kodin/git/mtk/mt6735/vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor_metadata/common/config_static_metadata_common.h
修改内容:
//------------------------------------------------------------------------------
// android.sensor
//------------------------------------------------------------------------------
//==========================================================================
switch (rInfo.getDeviceId())
{
case 0:
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_ORIENTATION)
// CONFIG_ENTRY_VALUE(180, MINT32)
CONFIG_ENTRY_VALUE(90, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_WANTED_ORIENTATION)
// CONFIG_ENTRY_VALUE(180, MINT32)
CONFIG_ENTRY_VALUE(90, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_FACING)
CONFIG_ENTRY_VALUE(MTK_LENS_FACING_BACK, MUINT8)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_HAL_VERSION)
CONFIG_ENTRY_VALUE(MTK_HAL_VERSION_1_0, MINT32)
CONFIG_METADATA_END()
//======================================================================
break;
case 1:
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_ORIENTATION)
// CONFIG_ENTRY_VALUE(180, MINT32)
CONFIG_ENTRY_VALUE(270, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_WANTED_ORIENTATION)
// CONFIG_ENTRY_VALUE(180, MINT32)
CONFIG_ENTRY_VALUE(270, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_FACING)
CONFIG_ENTRY_VALUE(MTK_LENS_FACING_FRONT, MUINT8)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_HAL_VERSION)
CONFIG_ENTRY_VALUE(MTK_HAL_VERSION_1_0, MINT32)
CONFIG_METADATA_END()
//======================================================================
break;
2,修改文件:cfg_setting_imgsensor.cpp
文件地址:
/home/kodin/git/mtk/mt6735/vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor_src/cfg_setting_imgsensor.cpp
修改内容:
SensorOrientation_T const&
getSensorOrientation()
{
static SensorOrientation_T const inst = {
u4Degree_0 : 90, // main sensor in degree (0, 90, 180, 270)
u4Degree_1 : 270,
// u4Degree_0 : 180, // main sensor in degree (0, 90, 180, 270)
// u4Degree_1 : 0, // sub sensor in degree (0, 90, 180, 270)
u4Degree_2 : 90, // main2 sensor in degree (0, 90, 180, 270)
};
return inst;
}
3,至此,摄像头左旋90度的问题完美解决。感谢分享提供方法的各位网友。2022.01.04。
五,虚拟按键navigation_bar的问题。
navigation_bar横过来有以下几个步骤,
1,navigation_bar.xml文件地址
/home/kodin/git/mtk/mt6735/frameworks/base/packages/SystemUI/res/layout/navigation_bar.xml
navigation_bar.xml文件中修改
将rot0和rot90互换。
2,以上只改了布局文件,在代码中决定横屏的还有PhoneWindowManager.java文件中的mNavigationBarOnBottom变量,文件地址:
frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java
变量mNavigationBarOnBottom会决定是否显示在下面,该变量为true时navigationbar显示在屏幕下方,为false显示在屏幕右边;
而mNavigationBarOnBottom值,仔细查看代码,又是由mNavigationBarCanMove确定
进而修改
3,经过以上修改navigation_bar横置了,但是挤占了app图标的显示空间,至其显示不完整。
最后还是决定,不要navigation_bar了。
4,去掉navigation_bar,参考文档AP7350 系统添加 虚拟按键 开关设置选项|Android驱动及系统开发交流区|研发交流|雨滴科技技术论坛 - Powered by Discuz! (raindi.net)j
实际就是上面文档的逆过程。不过我为了简单,略过几个步骤。
5, device/raindi/ap7350_65u_l1/system.prop
qemu.hw.mainkeys=1 # 1 为关闭
打开Navigation Bar 上的MENU BUTTON
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java
在 generateLayout() 中判断设置 setNeedsMenuKey() 将条件判断直接设置为 false
6, 开机不检测
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
7,packages/apps/Settings/res/xml/display_settings.xml
8,关闭开关事件,packages/apps/Settings/src/com/android/settings/DisplaySettings.java,将下面+的代码全部屏蔽。
@@ -96,6 +100,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
private SwitchPreference mLiftToWakePreference;
private SwitchPreference mDozePreference;
private SwitchPreference mAutoBrightnessPreference;
+ private SwitchPreference mNavigationBarPreference;
///M: MTK feature
private DisplaySettingsExt mDisplaySettingsExt;
@@ -145,6 +150,12 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
mFontSizePref.setOnPreferenceChangeListener(this);
mFontSizePref.setOnPreferenceClickListener(this);
+ // add by wwm 20170907
+ mNavigationBarPreference = (SwitchPreference) findPreference(KEY_NAVIGATION_BAR);
+ int navigationbar = Settings.System.getInt(getContentResolver(),NAVIGATION_BAR_SWITCH, 0);
+ mNavigationBarPreference.setChecked(navigationbar == 1);
+ mNavigationBarPreference.setOnPreferenceChangeListener(this);
+
if (isAutomaticBrightnessAvailable(getResources())) {
mAutoBrightnessPreference = (SwitchPreference) findPreference(KEY_AUTO_BRIGHTNESS);
mAutoBrightnessPreference.setOnPreferenceChangeListener(this);
@@ -410,6 +421,10 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
readFontSizePreference(mFontSizePref);
updateScreenSaverSummary();
+ // add by wwm 20170907
+ int navigationbar = Settings.System.getInt(getContentResolver(),NAVIGATION_BAR_SWITCH, 0);
+ mNavigationBarPreference.setChecked(navigationbar == 1);
+
// Update auto brightness if it is available.
if (mAutoBrightnessPreference != null) {
int brightnessMode = Settings.System.getInt(getContentResolver(),
@@ -502,6 +517,15 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
boolean value = (Boolean) objValue;
Settings.Secure.putInt(getContentResolver(), DOZE_ENABLED, value ? 1 : 0);
}
+
+ // add by wwm 20170907
+ if (preference == mNavigationBarPreference) {
+ boolean value = (Boolean) objValue;
+ Intent navigationbarIntent = new Intent();
+ navigationbarIntent.setAction("android.intent.action.NAVIGATION_BAR");
+ navigationbarIntent.putExtra("enable",value);
+ getActivity().sendBroadcast(navigationbarIntent);
+ }
return true;
}
9,经过以上,在设置->显示界面下就找不到,开启虚拟按键的开关了。
10,至此,横屏修改,告一段落。20220111