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); ... } \`\`\` \`\`\` \

相关推荐
zimoyin2 小时前
kotlin Android AccessibilityService 无障碍入门
android·开发语言·kotlin
韩仔搭建13 小时前
第二章:安卓端启动流程详解与疑难杂症调试手册
android·ui·娱乐
A-花开堪折13 小时前
Android7 Input(七)App与input系统服务建立连接
android
冰糖葫芦三剑客13 小时前
Android 自定义悬浮拖动吸附按钮
android
吃汉堡吃到饱13 小时前
【Android】从Choreographer到UI渲染(二)
android·ui
微信公众号:AI创造财富14 小时前
显示的图标跟UI界面对应不上。
android·ui
aningxiaoxixi14 小时前
安卓 Audio Stream 类型
android
奔跑吧 android14 小时前
【android bluetooth 协议分析 01】【HCI 层介绍 3】【NUMBER_OF_COMPLETED_PACKETS 事件介绍】
android·bluetooth·hci·bt·gd·aosp13
_龙小鱼_17 小时前
Kotlin扩展简化Android动画开发
android·开发语言·kotlin
奔跑吧 android17 小时前
【android bluetooth 协议分析 01】【HCI 层介绍 6】【WriteLeHostSupport命令介绍】
android·bluetooth·bt·gd·aosp13·writelehostsup·hcicmd