base\packages\SystemUI\src\com\android\systemui\volume\VolumeUI.java
初始化VolumeDialogComponent对象,start()作为VolumeUI的入口
public void start() {
boolean enableVolumeUi = mContext.getResources().getBoolean(R.bool.enable_volume_ui);
boolean enableSafetyWarning =
mContext.getResources().getBoolean(R.bool.enable_safety_warning);
mEnabled = enableVolumeUi || enableSafetyWarning;
if (!mEnabled) return;
mVolumeComponent.setEnableDialogs(enableVolumeUi, enableSafetyWarning);
setDefaultVolumeController();
}
注册默认音量控制器
private void setDefaultVolumeController() {
DndTile.setVisible(mContext, true);
if (LOGD) Log.d(TAG, "Registering default volume controller");
mVolumeComponent.register();
}
执行VolumeDialogComponent对象的setEnableDialogs方法,其实是执行VolumeDialogControllerImpl对象的setEnableDialogs方法
VolumeDialogControllerImpl mController
base\packages\SystemUI\src\com\android\systemui\volume\VolumeDialogComponent.java
base\packages\SystemUI\src\com\android\systemui\volume\VolumeDialogControllerImpl.java
void setEnableDialogs(boolean volumeUi, boolean safetyWarning) {
mController.setEnableDialogs(volumeUi, safetyWarning);
}
public void setEnableDialogs(boolean volumeUi, boolean safetyWarning) {
mShowVolumeDialog = volumeUi;
mShowSafetyWarning = safetyWarning;
}
VolumeDialogComponent 对象创建完成后,就会调用它的register()方法启动 VolumeUI 功能
public void register() {
mController.register();
DndTile.setCombinedIcon(mContext, true);
}
public void register() {
setVolumeController();
setVolumePolicy(mVolumePolicy);
showDndTile(mShowDndTile);
try {
mMediaSessions.init();
} catch (SecurityException e) {
Log.w(TAG, "No access to media sessions", e);
}
}
在VolumeDialogComponent类中的构造函数里
Dependency.get(Ex