Android13 关于SystemUI更新/Nav Bar add volume button&&other button

对比Android 11, Android 13的SystemUI的源码文件目录,部分文件位置移动了或者删除了,其它的做出了很多改变,变的更加清晰、模块化...

代码里面注解用的频繁了. Dragger2是一个依赖注入框架,在编译期间自动生成代码,负责依赖对象的创建.

Dragger2\](https://blog.csdn.net/qq_28898075/article/details/103145367) #### SystemUI初始化 \`\`\` frameworks\\base\\packages\\SystemUI\\src\\com\\android\\systemui\\statusbar\\phone\\CentralSurfacesImpl.java @Override public void start() { ... //statusBar相关,主要处理和信号有关的icon,比如mobile,wifi,vpn等 mStatusBarSignalPolicy.init(); ... createAndAddWindows(result);//入口,添加view的核心函数 ... //关于壁纸 if (mWallpaperSupported) { // Make sure we always have the most current wallpaper info. IntentFilter wallpaperChangedFilter = new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED); mBroadcastDispatcher.registerReceiver(mWallpaperChangedReceiver, wallpaperChangedFilter, null /\* handler \*/, UserHandle.ALL); mWallpaperChangedReceiver.onReceive(mContext, null); } else if (DEBUG) { Log.v(TAG, "start(): no wallpaper service "); } // Set up the initial notification state. This needs to happen before CommandQueue.disable() //初始化通知栏状态 setUpPresenter(); ... // Lastly, call to the icon policy to install/update all the icons. //状态栏上wifi,BT 等状态图标的更新 mIconPolicy.init(); ... } @Override public void createAndAddWindows(@Nullable RegisterStatusBarResult result) { makeStatusBarView(result); mNotificationShadeWindowController.attach();//添加通知 mStatusBarWindowController.attach();//添加状态栏 } protected void makeStatusBarView(@Nullable RegisterStatusBarResult result) { updateDisplaySize(); // populates mDisplayMetrics updateResources(); updateTheme(); inflateStatusBarWindow();//状态栏初始化 mNotificationShadeWindowView.setOnTouchListener(getStatusBarWindowTouchListener()); mWallpaperController.setRootView(mNotificationShadeWindowView); ... createNavigationBar(result);//导航栏初始化 ... } protected void createNavigationBar(@Nullable RegisterStatusBarResult result) { mNavigationBarController.createNavigationBars(true /\* includeDefaultDisplay \*/, result); } \`\`\` \[NavigationBar详解\](https://juejin.cn/post/7223216421199315000) 关于导航栏的创建,系统会判断屏幕大小来决定是否生成NavigationBar.如果屏幕过大导致判定为平板, 就会走Launcher3里面的/quickstep/taskbar 来替代导航栏. \`\`\` frameworks\\base\\packages\\SystemUI\\src\\com\\android\\systemui\\navigationbar\\NavigationBarController.java private boolean updateNavbarForTaskbar() { boolean taskbarShown = initializeTaskbarIfNecessary(); if (!taskbarShown \&\& mNavigationBars.get(mContext.getDisplayId()) == null) { createNavigationBar(mContext.getDisplay(), null, null); } return taskbarShown; } /\*\* 平板:true \*/ private boolean initializeTaskbarIfNecessary() { // Enable for tablet or (phone AND flag is set); assuming phone = !mIsTablet boolean taskbarEnabled = mIsTablet \|\| mFeatureFlags.isEnabled(Flags.HIDE_NAVBAR_WINDOW); if (taskbarEnabled) { //是平板,移除屏幕上的navBar removeNavigationBar(mContext.getDisplayId()); mTaskbarDelegate.init(mContext.getDisplayId()); } else { mTaskbarDelegate.destroy(); } return taskbarEnabled; } public void createNavigationBars(final boolean includeDefaultDisplay, RegisterStatusBarResult result) { updateAccessibilityButtonModeIfNeeded(); // Don't need to create nav bar on the default display if we initialize TaskBar. final boolean shouldCreateDefaultNavbar = includeDefaultDisplay \&\& !initializeTaskbarIfNecessary(); Display\[\] displays = mDisplayTracker.getAllDisplays(); for (Display display : displays) { if (shouldCreateDefaultNavbar \|\| display.getDisplayId() != mDisplayTracker.getDefaultDisplayId()) { createNavigationBar(display, null /\* savedState \*/, result); } } } @VisibleForTesting void createNavigationBar(Display display, Bundle savedState, RegisterStatusBarResult result) { ... //从这里分为两个部分 NavigationBar navBar = component.getNavigationBar();//导航栏实例化,navBar通过注解生成的 navBar.init();//将导航栏添加到屏幕上 mNavigationBars.put(displayId, navBar); ... } \`\`\` \`\`\` \

相关推荐
simplepeng2 小时前
Room 3.0 KMP Alpha-01
android·kotlin·android jetpack
Lei活在当下2 小时前
Windows 下 Codex 高效工作流最佳实践
android·openai·ai编程
fatiaozhang95272 小时前
基于slimBOXtv 9.19.0 v4(通刷晶晨S905L3A/L3AB芯片)ATV-安卓9-完美版线刷固件包
android·电视盒子·刷机固件·机顶盒刷机·晶晨s905l3ab·晶晨s905l3a
私房菜4 小时前
Selinux 及在Android 的使用详解
android·selinux·sepolicy
一只特立独行的Yang4 小时前
Android中的系统级共享库
android
两个人的幸福online5 小时前
php开发者 需要 协程吗
android·开发语言·php
修炼者6 小时前
WindowManager(WMS)构建全局悬浮窗
android
xiaoshiquan12066 小时前
Android Studio里,SDK Manager显示不全问题
android·ide·android studio
Lstone73647 小时前
Bitmap深入分析(一)
android
一起搞IT吧8 小时前
Android功耗系列专题理论之十四:Sensor功耗问题分析方法
android·c++·智能手机·性能优化