Android 13.0 改为平板模式-并且不改变Launcher和SystemUI

Android 13.0 改为平板模式-并且不改变Launcher和SystemUI

介绍

Android 13上是可以根据dpi来判断机器是平板模式还是手机模式,我的设备分辨率是2000x1200,当我们利用 adb shell -> wm density 获取当前dpi然后执行 wm density 320会发现Launcher发生了变化,此时会有布局改变以及锁屏改变,还有hotseat显示不全,导航栏变小靠右等问题,所以我们的思路是在变为平板模式后不要让Launcher和SystemUI改变即可。

改完后我们还需验证下QQ和微信是否为平板模式

修改

ProjectConfig.mk

#density

FREEME_DEVICE_LCD_DENSITY = 320

路径:vendor/mediatek/proprietary/packages/apps/Launcher3/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java

private void recreateTaskbar() {

destroyExistingTaskbar();

DeviceProfile dp =

mUserUnlocked ? LauncherAppState.getIDP(mContext).getDeviceProfile(mContext) : null;

//*/soda water.20230906 Tablet mode

boolean isTaskBarEnabled = false;

/*/

boolean isTaskBarEnabled = dp != null && dp.isTaskbarPresent;

//*/

if (!isTaskBarEnabled) {

SystemUiProxy.INSTANCE.get(mContext)

.notifyTaskbarStatus(/* visible */ false, /* stashed */ false);

return;

}

路径:vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/util/DisplayController.java

public boolean isTablet(WindowBounds bounds) {

//*/soda water.20230906 Tablet mode

return false;

/*/

return smallestSizeDp(bounds) >= MIN_TABLET_WIDTH;

//*/

}

路径:vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/util/window/WindowManagerProxy.java

public WindowInsets normalizeWindowInsets(Context context, WindowInsets oldInsets,

Rect outInsets) {

if (!Utilities.ATLEAST_R || !mTaskbarDrawnInProcess) {

outInsets.set(oldInsets.getSystemWindowInsetLeft(), oldInsets.getSystemWindowInsetTop(),

oldInsets.getSystemWindowInsetRight(), oldInsets.getSystemWindowInsetBottom());

return oldInsets;

}

WindowInsets.Builder insetsBuilder = new WindowInsets.Builder(oldInsets);

Insets navInsets = oldInsets.getInsets(WindowInsets.Type.navigationBars());

Resources systemRes = context.getResources();

Configuration config = systemRes.getConfiguration();

//*/soda water.20230906 Tablet mode

boolean isTablet = false;

/*/

boolean isTablet = config.smallestScreenWidthDp > MIN_TABLET_WIDTH;

//*/

boolean isGesture = isGestureNav(context);

boolean isPortrait = config.screenHeightDp > config.screenWidthDp;

//第二处修改

Resources systemRes;

{

Configuration conf = new Configuration();

conf.smallestScreenWidthDp = swDp;

systemRes = context.createConfigurationContext(conf).getResources();

}

//*/soda water.20230906 Tablet mode

boolean isTablet = false;

/*/

boolean isTablet = swDp >= MIN_TABLET_WIDTH;

/*/

boolean isTabletOrGesture = isTablet

|| (Utilities.ATLEAST_R && isGestureNav(context));

int statusBarHeightPortrait = getDimenByName(systemRes,

STATUS_BAR_HEIGHT_PORTRAIT, STATUS_BAR_HEIGHT);

int statusBarHeightLandscape = getDimenByName(systemRes,

STATUS_BAR_HEIGHT_LANDSCAPE, STATUS_BAR_HEIGHT);

以上 Launcher3修改是防止 launcher变为平板模式的样式导致显示不全

路径: overlay/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values-sw600dp-port/dimens.xml

修改:下拉栏左右边距问题

0dp

路径:vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java

mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;

mTaskbarDelegate.setDependencies(commandQueue, overviewProxyService,

navBarHelper, navigationModeController, sysUiFlagsContainer,

dumpManager, autoHideController, lightBarController, pipOptional,

backAnimation.orElse(null));

//*/soda water.20230906 Tablet mode

mIsTablet = false;

/*/

mIsTablet = isTablet(mContext);

//*/

dumpManager.registerDumpable(this);

}

@Override

public void onConfigChanged(Configuration newConfig) {

boolean isOldConfigTablet = mIsTablet;

//*/soda water.20230906 Tablet mode

mIsTablet = false;

/*/

mIsTablet = isTablet(mContext);

//*/

boolean largeScreenChanged = mIsTablet != isOldConfigTablet;

// If we folded/unfolded while in 3 button, show navbar in folded state, hide in unfolded

if (largeScreenChanged && updateNavbarForTaskbar()) {

return;

}

public void onDisplayReady(int displayId) {

Display display = mDisplayManager.getDisplay(displayId);

//*/soda water.20230906 Tablet mode

mIsTablet = false;

/*/

mIsTablet = isTablet(mContext);

//*/

createNavigationBar(display, null /* savedState */, null /* result */);

}

路径:vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java

private void setNavigationIconHints(int hints) {

if (hints == mNavigationIconHints) return;

//*/soda water.20230906 Tablet mode

if (true) {

/*/

if (!isTablet(mContext)) {

//*/

// All IME functions handled by launcher via Sysui flags for large screen

final boolean newBackAlt = (hints & StatusBarManager.NAVIGATION_HINT_BACK_ALT) != 0;

路径:vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java

if (!QuickStepContract.isGesturalMode(mNavBarMode)

&& wm.hasSoftNavigationBar(mContext.getDisplayId()) /*&& !isTablet(mContext)) soda water.20230906 Tablet mode*/) {

buttons.setLayoutDirection(View.LAYOUT_DIRECTION_LOCALE);

swapChildrenIfRtlAndVertical(buttons);

}

以上修改防止UI界面变得现实不全 导航栏显示问题

完成后微信会识别成平板模式但QQ不会

路径:build/core/product_config.mk

ifndef PRODUCT_CHARACTERISTICS

TARGET_AAPT_CHARACTERISTICS := tablet

else

TARGET_AAPT_CHARACTERISTICS := $(PRODUCT_CHARACTERISTICS)

endif

改完后QQ就会变为平板模式

黄金推荐

显存有哪些类型
365bet足球正网平台

显存有哪些类型

🕒 08-05 💰 7406
中国有多少小三阳的人?
足球365官网是哪个

中国有多少小三阳的人?

🕒 07-02 💰 439
手机号被封怎么办?2024年最全自助解封攻略来了!
足球365官网是哪个

手机号被封怎么办?2024年最全自助解封攻略来了!

🕒 07-31 💰 1167