/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
1.开机下拉QS菜单栏得安全与隐私Tile组件(mSafetySpec )初始化好了
java
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面板
java
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
java
private void initSafetyTile() {
if (mSafetySpec == null || mAutoTracker.isAdded(mSafetySpec)) {
return;
}
mHost.addTile(CustomTile.getComponentFromSpec(mSafetySpec), true);
mAutoTracker.setTileAdded(mSafetySpec);
}