当前位置: 首页 > news >正文

Android13 允许桌面自动旋转

一)需求-场景

Android13 实现允许桌面自动旋转
Android13 版本开始后,支持屏幕自动旋转,优化体验和兼容性,适配不同屏幕 主界面可自动旋转

在这里插入图片描述

二)参考资料

android framework13-launcher3【06手机旋转问题】
Launcher默认支持旋转
Launcher默认支持旋转
Launcher3 布局
Launcher3 版本变化
展讯Android9.0 Launcher 简介:

三)遇到问题

定制化屏幕旋转遇到两个核心问题

  • 屏幕自动旋转后,最近历史任务并没有旋转,方向异常。
  • 定制的好多案子,比如平板产品中旋转没有问题,但是好多手机方案新品来做平板产品。就遇到好多问题了,当成手机了,需要默认为平板。无法解决最近历史任务异常问题。
  • 在GMS 产品中,是存在配置是存在覆盖问题的。

四) 修改点

/packages/apps/Launcher3/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java
/packages/apps/Launcher3/src/com/android/launcher3/states/RotationHelper.java
/packages/apps/Launcher3/src/com/android/launcher3/util/window/WindowManagerProxy.java/packages/apps/Launcher3/quickstep/res/xml/indexable_launcher_prefs.xml 
/packages/apps/Launcher3/res/xml/launcher_preferences.xml
/vendor/google/apps/SearchLauncher/res/xml/launcher_preferences.xm

备注:仅针对大多数产品,各家平台需要根据自己的实际产品类型和方案类型来实际更改。思路是没问题的

五)属性Launcher3 种类及构成

为什么要了解这个,一方面搞清楚源码里面好多个Launcher,或者 Launcher 相关的究竟是什么。特别是GMS 版本,需要怎么改,不然改了还是会覆盖的。【暂不分析源码配置哪个Launcher】
总之:如果是GMS项目,先搞清楚自己Launcher构成,如何组合编译的,然后配置相关的建议都修改。
在这里插入图片描述

六)实现方案

主要解决三个问题:

修改默认配置,自动旋转改为true

/packages/apps/Launcher3/res/xml/launcher_preferences.xml
/vendor/google/apps/SearchLauncher/res/xml/launcher_preferences.xm
defaultValue 默认值改为ture <SwitchPreferenceandroid:key="pref_allowRotation"android:title="@string/allow_rotation_title"android:summary="@string/allow_rotation_desc"android:defaultValue="false"android:persistent="true"launcher:logIdOn="615"launcher:logIdOff="616" /><SwitchPreferenceandroid:key="pref_allowRotation"android:title="@string/allow_rotation_title"android:summary="@string/allow_rotation_desc"android:defaultValue="false"android:persistent="true" />

RecentsOrientedState 允许桌面旋转设置

