Android 12默认手势导航及bug修复

Android 12默认手势导航方法有2种

第1种方法:配置如下ro即可

ro.boot.vendor.overlay.theme=com.android.internal.systemui.navbar.gestural

第2种方法:在SettingsProvider.java中直接调用切换

                if (currentVersion == 191) {
                    final SettingsState secureSettings = getSecureSettingsLocked(userId);
                    int mode = getContext().getResources().getInteger(
                            com.android.internal.R.integer.config_navBarInteractionMode);
                    if (mode == NAV_BAR_MODE_GESTURAL) {
                        switchToDefaultGestureNavBackInset(userId, secureSettings);
                    }
                    // add by songhui for default navbar mode for gestural
                    if (SystemProperties.get("ro.xxx_navbarmode_gestural").equals("1")) {
                        switchToDefaultGestureNavBackInset(userId, secureSettings);
                    }

                    // add by songhui for default navbar mode for gestural
                    migrateBackGestureSensitivity(Secure.BACK_GESTURE_INSET_SCALE_LEFT, userId,
                            secureSettings);
                    migrateBackGestureSensitivity(Secure.BACK_GESTURE_INSET_SCALE_RIGHT, userId,
                            secureSettings);
                    currentVersion = 192;
                }

或许有人会通过配置framework的overlay或者配置gestural rro isStatic="true"标签修改

但是这种方式会有其他bug,比如有些应用会出现导航栏重叠现象,例如微信

会出现的bug

MTK平台Android 12如果切换到手势导航以后,重启手机会出现导航栏高度还是3按键的高度

这是因为DisplayPolicy起的太早了,没有加载gestural rro apk,5秒以后,overlay才加载,导致mNavBarOpacityMode一直为0,需要后面再刷一下policy

修改方法

frameworks/base/services/java/com/android/server/SystemServer.java

     +   mActivityManagerService.updateSystemUiContext(); 
        if (SystemProperties.getInt("persist.sys.displayinset.top", 0) > 0) {
            // DisplayManager needs the overlay immediately.
     +      // mActivityManagerService.updateSystemUiContext();
            LocalServices.getService(DisplayManagerInternal.class).onOverlayChanged();
        }

切换手势导航后,手势的导航栏高度不更新

LauncherMi / quickstep/src/com/android/quickstep/RotationTouchHelper.java

        if ((flags & CHANGE_NAVIGATION_MODE) != 0) {
            NavigationMode newMode = info.navigationMode;
            mOrientationTouchTransformer.setNavigationMode(newMode, mDisplayController.getInfo(),
                    mContext.getResources());

            /* yft songhui modify for bug @{ */
            int newGesturalHeight = ResourceUtils.getNavbarSize(
                    ResourceUtils.NAVBAR_BOTTOM_GESTURE_SIZE,
                    mContext.getResources());
            setGesturalHeight(newGesturalHeight);
            /* @} */

            if (forceRegister || (!mMode.hasGestures && newMode.hasGestures)) {
                setupOrientationSwipeHandler();
            } else if (mMode.hasGestures && !newMode.hasGestures) {
                destroyOrientationSwipeHandlerCallback();
            }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值