乐于分享
好东西不私藏

安卓15源码构建版本导航栏创建没有走SystemUI的流程

安卓15源码构建版本导航栏创建没有走SystemUI的流程

在构建安卓15源码时,构建的target选择
sdk_phone64_x86_64-trunk_staging-eng
发现导航栏窗口的创建没有走SystemUI的流程,具体的流程走到下面的代码,并没有走createNavigationBar()方法
//com.android.systemui.navigationbar.NavigationBarControllerImpl@Overridepublic void createNavigationBars(finalboolean includeDefaultDisplay,		RegisterStatusBarResult result) {// Don't need to create nav bar on the default display if we initialize TaskBar.final boolean shouldCreateDefaultNavbar = includeDefaultDisplay			&& !initializeTaskbarIfNecessary();	Display[] displays = mDisplayTracker.getAllDisplays();	Log.d(TAG, "xiaoan createNavigationBars for (Display display : displays) " + Log.getStackTraceString(new Throwable()));	Log.d(TAG, "xiaoan createNavigationBars createNavigationBar(display, ...) display = " + displays.length + includeDefaultDisplay);for (Display display : displays) {		Log.d(TAG, "xiaoan createNavigationBars shouldCreateDefaultNavbar = " + shouldCreateDefaultNavbar + ", "				+ display.getDisplayId() + ", " + mDisplayTracker.getDefaultDisplayId());if (shouldCreateDefaultNavbar				|| display.getDisplayId() != mDisplayTracker.getDefaultDisplayId()) {			Log.d(TAG, "xiaoan createNavigationBars createNavigationBar(display, ...) display = " + display);			createNavigationBar(display, null /* savedState */, result);		}	}}

includeDefaultDisplay 传入的值是true,shouldCreateDefaultNavbar 是false,导致没有走进下面的 createNavigationBar 方法中 。是因为 initializeTaskbarIfNecessary() 返回值是true。

//com.android.systemui.navigationbar.NavigationBarControllerImplprivate boolean initializeTaskbarIfNecessary() {boolean supportsTaskbar = supportsTaskbar();boolean shouldCreateNavBarAndTaskBar = shouldCreateNavBarAndTaskBar(			mContext.getDisplayId());boolean taskbarEnabled = supportsTaskbar && shouldCreateNavBarAndTaskBar;	Log.d(TAG, "xiaoan initializeTaskbarIfNecessary taskbarEnabled = " + taskbarEnabled",  supportsTaskbar = "  + supportsTaskbar + ",  shouldCreateNavBarAndTaskBar = "  + shouldCreateNavBarAndTaskBar);if (taskbarEnabled) {		Trace.beginSection("NavigationBarController#initializeTaskbarIfNecessary");final int displayId = mContext.getDisplayId();// Hint to NavBarHelper if we are replacing an existing bar to skip extra work		mNavBarHelper.setTogglingNavbarTaskbar(mNavigationBars.contains(displayId));// Remove navigation bar when taskbar is showing		removeNavigationBar(displayId);		mTaskbarDelegate.init(displayId);		mNavBarHelper.setTogglingNavbarTaskbar(false);		Trace.endSection();else {		mTaskbarDelegate.destroy();	}return taskbarEnabled;}

返回值 taskbarEnabled 是true,supportsTaskbar 和 shouldCreateNavBarAndTaskBar 两个值都是true,这里主要是看 supportsTaskbar() 方法的返回值是true。这个方法是判断是否支持Taskbar的方法,一般手机上是不支持Taskbar的,只有大屏设备支持,这里应该是false才对。

//com.android.systemui.navigationbar.NavigationBarControllerImplboolean supportsTaskbar() {// Enable for tablets, unfolded state on a foldable device, (non handheld AND flag is set),// or handheld when enableTaskbarOnPhones() returns true.boolean foldedOrPhone = !mIsPhone || enableTaskbarOnPhones();Log.d(TAG"xiaoan foldedOrPhone = " + foldedOrPhone + " ,  mIsLargeScreen = " + mIsLargeScreen);boolean enableTaskbarLauncher = enableTaskbarNavbarUnification() && (!mIsPhone || enableTaskbarOnPhones());Log.d(TAG"xiaoan launcher enableTaskbar = " + enableTaskbarLauncher" ,  mIsPhone = " + mIsPhone" ,  enableTaskbarOnPhones() = " + enableTaskbarOnPhones()" ,  enableTaskbarNavbarUnification() = " + enableTaskbarNavbarUnification());return mIsLargeScreen || (foldedOrPhone && enableTaskbarNavbarUnification());}

返回值是true,不是大屏设备,mIsPhone 值为true,也就是enableTaskbarOnPhones() 和 enableTaskbarNavbarUnification() 都是true,这两个值是静态的。

import static com.android.wm.shell.Flags.enableTaskbarNavbarUnification;import static com.android.wm.shell.Flags.enableTaskbarOnPhones;

这两个值是通过 trunk_staging 目录下的textproro文件配置的。

这两个配置的默认值是ENABLED,所以Launcher创建了TaskBar,SystemUI没有创建NavBar。(这里的DISABLED是我修改之后的

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 安卓15源码构建版本导航栏创建没有走SystemUI的流程

评论 抢沙发

7 + 5 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