直接设置为true

  private void updateHomeRotationSetting() {boolean homeRotationEnabled = true;//mSharedPrefs.getBoolean(ALLOW_ROTATION_PREFERENCE_KEY, true);//huanghb modifysetFlag(FLAG_HOME_ROTATION_ALLOWED_IN_PREFS, homeRotationEnabled);SystemUiProxy.INSTANCE.get(mContext).setHomeRotationEnabled(homeRotationEnabled);}

手机方案适配平板方案,模拟为平板方案

RotationHelper.java getAllowRotationDefaultValue 判断当前是否允许旋转,不用计算,直接返回 true

/*** Returns the default value of {@link #ALLOW_ROTATION_PREFERENCE_KEY} preference.*/public static boolean getAllowRotationDefaultValue(DeviceProfile deviceProfile) {// If the device's pixel density was scaled (usually via settings for A11y), use the// original dimensions to determine if rotation is allowed of not.float originalSmallestWidth = dpiFromPx(Math.min(deviceProfile.widthPx, deviceProfile.heightPx), DENSITY_DEVICE_STABLE);return true;}

WindowManagerProxy.java 判断当前是平板的的判断。

public static final int MIN_TABLET_WIDTH = 1boolean isTablet = swDp >= MIN_TABLET_WIDTH;boolean isTablet = config.smallestScreenWidthDp > MIN_TABLET_WIDTH;
这样在判断的时候,就直接以平板的方式来判断了,就满足自动旋转要求了。

分享部分git 修改记录

diff --git a/packages/apps/Launcher3/quickstep/res/xml/indexable_launcher_prefs.xml b/packages/apps/Launcher3/quickstep/res/xml/indexable_launcher_prefs.xml
old mode 100644
new mode 100755
index b4740e5..aa1fd4d
--- a/packages/apps/Launcher3/quickstep/res/xml/indexable_launcher_prefs.xml
+++ b/packages/apps/Launcher3/quickstep/res/xml/indexable_launcher_prefs.xml
@@ -26,7 +26,7 @@android:key="pref_allowRotation"android:title="@string/allow_rotation_title"android:summary="@string/allow_rotation_desc"
-        android:defaultValue="false"
+        android:defaultValue="true"android:persistent="true" /></PreferenceScreen>
diff --git a/packages/apps/Launcher3/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java b/packages/apps/Launcher3/quickstep/src/com/android/quickstep/util/RecentsOrientedState.jav
old mode 100644
new mode 100755
index 6038a22..76dd118
--- a/packages/apps/Launcher3/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java
+++ b/packages/apps/Launcher3/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java
@@ -291,7 +291,7 @@ public class RecentsOrientedState implements}private void updateHomeRotationSetting() {
-        boolean homeRotationEnabled = mSharedPrefs.getBoolean(ALLOW_ROTATION_PREFERENCE_KEY, false);
+        boolean homeRotationEnabled = true;//mSharedPrefs.getBoolean(ALLOW_ROTATION_PREFERENCE_KEY, true);//huanghb modifysetFlag(FLAG_HOME_ROTATION_ALLOWED_IN_PREFS, homeRotationEnabled);SystemUiProxy.INSTANCE.get(mContext).setHomeRotationEnabled(homeRotationEnabled);}
diff --git a/packages/apps/Launcher3/res/xml/launcher_preferences.xml b/packages/apps/Launcher3/res/xml/launcher_preferences.xml
old mode 100644
new mode 100755
index 8a0c909..171eeb2
--- a/packages/apps/Launcher3/res/xml/launcher_preferences.xml
+++ b/packages/apps/Launcher3/res/xml/launcher_preferences.xml
@@ -45,7 +45,7 @@android:key="pref_allowRotation"android:title="@string/allow_rotation_title"android:summary="@string/allow_rotation_desc"
-        android:defaultValue="false"
+        android:defaultValue="true"android:persistent="true"launcher:logIdOn="615"launcher:logIdOff="616" />
diff --git a/packages/apps/Launcher3/src/com/android/launcher3/states/RotationHelper.java b/packages/apps/Launcher3/src/com/android/launcher3/states/RotationHelper.java
old mode 100644
new mode 100755
index 38b62d4..bf88c9d
--- a/packages/apps/Launcher3/src/com/android/launcher3/states/RotationHelper.java
+++ b/packages/apps/Launcher3/src/com/android/launcher3/states/RotationHelper.java
@@ -49,7 +49,7 @@ public class RotationHelper implements OnSharedPreferenceChangeListener,// original dimensions to determine if rotation is allowed of not.float originalSmallestWidth = dpiFromPx(Math.min(deviceProfile.widthPx, deviceProfile.heightPx), DENSITY_DEVICE_STABLE);
-        return originalSmallestWidth >= MIN_TABLET_WIDTH;
+        return true;}public static final int REQUEST_NONE = 0;
diff --git a/packages/apps/Launcher3/src/com/android/launcher3/util/window/WindowManagerProxy.java b/packages/apps/Launcher3/src/com/android/launcher3/util/window/WindowManagerProxy.java
old mode 100644
new mode 100755
index 9665bf9..d81565c
--- a/packages/apps/Launcher3/src/com/android/launcher3/util/window/WindowManagerProxy.java
+++ b/packages/apps/Launcher3/src/com/android/launcher3/util/window/WindowManagerProxy.java
@@ -61,7 +61,7 @@ import com.android.launcher3.util.WindowBounds;*/public class WindowManagerProxy implements ResourceBasedOverride {-    public static final int MIN_TABLET_WIDTH = 600;
+    public static final int MIN_TABLET_WIDTH = 1;//huanghb modifypublic static final MainThreadInitializedObject<WindowManagerProxy> INSTANCE =forOverride(WindowManagerProxy.class, R.string.window_manager_proxy_class);
diff --git a/vendor/google/apps/SearchLauncher/res/xml/launcher_preferences.xml b/vendor/google/apps/SearchLauncher/res/xml/launcher_preferences.xml
old mode 100644
new mode 100755
index a70bb30..f95219b
--- a/vendor/google/apps/SearchLauncher/res/xml/launcher_preferences.xml
+++ b/vendor/google/apps/SearchLauncher/res/xml/launcher_preferences.xml
@@ -50,7 +50,7 @@android:title="@string/title_show_google_app"/><SwitchPreference
-        android:defaultValue="false"
+        android:defaultValue="true"android:key="pref_allowRotation"android:persistent="true"android:summary="@string/allow_rotation_desc"
(END)

七)总结:

如需要解决的问题一样
1)更改配置
2)解决最近历史任务允许旋转设置
3)把产品当做pad 来,判断是否pad 地方判断,更改逻辑判断条件实现

http://www.lryc.cn/news/496826.html

相关文章:

  • cocotb value cocotb—基础语法对照篇
  • 001-SpringBoot整合日志
  • 【Java基础面试题011】什么是Java中的自动装箱和拆箱?
  • ERROR in [eslint] Invalid Options ‘extensions‘ has been removed.
  • 消息传递神经网络(Message Passing Neural Networks, MPNN)
  • 常用图像变换方法
  • 从被动响应到主动帮助,ProActive Agent开启人机交互新篇章
  • 力扣hot100道【贪心算法后续解题方法心得】(三)
  • 工业齐套管理虚拟现实仿真模拟软件
  • ARP表、MAC表、路由表的区别和各自作用
  • Android 使用OpenGLES + MediaPlayer 获取视频截图
  • 浏览器的事件循环机制
  • Z2400032基于Java+Mysql+SSM的校园在线点餐系统的设计与实现 代码 论文
  • k8s使用的nfs作为sc。
  • linux下Qt程序部署教程
  • tp6 合成两个pdf文件(附加pdf或者替换pdf)
  • 工作:三菱PLC防止程序存储器爆满方法
  • jmeter 获取唯一全局变量及多线程读写的问题
  • 掌握 Spring Boot 中的缓存:技术和最佳实践
  • 动手学深度学习10.5. 多头注意力-笔记练习(PyTorch)
  • 13 设计模式之外观模式(家庭影院案例)
  • 单片机学习笔记 12. 定时/计数器_定时
  • Web安全基础实践
  • Zookeeper集群数据是如何同步的?
  • SpringCloud框架学习(第六部分:Sentinel实现熔断与限流)
  • 动态规划-----路径问题
  • Rust循环引用与多线程并发
  • 东方隐侠网安瞭望台第8期
  • 底部导航栏新增功能按键
  • C++ 之弦上舞:string 类与多样字符串操作的优雅旋律