首页 > 其他分享 >Android 13 大屏显示时关于SystemUI和Launcher3问题

Android 13 大屏显示时关于SystemUI和Launcher3问题

时间:2024-07-24 10:55:59浏览次数:18  
标签:13 false text add boolean 大屏 return Launcher3

当系统运行在大屏上时,原来显示SystemUI导航栏的位置会变成Launcher3的任务栏,然后导航栏的3个按键显示靠右下角显示
1.先看SystemUI的导航栏为什么会消失,移动


/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java
    public void createNavigationBars(final boolean includeDefaultDisplay,
            RegisterStatusBarResult result) {
        //更新辅助功能按钮模式
        updateAccessibilityButtonModeIfNeeded();

        // 判断是否初始化TaskBar,不需要TaskBar就默认显示上创建导航栏
        final boolean shouldCreateDefaultNavbar = includeDefaultDisplay
                && !initializeTaskbarIfNecessary();
        Display[] displays = mDisplayManager.getDisplays();
        for (Display display : displays) {
            if (shouldCreateDefaultNavbar || display.getDisplayId() != DEFAULT_DISPLAY) {
                createNavigationBar(display, null /* savedState */, result);
            }
        }
    }
    
    /** @return {@code true} if taskbar is enabled, false otherwise */
    private boolean initializeTaskbarIfNecessary() {
        //判断是否是平板
        if (mIsTablet) {
            // Remove navigation bar when taskbar is showing
            //移除导航栏的时候任务栏显示
            Trace.beginSection("NavigationBarController#initializeTaskbarIfNecessary");
            removeNavigationBar(mContext.getDisplayId());
            mTaskbarDelegate.init(mContext.getDisplayId());
            Trace.endSection();
        } else {
            mTaskbarDelegate.destroy();
        }
        return mIsTablet;
    }
    ...
    {
        mIsTablet = isTablet(mContext);//如果判断它是平板
    }
    
/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java

    /** @return whether or not {@param context} represents that of a large screen device or not */
    @TargetApi(Build.VERSION_CODES.R)
    //如果屏幕的(最小边长度*160/dpi值)< 600,就会判断为设备是平板设备
    public static boolean isTablet(Context context) {
        final WindowManager windowManager = context.getSystemService(WindowManager.class);
        final Rect bounds = windowManager.getCurrentWindowMetrics().getBounds();
        
        float smallestWidth = dpiFromPx(Math.min(bounds.width(), bounds.height()),
                context.getResources().getConfiguration().densityDpi);
        //add text
        return false;//smallestWidth >= TABLET_MIN_DPS; 如果想要显示导航栏,直接返回false
        //add text
    }
    
    //判断屏幕dpi
    public static float dpiFromPx(float size, int densityDpi) {
        float densityRatio = (float) densityDpi / DisplayMetrics.DENSITY_DEFAULT;
        return (size / densityRatio);
    }
    

2.找到Launcher3显示任务栏的部分,也做类似的修改不让任务栏显示

/packages/apps/Launcher3/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java

private void recreateTaskbar() {
    destroyExistingTaskbar();
    
    DeviceProfile dp = 
        mUserUnlocked ? LauncherAppState.getIDP(mContext).getDeviceProfile(mContext) : null;
    //add text    
    boolean isTaskBarEnabled = false;//dp != null && dp.isTaskbarPresent;
    //add text  
    if (!isTaskBarEnabled) {
            SystemUiProxy.INSTANCE.get(mContext)
                      .notifyTaskbarStatus(/* visible */ false, /* stashed */ false);
            return;
        }
    ...    
}

/Launcher3/src/com/android/launcher3/states/RotationHelper.java
    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);
        //add text        
        return  false;//originalSmallestWidth >= MIN_TABLET_WIDTH;
        //add text 
    }
     
/Launcher3/src/com/android/launcher3/util/DisplayController.java

    /**
    * Returns {@code true} if the bounds represent a tablet.
    */
    public boolean isTablet(WindowBounds bounds) {
        //add text
        return false;//smallestSizeDp(bounds) >= MIN_TABLET_WIDTH;
        //add text
    }

/Launcher3/src/com/android/launcher3/util/window/WindowManagerProxy.java

