QS菜单栏的安全与隐私Tile组件(GMS中的)加载逻辑
/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
1.开机下拉QS菜单栏得安全与隐私Tile组件(mSafetySpec )初始化好了
public AutoTileManager(Context context, AutoAddTracker.Builder autoAddTrackerBuilder,QSHost host,@Background Handler handler,SecureSettings secureSettings,HotspotController hotspotController,DataSaverController dataSaverController,ManagedProfileController managedProfileController,NightDisplayListenerModule.Builder nightDisplayListenerBuilder,CastController castController,ReduceBrightColorsController reduceBrightColorsController,DeviceControlsController deviceControlsController,WalletController walletController,SafetyController safetyController,@Named(RBC_AVAILABLE) boolean isReduceBrightColorsAvailable) {mContext = context;mHost = host;mSecureSettings = secureSettings;mCurrentUser = mHost.getUserContext().getUser();mAutoTracker = autoAddTrackerBuilder.setUserId(mCurrentUser.getIdentifier()).build();mHandler = handler;mHotspotController = hotspotController;mDataSaverController = dataSaverController;mManagedProfileController = managedProfileController;mNightDisplayListenerBuilder = nightDisplayListenerBuilder;mCastController = castController;mReduceBrightColorsController = reduceBrightColorsController;mIsReduceBrightColorsAvailable = isReduceBrightColorsAvailable;mDeviceControlsController = deviceControlsController;mWalletController = walletController;mSafetyController = safetyController;String safetySpecClass;try {safetySpecClass =context.getResources().getString(R.string.safety_quick_settings_tile_class);if (safetySpecClass.length() == 0) {safetySpecClass = null;}} catch (Resources.NotFoundException | NullPointerException e) {safetySpecClass = null;}mSafetySpec = safetySpecClass != null ? CustomTile.toSpec(new ComponentName(mContext.getPackageManager().getPermissionControllerPackageName(), safetySpecClass)) : null;}
2.检查mSafetySpec是否在pms中存在(这个是谷歌的组件,得预置了GMS得才存在),如果存在就开始init把mSafetySpec加载进QS面板
protected void startControllersAndSettingsListeners() {if (!mAutoTracker.isAdded(HOTSPOT)) {mHotspotController.addCallback(mHotspotCallback);}if (!mAutoTracker.isAdded(SAVER)) {mDataSaverController.addCallback(mDataSaverListener);}mManagedProfileController.addCallback(mProfileCallback);mNightDisplayListener = mNightDisplayListenerBuilder.setUser(mCurrentUser.getIdentifier()).build();if (!mAutoTracker.isAdded(NIGHT)&& ColorDisplayManager.isNightDisplayAvailable(mContext)) {mNightDisplayListener.setCallback(mNightDisplayCallback);}if (!mAutoTracker.isAdded(CAST)) {mCastController.addCallback(mCastCallback);}if (!mAutoTracker.isAdded(BRIGHTNESS) && mIsReduceBrightColorsAvailable) {mReduceBrightColorsController.addCallback(mReduceBrightColorsCallback);}// We always want this callback, because if the feature stops being supported,// we want to remove the tile from AutoAddTracker. That way it will be re-added when the// feature is reenabled (similar to work tile).mDeviceControlsController.setCallback(mDeviceControlsCallback);if (!mAutoTracker.isAdded(WALLET)) {initWalletController();}if (mSafetySpec != null) {if (!mAutoTracker.isAdded(mSafetySpec)) {initSafetyTile();}mSafetyController.addCallback(mSafetyCallback);}int settingsN = mAutoAddSettingList.size();for (int i = 0; i < settingsN; i++) {if (!mAutoTracker.isAdded(mAutoAddSettingList.get(i).mSpec)) {mAutoAddSettingList.get(i).setListening(true);}}}
3.开始往mHost中添加mSafetySpec组件Tile
private void initSafetyTile() {if (mSafetySpec == null || mAutoTracker.isAdded(mSafetySpec)) {return;}mHost.addTile(CustomTile.getComponentFromSpec(mSafetySpec), true);mAutoTracker.setTileAdded(mSafetySpec);}