【android11】设置-应用-默认应用相关修改

1.默认主屏幕应用(默认LAUNCHER)

//vendor/mediatek/proprietary/packages/apps/PermissionController/src/com/android/permissioncontroller/role/service/RoleControllerServiceImpl.java
@Override
@WorkerThread
public boolean onGrantDefaultRoles() {
    if (DEBUG) {
        Log.i(LOG_TAG, "Granting default roles, user: " + UserHandle.myUserId());
    }

    // Gather the available roles for current user.
    ArrayMap<String, Role> roleMap = Roles.get(this);
    List<Role> roles = new ArrayList<>();
    List<String> roleNames = new ArrayList<>();
    ArraySet<String> addedRoleNames = new ArraySet<>();
    int roleMapSize = roleMap.size();
    for (int i = 0; i < roleMapSize; i++) {
        Role role = roleMap.valueAt(i);

        if (!role.isAvailable(this)) {
            continue;
        }
        roles.add(role);
        String roleName = role.getName();
        roleNames.add(roleName);
        if (!mRoleManager.isRoleAvailable(roleName)) {
            addedRoleNames.add(roleName);
        }
    }

    // TODO: Clean up holders of roles that will be removed.

    // Set the available role names in RoleManager.
    mRoleManager.setRoleNamesFromController(roleNames);

    int addedRoleNamesSize = addedRoleNames.size();
    for (int i = 0; i < addedRoleNamesSize; i++) {
        String roleName = addedRoleNames.valueAt(i);

        Role role = roleMap.get(roleName);
        role.onRoleAdded(this);
    }

    // Go through the holders of all roles.
    int rolesSize = roles.size();
    for (int rolesIndex = 0; rolesIndex < rolesSize; rolesIndex++) {
        Role role = roles.get(rolesIndex);

        String roleName = role.getName();

        // For each of the current holders, check if it is still qualified, redo grant if so, or
        // remove it otherwise.
        List<String> currentPackageNames = mRoleManager.getRoleHolders(roleName);
        int currentPackageNamesSize = currentPackageNames.size();
        for (int currentPackageNamesIndex = 0;
                currentPackageNamesIndex < currentPackageNamesSize;
                currentPackageNamesIndex++) {
            String packageName = currentPackageNames.get(currentPackageNamesIndex);

            if (role.isPackageQualified(packageName, this)) {
                // We should not override user set or fixed permissions because we are only
                // redoing the grant here. Otherwise, user won't be able to revoke permissions
                // granted by role.
                addRoleHolderInternal(role, packageName, false, false, true);
            } else {
                Log.i(LOG_TAG, "Removing package that no longer qualifies for the role,"
                        + " package: " + packageName + ", role: " + roleName);
                removeRoleHolderInternal(role, packageName, false);
            }
        }

        // If there is no holder for a role now, we need to add default or fallback holders, if
        // any.
        currentPackageNames = mRoleManager.getRoleHolders(roleName);
        currentPackageNamesSize = currentPackageNames.size();
        if (currentPackageNamesSize == 0) {
            List<String> packageNamesToAdd = null;
            if (addedRoleNames.contains(roleName)) {
                packageNamesToAdd = role.getDefaultHolders(this);
            }
            if (packageNamesToAdd == null || packageNamesToAdd.isEmpty()) {
                packageNamesToAdd = CollectionUtils.singletonOrEmpty(role.getFallbackHolder(
                        this));
	//添加默认LAUNCHFER和默认短信应用
	if(RoleManager.ROLE_HOME.equals(roleName)){
		String homePackage = android.os.SystemProperties.get("ro.config.default_home");
		if(!android.text.TextUtils.isEmpty(homePackage)){
			packageNamesToAdd = new ArrayList<>();
			packageNamesToAdd.add(homePackage);
		}
	}else if (RoleManager.ROLE_SMS.equals(roleName)) {
                    String mmsPackage = android.os.SystemProperties.get("ro.config.default_mms");
                    if(!android.text.TextUtils.isEmpty(mmsPackage)){
                        packageNamesToAdd = new ArrayList<>();
                        packageNamesToAdd.add(mmsPackage);
                    }
                }
	//end..
            }
            int packageNamesToAddSize = packageNamesToAdd.size();
            for (int packageNamesToAddIndex = 0; packageNamesToAddIndex < packageNamesToAddSize;
                    packageNamesToAddIndex++) {
                String packageName = packageNamesToAdd.get(packageNamesToAddIndex);

                if (!role.isPackageQualified(packageName, this)) {
                    Log.e(LOG_TAG, "Default/fallback role holder package doesn't qualify for"
                            + " the role, package: " + packageName + ", role: " + roleName);
                    continue;
                }
                Log.i(LOG_TAG, "Adding package as default/fallback role holder, package: "
                        + packageName + ", role: " + roleName);
                // TODO: If we don't override user here, user might end up missing incoming
                // phone calls or SMS, so we just keep the old behavior. But overriding user
                // choice about permission without explicit user action is bad, so maybe we
                // should at least show a notification?
                addRoleHolderInternal(role, packageName, true);
            }
        }

        // Ensure that an exclusive role has at most one holder.
        currentPackageNames = mRoleManager.getRoleHolders(roleName);
        currentPackageNamesSize = currentPackageNames.size();
        if (role.isExclusive() && currentPackageNamesSize > 1) {
            Log.w(LOG_TAG, "Multiple packages holding an exclusive role, role: "
                    + roleName);
            // No good way to determine who should be the only one, just keep the first one.
            for (int currentPackageNamesIndex = 1;
                    currentPackageNamesIndex < currentPackageNamesSize;
                    currentPackageNamesIndex++) {
                String packageName = currentPackageNames.get(currentPackageNamesIndex);

                Log.i(LOG_TAG, "Removing extraneous package for an exclusive role, package: "
                        + packageName + ", role: " + roleName);
                removeRoleHolderInternal(role, packageName, false);
            }
        }
    }

    return true;
}

2.禁止打开 默认应用-主屏幕应用 选择界面

--- a/alps/vendor/mediatek/proprietary/packages/apps/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppActivity.java
+++ b/alps/vendor/mediatek/proprietary/packages/apps/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppActivity.java
@@ -35,6 +35,7 @@ import com.android.permissioncontroller.role.model.Role;
 import com.android.permissioncontroller.role.model.Roles;
 import com.android.permissioncontroller.role.ui.auto.AutoDefaultAppFragment;
 import com.android.permissioncontroller.role.ui.handheld.HandheldDefaultAppFragment;
+import android.app.role.RoleManager;
 
 /**
  * Activity for a default app.
@@ -81,6 +82,7 @@ public class DefaultAppActivity extends FragmentActivity {
         }
 
         Role role = Roles.get(this).get(roleName);
+        android.util.Log.d("lfy","[DefaultAppActivity] onCreate...roleName="+roleName);
         if (role == null) {
             Log.e(LOG_TAG, "Unknown role: " + roleName);
             finish();
@@ -96,6 +98,10 @@ public class DefaultAppActivity extends FragmentActivity {
             finish();
             return;
         }
+        if (RoleManager.ROLE_HOME.equals(roleName)) {
+            finish();
+            return;
+        }
 
         if (savedInstanceState == null) {
             Fragment fragment;
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值