移除SafeMode

移除SafeMode第一次尝试的方法是在systemui下面直接将ShutDownAction的onLongPress和onPress方法回调都执行shutdown流程。客户不同意在SystemUI目录下做此修改。尝试第二中修改方案。

vendor\mediatek\proprietary\packages\apps\SystemUI\src\com\android\systemui\globalactions\GlobalActionsDialog.java
    final class ShutDownAction extends SinglePressAction implements LongPressAction {
        private ShutDownAction() {
            super(R.drawable.ic_lock_power_off,
                    R.string.global_action_power_off);
        }
        //长按回调
        @Override
        public boolean onLongPress() {
			Log.i("Xxxx", "111 GlobalActionsDialog.java onLongPress");
            /**if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) {
                mWindowManagerFuncs.reboot(true);
                return true;
            }**/
            去掉走reboot(true),直接调用shutdown()方法,实现去除safemode模式需求
			mWindowManagerFuncs.shutdown();
            return true;
        }
        //点击回调
        @Override
        public void onPress() {
			Log.i("Xxxx", "GlobalActionsDialog.java onPress");
            // shutdown by making sure radio and power are handled accordingly.
            mWindowManagerFuncs.shutdown();
        }
    }

mUserManager.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)

增加DISALLOW_SAFE_BOOT限制

修改方案

\frameworks\base\core\res\res\values\config.xml
    <string-array translatable="false" name="config_defaultFirstUserRestrictions">
        <item>no_safe_boot</item>
    </string-array>

查看/data/system/users/0.xml文件

在这里插入图片描述

\frameworks\base\services\core\java\com\android\server\pm\UserManagerService.java
    /** @return a specific user restriction that's in effect currently. */
    @Override
    public boolean hasUserRestriction(String restrictionKey, @UserIdInt int userId) {
        checkManageOrInteractPermissionIfCallerInOtherProfileGroup(userId, "hasUserRestriction");
        return mLocalService.hasUserRestriction(restrictionKey, userId);
    }
    
    调用内部类LocalService
    private class LocalService extends UserManagerInternal {
            @Override
        public boolean hasUserRestriction(String restrictionKey, @UserIdInt int userId) {
            if (!UserRestrictionsUtils.isValidRestriction(restrictionKey)) {
                return false;
            }
            Bundle restrictions = getEffectiveUserRestrictions(userId);
            return restrictions != null && restrictions.getBoolean(restrictionKey);
        }
\frameworks\base\core\java\android\os\Bundle.java
public final class Bundle extends BaseBundle implements Cloneable, Parcelable {
\frameworks\base\core\java\android\os\BaseBundle.java 
  
  
//restrictions是从UserRestrictionsUtils中拷贝的
final Bundle effective = UserRestrictionsUtils.clone(baseRestrictions);
\frameworks\base\services\core\java\com\android\server\pm\UserRestrictionsUtils.java

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值