开机动画默认横屏,开机默认横屏,修改底部虚拟按键方向位置,主屏幕可旋转

/override/frameworks/base/cmds/bootanimation/BootAnimation.cpp

加上

int temp = resolution.height;

+

+    resolution.height= resolution.width;

+    resolution.width= temp;

+

+    Rect destRect(resolution.width, resolution.height);

+

+    SurfaceComposerClient::Transaction t;

+    t.setDisplayProjection(mDisplayToken, ui::ROTATION_90, destRect, destRect);

+    t.apply();

上面是开机动画横屏,开机logo横屏

override/vendor/mediatek/proprietary/external/libshowlogo/charging_animation.cpp

里面的anim_drm_init方法的else phical_screen.rotation原本是0,就是竖屏,改成90.

anim_fb_init方法里也同理int rotation = ORIENTATION_90;

/vendor/mediatek/proprietary/external/libshowlogo/show_animation_common.c

文件里anim_fb_init方法同理

但其实除了改else的,也可以直接改最开始的rotation,让他锁定在一个判断内

源码是    int rotation = getRotation();

改成int rotation = ORIENTATION_90; 那这样就只能走 以下判断

else if (ORIENTATION_90 == rotation)

    { //90

        phical_screen.rotation = 90;

    }

下面这个文件 或许没用到,mediatek/proprietary/bootable/bootloader/lk/platform/mt6765/mt_logo.c

里面有个init_fb_screen方法的elsephical_screen.rotation = 0;换成90

override/vendor/mediatek/proprietary/packages/apps/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

在加loadSetting(stmt, Settings.System.USER_ROTATION,1);

下面开始是默认横屏

override/frameworks/base/core/java/com/android/internal/view/RotationPolicy.java

public static final int NATURAL_ROTATION = Surface.ROTATION_0换成90

override/frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java

  修改底部虚拟按键方向位置,里面把底部导航栏写死在底部出现

int navigationBarPosition(int displayWidth, int displayHeight, int displayRotation) {       

 /*/ tyd.dkl, def landscape

        if (navigationBarCanMove() && displayWidth > displayHeight) {

            if (displayRotation == Surface.ROTATION_270) {

                return NAV_BAR_LEFT;

            } else if (displayRotation == Surface.ROTATION_90) {

                return NAV_BAR_RIGHT;

            }

        }

        //*/

        return NAV_BAR_BOTTOM;

    }

就中间那一块注释

这里面

mNavigationBarCanMove =

                mDisplayContent.mBaseDisplayWidth != mDisplayContent.mBaseDisplayHeight

                        && res.getBoolean(R.bool.config_navBarCanMove);

所以找到这个布尔值config——navBarCanMove,在framework下就是false,但是我们已经设置了90度,所以会跳到右边

override/frameworks/base/services/core/java/com/android/server/wm/DisplayRotation.java

private int mRotation;赋值为1

private int mUserRotation = Surface.ROTATION_0;改为90

在这个循环里面,的

switch (orientation) {

default:

里面return Surface.ROTATION_0;把这个换成90

override/frameworks/native/services/surfaceflinger/DisplayDevice.cpp

setProjection(ui::ROTATION_0, Rect::INVALID_RECT, Rect::INVALID_RECT);

换成90

改到这里后效果的确是默认横屏了,但是开启了自动旋转后,无法转动屏幕。

所以要在launcher上改主屏可旋转

override/packages/apps/Launcher3/res/xml/launcher_preferences.xml

android:key="pref_allowRotation"

         android:title="@string/allow_rotation_title"

         android:summary="@string/allow_rotation_desc"

-        android:defaultValue="false"

+        android:defaultValue="true"

         android:persistent="true"

默认值换成true,但这个显然是没用的,就是长按屏幕进主屏幕设置里面有个主屏幕旋转开关,这个xml只是把这个开关改成true默认,每次进来之后重新赋值,所以刷机之后还是无法旋转。

所以

主屏幕可旋转

override/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/DeviceProfile.java

allowRotation = originalSmallestWidth >= MIN_TABLET_WIDTH;

这个直接改成true

这个因为我们把这个屏幕改成默认横屏了,那么他这个originalSmallestWidth就变小了,因为以前默认的是竖屏,所以那这样就返回false 就是不允许旋转。原本它的宽是竖着看的长,现在的宽就变成短的那个边。

这个改完之后我们会发现主屏幕设置里面那个主屏旋转的开关没了。那其实就不需要改那个xml文件了,原理如下

还是在Launcher3里面有个src/com/android/launcher3/states/RotationHelper.java

public void initialize() {

        if (!mInitialized) {

            mInitialized = true;

            setIgnoreAutoRotateSettings(mActivity.getDeviceProfile().allowRotation);

            mActivity.addOnDeviceProfileChangeListener(this);

            notifyChange();

        }

    }

初始化方法里面setIgnoreAutoRotateSettings(mActivity.getDeviceProfile().allowRotation);

里面参数就是刚刚改的true。这个忽视自动旋转设置的方法,就是移除这个菜单而已

private void setIgnoreAutoRotateSettings(boolean ignoreAutoRotateSettings) {

        // On large devices we do not handle auto-rotate differently.

源码里面也给了,大屏设备就是会忽略掉这个选项的,只不过这个项目估计源码不是正宗对应的,虽然机器是平板但是源码还是用的是手机的。

这里面有个

mHomeRotationEnabled = mSharedPrefs.getBoolean(ALLOW_ROTATION_PREFERENCE_KEY,

                    mActivity.getDeviceProfile().allowRotation);

所以这句话已经把之前那个xml文件的默认值写了,所以在这写才标准。在xml文件里面直接写,只用第一次进去之后才有效果。

if (!mIgnoreAutoRotateSettings) {

            if (mSharedPrefs == null) {

                mSharedPrefs = Utilities.getPrefs(mActivity);

                mSharedPrefs.registerOnSharedPreferenceChangeListener(this);

            }

            mHomeRotationEnabled = mSharedPrefs.getBoolean(ALLOW_ROTATION_PREFERENCE_KEY,

                    mActivity.getDeviceProfile().allowRotation);

        } else {

            if (mSharedPrefs != null) {

                mSharedPrefs.unregisterOnSharedPreferenceChangeListener(this);

                mSharedPrefs = null;

            }

        }

这个方法的前提就是if (!mIgnoreAutoRotateSettings) {

满足了才把那个preference显示出来。,这里面getpreference就只是那一个主屏是否旋转的preference

下次遇到可以试试宏控改掉CONFIG_MTK_LCM_PHYSICAL_ROTATION="0",三个编译文件里都换掉debug_defconfigdefconfiglk.mk

加了GMS包的项目走的launcher是下面这个以及package下面的一起

vendor/google/apps/SearchLauncher

这里面没有的文件就用package里面的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Youth King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值