(mt6735)Android5.1横屏修改记录

方法一,在内核层和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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值