当前位置:   article > 正文

Android O 竖屏横用相关修改_安卓overviewmode

安卓overviewmode

最近公司想要做个横屏的设备,考虑到是小屏,LCM由于工艺,防摔等因素不好替换,Manager让研究下竖屏横用。

需要考虑的方面:

kernel_logo,bootanimation,系统,recovery ui,charger (关机充电)等。

1.kernel_logo

qualcomm的kernel_logo在splash.img里

目录:

vendor\action\splash\android_720X1280.png,替换成横屏的

2.bootanimation

frameworks\base\cmds\bootanimation\BootAnimation.cpp

  1. status_t BootAnimation::readyToRun() {
  2. ...
  3. mAssets.addDefaultAssets();
  4. sp<IBinder> dtoken(SurfaceComposerClient::getBuiltInDisplay(
  5. ISurfaceComposer::eDisplayIdMain));
  6. DisplayInfo dinfo;
  7. status_t status = SurfaceComposerClient::getDisplayInfo(dtoken, &dinfo);
  8. if (status)
  9. return -1;
  10. //potter add
  11. int temp = dinfo.h;
  12. dinfo.h= dinfo.w;
  13. dinfo.w= temp;
  14. Rect destRect(dinfo.w, dinfo.h);
  15. mSession->setDisplayProjection(dtoken, 1, destRect, destRect);//orient=1
  16. //potter end
  17. ...
  18. }

device\honeywell\common\bootanimation.zip

每张图都替换成横屏的。这里要注意下,由于前面BootAnimation.cpp做了顺时针90度处理,所以这里的图片需要在kernel_logo的这种处理方法上再逆时针转个90度。为什么BootAnimation.cpp中做顺时针90度处理,是因为后面上层的WMS里面预设角度从0变成90度了(android N是在WMS修改的,而Android O是在DisplayContent里面)。如果不处理,WMS起来的时候,bootanimation还没走完,剩下的一小段的bootanimation会转个90度,会不一致。(这个大家可以实际测试看看效果)

重编或者adb push 到system/media目录,然后重启手机看效果。

3.系统

frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java

  1. public int rotationForOrientationLw(int orientation, int lastRotation) {
  2. ...
  3. default:
  4. // For USER, UNSPECIFIED, NOSENSOR, SENSOR and FULL_SENSOR,
  5. // just return the preferred orientation we already calculated.
  6. if (preferredRotation >= 0) {
  7. return preferredRotation;
  8. }
  9. //potter change
  10. //return Surface.ROTATION_0;
  11. return Surface.ROTATION_90;
  12. //potter end
  13. ...
  14. }

 frameworks\base\services\core\java\com\android\server\wm\DisplayContent.java

  1. //potter change
  2. //private int mRotation = 0;
  3. private int mRotation = 1;
  4. //potter end

这两处修改后,进入系统就已经是默认横屏了。

但是要考虑一个问题,systemui里面有自动旋转的功能。这个QSTile打开,那么是自动旋转,可以横竖屏切换,关闭就锁定竖屏了。

这显然不是我们想要的。由于我们现在是竖屏横用,所以我们希望是QSTile打开,自动旋转,关闭的话锁定横屏。所以有了下面两处的修改。

frameworks\base\packages\SystemUI\src\com\android\systemui\qs\tiles\RotationLockTile.java

  1. public static boolean isCurrentOrientationLockPortrait(RotationLockController controller,
  2. Context context) {
  3. //potter change
  4. return false;
  5. /*
  6. int lockOrientation = controller.getRotationLockOrientation();
  7. if (lockOrientation == Configuration.ORIENTATION_UNDEFINED) {
  8. // Freely rotating device; use current rotation
  9. return context.getResources().getConfiguration().orientation
  10. != Configuration.ORIENTATION_LANDSCAPE;
  11. } else {
  12. return lockOrientation != Configuration.ORIENTATION_LANDSCAPE;
  13. }
  14. */
  15. //potter end
  16. }

其实这里直接返回false有点粗暴,可能会有隐患,有兴趣的朋友可以深入研究下看怎么优雅点。

frameworks\base\core\java\com\android\internal\view\RotationPolicy.java

  1. //potter change
  2. //private static final int NATURAL_ROTATION = Surface.ROTATION_0;
  3. private static final int NATURAL_ROTATION = Surface.ROTATION_90;
  4. //potter end

如果完全不需要自动旋转这个功能。那么在

\frameworks\base\core\res\res\values\config.xml

<bool name="config_supportAutoRotation">true</bool>

改成false。这样就不能自动旋转了,但是你需要自己去systemui中把自动旋转的qstile remove掉,要不ui还在。

4.关于锁屏和Launcher

我们知道,默认锁屏和Launcher是不能自动旋转的。

其实也是可以设置的,针对锁屏:

frameworks\base\core\res\res\values\config.xml

<bool name="config_enableLockScreenRotation">false</bool>

改成true就行。

针对Laucher:

从Android N开始:

桌面空白处长按→进入OverviewMode→点击设置→打开允许旋转的开关

实际Android 默认是有这个功能的。只是默认在手机上没打开,大的平板还是打开了的。

packages/apps/Launcher3/res/xml/launcher_preferences.xml:43:        android:defaultValue="@bool/allow_rotation"

packages/apps/Launcher3/res/values/config.xml:10:    <bool name="allow_rotation">false</bool>

packages/apps/Launcher3/res/values-sw600dp/config.xml:3:    <bool name="allow_rotation">true</bool>

如果想要默认打开:

packages/apps/Launcher3/res/values/config.xml

<bool name="allow_rotation">false</bool>

改成true即可。

 

recovery ui和charger暂时还没研究到,后头补充。希望对大家有用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/373097
推荐阅读
相关标签
  

闽ICP备14008679号