public class WindowManagerProxy implements ResourceBasedOverride {
         Resources systemRes = context.getResources();
         Configuration config = systemRes.getConfiguration();
 
-        boolean isTablet = config.smallestScreenWidthDp > MIN_TABLET_WIDTH;
+        boolean isTablet = false;//config.smallestScreenWidthDp > MIN_TABLET_WIDTH;
         boolean isGesture = isGestureNav(context);
         boolean isPortrait = config.screenHeightDp > config.screenWidthDp;

 
-        boolean isTablet = swDp >= MIN_TABLET_WIDTH;
+        boolean isTablet = false;//swDp >= MIN_TABLET_WIDTH;
         boolean isTabletOrGesture = isTablet
                 || (Utilities.ATLEAST_R && isGestureNav(context));


Android 13 平板Taskbar加载流程

标签:13,false,text,add,boolean,大屏,return,Launcher3
From: https://www.cnblogs.com/kato-T/p/18320386

相关文章

  • 代码随想录算法训练营第41天 |322.零钱兑换、279.完全平方数、139.单词拆分、多重背包
    322.零钱兑换https://leetcode.cn/problems/coin-change/description/代码随想录https://programmercarl.com/0322.零钱兑换.html#算法公开课279.完全平方数https://leetcode.cn/problems/perfect-squares/description/代码随想录https://programmercarl.com/0279.完全平......
  • 213java jsp SSM疫情期间高校师生外出请假管理系统(源码+文档+开题+任务书+运行视频+讲
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • 前端开发大屏适配几种方案
    方案一:vw(单位)假设设计稿尺寸为1920*1080,直接使用 vw 单位,屏幕的宽默认为100vw,那么100vw=1920px,1vw=19.2px。新建px2vw.scss/使用scss的math函数@use"sass:math";//默认设计稿的宽度$designWidth:1920;//默认设计稿的高度$designHeight:1080;/......
  • 每日一题-P1344
    本来求边数又建了个图跑流,然后看题解发现直接流量置为A*w+1(A为足够大的数)感觉很强#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintA=1e5;constllinf=1e18;intn,m,s,t;structedge{ intv;llw;intnx;}e[10005];intcnt,hd[205],cur[......
  • 第四十七天 第九章 动态规划part13 647. 回文子串 516.最长回文子序列
    647.回文子串 dp和双指针。dp[i][j]的含义:表示区间范围[i,j](注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。在确定递推公式时,就要分析如下几种情况。整体上是两种,就是s[i]与s[j]相等,s[i]与s[j]不相等这两种。当s[i]与s[j]不相等,那没啥好说的......
  • iOS开发基础137-音视频编解码简介
    音视频编解码是iOS开发中一个高级且复杂的领域,涉及到大量的API和涉及音视频数据处理的知识。在iOS中,通常使用AVFoundation框架进行音视频处理,而对于编解码,可以利用VideoToolbox和AudioToolbox来实现。下面将分别介绍音频和视频的编解码过程,并提供一些基本的封装。视频编解码编码......
  • iOS开发基础138-视频编码
    为完善视频编码的封装和提供一定的拓展性,以下是视频编码的详细示例,其中包括编码参数设置和数据提取处理。以下示例侧重于视频编码部分。视频编码器示例下面的代码示例展示了一个视频编码器的实现,包括如何设置关键编码参数和从回调中提取H.264数据。//VideoEncoder.h#import<......
  • iOS开发基础136-防暴力点击
    要在Objective-C中创建一个高度可复用的工具类,以防止按钮的暴力点击,并且使用切面编程(AOP)的方式,我们可以考虑使用Aspects这个库来实现方法的拦截。以下是具体的实现步骤:第一步:引入Aspects库首先,需要将Aspects集成到项目中。Aspects是一个轻量级的AOP框架,允许你在运行时拦截类的实......
  • Android 10.0 Launcher3拖拽图标进入hotseat自适应布局功能实现四
    1.前言在10.0的系统rom定制化开发中,在对于launcher3的一些开发定制中,在对hotseat的一些开发中,需要实现动态hotseat居中的功能,就是在拖拽图标进入和拖出hotseat,都可以保持hotseat居中的功能,接下来分析下相关功能实现具体如图:hotseat2.Launcher3拖拽图标进入hotseat自......
  • Linux 运维必备的13款实用工具
    1、查看进程占用带宽情况-NethogsNethogs是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。下载:http://sourceforge.net/projects/nethogs/files/nethogs/0.8/nethogs-0.8.0.tar.gz/download[root@localhost~]#yum-yinstalllibpcap-develncurses-devel[ro......