分析流程
APK Settings中的项目app下有对默认APP进行设置,如果没有手动设置默认的主屏幕APP选项一直为空。
DefaultHomeShortcutPreferenceController.java 为默认主屏幕选项控制器,其父类为DefaultAppShortcutPreferenceControllerBase.java,在父类中实现handlePreferenceTreeClick()方法,传入参数roleName = RoleManager.ROLE_HOME;
public boolean handlePreferenceTreeClick(Preference preference) {
if (!TextUtils.equals(mPreferenceKey, preference.getKey())) {
return false;
}
final Intent intent = new Intent(Intent.ACTION_MANAGE_DEFAULT_APP)
.putExtra(Intent.EXTRA_ROLE_NAME, mRoleName);
mContext.startActivity(intent);
return true;
}
其中Intent.ACTION_MANAGE_DEFAULT_APP在Android\packages\modules\Permission\PermissionController中的DefaultAppActivity中接收,根据packagename进行追踪路径如下:
DefaultAppActivity.java --->HandheldDefaultAppFragment.java --->DefaultAppChildFragment.java:setDefaultApp()---> ManageRoleHolderStateLiveData.java---> RoleService.java addRoleHolderAsUser()--->RoleControllerServiceImpl.java:onAddRoleHolder()--->RoleManager.java:addRoleHolderFromController()--->
RoleService.java:addRoleHolderFromController()--->RoleUserState.java:addRoleHolder():readFile()--->RolesPersistenceImpl.java:ROLES_FILE_NAME = "roles.xml"
该XML位于Android\packages\modules\Permission\PermissionController\res\xml\roles.xml
修改内容
1.在该模块添加defaultHolders="config_defaultHome"
<role
name="android.app.role.HOME"
...
...
@++++defaultHolders="config_defaultHome"
</role>
2.在Android/frameworks/base/core/res/res/values/config.xml中添加字段
<string name="config_defaultHome" translatable="false">包名</string>