[QCM6125][Android13] 大屏显示时任务栏以及虚拟按键靠右问题

文章目录

    • 开发平台基本信息
    • 问题描述
    • 解决方法

开发平台基本信息

芯片: QCM6125
版本: Android 13
kernel: msm-4.14

问题描述

调试的时候,将dpi修改为160之后,发现虚拟导航栏会缩在右下角,以及进入应用时底部会显示Launcher3的hotseat栏目,具体如下图:
[QCM6125][Android13] 大屏显示时任务栏以及虚拟按键靠右问题_第1张图片

解决方法

在安卓12以上版本引入了Taskbar,在大屏显示的情况下用Taskbar代替NavigationBar;Taskbar的加载流程可以参考Android 13 平板Taskbar加载流程。

简单总结流程如下:

  • 通过公式(屏幕最小边长*160)/dpi < 600来判断是否为平板
  • 如果是平板设备,则移除Navigationbar同时创建Taskbar
  • Launcher3通过TaskbarManager创建Taskbar

在Launcher3拦截Taskbar创建

--- a/QSSI.13/packages/apps/Launcher3/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java
+++ b/QSSI.13/packages/apps/Launcher3/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java
@@ -50,6 +50,7 @@ import com.android.quickstep.SystemUiProxy;
 import com.android.quickstep.TouchInteractionService;
 import com.android.systemui.unfold.UnfoldTransitionProgressProvider;
 import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider;
+import android.os.SystemProperties;
 
 import java.io.PrintWriter;
 
@@ -262,6 +263,9 @@ public class TaskbarManager {
 
     private void recreateTaskbar() {
         destroyExistingTaskbar();
+        if (SystemProperties.get("persist.sys.taskbar.enable","0").equals("0")){
+            return;
+        }
 
         DeviceProfile dp =
                 mUserUnlocked ? LauncherAppState.getIDP(mContext).getDeviceProfile(mContext) : null;

拦截之后会发现,没了Taskbar的同时,NavigationBar也没有显示出来,所以要在SystemUI中去创建NavigationBar

--- a/QSSI.13/frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java
+++ b/QSSI.13/frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java
@@ -31,6 +31,7 @@ import android.os.Message;
 import android.util.DisplayMetrics;
 import android.view.Surface;
 import android.view.WindowManager;
+import android.os.SystemProperties;
 
 /* Common code */
 public class Utilities {
@@ -128,6 +129,9 @@ public class Utilities {
     /** @return whether or not {@param context} represents that of a large screen device or not */
     @TargetApi(Build.VERSION_CODES.R)
     public static boolean isTablet(Context context) {
+        if (SystemProperties.get("persist.sys.taskbar.enable","0").equals("0")){
+            return false;
+        }
         final WindowManager windowManager = context.getSystemService(WindowManager.class);
         final Rect bounds = windowManager.getCurrentWindowMetrics().getBounds();

最终通过persist.sys.taskbar.enable属性来控制要不要显示Taskbar。

你可能感兴趣的:(Android13,TaskBar,大屏导航栏,Android13,高通6125,SystemUI)